# Table of Contents - [ Introduction ](#-introduction-) - [ Introduction ](#-introduction-) - [ Introduction ](#-introduction-) - [ Introduction ](#-introduction-) - [ Learning Resources ](#-learning-resources-) - [ Configuration ](#-configuration-) - [ Install locally ](#-install-locally-) - [ Frappe Drive for You ](#-frappe-drive-for-you-) - [ Editor Interface ](#-editor-interface-) - [ Data Script ](#-data-script-) - [ Installation ](#-installation-) - [ Installation ](#-installation-) - [ Installation ](#-installation-) - [ Setting Up ](#-setting-up-) - [ Academic Year ](#-academic-year-) - [ Chart of Accounts ](#-chart-of-accounts-) - [ Loan Product ](#-loan-product-) - [ Architecture ](#-architecture-) - [ Uptime ](#-uptime-) - [ Use on Frappe Cloud ](#-use-on-frappe-cloud-) - [ Open Source ](#-open-source-) - [ Complete Setup ](#-complete-setup-) - [ Creating a ticket ](#-creating-a-ticket-) - [ Creating your first Dashboard ](#-creating-your-first-dashboard-) - [ Examples ](#-examples-) - [ Resource Permissions ](#-resource-permissions-) - [ Sharing and Access Control ](#-sharing-and-access-control-) - [Editing or Deleting Content](#editing-or-deleting-content) - [ Embedding Google Workspace (Docs, Sheets, Slides) ](#-embedding-google-workspace-docs-sheets-slides-) - [ Video Integration (Cloudflare, Vimeo, YouTube, etc.) ](#-video-integration-cloudflare-vimeo-youtube-etc-) - [ Add a Program ](#-add-a-program-) - [ Create a Live Class ](#-create-a-live-class-) - [ Interactive Content ](#-interactive-content-) - [ Guardian ](#-guardian-) - [Call Log](#call-log) - [Email Template](#email-template) - [ Public View ](#-public-view-) - [ Facebook / Instagram ](#-facebook-instagram-) - [Student Attendance](#student-attendance) - [Program](#program) - [Student Attendance Tool](#student-attendance-tool) - [Contact](#contact) - [Program Enrollment Tool](#program-enrollment-tool) - [ Program Enrollment ](#-program-enrollment-) - [ Team ](#-team-) - [ Student Admission ](#-student-admission-) - [ Outside Working Hours Banner ](#-outside-working-hours-banner-) - [ Ticket ](#-ticket-) - [ Ticket Routing ](#-ticket-routing-) - [ Email Notifications ](#-email-notifications-) - [ Party ](#-party-) - [ Web Form ](#-web-form-) - [Student Leave Application](#student-leave-application) - [ Table Restrictions ](#-table-restrictions-) - [ Teams ](#-teams-) - [ Pinned View ](#-pinned-view-) - [ Customer ](#-customer-) - [ Loyalty Program ](#-loyalty-program-) - [ Discount Accounting ](#-discount-accounting-) - [ Course ](#-course-) - [ Organizational Chart ](#-organizational-chart-) - [ Teams ](#-teams-) - [ Host Locally ](#-host-locally-) - [ New Wiki Page ](#-new-wiki-page-) - [ Wiki Space ](#-wiki-space-) - [ Sharing ](#-sharing-) - [ Files ](#-files-) - [ Microsoft Documents ](#-microsoft-documents-) - [ Previews ](#-previews-) - [ Storage ](#-storage-) - [ New Wiki Group ](#-new-wiki-group-) - [ Check Page Revisions ](#-check-page-revisions-) - [ Approving Changes ](#-approving-changes-) - [ Wiki Migration Guide ](#-wiki-migration-guide-) - [ Wiki Settings ](#-wiki-settings-) - [ Overview ](#-overview-) - [ Create Your First Dashboard ](#-create-your-first-dashboard-) - [ Manage Data Sources ](#-manage-data-sources-) - [ Add Data Source ](#-add-data-source-) - [ Expressions ](#-expressions-) - [ Overview ](#-overview-) - [ Operations ](#-operations-) - [ Branding and Customization ](#-branding-and-customization-) - [ User Roles & Permissions ](#-user-roles-permissions-) - [ Configuring Custom Base Path ](#-configuring-custom-base-path-) - [ Learning Hierarchy ](#-learning-hierarchy-) - [ Add a Preview Video ](#-add-a-preview-video-) - [ Create a Course ](#-create-a-course-) - [ Custom Branding ](#-custom-branding-) - [ Home Actions ](#-home-actions-) - [ Invite Users ](#-invite-users-) - [ Lead ](#-lead-) - [ Contact ](#-contact-) - [ Deal ](#-deal-) - [ Agents & Teams ](#-agents-teams-) - [ Customers & Contacts ](#-customers-contacts-) - [ Student ](#-student-) - [ Student Batch ](#-student-batch-) - [ Knowledge Base ](#-knowledge-base-) - [ Student Category ](#-student-category-) - [ Student Group Creation Tool ](#-student-group-creation-tool-) - [ Inviting agents ](#-inviting-agents-) - [ Customer Portal ](#-customer-portal-) - [ Custom Actions ](#-custom-actions-) - [ Import Wizard ](#-import-wizard-) - [ Quick Search ](#-quick-search-) - [ Dashboard ](#-dashboard-) - [ Accounting Basics ](#-accounting-basics-) - [ Student Applicant ](#-student-applicant-) - [ Student Group ](#-student-group-) - [ Loan Security Type ](#-loan-security-type-) - [ Bank Account ](#-bank-account-) - [ Loan Security Price ](#-loan-security-price-) - [ Loan Security ](#-loan-security-) - [ Loan Disbursement ](#-loan-disbursement-) - [ Loan Booking ](#-loan-booking-) - [ Point of Sale (POS) ](#-point-of-sale-pos-) - [ Create an App ](#-create-an-app-) - [ Install and Setup Bench ](#-install-and-setup-bench-) - [ Create a DocType ](#-create-a-doctype-) - [ Create a Site ](#-create-a-site-) - [ Branch ](#-branch-) - [ Employment Type ](#-employment-type-) - [ Department ](#-department-) - [ Designation ](#-designation-) - [ Forgot Password ](#-forgot-password-) - [ Disable Account / Cancel Subscription ](#-disable-account-cancel-subscription-) - [ Login from Frappe apps ](#-login-from-frappe-apps-) - [ Creating a new site ](#-creating-a-new-site-) --- # Introduction ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083722.png) ### ERPNext [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Learn](https://school.frappe.io/lms/courses?category=ERPNext) [Discuss](https://discuss.frappe.io/c/erpnext/6) [Website](https://frappe.io/erpnext) [](https://github.com/frappe/erpnext "GitHub") What is ERPNext? ---------------- ERPNext is business management software that helps companies stay on top of their operations, whether it's tracking inventory, managing finances, handling projects, or keeping customers happy. Think of it as the central nervous system for your business, bringing everything together in one place. Most ERPs are clunky, expensive, and a headache to customize. ERPNext is different. It is open-source, cloud-ready, and built to be flexible. You get the power of an enterprise system without the usual complications. ![ERPNext](https://docs.frappe.io/files/erpnext-hero-image.png) Why ERPNext? ------------ Because running a business is already hard enough. Your ERP should not make it harder. With ERPNext, you get a complete set of tools for all your business needs, built in and ready to use. With ERPNext, you get: 1. A complete suite of tools : From Assets to Accounting to Inventory, everything you need is built-in. 2. No vendor lock-in : Open-source means you own your data and have the freedom to customize. 3. Easy to use : A clean, modern interface that doesn't feel like it was built in the '90s. 4. Cost-effective : No sky-high licensing fees. Just powerful software that works. Whether you are a small business or a growing enterprise, ERPNext helps you stay organized, automate the boring stuff, and focus on what really matters - running your business. Key features ------------ ERPNext will help you: 1. Keep track of the financial indicators of the organization. 2. Track all invoices and payments. 3. Know what quantity of product is available in stock. 4. Identify and track your key performance indicators (KPIs). 5. Identify open customer queries. 6. Manage employee payroll. 7. Assign tasks and follow up on them. 8. Maintain a database of all your customers, suppliers, and contacts. 9. Prepare quotations. 10. Track your budgets and spending. 11. Determine effective selling price based on the actual raw material, machinery, and effort cost. 12. Get reminders on maintenance schedules. 13. Publish your website. And a lot more. **Under the Hood** ------------------ * [Frappe Framework](https://github.com/frappe/frappe) : A full-stack web application framework written in Python and Javascript. The framework provides a robust foundation for building web applications, including a database abstraction layer, user authentication, and a REST API. * [Frappe UI](https://github.com/frappe/frappe-ui) : A Vue-based UI library, to provide a modern user interface. The Frappe UI library provides a variety of components that can be used to build single-page applications on top of the Frappe Framework. Installation ------------ To install/setup the app, follow the [guidelines here](https://github.com/frappe/erpnext/#production-setup) . Learning and community ---------------------- 1. [Frappe School](https://frappe.school/) - Learn Frappe Framework and ERPNext from various courses by the maintainers or from the community. 2. [Documentation](https://docs.frappe.io/erpnext) - Extensive documentation for ERPNext. 3. [User Forum](https://discuss.frappe.io/c/erpnext/6) - Engage with the community of ERPNext users and service providers. 4. [Telegram Group](https://t.me/erpnext_public) - Get instant help from the community of users. Last updated 2 weeks ago Was this helpful? Submit Thanks! --- # Introduction ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/gantt.png) ### Gantt [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) What is Frappe Gantt? --------------------- Gantt charts are bar charts that visually illustrate a project's tasks, schedule, and dependencies. With Frappe Gantt, you can build beautiful, customizable, Gantt charts with ease. You can use it anywhere from hobby projects to tracking the goals of your team at the worksplace. [ERPNext](https://erpnext.com/) uses Frappe Gantt. ![](https://github.com/frappe/gantt/raw/master/.github/hero-image.png) Why Frappe Gantt? ----------------- We needed a Gantt View for ERPNext. Surprisingly, we couldn't find a visually appealing Gantt library that was open source - so we decided to build it. Initially, the design was heavily inspired by Google Gantt and DHTMLX. Key Features ------------ * **Customizable Views**: customize the timeline based on various time periods - day, hour, or year, you have it. You can also create your own views. * **Ignore Periods**: exclude weekends and other holidays from your tasks' progress calculation. * **Configure Anything**: spacing, edit access, labels, you can control it all. Change both the style and functionality to meet your needs. * **Multi-lingual Support**: suitable for companies with an international base. Installation ------------ Install with: npm install frappe-gantt Include it in your HTML: Or from the CDN: Start using Gantt: let tasks = [\ {\ id: '1',\ name: 'Redesign website',\ start: '2016-12-28',\ end: '2016-12-31',\ progress: 20\ },\ ...\ ] let gantt = new Gantt("#gantt", tasks); Discuss ------- If you want help, or have ideas to improve Gantt, please head over to the [Frappe Forum](https://discuss.frappe.io/search?q=gantt) . Alternatively, open an [issue](https://github.com/frappe/gantt/issues/new) on GitHub. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Introduction ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/studio-logo.png) ### Studio [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [](https://github.com/frappe/studio "GitHub") Frappe Studio ------------- Frappe Studio is a low-code, visual app builder for the Frappe Framework. It brings together the power of the framework, [frappe-ui](https://ui.frappe.io/) (vue component library), and a canvas interface like Frappe Builder. ![Frappe Studio](https://docs.frappe.io/files/studio-main-image.png) Motivation ---------- Frappe Framework is a backend powerhouse with all the things required to build powerful web apps. It also generates form, list, report views for every doctype created in the database. This consistency works great for most apps. But it's hard to craft great, intuitive frontends with just the Frappe Framework for various reasons: 1. Views are tightly bound to the backend 2. Composing views with multiple data sources is hard 3. Users are forced to switch between screens to run 1 single cycle Frappe Studio aims to improve how developers build frontend applications with the Frappe Framework by providing a visual tool. Key Features ------------ 1. **Build Layouts:** Drag & drop layout builder with frappe-ui components. Edit props and slots for any component with the powerful editor 2. **Connect Data:** Configure Frappe Framework data sources in the app using minimum configurations 3. **Wire Events:** Configure actions: Call API, Insert a Document, Run Script on any block's events like click, change, focus, blur, key events, etc. 4. **Code Support:** Build reactive apps with dynamic variables, scripts & watcher support 5. **Utilities:** Faster interaction with the backend with Form and CRUD utilities Under the Hood -------------- 1. [**Frappe Framework**](https://github.com/frappe/frappe) : A full-stack web application framework. 2. [**Frappe UI**](https://github.com/frappe/frappe-ui) : A Vue-based UI library, to provide a modern user interface. Installation ------------ To install/setup the app, follow the guidelines [here](https://github.com/frappe/studio#installation) . Links ----- 1. [GitHub](https://github.com/frappe/studio) : Contribute to ERPNext and explore its open-source code, issues, and discussions. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Introduction ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2038.png) ### Builder [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Frappe Builder -------------- Frappe Builder is a low-code website builder designed for simplicity, speed, and flexibility. Craft beautiful websites effortlessly with an intuitive visual builder. Whether you're a designer looking for ease or a developer seeking customization, Frappe Builder empowers you. It also features a click-to-publish option that gives you the complete end-to-end website creation experience. ### Motivation Most existing solutions were either too complex, too restrictive, or difficult to integrate with the Frappe ecosystem. Additionally, pages built with these tools were often bloated with unnecessary scripts and styles. I wanted to take a stab at solving this problem while prioritising performance from day one. I aimed to address two major issues with this project: providing an intuitive way to design a web page and enabling one-click publishing. As a web developer, it helps me scratch my own itch, and I hope it helps others too. ### Key Features * **Intuitive Visual Builder:** Simplify your workflow with a Figma-like editor. * **Responsive Views:** Ensure your sites look great on any device without the fuss. * **Frappe CMS Integration:** Easily fetch data from your database and create dynamic pages. * **Scripting Capabilities:** Customize with client scripts, global scripts, and styles. * **One-Click Publishing:** Instantly share your creation with the world in a single click. * **Performance Excellence:** Frappe Builder does not bloat web pages with unnecessary scripts hence pages are highly performant, consistently scoring high on Google Lighthouse tests. * **Production Ready**: [Frappe.io](https://frappe.io/) built on Frappe Builder, stands as a testament to its reliability in delivering production-ready solutions. ### Under the Hood * [Frappe Framework](https://github.com/frappe/frappe) : A full-stack web application framework. * [Frappe UI](https://github.com/frappe/frappe-ui) : A Vue-based UI library, to provide a modern user interface. ### Installation To install/setup the app, follow the [guidelines here](https://github.com/frappe/builder#getting-started-production) . ### Links * [Telegram Public Group](https://t.me/frappebuilder) * [Discuss Forum](https://discuss.frappe.io/c/frappe-builder/83) * [Documentation](https://docs.frappe.io/builder) * [Figma Plugin (Beta)](https://www.figma.com/community/plugin/1417835732014419099/figma-to-frappe-builder) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Learning Resources ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2038.png) ### Builder [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) ### Streams **Building a webiste using Frappe Builder from Scratch** ### Talks **Demo of Figma-To-Builder plugin** Last updated 3 months ago Was this helpful? Submit Thanks! --- # Configuration ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/gantt.png) ### Gantt [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Frappe Gantt offers a wide range of options to customize your chart. | **Option** | **Description** | **Possible Values** | **Default** | | --- | --- | --- | --- | | `arrow_curve` | Curve radius of arrows connecting dependencies. | Any positive integer. | `5` | | `auto_move_label` | Move task labels when user scrolls horizontally. | `true`, `false` | `false` | | `bar_corner_radius` | Radius of the task bar corners (in pixels). | Any positive integer. | `3` | | `bar_height` | Height of task bars (in pixels). | Any positive integer. | `30` | | `container_height` | Height of the container. | `auto` - dynamic container height to fit all tasks - _or_ any positive integer (for pixels). | `auto` | | `column_width` | Width of each column in the timeline. | Any positive integer. | 45 | | `date_format` | Format for displaying dates. | Any valid JS date format string. | `YYYY-MM-DD` | | `upper_header_height` | Height of the upper header in the timeline (in pixels). | Any positive integer. | `45` | | `lower_header_height` | Height of the lower header in the timeline (in pixels). | Any positive integer. | `30` | | `snap_at` | Snap tasks at particular intervel while resizing or dragging. | Any _interval_ (see below) | `1d` | | `infinite_padding` | Whether to extend timeline infinitely when user scrolls. | `true`, `false` | `true` | | `holidays` | Highlighted holidays on the timeline. | Object mapping CSS colors to holiday types. Types can either be a) 'weekend', or b) array of _strings_ or _date objects_ or _objects_ in the format `{date: ..., label: ...}` | `{ 'var(--g-weekend-highlight-color)': 'weekend' }` | | `ignore` | Ignored areas in the rendering | `weekend` _or_ Array of strings or date objects (`weekend` can be present to the array also). | `[]` | | `language` | Language for localization. | ISO 639-1 codes like `en`, `fr`, `es`. | `en` | | `lines` | Determines which grid lines to display. | `none` for no lines, `vertical` for only vertical lines, `horizontal` for only horizontal lines, `both` for complete grid. | `both` | | `move_dependencies` | Whether moving a task automatically moves its dependencies. | `true`, `false` | `true` | | `padding` | Padding around task bars (in pixels). | Any positive integer. | `18` | | `popup_on` | Event to trigger the popup display. | `click` _or_ `hover` | `click` | | `readonly_progress` | Disables editing task progress. | `true`, `false` | `false` | | `readonly_dates` | Disables editing task dates. | `true`, `false` | `false` | | `readonly` | Disables all editing features. | `true`, `false` | `false` | | `scroll_to` | Determines the starting point when chart is rendered. | `today`, `start`, `end`, or a date string. | `today` | | `show_expected_progress` | Shows expected progress for tasks. | `true`, `false` | `false` | | `today_button` | Adds a button to navigate to today’s date. | `true`, `false` | `true` | | `view_mode` | The initial view mode of the Gantt chart. | `Day`, `Week`, `Month`, `Year`. | `Day` | | `view_mode_select` | Allows selecting the view mode from a dropdown. | `true`, `false` | `false` | Apart from these ones, two options - `popup` and `view_modes` (plural, not singular) - are available. They have "sub"-APIs, and thus are listed separately. ### View Mode Configuration The `view_modes` option determines all the available view modes for the chart. It should be an array of objects. Each object can have the following properties: * `name` (string) - the name of view mode. * `padding` (interval) - the time above. * `step` - the interval of each column * `lower_text` (date format string _or_ function) - the format for text in lower header. Blank string for none. The function takes in `currentDate`, `previousDate`, and `lang`, and should return a string. * `upper_text` (date format string _or_ function) - the format for text in upper header. Blank string for none. The function takes in `currentDate`, `previousDate`, and `lang`, and should return a string. * `upper_text_frequency` (number) - how often the upper text has a value. Utilized in internal calculation to improve performance. * `thick_line` (function) - takes in `currentDate`, returns Boolean determining whether the line for that date should be thicker than the others. Three other options allow you to override general configuration for this view mode alone: * `date_format` * `column_width` * `snap_at` For details, see the above table. ### Popup Configuration `popup` is a function. If it returns * `false`, there will be no popup. * `undefined`, the popup will be rendered based on manipulation within the function * a HTML string, the popup will be that string. The function receives one object as an argument, containing: * `task` - the task as an object * `chart` - the entire Gantt chart * `get_title`, `get_subtitle`, `get_details` (functions) - get the relevant section as a HTML node. * `set_title`, `set_subtitle`, `set_details` (functions) - take in the HTML of the relevant section * `add_action` (function) - accepts two parameters, `html` and `func` - respectively determining the HTML of the action and the callback when the action is pressed. ### API Frappe Gantt exposes a few helpful methods for you to interact with the chart: | **Name** | **Description** | **Parameters** | | --- | --- | --- | | `.update_options` | Re-renders the chart after updating specific options. | `new_options` - object containing new options. | | `.change_view_mode` | Updates the view mode. | `view_mode` - Name of view mode _or_ view mode object (see above) and `maintain_pos` - whether to go back to current scroll position after rerendering, defaults to `false`. | | `.scroll_current` | Scrolls to the current date | No parameters. | | `.update_task` | Re-renders a specific task bar alone | `task_id` - id of task and `new_details` - object containing the task properties to be updated. | Last updated 3 months ago Was this helpful? Submit Thanks! --- # Install locally ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083725.png) ### Wiki [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Wiki is a Frappe App so deployment tools need no tweaking. If you want to manually install on bench use the following commands # get-app $ bench get-app https://github.com/frappe/wiki # install on site $ bench --site sitename install-app wiki Last updated 3 months ago Was this helpful? Submit Thanks! --- # Frappe Drive for You ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083735.png) ### Drive [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedrive) [Website](https://frappe.io/products/drive) [](https://github.com/frappe/drive "Github") Drive is **completely open source** and will always be. Drive is built by [Frappe](https://frappe.io/) - we've been here since 2007 and have a [suite of products](https://frappe.io/products) , all of which are open source. Drive is **great for teams**. Join multiple teams - your work and family on the same account. Have a personal view, and fly between different views with ease. Drive has a **beautiful UI**, and is an awesome experience for users. Other open source solutions do not even come close. Drive is **fast**. Whoosh. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Editor Interface ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/studio-logo.png) ### Studio [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [](https://github.com/frappe/studio "GitHub") Before we start building applications with Studio, let's first understand its interface. The Editor mainly has 4 parts: **Left Panel**: To control page level actions and objects. Also provides access to the component library for drag & drop **Canvas**: The space where you design and edit how your page will look like **Right Panel**: To control block/component level settings **Toolbar**: For quick tools like drawing containers, page settings and buttons to export, preview, publish ![Editor](https://docs.frappe.io/files/studio-editor-marked-1.png) Left Panel ---------- **1\. Pages Panel**: Manages all pages within your Studio application, displaying a list of existing pages with their titles and routes. You can navigate between pages, create new ones, and perform page-level actions like duplication, deletion, or switching the home page. The panel clearly indicates which page is currently active. ![Pages Panel](https://docs.frappe.io/files/1-pages-panel.png) **2\. Component Panel**: Provides access to the component library, divided into standard pre-built frappe-ui components and custom user-created components. Components can be searched and filtered for quick discovery, then dragged directly onto the canvas to add them to your page. ![Components Panel](https://docs.frappe.io/files/2-components-panel64cde7.png) **3\. Layers Panel**: Shows the hierarchical structure of all components on the current page in a tree view format. This panel allows you to select, reorder, and manage the visibility of components through drag-and-drop interactions. It's particularly useful for navigating complex page structures and understanding the parent-child relationships between components. ![Layers Panel](https://docs.frappe.io/files/3-layers-panel0599d3.png) **4\. Data Panel**: Handles all data-related functionality including data sources and application variables. You can configure data sources to connect to Frappe's doctypes or APIs, create and manage reactive variables that store dynamic values, and browse the structure of available data through an interactive object browser. ![Data Panel](https://docs.frappe.io/files/4-data-panel.png) **5\. Code Panel**: Provides advanced scripting capabilities using watchers. Watchers allow you to create reactive code that responds to changes in data sources or variables. ![Code Panel](https://docs.frappe.io/files/5-code-panel.png) ### Canvas **Canvas**: It is the main space where you build and edit your app pages visually. It shows a live preview of your page with support for multiple device sizes (desktop, tablet, mobile) that you can view simultaneously. You can select any component on the canvas by clicking on it. This opens its properties on the right panel. You can drag new elements from the component panel, and use pan/zoom controls for detailed editing. The canvas maintains full undo/redo history. It also switches between page editing mode for designing complete pages and component editing mode for creating reusable elements. Right Panel ----------- **1\. Properties Tab**: Configure the core attributes of selected components. You can edit the component's props like variant, theme, size of a button or menu items of a sidebar from here. You can also customise the component's view by adding slots: for eg: prefix, suffix for a button. You can define visibility conditions for blocks through JavaScript expressions, and binding dynamic values to data sources and variables. **2\. Events Tab**: Define how components respond to user interactions and system events. You can configure actions: Call API, Insert a Document, Run Script on any block's events like click, change, focus, blur, key events, etc. **3\. Styles Tab**: Adjust your component styles from this panel such as layout, dimensions, position, spacing, borders, etc. It also supports dynamic styling where appearance can be bound to variables and conditions. **4\. Interface Tab**: Available only when editing custom components, this tab allows you to define the configurable inputs and properties that make your component reusable. You can specify input types, set default values, and create a clean API for your custom component that can be easily configure and used from any page. ### Toolbar The toolbar has quick actions for: * Drawing containers * Controlling active page settings for configuring title and route * Actions * Preview: Quickly preview the page without publishing * Publish: Generates optimised version of the page and publishes changes * Export App Settings: If you are in developer mode on your Frappe site, you will see an export button to enable exporting the Studio app to an existing Frappe app. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Data Script ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2038.png) ### Builder [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) The Data Script feature is essential for retrieving, processing, and delivering dynamic data to your web pages from various sources. This guide will help you effectively utilize Data Script to ensure your content is always current and relevant. Key Concepts ------------ ### Data Binding To display data on your page, assign it to the `data` variable. This variable is used to pass data to the web page. data.events = ... # Example of assigning data to the 'events' variable data.user_list = ... # Example of assigning data to the 'user_list' variable **Note:** * Data scripts must be written in Python and are executed server-side. * They run in a restricted Python environment and can only access whitelisted modules. Find the list of whitelisted methods [here](https://frappeframework.com/docs/user/en/desk/scripting/script-api) . Retrieving Data --------------- ### From Frappe DocType #### Fetching a Document List To retrieve all records of a specific DocType: data.users = frappe.db.get_all("User") To retrieve a filtered subset of documents (e.g., active users): data.active_users = frappe.db.get_all("User", filters={"enabled": 1}) #### Fetching a Single Document To retrieve a single document by its name or another identifier: data.user = frappe.get_doc("User", "") ### From Dynamic Route To retrieve data based on dynamic route parameters: # Example route: /blog/:blog_slug blog_slug = frappe.form_dict.blog_slug data.blog_post = frappe.get_doc("Blog Post", {"slug": blog_slug}) **Usage:** 1. Set up a dynamic route in your web page settings (e.g., `/blog/:blog_slug`). 2. In your data script, access the route parameter using `frappe.form_dict.`. 3. Use this parameter to fetch the relevant data. ### From Different Frappe Sites Use FrappeClient to fetch data from external Frappe sites: client = FrappeClient( 'https://', api_key='xxxxxxxxxx', api_secret='xxxxxxxxxx' ) users = client.get_list('User', fields=['name', 'first_name', 'last_name'], filters={'user_type':'System User'}) [Refer to this link](https://github.com/frappe/frappe-client#api) for all supported APIs of `FrappeClient`. To get `api_key` and `api_secret`: 1. Go to User list and open a user. 2. Click on the "Settings" tab. 3. Expand the API Access section and click on Generate Keys. 4. Copy the API Secret from the popup and keep it safe. 5. Note the "API Key" field in this section. ### From External Resources Fetch data from external APIs or resources: data.posts = frappe.make_get_request("https://jsonplaceholder.typicode.com/posts") Processing Data --------------- Process retrieved data using Python code: data.users = frappe.db.get_all("User", fields=["name", "first_name", "last_name"]) # Processing data for user in data.users: user.full_name = user.first_name + " " + user.last_name # Adding routes to each user for user in data.users: user.route = "/user/" + user.name Passing Data to Client-Side --------------------------- To pass data to the client-side, set the `data.page_data` variable: data.page_data = { "enabled_languages": ["English", "Spanish", "French"] # ... } This data will be available on the client-side as `window.page_data`. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Installation ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Frappe Insights can be installed in several ways depending on your requirements. You can choose to install it on Frappe Cloud, the cloud version of Frappe Insights, or on your own server. The following sections describe the installation methods in detail. Managed Hosting --------------- Install Frappe Insights with one click on [Frappe Cloud](https://frappecloud.com/insights/signup) . Frappe Cloud is a managed hosting platform that makes installation and maintenance easy. Sign up [here](https://frappecloud.com/insights/signup) to get started. Your instance will be ready in minutes. We recommend trying Frappe Cloud before self-hosting. If you have an existing Frappe Cloud site, you can install Frappe Insights from the [Frappe Cloud Marketplace](https://frappecloud.com/marketplace/apps/insights) . Self Hosting ------------ ### Production Setup 1. First, download the installation script: wget https://frappe.io/easy-install.py 2. Run this command to install Frappe Insights: python3 ./easy-install.py deploy \ --project=insights_prod_setup \ --email=your_email.example.com \ --image=ghcr.io/frappe/insights \ --version=stable \ --app=insights \ --sitename subdomain.domain.tld You need to change two things in this command: * Replace `your_email.example.com` with your actual email address * Replace `subdomain.domain.tld` with your website domain name The setup will take about 5 minutes. After that, you'll have a ready-to-use Frappe Insights instance. ### Development Setup If you want to set up Frappe Insights for development, please check our [GitHub repository](https://github.com/frappe/insights/tree/develop#development-setup) for detailed instructions. Frequently Asked Questions -------------------------- ### I have an existing self-hosted ERPNext site. How can I install Frappe Insights on it? You can install Frappe Insights just like any other Frappe app. Following are the commands to get and install the app: bench get-app insights --branch version-3 bench --site your_site_name install-app insights ### I am facing issues during installation. What should I do? If you encounter any issues during installation, please raise a [GitHub issue](https://github.com/frappe/insights/issues) with the error message and the steps you followed. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Installation ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") Frappe Learning can be installed in multiple ways, depending on your requirements. You can either use **Frappe Cloud** for a fully managed experience or install Learning on your own server. The following sections explain each installation method in detail. * * * Managed Hosting (Frappe Cloud) ------------------------------ You can instal Frappe Learning with a single click using **[Frappe Cloud](https://frappe.io/redirect?redirect_to=https://frappecloud.com/dashboard/signup?product=lms) **, the managed hosting platform for Frappe applications. * Sign up [here](https://frappe.io/redirect?redirect_to=https://frappecloud.com/dashboard/signup?product=lms) to get started * Your Learning instance will be ready in a few minutes If you already have a Frappe Cloud site, you can install Frappe Learning directly from the **[Frappe Cloud Marketplace](https://cloud.frappe.io/marketplace/apps/lms) **. * * * Self Hosting ------------ ### Production Setup Follow these steps to set up Frappe Learning in production: **Step 1**: Download the easy install script wget https://frappe.io/easy-install.py **Step 2**: Run the deployment command python3 ./easy-install.py deploy \ --project=learning_prod_setup \ --email=your_email.example.com \ --image=ghcr.io/frappe/lms \ --version=stable \ --app=lms \ --sitename subdomain.domain.tld Replace the following parameters with your values: * `your_email.example.com`: Your email address * `subdomain.domain.tld`: Your domain name where Learning will be hosted The script will set up a production-ready instance of Frappe Learning with all the necessary configurations in about 5 minutes. * * * ### Development Setup #### Docker Setup To run Learning using Docker, ensure the following are installed: * Docker * Docker Compose * Git Refer to [Docker documentation](https://docs.docker.com/) . After that, follow the steps below: **Step 1**: Create a directory and download the required files mkdir frappe-learning cd frappe-learning # Download the docker-compose file wget -O docker-compose.yml https://raw.githubusercontent.com/frappe/lms/develop/docker/docker-compose.yml # Download the setup script wget -O init.sh https://raw.githubusercontent.com/frappe/lms/develop/docker/init.sh **Step 2**: Start the containers docker compose up -d **Step 3**: Access the application. The site [http://lms.localhost:8000/lms](http://lms.localhost:8000/lms) should now be available. The default credentials are: Username: Administrator Password: admin #### Local Setup (Bench) To set up the repository locally, follow the steps mentioned below: 1. Install a bench and set up a `frappe-bench` directory by following the [Installation Steps](https://frappeframework.com/docs/user/en/installation) 2. Start the server by running `bench start` 3. In a separate terminal window, create a new site by running `bench new-site learning.test` 4. Map your site to localhost with the command `bench --site learning.test add-to-hosts` 5. Get the Learning app. Run `bench get-app https://github.com/frappe/lms` 6. Run `bench --site learning.test install-app lms`. 7. Now open the URL `http://learning.test:8000/lms` on your browser, you should see the app running Last updated 1 month ago Was this helpful? Submit Thanks! --- # Installation ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") Frappe CRM can be installed in multiple ways, depending on your requirements. You can either use **Frappe Cloud** for a fully managed experience or install CRM on your own server. The following sections explain each installation method in detail. * * * Managed Hosting (Frappe Cloud) ------------------------------ You can install Frappe CRM with a single click using **[Frappe Cloud](https://frappecloud.com/crm/signup) **, the managed hosting platform for Frappe applications. * Sign up [here](https://frappecloud.com/crm/signup) to get started * Your CRM instance will be ready in a few minutes If you already have a Frappe Cloud site, you can install Frappe CRM directly from the **[Frappe Cloud Marketplace](https://cloud.frappe.io/marketplace/apps/crm) **. * * * Self Hosting ------------ ### Production Setup Follow these steps to set up Frappe CRM in production: **Step 1**: Download the easy install script wget https://frappe.io/easy-install.py **Step 2**: Run the deployment command python3 ./easy-install.py deploy \ --project=crm_prod_setup \ --email=email.example.com \ --image=ghcr.io/frappe/crm \ --version=stable \ --app=crm \ --sitename subdomain.domain.tld Replace the following parameters with your values: * `your_email.example.com`: Your email address * `subdomain.domain.tld`: Your domain name where CRM will be hosted The script will set up a production-ready instance of Frappe CRM with all the necessary configurations in about 5 minutes. * * * ### Development Setup #### Docker Setup To run CRM using Docker, ensure the following are installed: * Docker * Docker Compose * Git Refer to [Docker documentation](https://docs.docker.com/) . After that, follow the steps below: **Step 1**: Create a directory and download the required files mkdir frappe-crm cd frappe-crm # Download the docker-compose file wget -O docker-compose.yml https://raw.githubusercontent.com/frappe/crm/develop/docker/docker-compose.yml # Download the setup script wget -O init.sh https://raw.githubusercontent.com/frappe/crm/develop/docker/init.sh **Step 2**: Start the containers docker compose up -d **Step 3**: Access the application. The site [http://crm.localhost:8000/crm](http://crm.localhost:8000/crm) should now be available. The default credentials are: Username: Administrator Password: admin #### Local Setup (Bench) 1. [Setup Bench](https://docs.frappe.io/framework/user/en/installation) . 2. In the frappe-bench directory, run `bench start` and keep it running. 3. Open a new terminal session and cd into `frappe-bench` directory and run following commands: $ bench get-app crm $ bench new-site sitename.localhost --install-app crm $ bench browse sitename.localhost --user Administrator 4. Access the crm page at `sitename.localhost:8000/crm` in your web browser. **For Frontend Development** 1. Open a new terminal session and cd into `frappe-bench/apps/crm`, and run the following commands: yarn install yarn dev 2. Now, you can access the site on the Vite dev server at `http://sitename.localhost:8080` **Note:** You'll find all the code related to Frappe CRM's frontend inside `frappe-bench/apps/crm/frontend` Last updated 1 month ago Was this helpful? Submit Thanks! --- # Setting Up ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") If you have installed Helpdesk on a brand new site, you will need to set up your account. Visit your site that has Helpdesk installed, and you should see a setup wizard. ![Setup Wizard](https://docs.frappe.io/files/insights-setup-wizard.png) _Setup Wizard_ To complete the setup you will need to enter basic information like your country, name, email, and password. Make sure to remember your email and password as this is going to be your [admin account](https://docs.frappe.io/miscellaneous/faq#admin-account) . Once you have gone through the setup wizard, you will be redirected to the Ticket List Page where you can see a List of pre-created ticket. You can click on the ticket to view the sample ticket. ![](https://docs.frappe.io/files/Screenshot%202025-04-28%20at%202.01.41%20PM.png) _Ticket List View_ Last updated 3 months ago Was this helpful? Submit Thanks! --- # Academic Year ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **An academic year is a period which the Educational Institutes, Schools and Universities use to measure a quantity of study.** The **Academic year** form have the Start and End date for the Academic year. Within an Academic Year, you can have multiple **Academic Terms**. ![Academic Year](https://docs.frappe.io/files/education-academic-year-1.png) An academic year can be further linked to a [Student group](https://docs.frappe.io/education/student-group) , which can be created from an Academic Year. ![Academic Year](https://docs.frappe.io/files/education-academic-year-2.png) If the Academic Year has been specified in the [Education Settings](https://docs.frappe.io/education/education-settings) then it will become the default Academic Term in all the forms and will be editable if required. The following are the various forms where Academic Year is a relevant field: 1. Student Log 2. Student Group 3. Student Applicant 4. Student Admission 5. Program Enrollment 6. Assessment Plan 7. Assessment Result 8. Assessment Criteria 9. Fees 10. Fee Schedule 11. Fee Structure 12. Fee Category 13. Course Schedule Last updated 2 months ago Was this helpful? Submit Thanks! --- # Chart of Accounts ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/books.png) ### Books [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Chart of Accounts is used to refer to the organization of all accounts in a financial system. Navigate to the chart of accounts from the Sidebar: `Setup > Chart of Accounts` Organization of Accounts ------------------------ There are two types of accounts in the Chart of Accounts 1. **Ledger Accounts**: Accounts that are used in the transactional entries and that appear in the General Ledger. 2. **Group Accounts**: Accounts that are used to group other Group and Ledger accounts. ### Root Accounts At the upper most level there are 4 Group Accounts. These can be thought of as the _Root Accounts_. These _Root Accounts_ have all the other accounts grouped underneath them. [![Root Accounts](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/root-accounts.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/root-accounts.png) ::: info Number of Root Accounts The number of Root Accounts depends on your country's CoA. For example: The Indian CoA has only 4. Whereas the Standard Chart of Accounts has 5. ::: Each Root Account is either a Credit or a Debit account. If a Root Account is a Credit account all the accounts underneath it will also be a Credit Account. ([Credit and Debit](https://github.com/frappe/books_docs/blob/master/basics/accounting-basics#credit-and-debit) ) ### Other Accounts Clicking on a Root Account will reveal the accounts other it. This goes for the other Group Accounts too. [![Other Accounts](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/other-accounts.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/other-accounts.png) Clicking on a Ledger Account will open that accounts Quick Edit Form where the details of the account can be viewed. [![Ledger Account](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/ledger-account.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/ledger-account.png) Creating a New Account ---------------------- To create a new account 1. Hover over a Group Account 2. Click on Add Account or Add Group [![Create a New Account](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/create-new-account.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/create-new-account.png) This will display a new row where you can enter the account name. After you are done press Save to create the account. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Loan Product ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083723.png) ### Lending [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **A loan product can be categorized as an offering given by a NBFC or a Bank to its borrowers.** Frappe Lending allows users to define different loan products along with their various attributes like the rate of interest, schedule type, etc. To access the Loan Product, go to: > Home > Lending > Loan > Loan Product 1. **Prerequisites** * * * Before creating a Loan Product, it is advised to create the following: * Company * Loan Category 2. How to create a Loan Product * * * 1. Go to the Loan Product List, and click on Add Loan Product. 2. Enter the loan product details like product code, product name, rate of interest, repayment schedule type, accounting info, etc. 3. Save 4. Repayment/Amortization Schedule Types * * * ### 1\. Monthly as per repayment start date If this option is selected a monthly repayment schedule is generated upon loan disbursement as per the repayment start date selected by the user. An example of this can be seen in the image below. For this option, there can only be one active repayment schedule at a time, so if multiple partial/tranches are disbursed for this schedule type then a new active repayment schedule is generated and the old schedule is marked as inactive. Here users can also change the frequency of payment to weekly, quarterly, or one-time instead of the monthly default. ### 2\. Pro-rated calendar months If this option is selected a monthly repayment schedule is generated upon loan disbursement with the payment details as per calendar months. In this option user also gets to choose whether the payment date should be the "End of the current month" or "Start of the next month". An example of this can be seen in the image below. For this option as well there can be only one repayment schedule at a time. ### 3\. Monthly as per cycle date If this option is selected a monthly repayment schedule is generated upon loan disbursement as per the cyclic date selected by the user in the loan product, however user can override this at the time of loan booking. An example of this can be seen in the image below. For this option as well there can be only one repayment schedule at a time. Here also users can change the frequency of payment to weekly, quarterly, or one-time instead of the monthly default. ### 4\. Line of Credit This repayment schedule is useful for line of credit loans where an upper limit is sanctioned and multiple disbursements are made within the limit. For this repayment type there can be multiple active repayment schedules with different payment frequencies. 4. Excess amount acceptance and auto write-off limits * * * ![](https://docs.frappe.io/files/MWMNZoX.png) If the final repayment made is short of some amount and the amount is within "Auto Write Off Limit" the amount will be auto-waived and the loan will be closed. Similarly, in case the borrower makes the final payment with some excess amount and the amount is within the acceptance limit, the amount is parked in the customer refund account and the loan is closed. If the excess amount is more than the acceptance limit, the amount is still parked in customer refund account but the loan still remains open. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Architecture ESC ↵ to select ↑↓ to navigate ![](https://frappe.io/files/cloud.png) ### Cloud [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://support.frappe.io/helpdesk/my-tickets/new) [Blog](https://frappe.io/blog?category=frappe-cloud) [](https://github.com/frappe/press "GitHub") [Website](https://frappe.io/cloud) [Community](https://discuss.frappe.io/c/frappe-cloud/) Architecture Diagram -------------------- Typical Frappe Cloud (FC) cluster has a similar architecture: ![FC Cluster](https://docs.frappe.io/files/fc-cluster.png) A more complex architecture would explain the redundancy for each server along with the network cluster. What's under the hood? ---------------------- 1. **Frappe Framework**: A full-stack web application framework written in Python and Javascript. The framework provides a robust foundation for building web applications, including a database abstraction layer, user authentication, and a REST API. 2. **Frappe UI**: A Vue-based UI library to provide a modern user interface. The Frappe UI library provides a variety of components that can be used to build single-page applications on top of the Frappe Framework. 3. **Agent**: A flask app designed to work along with Press. It provides a CLI interface for Press to communicate with the sites and benches. 4. **Docker**: An open-source platform that enables developers to build, package, and deploy applications in lightweight, portable containers. 5. **Ansible**: An open-source IT automation tool that simplifies the management, configuration, and deployment of systems and applications. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Uptime ESC ↵ to select ↑↓ to navigate ![](https://frappe.io/files/cloud.png) ### Cloud [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://support.frappe.io/helpdesk/my-tickets/new) [Blog](https://frappe.io/blog?category=frappe-cloud) [](https://github.com/frappe/press "GitHub") [Website](https://frappe.io/cloud) [Community](https://discuss.frappe.io/c/frappe-cloud/) We provide hosting via multiple cloud providers with the following uptime guarantees: | Provider | Uptime Guarantee | | --- | --- | | AWS | [99.0 - 99.5%](https://aws.amazon.com/compute/sla/?did=sla_card&trk=sla_card) | | Digital Ocean | [99.99%](https://www.digitalocean.com/sla/cpu-droplets) | | OCI | [99.9%](https://www.oracle.com/content/published/api/v1.1/assets/CONT95B931480DF242229DF530A64F0D0245/native/Oracle+PaaS+and+IaaS+Public+Cloud+Services+Pillar+Document.pdf?channelToken=117bec9b3b4e4e90a1c4c9069d210baf) | We monitor uptime of each server and notify users via email if their server is consistently down. Engineers are notified via call for extended downtime. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Use on Frappe Cloud ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083725.png) ### Wiki [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Wiki is available on Frappe Cloud via the [Marketplace](https://frappecloud.com/marketplace/apps/wiki) Follow the steps below to get a running wiki instance quickly. 1. Visit [frappecloud.com/marketplace/apps/wiki](https://frappecloud.com/marketplace/apps/wiki) . 2. Click on the "Install Now" Button. 3. Select a region. 4. Choose a subdomain. 5. A new site with Wiki installed will be created. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Open Source ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083735.png) ### Drive [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedrive) [Website](https://frappe.io/products/drive) [](https://github.com/frappe/drive "Github") The term _open source_ refers to software where the source code is freely available to the public for inspection, modification, enhancement and redistribution. This is opposed to most propetiery software products - like Google Drive or Dropbox - which do not allow you to view their codebase. Any attempt at transparency is heavily restricted. Frappe Drive is a _completely open source_ product, published under the [Affero General Public License (aGPLv3)](https://github.com/frappe/drive?tab=AGPL-3.0-1-ov-file#readme) license. It grants you the freedom to... * Use the software for any purpose * Change the software to suit your needs * Share the software with anyone * Share the changes you make The source code of Frappe Drive is available on [GitHub](https://github.com/frappe/drive) . **You read that right**. You can install Frappe Drive wherever you want and use it for free. You can change it. You can do what you like. #### More Advantages of Open Source Software 1. There is no lock-in with one specific vendor. Even if Frappe discontinues Drive tomorrow, you have the service you love in your hands. 2. You can host the application anywhere, including your own server to gain complete ownership and privacy of the data. 3. You can access a [community](https://discuss.erpnext.com/) for help. 4. You can benefit from using a polished product that has been **critiqued and used by a wide range of people**, who have reported hundreds of issues, security fixes, and suggestions. Transparent to its core. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Complete Setup ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) If you have installed Insights on a brand new site, you will need to set up your account. Visit your site that has Insights installed, and you should see a setup wizard. ![Setup Wizard](https://docs.frappe.io/files/insights-setup-wizard.png) _Setup Wizard_ To complete the setup you will need to enter basic information like your country, name, email, and password. Make sure to remember your email and password as this is going to be your [admin account](https://docs.frappe.io/miscellaneous/faq#admin-account) . Once you have gone through the setup wizard, you will be redirected to the Insights Workbook page where you can see a sample workbook created based on the demo data ![Workbook List](https://docs.frappe.io/files/insights-workbook-list.png) _Sample Workbook_ Last updated 3 months ago Was this helpful? Submit Thanks! --- # Creating a ticket ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") Once you have [set up](https://docs.frappe.io/helpdesk/settings) your Email account, you are ready to get started with helpdesk. When you land on Helpdesk for the first time your URL should be "/helpdesk/tickets". This view shows you the list of all the tickets, in the begining you will see only one ticket: ![](https://docs.frappe.io/files/Screenshot%202025-04-21%20at%201.44.27%20AM.png) Channels to create tickets -------------------------- In Frappe Helpdesk you can create tickets by many ways: 1. Email 2. Customer Portal 3. Agent Portal ### Email When you set up your email account, and enable that account as incoming or default incoming, all the emails you will receive on that email will be converted to tickets in your Helpdesk Portal. The system pulls the emails from your account every 10 minutes. ### Customer Portal Agents/Admins can navigate to Customer Portal and create ticket by: ![](https://docs.frappe.io/files/CP%20new.gif) When you click on "Customer Portal" in the dropdown you will be navigated to the route `/helpdesk/my-tickets` Click on username => Customer Portal => New => Add info => Submit For Customers: When the customer login they will be directed to Customer Portal directly. ### Agent Portal On the top right corner (agent portal) you will see a button called "Create", click on it and you will be navigated to "New Ticket Page" with url `/helpdesk/tickets/new`. ![](https://docs.frappe.io/files/Screenshot%202025-04-21%20at%201.46.29%20AM.png) Fill the subject & description using our Rich Text Editor which provides support for headings, list, attachments and much more. Once you fill the information, click on "Submit" button or use the shortcut "cmnd/ctrl + Enter", to create a new ticket. When a ticket is created you will be navigated to the created ticket. ![](https://docs.frappe.io/files/Screenshot%202025-04-21%20at%201.48.58%20AM.png) **Emails** 1. When a ticket is assigned to an agent, the agent receives an email. 2. Whenever a customer replies on a ticket, agent received the email. You have successfully created your first ticket 🎉 Let's move to the [next section](https://docs.frappe.io/helpdesk/lesson-2understanding-ticket-view) , to understand the ticket view in detail! Last updated 3 months ago Was this helpful? Submit Thanks! --- # Creating your first Dashboard ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) 1. Navigate to Dashboards * Click on "Dashboards" in workbook page * Click "+" Icon 2. Give it a Name - Click on the title to rename it - Use a clear and descriptive name like "Sales Overview" or "Monthly Performance" 3\. Add Content - Click "Add Chart" to add visualizations - Click "Add Filter" to add interactive controls - Click "Add Text" to add descriptions or headers 4\. Arrange Your Layout - Drag items to reposition them - Resize items by dragging the corners - Items snap to a grid for clean alignment 5\. Save and Share - Changes save automatically - Click "Done" when finished editing - Use the "Share" button to give others access ### Dashboard Components #### Charts Charts are the heart of your dashboard - they display your data visually. Adding Charts * Click "Add Chart" button * Select one or more charts from your workbook * Charts appear on the dashboard in a grid ##### Working with Charts * Move: Click and drag to reposition * Resize: Drag the bottom-right corner to change size * View Details: Click the expand icon to see the full chart * Remove: Click the trash icon to delete from dashboard * Edit: Click the pencil icon to modify the chart ##### Pro Tips * Group related charts together * Put the most important metrics at the top * Use consistent sizing for visual harmony * Consider the reading flow (left to right, top to bottom) #### Filters Filters let viewers interact with your dashboard by controlling what data is displayed across multiple charts. #### How Filters Work * One filter can control multiple charts * Viewers select values to filter all linked charts simultaneously * Great for date ranges, regions, products, or any category #### Adding a Filter 1. Click "Add Filter" button 2. Give it a clear label (e.g., "Select Region", "Date Range") 3. Choose the filter type: - Text: For categories, names, statuses - Number: For quantities, amounts, IDs - Date: For time-based filtering 4\. Link it to charts: - Toggle on the charts you want to control - Select which column in each chart should be filtered 5\. Click "Apply" #### Setting Up Filter Links * You can link one filter to different columns in different charts * Example: A "Region" filter might control: * "Region" column in Sales chart * "Store Region" column in Inventory chart * "Customer Region" column in Orders chart #### Filter Types Explained: ##### Text Filters * Use for: Categories, names, regions, statuses * Operators: equals, contains, starts with, in list * Example: Filter by Product Category = "Electronics" ##### Number Filters * Use for: Amounts, quantities, IDs, scores * Operators: equals, greater than, less than, between * Example: Filter by Order Amount > 1000 ##### Date Filters * Use for: Time periods, deadlines, dates * Options: Specific date, date range, or relative (last 7 days, this month) * Example: Filter by Order Date = Last 30 Days ##### Pro Tips * Place filters at the top of the dashboard for easy access * Use clear labels that explain what the filter does * Limit to 3-5 filters to avoid overwhelming users * Group related filters together * Use relative date filters for dynamic dashboards #### Text Blocks Text blocks add context, headers, and explanations to your dashboard. Adding Text 1. Click "Add Text" button 2. Type or paste your content 3. Use the editor to format text 4. Click outside or press Done to save #### What to Include * Headers: Section titles to organize the dashboard * Descriptions: Explain what charts show * Instructions: Guide viewers on how to use filters * Notes: Important context or caveats about the data * Dates: Show when data was last updated #### Formatting Options * Bold, italic, underline * Bullet points and numbered lists * Headers (different sizes) * Links to other resources ##### Pro Tips * Keep text concise and scannable * Use text to divide dashboard into sections * Add a summary text at the top explaining the dashboard's purpose * Include "Last Updated" information for time-sensitive data Last updated 3 months ago Was this helpful? Submit Thanks! --- # Examples ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Use Cases & Examples -------------------- ### Use Case 1: Sales Team - Territory-Based Access **Scenario**: Sales reps should only see customers in their assigned territory. **Setup:** 1. Create team: "Sales Team North" 2. Add team members: northern sales reps 3. Grant access to `customers` table 4. Set table restriction: territory == 'North' **Result**: Team members only see customers where `territory = 'North'` * * * ### Use Case 2: Sales Rep - Individual Assignment **Scenario**: Each sales rep should only see their assigned customers and their sales data. **Setup:** 1. Create team: "Sales Representatives" 2. Add all sales reps as members 3. Grant access to tables: * `customers` * `sales_orders` 4. Set table restrictions: For `customers` table: sales_person == frappe.session.user For `sales_orders` table: sales_person == frappe.session.user **Result**: * John (john@company.com) only sees customers/orders where `sales_person = 'john@company.com'` * Jane (jane@company.com) only sees customers/orders where `sales_person = 'jane@company.com'` * * * ### Use Case 3: Manager - Team View **Scenario**: Sales managers should see all data for their team members. **Setup:** 1. Create team: "Sales Managers West" 2. Add managers as members 3. Grant access to same tables as reps 4. Set table restrictions: For `customers` table: sales_person_region == 'West' Or if you have a manager column: manager == frappe.session.user **Result**: Managers see all their team's data, reps see only their own. * * * ### Use Case 4: Finance Team - AR Visibility **Scenario**: AR team should see all invoices, but only for active customers. **Setup:** 1. Create team: "Accounts Receivable" 2. Add AR team members 3. Grant access to: * `customers` * `sales_invoices` * `payments` 4. Set table restrictions: For `customers` table: status == 'Active' AND outstanding_amount > 0 For `sales_invoices` table: status != 'Paid' AND due_date IS NOT NULL **Result**: AR team sees all unpaid invoices for active customers. * * * ### Use Case 5: Multi-Company Access **Scenario**: Users should only see data for their assigned company/branch. **Setup:** 1. Create teams per company: "Company A Team", "Company B Team" 2. Grant access to shared tables 3. Set table restrictions: company == 'Company A' **Result**: Users in "Company A Team" only see Company A data across all tables. * * * ### Use Case 6: Time-Based Access **Scenario**: Analysts should only see recent data. **Setup:** 1. Create team: "Junior Analysts" 2. Grant access to transaction tables 3. Set table restrictions: transaction_date >= '2024-01-01' **Result**: Analysts can't see historical data older than specified date. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Resource Permissions ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) ### What are Resources? Resources that can be shared with teams: * **Data Sources**: Database connections * **Tables**: Individual tables within data sources * **Dashboards**: Dashboard access * **Charts**: Chart access * **Workbooks**: Workbook access (through sharing) ### Granting Access to Data ![access-data](https://docs.frappe.io/files/SCR-20251027-dzex.png) 1. Click on a team 2. Go to the **Access** tab 3. Select data sources and/or specific tables 4. Click **Done** to save ### Access Patterns #### Pattern 1: Full Data Source Access Grant access to entire data source: * User can query all tables in that data source * Best for admins or broad access needs #### Pattern 2: Specific Table Access Grant access to individual tables: * User can only query selected tables * More granular control * Better for restricted access **Example:** Sales Team West has access to: ✓ Data Source: Production Database ✓ Table: customers ✓ Table: orders ✓ Table: invoices ✗ Table: employee_salaries (not accessible) * * * Last updated 3 months ago Was this helpful? Submit Thanks! --- # Sharing and Access Control ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) #### Sharing Options 1. Private (Default) * Only you can see the dashboard * Not shared with anyone 2. Share with Specific People * Select individual users to grant access * They see it in their dashboard list * You control who has access 3. Share with Organization * Everyone in your organization can access * Appears in their dashboard list * Great for team dashboards 4. Public Link * Anyone with the link can view * Perfect for external sharing * Link remains active until you revoke it #### How to Share 1. Click the "Share" button in dashboard header 2. Choose sharing option: * General Access: Private, Organization, or Public * Add People: Search and select specific users 3. Copy the share link if public 4. Click "Save" to apply changes #### Share Link Features ##### Copy Link * Click "Copy Link" to get the shareable URL * Send via email, chat, or embed in documents ##### Embed Code * Click "Get Embed Code" for iframe code * Paste in websites or internal portals * Dashboard displays in the embedded frame ##### Managing Access * See everyone who has access * Remove users by clicking the X next to their name * Change between private/organization/public anytime #### Access Levels ##### View Only * Users can see charts and apply filters * Cannot edit the dashboard * Cannot change layout or add items ##### Edit Access * Available to dashboard creator and workbook editors * Can modify layout, add/remove items * Can change sharing settings ##### Pro Tips * Start with private, share when ready * Use organization sharing for internal dashboards * Use public links for client reports or external stakeholders * Review who has access periodically * Remove access when team members change roles Last updated 3 months ago Was this helpful? Submit Thanks! --- # Editing or Deleting Content ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") As your course evolves, you may need to update or remove content. Delete a Course --------------- Go to your **Course** and click on `Settings` in the tab panel. In the top right corner, click the **trash icon** and confirm to delete the entire course. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%204.09.06%E2%80%AFPM.png) _Course Settings View: course delete button is highlighted._ * * * Edit or Delete a Chapter ------------------------ * To **edit** a chapter, hover over the chapter name in the curriculum view. Click the **edit icon** that appears on the same line to change the Title or update SCORM content. * To **delete** a chapter, hover over the chapter and click the **trash icon** on the same line. Confirm the deletion to remove the chapter and its associated lessons. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%204.09.56%E2%80%AFPM.png) _Course Settings View: chapter edit and delete buttons are highlighted_ * * * Edit or Delete a Lesson ----------------------- * To **edit** a lesson, simply click on the lesson title to open the **Lesson Editor**. From here, you can modify any blocks or settings. * To **delete** a lesson, hover over the lesson in the curriculum list. Click the **trash icon** that appears on the same line and confirm to delete. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%204.11.37%E2%80%AFPM.png) _Course Settings View: lesson delete button is highlighted_ Last updated 10 hours ago Was this helpful? Submit Thanks! --- # Embedding Google Workspace (Docs, Sheets, Slides) ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") You can integrate live Google Docs, Sheets, and Slides into your lessons to provide dynamic, up-to-date documentation and presentations. ### How to Embed Google Workspace Files 1. Open your Google Doc, Sheet, or Slide. 2. Make sure your permissions are set properly (`File` > `Share` > `Share With Others`). ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%202.38.05%E2%80%AFPM.png) _Permission Manager in Google_ 3. Copy your URL from the top browser address bar. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%202.34.07%E2%80%AFPM.png) _Google Docs_ 4. Now paste it in your lesson. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%202.40.59%E2%80%AFPM.png) _Document rendered in lesson._ * * * ### Integration Options * **Google Slides:** Perfect for presentations. These render with full navigation controls for the student. * **Google Sheets:** Useful for sharing live data tables or interactive calculators. * **Google Docs:** Best for course handouts, reading material, or live-updating documentation. Last updated 1 month ago Was this helpful? Submit Thanks! --- # Video Integration (Cloudflare, Vimeo, YouTube, etc.) ESC Type to search documentation ↵ to select ↑↓ to navigate 0 results ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") Frappe Learning allows you to embed videos in lessons using popular video hosting platforms. You don’t need to upload videos directly into Frappe Learning, simply **copy the video URL** from your preferred provider and **paste it into the Lesson Editor**. Frappe Learning automatically detects the video source and embeds it for learners. * * * [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#supported-video-platforms) Supported Video Platforms ------------------------------------------------------------------------------------------------------------------------------------------ ### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#1-youtube) 1\. YouTube YouTube videos can be embedded using the standard watch URL. #### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#supported-url-format) Supported URL format https://www.youtube.com/watch?v=<video-id> #### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#example) Example https://www.youtube.com/watch?v=SLNSSz41v_o * * * ### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#2-vimeo) 2\. Vimeo Vimeo videos are supported using the video URL. #### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#supported-url-format-1) Supported URL format https://vimeo.com/<video-id> #### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#example-1) Example https://vimeo.com/825334862 * * * ### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#3-cloudflare-stream) 3\. Cloudflare Stream Cloudflare Stream provides secure video hosting with adaptive streaming. #### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#supported-url-format-2) Supported URL format https://customer-<account-id>.cloudflarestream.com/<video-id>/watch #### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#example-2) Example https://customer-f33zs165nr7gyfy4.cloudflarestream.com/6b9e68b07dfee8cc2d116e4c51d6a957/watch * * * ### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#4-bunny-stream) 4\. Bunny Stream Bunny Stream allows fast, global video delivery with built-in analytics. #### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#supported-url-format-3) Supported URL format https://iframe.mediadelivery.net/play/<library-id>/<video-id> #### [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#example-3) Example https://iframe.mediadelivery.net/play/579970/54b3e5a1-cf95-4f88-96d3-8387d93dc2f2 * * * [#](https://docs.frappe.io/learning/course-creation/adding-a-lesson/add-video-content#important-notes) Important Notes ---------------------------------------------------------------------------------------------------------------------- * Paste **only the video URL**, not iframe embed code * The URL must match one of the supported formats above * Video privacy, access control, and streaming limits are managed by the video provider Last updated 10 hours ago Was this helpful? Submit Thanks! --- # Add a Program ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") ### Learning Paths Learning Paths allow instructors to group multiple courses into structured Programs. This makes it easier for students to follow a guided sequence of courses and track their overall progress. ### Creating a Program 1. Navigate to the Programs section. 2. Click on the **\+ New** button. 3. Enter a Title for your Program. 4. Add Courses to the Program. 5. Check the Enable Course Order option only if you want to enforece the order 6. You can also publish the program from here now or at any later point. ### Managing Enrollment There are two ways students can join Programs: 1. Published Programs: Students can view the Program, enroll themselves, and progress through its courses. 2. Private Programs: Instructors can manually enroll selected students without making the Program public. ### Student Experience 1. Students will see a Programs list they are enrolled in or other that are published. 2. Each Program displays its courses in sequence. 3. Students can click on a course to enroll and begin learning. 4. If Enforce Course Order is enabled, students must complete one course before moving to the next. 5. Progress is tracked and displayed on the Program page. ### Tracking Progress Instructors can view a Progress Summary for the Programs, giving them insight into student engagement and completion rates. Last updated 1 month ago Was this helpful? Submit Thanks! --- # Create a Live Class ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") Moderators can host a live session from the batch page. The live class is a Zoom integration. Once a live class is created all learners who are a part of the batch will receive a calendar invite. All upcoming live classes will be listed on the batch page. Students can join the current session from the batch page itself. ### Setup To use this feature, you will have to create a Server-to-server OAuth App from the Zoom App Marketplace. You can follow [this document](https://marketplace.zoom.us/docs/guides/build/server-to-server-oauth-app/) for the same. Creating a Server to Server OAuth App provides you with an **Account ID**, **Client ID**, and **Client Secret**. ![Screenshot 2024-05-17 at 5.07.25 PM](https://docs.frappe.io/files/Screenshot%202024-05-17%20at%205.07.25%20PM.png) You will then have to enter these values in the **Zoom Settings** Doctype. Checkout this video for more details. To send a calendar invite for a Live Class, you will also need to enable Google settings and add the Google calendar of the moderator. To enable Google Settings, follow the steps mentioned in [this document](https://docs.erpnext.com/docs/v12/user/manual/en/erpnext_integration/google_settings) . Once all this has been set up, you can create a live class. To create a live class, visit the batch page. Open the Live Class tab. Click on the button **Add Live Class**. Fill in the details in the dialog. ![Screenshot 2024-05-17 at 5.10.46 PM](https://docs.frappe.io/files/Screenshot%202024-05-17%20at%205.10.46%20PM.png) For Auto Recording to work ensure that Automatic Recording is enabled on your Zoom Account. ![Auto Recording](https://docs.frappelms.com/assets/auto-recording.9e7f3f7b.jpg) Once the details are submitted, the live class gets saved in your Zoom Account as well as the system backend. A calendar invite also gets sent to all the students of the class. Last updated 1 month ago Was this helpful? Submit Thanks! --- # Interactive Content ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") Make your lessons more engaging by adding interactive assessments and development environments. You can add the following interactive content in Frappe Learning: 1. Quizzes 2. Assignments 3. Programming Exercises 4. CodeSandBox * * * Quizzes ------- Quizzes serve as knowledge checks. You can add a quiz block to any lesson to ensure learners have understood the material before moving forward. To add a Quiz: 1. Hover over the lesson content 2. Click the `+` icon to open the block menu 3. Select the `Quiz` block from the menu. 4. Search for and select a quiz you have already created in Learning. ![](https://docs.frappe.io/files/Screenshot%202026-02-24%20at%2012.48.14%E2%80%AFPM.png) * * * Assignments ----------- Assignments are used to evaluate learners through longer-form tasks such as essays, projects, or file submissions. To add an Assignment: 1. Hover over the lesson content 2. Click the `+` icon to open the block menu 3. Select the `Assignment` block 4. Search for and choose an assignment you have already created in Learning ![](https://docs.frappe.io/files/Screenshot%202026-02-24%20at%201.49.15%E2%80%AFPM.png) * * * Programming Exercises --------------------- Programming Exercises allow learners to practice coding concepts directly within a lesson. To add a Programming Exercise: 1. Hover over the lesson content 2. Click the `+` icon to open the block menu 3. Select the `Programming Exercise` block 4. Search for and select a programming exercise you have already created in Learning ![](https://docs.frappe.io/files/Screenshot%202026-02-24%20at%201.49.55%E2%80%AFPM.png) * * * CodeSandBox ----------- For technical and programming courses, you can embed a live IDE directly into the lesson. To add a CodeSandBox: 1. Go to your sandbox on [CodeSandbox.io](https://codesandbox.io/) . 2. Copy the URL of your sandbox. 3. Paste it in the Lesson Editor. 4. Learners will be able to view and interact with the code without leaving the course. 5. They can also open a sandbox in CodeSandbox by clicking on `Open Sandbox`**.** ![](https://docs.frappe.io/files/Screenshot%202026-02-24%20at%2012.52.05%E2%80%AFPM.png) Last updated 10 hours ago Was this helpful? Submit Thanks! --- # Guardian ESC Type to search documentation ↵ to select ↑↓ to navigate 0 results ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **Guardian allows you to record the details of the Guardians of a Student.** ![Guardian](https://docs.frappe.io/files/education-guardian-1.png) Every student can have multiple guardians like Father, Mother, Brother, or Sister. To access Guardian, go to: > Home > Education > Student > Guardian [#](https://docs.frappe.io/education/guardian#1-prerequisites) 1\. Prerequisites -------------------------------------------------------------------------------- Before creating a Guardian, it is advised to create the following first: * Student * User [#](https://docs.frappe.io/education/guardian#2-how-to-create-a-guardian) 2\. How to create a Guardian ------------------------------------------------------------------------------------------------------ 1. Click on New Guardian in the Guardian List. 2. Add the name of the Guardian and click on Save. ### [#](https://docs.frappe.io/education/guardian#21-additional-options-while-creating-a-guardian) 2.1. Additional Options while creating a Guardian Apart from the mandatory details of the Guardian, you can also add the following details: 1. **Email Address**: Enter the email address of the Guardian. The email address can be linked to an email group for sending Newsletters or Announcements. 2. **Mobile Number**: The mobile number of the Guardian can be recorded here. 3. **Alternate Mobile Number**: You can add the Alternate Mobile Number of the Guardian over here for emergency purposes. 4. **Date of Birth**: The date of birth of the Guardian can be recorded here. 5. **User ID**: If the Guardian is a User of the system, their User Id can be mentioned here. 6. **Education**: The Academic and Educational details of the Guardian can be recorded here. 7. **Occupation**: The occupation of the Guardian can be captured here. 8. **Designation**: You can enter the designation of the Guardian here. 9. **Work Address**: The Work Address of the Guardian can be recorded here for emergency purposes. ![Guardian](https://docs.frappe.io/files/education-guardian-1.png) [#](https://docs.frappe.io/education/guardian#3-features) 3\. Features ---------------------------------------------------------------------- ### [#](https://docs.frappe.io/education/guardian#31-guardian-of) 3.1. Guardian Of While creating a Student, if you have selected a Particular Guardian for them, the name of that Student will automatically be fetched here. Multiple students can have the same person as their guardian. In that case, multiple entries will be made in this section. However, on the front end, one will not be able to add more students to this section. ![Guardian](https://docs.frappe.io/files/education-guardian-2.png) ### [#](https://docs.frappe.io/education/guardian#32-guardian-interests) 3.2. Guardian Interests Interests could be a list of activities that the Guardian would be willing to do for the institute or would like their Dependent or Ward to do as a part of extra-curricular activities. ![Guardian](https://docs.frappe.io/files/education-guardian-3.png) [#](https://docs.frappe.io/education/guardian#4-making-the-guardian-a-user) 4\. Making the Guardian A User ---------------------------------------------------------------------------------------------------------- Once Guardian has been saved, you can find a button **Invite As User** on the top right corner of the form. This button would allow you to invite the guardian as a User of ERPNext by sending them an invitation email on the recorded email ID. ![Guardian](https://docs.frappe.io/files/education-guardian-4.png) [#](https://docs.frappe.io/education/guardian#5-related-topics) 5\. Related Topics ---------------------------------------------------------------------------------- 1. [Student](https://docs.frappe.io/education/student) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Call Log ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") The call log page in Frappe CRM is for recording, tracking, and managing all your customer calls. It helps you to maintain a clear history of interactions, improve communication effectiveness, and gain valuable insights for better customer relationships. Make a call ----------- * You need to go to a Deal/Lead page * You can make a call by clicking on the call icon in the lead details section or the activity tab by clicking on new and then making a call. > Refer to this [page](https://docs.frappe.io/crm/twilio#make-a-call) > to understand where and how to make calls in the CRM System in detail. ![CALL](https://docs.frappe.io/files/CALL.gif) Once your call is done you can check in the Calls tab to track all the call activity made to a Lead/Deal. Also, you can easily refer to the call recording. ![call activity](https://docs.frappe.io/files/call%20activity.gif) **Call Logs** ------------- Call log view is a valuable tool for any business that relies on effective customer communication. By leveraging these reports, you can transform your call data into actionable insights, driving improved performance, customer satisfaction, and overall business success. ![Screen Recording 2024-03-31 at 2.33.58 PM (1)](https://docs.frappe.io/files/Screen%20Recording%202024-03-31%20at%202.33.58%20PM%20(1).gif) Frappe CRM's call log reports offer various filters and options to customize your analysis. Here are some common reporting aspects: * **Call Details:** Filter calls by date range, time, type (inbound/outbound), duration, agent and customer, and more. * **Agent Performance:** Analyze individual agent call volume, success rates (e.g., call-to-answer conversion), and average call duration to measure performance. * **Customer Analysis:** Report on call volume, call topics, and customer demographics to understand customer behavior and identify trends. * **Outcome Analysis:** Track the outcome of each call (e.g., successful sale, follow-up required) to measure conversion rates and identify areas for improvement. * **Call Recording Analysis:** Analyze recordings to identify areas where communication can be improved or gather specific customer feedback. Analyzing call logs can help identify areas where training or coaching can be provided to enhance team communication skills and effectiveness. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Email Template ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") Email templates serve as a time-saving tool for composing emails efficiently. With the ability to utilize Jinja templates, you can personalize emails to cater to specific recipients or contexts. Create a new Email Template --------------------------- To create a new Email Template: * Go to the Email Template list and click on the "Create" button * Select the DocType for which you are composing the Email Template * Fill in the other relevant information and click on "Update" ![PInnXua](https://docs.frappe.io/files/PInnXuaf6f153.png) Only "Enabled" Email Templates will be visible for further use. Using the Email Template ------------------------ You can use the Email Templates you have created in various DocTypes while composing in you emails by click on the Email Template button. For example, as seen in the screenshot, the email template "First Email for Partners" is selected. ![download](https://docs.frappe.io/files/download.png) The contents are then copied, and you are free to edit the content as well to personalize it further. ![](https://docs.frappe.io/files/EtocdIA.png) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Public View ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") Public Views are a powerful way to share commonly used filters and layouts with all users in your CRM system. This section will explain what Public Views are, how to create them, and who can create them. What are Public Views? ---------------------- Public Views are saved views that are accessible to every user (agent) in the system. They function similarly to your personal saved views, but instead of being confined to your workspace, they become a shared resource readily available to everyone. When to use Public Views ------------------------ Public Views are ideal for situations where a specific filter or layout needs to be consistently used by your entire team. Here are some examples: * A view that filters lead by a particular source or industry. * A view that prioritizes high-value deals that require immediate attention. * A view that displays specific customer information relevant to the sales team. By creating Public Views for these commonly used scenarios, you can ensure everyone has access to the same information and is working from the same perspective. Who can create a Public View? ----------------------------- Only users with the **Sales Manager Role** can create Public Views. This helps maintain control over what information is shared publicly within the CRM system. Creating a Public View ---------------------- 1. **Navigate to the list view:** Locate the list view from the sidebar (e.g., a list of leads, deals or contacts) that you want to make public. 2. **Create or Select a Saved View:** If you haven't already, use the filters and options available to create a custom view of your data. You can then save this view for future reference. Alternatively, select an existing saved view that you want from the drop-down in the list view header towards the left. 3. **Access the Make Public Option:** Click on the three-dot menu (...) associated with the saved view. 4. **Make Public:** From the menu that appears, select "Make Public" This will convert your saved view into a Public View, making it accessible to all users in the sidebar under the **Public Views** section. Making a Public View private again ---------------------------------- Public Views can be reverted to private views at any time. Simply follow the same steps mentioned above and select **Make Private** from the three-dot menu. By effectively utilizing Public Views, you can streamline your CRM workflow, ensure consistency across your team, and improve overall collaboration within your sales organization. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Facebook / Instagram ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") ### Prerequisites Before you begin, you must have atleast one Facebook page and a lead generation form. You can follow [this guide](https://developers.facebook.com/docs/facebook-login/guides/access-tokens/) to obtain an access token for your account. > Note: This feature is in beta, if you find any bugs, please report [here](https://github.com/frappe/crm) > . ### Adding a new Lead Sync Source Open **Settings** from the dropdown menu on top-left corner of the CRM dashboard: ![Settings from Sidebar](https://docs.frappe.io/files/CleanShot%202025-11-11%20at%2017.09.58@2x.png) Click on the **Lead Syncing** tab and then click on the `+ New` button to add a new Source: ![Lead Syncing Settings](https://docs.frappe.io/files/CleanShot%202025-11-11%20at%2017.15.57@2x4d3c60.png) ### Configuring Lead Sync Source Now follow these steps: 1. Select **Facebook** as the source type 2. Give your source a relevant name 3. Select a frequency for scheduled syncing: how frequently the leads should be automatically synced 4. Paste the Access token obtained from Meta ![New Lead Sync Source](https://docs.frappe.io/files/CleanShot%202025-11-11%20at%2017.18.55@2x047f4a.png) Now click **Create**. It will take a few seconds since we are pulling the pages and forms from Facebook. But once it is done, you can select the page and the form from where the leads will be pulled in from: ![Select Page and corresponding form](https://docs.frappe.io/files/CleanShot%202025-11-11%20at%2018.00.30@2x.png) As soon as you select the form, you will see a mapping table: ![CRM Mapping Table](https://docs.frappe.io/files/CleanShot%202025-11-11%20at%2018.00.49@2x.png) This table let's you easily map fields of your Facebook form to fields in Frappe CRM. Apart from this, we also store the Lead ID and Form ID in CRM Lead document. Once you are done configuring the field mapping, click on **Update**, and that is it! Your leads will start syncing in the background in some time. ### Sync Now You can also manually trigger a lead sync by clicking on the **Sync Now** button. ### Failure Logs & Retry If your leads don't appear in your CRM, go to the **Failure Logs** tab, and check the logs. The failure log contains the reason for failure (e.g. Duplicate), the lead data we received from Facebook, and also error traceback if available: ![Sync Failure Log](https://docs.frappe.io/files/CleanShot%202025-11-11%20at%2018.16.07@2xc169ec.png) You can click on the **Retry Sync** button to retry syncing of this particular lead. > Note: A new failure log will get created if a resync fails too. Last updated 1 month ago Was this helpful? Submit Thanks! --- # Student Attendance ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **Student Attendance allows you to track and manage the attendance of a student for a day. The Attendance module is designed to help teachers easily mark student attendance during class.** Attendance Records can be created against Students on a daily basis. To access Student Attendance, go to: > Home > Education > Attendance > Student Attendance 1. How to create Student Attendance * * * Select the **Student, Course Schedule, and Student Group** for which attendance is to be marked for the given date. Set the Status to Present/Absent and save. ![education-student-attendance-1](https://docs.frappe.io/files/education-student-attendance-1.gif) [**Student Attendance tool**](https://docs.frappe.io/education/student-attendance-tool) can be used for bulk updation of the attendance based on **Batch, Course, or Activity**. > From version 15.3.1 onwards: Attendance DocType have 3 States: > > 1. Present > 2. Leave > 3. Absent > > The status of the attendance can be changed even after submitting the doctype 2. Video on Student Attendance * * * Last updated 2 months ago Was this helpful? Submit Thanks! --- # Program ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **A Program will have an educational curriculum defined by your institute to streamline the learning process and goals in each subject or course.** For example, Economics Major would be a Program taught at an institution that will have various courses within. ![Program](https://docs.frappe.io/files/education-program-workflow.png) An Economics major would look something like this: ![Program](https://docs.frappe.io/files/education-program-2.png) To access the Program list go to: \> Home > Education > Masters > Program 1\. Prerequisites ----------------- To create a New Program, it is advised to create the following first: 1. Department 2. Course 2\. Creating a New Program -------------------------- 1. Go to the Program list and click on New. 2. Enter the Program Name and the Program Abbreviation. 3. Select the Department for the Program. 4. Select and add the courses within the Program. 5. Save. ![Program](https://docs.frappe.io/files/education-program-1.gif) ### 2.1 Alternate ways of creating a new Program A new program can also be created from a course, in the following way: ![Program](https://docs.frappe.io/files/education-program-3.gif) ### 2.2 Additional Options while creating a new Program * **Portal Settings** * **Is Published**: For every program created in ERPNext, there is a check-box in the Portal settings, that allows the Program to be published on the portal. This can facilitate Self Enrollment and other settings for the program. Once this box is checked, the following options will be available for the user. * **Allow Self Enroll**: Once this box is checked, the students/applicants would be able to enroll themselves for the program on the portal. * **Is Featured**: Enabling this option would allow the program to be featured on the portal. * **Intro Video**: Enter the link for the video that you wish to add an Introductory Video for the Program. * **Description**: Add the description of the Program which you want to be visible on the portal. ![Program](https://docs.frappe.io/files/education-program-4.png) 3\. Video Tutorial on Program and Courses ----------------------------------------- Last updated 2 months ago Was this helpful? Submit Thanks! --- # Student Attendance Tool ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **The Student Attendance tool allows you to bulk update the attendance for students based on Student Group and Course Schedule**. To access the Student Assessment Tool, go to: > Home > Education > Attendance > Student Attendance Tool To mark the Attendance based on Student Group select the group based on: 1. Batch 2. Course 3. Activity Student details will be auto-fetched and you can mark the attendance of the given date. ![student-attendance-tool](https://docs.frappe.io/files/student-attendance-tool.gif) Video for Student Attendance Tool --------------------------------- Last updated 2 months ago Was this helpful? Submit Thanks! --- # Contact ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") In Frappe Helpdesk, a contact represents an individual who interacts with the support team, typically a customer or user seeking assistance. Contacts are crucial for managing customer relationships and ensuring efficient communication between the helpdesk and its users. Key Features of Contacts ------------------------ * **Personal Information**: Contacts store essential personal details such as name, email address, phone number, and company affiliation. * **Communication History**: Maintains a record of all interactions with the contact, including emails, phone calls, and chat conversations. This history helps support agents understand the context of each issue and provide more personalized service. * **Linked Tickets**: Associates each contact with their respective support tickets, providing a comprehensive view of all issues reported by the contact. * **Customer Portal Access**: Contacts can access the customer portal to submit new tickets, track existing ones, and browse the Knowledge Base for self-help solutions. Use Cases for Contacts in Frappe Helpdesk ----------------------------------------- * **Customer Support**: Manage and track interactions with customers who need assistance with products or services. * **Sales Inquiries**: Handle pre-sales questions and inquiries, ensuring potential customers receive timely and accurate information. * **Account Management**: Maintain ongoing relationships with key clients, track their support history, and ensure high levels of satisfaction. * **Feedback Collection**: Gather feedback from contacts to improve products, services, and support processes. Benefits of Managing Contacts ----------------------------- * **Improved Communication**: Streamlines communication with customers by having all their information and history in one place. * **Enhanced Personalization**: Enables support agents to provide personalized service based on the contact's history and preferences. * **Efficient Issue Resolution**: Quick access to a contact's previous tickets and interactions helps in resolving issues faster. * **Better Relationship Management**: Helps in building and maintaining strong relationships with customers by keeping track of all their interactions and ensuring follow-ups. By effectively managing contacts, Frappe Helpdesk enhances the efficiency of support operations, improves customer satisfaction, and fosters stronger customer relationships. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Program Enrollment Tool ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **The Program Enrollment Tool can be used in cases when you want to bulk Enroll new students to a Program, or when old or existing students, who are already enrolled to a program are needed to be enrolled to a new program.** To access the Program Enrollment Tool, go to: \> Home > Education > Tools > Program Enrollment Tool 1\. How to create Student Enrollment using the Student Enrollment Tool ---------------------------------------------------------------------- 1. **Get Students From**: If you are enrolling a new student, you can fetch the students from the **Student Applicant** or if you are promoting the older students you can fetch them from the **Program Enrollment** itself. 2. **Academic Year**: Enter the Academic Year for which the new students had applied or under which the existing students were enrolled. 3. **Academic Term**: Enter the Academic Term for which the new students had applied or under which the existing students were enrolled. 4. **Program**: Enter the Program for which the new students had applied or under which the existing students were enrolled. ### 1.1. Fetching Students Once you click on the **Get Students** button, the system will fetch the list of all the students matching with the above-specified criteria. You can then delete a record if you wish to. ### 1.2. Enrollment Details * If the student list is fetched from the Student Applicant list, you can enter a New Student BAtch Name under which all the New Students will be enrolled. ![Student Enrollment Tool](https://docs.frappe.io/files/education-student-tool-5.png) * If the student list is fetched from the existing Program Enrollment, you will be asked to enter the details of the new Program like Program Name, Academic Year, Academic Term and New Student Batch. ![Student Enrollment Tool](https://docs.frappe.io/files/education-student-tool-6.png) * Once all the details have been entered, click on **Enroll Students** to create Program Enrollment in bulk. ![Student Enrollment Tool](https://docs.frappe.io/files/education-student-tool-7.png) 2\. Video Tutorial for Program Enrollment Tool ---------------------------------------------- Last updated 2 months ago Was this helpful? Submit Thanks! --- # Program Enrollment ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **Program Enrollment is the record of enrollment of a student in a given program and chosen courses for a particular Academic Term.** To ensure that students are associated with a particular program in the system, their Program Enrollment must be created. The mandatory course in that program is automatically filled in the Enrolled Courses table while the elective or optional courses can be selected manually. If the student has applied online for the admission in a particular **Program** and the application is approved, then the Program Enrollment can be created from within the Student Applicant record via clicking on the **Enroll** button. Checkout [Student Applicant](https://docs.frappe.io/education/student-applicant) for more information on this. To access Program Enrollment, go to: > Home > Education > Admission > Program Enrollment 1\. Prerequisites ----------------- Before creating a Program Enrollment, it is advisable that you create the following first: 1. [Student](https://docs.frappe.io/education/student) 2. [Program](https://docs.frappe.io/education/program) 3. [Student Category](https://docs.frappe.io/education/student-category) 4. [Student Batch](https://docs.frappe.io/education/student-batch-name) 5. [Academic Year](https://docs.frappe.io/education/academic-year) 6. [Academic Term](https://docs.frappe.io/education/academic-term) 7. [Course](https://docs.frappe.io/education/course) 8. [Fee Structure](https://docs.frappe.io/education/fee-structure) 2\. How to create a Program Enrollment -------------------------------------- 1. Go to Program Enrollment List and click on new. 2. Select the Student whom you are getting enrolled in the program. 3. Select the Program under which you are getting the student enrolled. 4. Enter the Academic Year for which the student is getting enrolled. 5. The Enrollment Date for the form would by default be set on the current date, the same, however, can be changed if needed. 6. Save and submit. ![Program Enrollment](https://docs.frappe.io/files/education-program-enrollment-1.gif) ### 2.1. Additional Options while creating a Program Enrollment 1. **Student Category**: Select the category if the student belongs to a particular student category. 2. **Academic Term**: Select the Academic Term. 3. **Student Batch**: Select the batch if the student belongs to a particular student batch. 4. **Student House**: Select the House if the student belongs to a particular student house. 5. **Boarding Student**: Check this if the Student is residing at the Institute hostel. In this case, the fee structure would accordingly be updated. ![Program Enrollment](https://docs.frappe.io/files/education-program-enrollment-2.gif) 3\. Features ------------ ### 3.1. Transportation Select the mode of transportation for the student to and from the Institute and the Vehicle Number. ### 3.2. Enrolled Courses Select and add the courses which the student has opted to study during the course of the program. ![Program Enrollment](https://docs.frappe.io/files/education-program-enrollment-3.png) ### 3.3. Fees Select and add the Academic Term, Fee Structure, Student Category, Fees Due Date and Fees Amount to be paid by the student for the enrollment to the course. ![Program Enrollment](https://docs.frappe.io/files/education-program-enrollment-4.gif) 4\. Video --------- Last updated 2 months ago Was this helpful? Submit Thanks! --- # Team ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") In Frappe Helpdesk, a team is a group of support agents or users who collaborate to manage and resolve customer support tickets. Teams are crucial for organizing and distributing workloads, ensuring that customer inquiries are handled efficiently and effectively. Key Features of Teams in Frappe Helpdesk ---------------------------------------- * **Role Assignment:** Assign specific roles to team members, such as support agents, supervisors, and administrators. This helps define responsibilities and access levels within the helpdesk system. * **Ticket Assignment:** Automatically or manually assign tickets to specific teams based on criteria such as issue type, priority, or customer. This ensures that tickets are directed to the appropriate group of agents. * **Collaboration:** Facilitate communication and collaboration among team members to work on resolving tickets. Team members can share notes, updates, and solutions within the ticket interface. * **Performance Tracking:** Monitor team performance through metrics such as ticket response time, resolution time, and customer satisfaction. This data helps in identifying areas for improvement and recognizing high-performing team members. * **Workload Distribution:** Balance the workload by distributing tickets evenly among team members. This helps in preventing burnout and ensuring that no single agent is overwhelmed with too many tickets. Use Cases for Teams in Frappe Helpdesk -------------------------------------- * **Specialization:** Create specialized teams for different types of issues, such as technical support, billing inquiries, or product-related questions. This ensures that tickets are handled by agents with the appropriate expertise. * **Regional Support:** Establish teams based on geographic regions to provide localized support and accommodate different time zones and languages. * **Tiered Support:** Implement tiered support levels (e.g., Level 1, Level 2, and Level 3) where each team handles different levels of complexity. Tickets can be escalated to higher tiers if they require more advanced knowledge or skills. * **High-Priority Handling:** Form dedicated teams to handle high-priority or urgent tickets, ensuring that critical issues are addressed promptly. By organizing support agents into teams, Frappe Helpdesk enhances the efficiency and effectiveness of customer support operations, leading to improved customer satisfaction and streamlined support processes. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Student Admission ESC Type to search documentation ↵ to select ↑↓ to navigate 0 results ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **Student Admission is a document which can be configured to initiate an Admission Process for your institution by publishing it on the ERPNext generated website.** To access student Admission, go to: > Home > Education > Admission > Student Admission [#](https://docs.frappe.io/education/student_admission#1-prerequisites) 1\. Prerequisites ----------------------------------------------------------------------------------------- Before creating a Student Admission, it is advisable that you first create the following: 1. [Academic Year](https://docs.frappe.io/education/academic-year) 2. [Program](https://docs.frappe.io/education/program) [#](https://docs.frappe.io/education/student_admission#2-how-to-create-a-student-admission) 2\. How to create a Student Admission --------------------------------------------------------------------------------------------------------------------------------- 1. Go to Student Admission list and click on New. 2. Select the **Academic Year** for the Student Admission. 3. Enter the **Application Form Route**. This is the navigation URL for the Online Admission portal. 4. Save. Once the Student Admission has been saved, you will be bale to see a link on the left sidebar, saying **See on Website**. This link will allow you to see the Student Admission Portal on ERPNext generated website. ![Student Admission](https://docs.frappe.io/files/education-student-admission-4.png) This is what the Student Admission will look like in the website view: ![Student Admission](https://docs.frappe.io/files/education-student-admission-5.png) ### [#](https://docs.frappe.io/education/student_admission#21-additional-details-while-creating-a-student-admission) 2.1. Additional Details while creating a Student Admission 1. **Title**: Enter the title for the Student Admission Portal. 2. **Route**: Enter a desirable path which will become the url extension for the admission portal. 3. **Admission Start Date**: Select the date for the start of online Admission Process. 4. **Admission End Date**: Select the last date for applying to online Admission Process. 5. **Publish on Website**: Check this box when the content of the portal is ready and the Admission Process can be kickstarted on the website. ![Student Admission](https://docs.frappe.io/files/education-student-admission-2.png) ### [#](https://docs.frappe.io/education/student_admission#22-eligibility-and-details) 2.2. Eligibility And Details * **Program**: Here you can select which program are the admissions being called for. * **Minimum Age**: Enter the probable birth-date of the youngest person that can seek admission in the program. * **Maximum Age**: Enter the probable birth-date of the oldest person that can seek admission to the program. * **Application Fee**: You can choose to declare the application fee for the selected program. * **Naming Series**: Here you can define the Naming series based which the forms of the Admission Seekers will be named ond ordered. * **Introduction**: You can add a brief introductory information about the admission process so that it is better understood to the admission seekers. ![Student Admission](https://docs.frappe.io/files/education-student-admission-3.png) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Outside Working Hours Banner ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") When users raise a ticket outside regular working hours, they may be confused about delayed responses. The Outside Working Hours Banner addresses this by notifying users of potential delays and setting clear expectations about response times. To display the after-hours banner in the customer view, navigate to the **General** tab in the Settings view and enable the "**Outside working hours notice"** toggle, as shown below. ![](https://docs.frappe.io/files/Adobe%20Express%20-%20Screen%20Recording%202026-01-21%20at%2012.39.30%E2%80%AFPM77d642.gif) When you enable the toggle, a text input appears, allowing you to customize the banner message. Your customized message takes effect once you save the settings. ![](https://docs.frappe.io/files/Untitled%20design6ed650.gif) Currently, you can use the following variables to personalize your banner message. **Available variables:** * `{{ ticket.name}}` — Ticket reference and other fields of the ticket can also be used. _e.g: #TKT-00123_ * `{{ next_working_day }}` — Full date with day name. _e.g: Monday, 23 Jan_ * `{{ next_working_date }}` — Short date format. _e.g: 23 Jan_ * `{{ expected_response }}` — Expected response time. _e.g: 09:00, Monday, 23 Jan_ **How does it work?** Suppose your business working hours are set from 9 am to 6 pm on a working day. Now, a customer raises a ticket after 6 pm, say at 9 pm, outside of working hours, then what will happen? Voila! A notice banner is now displayed for the ticket. Why? because according to the configured SLA for the ticket, the time 9pm is _outside working hours._ ![](https://docs.frappe.io/files/highlighted-banner.png) Now, in the same scenario, let's say a day has passed, and now it's 12 pm on a working day according to your SLA. ![](https://docs.frappe.io/files/image313c83.png) As you can see, the banner is no longer there. Why? because the ticket is now being viewed inside working hours. Seems confusing, but it's really simple. `Inside Working Hours = No Banner` `Outside Working Hours = Show Banner` Additionally, if an agent replies to a ticket raised outside working hours, the banner will not be displayed again for that ticket. > Note: The logic for the banner to be displayed solely depends on the SLA's configured for the tickets, also including the holiday list of that particular SLA, to read more about how SLA's work, click [here](https://docs.frappe.io/helpdesk/service-level-agreement) Last updated 1 month ago Was this helpful? Submit Thanks! --- # Ticket ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") In Frappe Helpdesk, a Ticket represents a digital record used to manage and track customer support and service requests. These tickets can be created by customers using Portal or by sending an email to the email address specified by admin. Every Ticket has an [SLA](https://docs.frappe.io/helpdesk/service-level-agreement) attached to it which gets updated based on interaction with the customer. This way both the agent and customer are aware of the expectations of ticket resolution![Screenshot 2024-07-17 at 11.52.05 PM](https://docs.frappe.io/files/Screenshot%202024-07-17%20at%2011.52.05%E2%80%AFPM.png) Investigating Ticket -------------------- A ticket takes the subject and description of the issue from the user and assigns default Status, Priority, SLA, and Type to the Ticket. A ticket page has everything an agent needs for investigation such as detailed description, customer information, ETA for First Response to the Customer, and Ticket Resolution. An agent after investigating the ticket, updates these fields accordingly and based on Type and Priority, an appropriate SLA is set Screenshot 2024-07-18 at 12.21.32 AM ------------------------------------ Solving Issue ------------- An agent can solve issues and respond to customers using the [Email](https://docs.frappe.io/helpdesk/email-communication) feature and mark the ticket as resolved. If the customer is satisfied with the solution, he can mark the ticket as closed and give feedback to his liking. If the customer is not satisfied with the solution, he can reopen the ticket by responding to the agent. If the agent has any queries related to the ticket, he can interact with the customer to gather more information. If the need arises agent can assign the ticket to another agent or escalate it to another team and the next eligible agent will be assigned and can take things forward. An agent can use the [Comment](https://docs.frappe.io/helpdesk/comment) feature to document his findings which might be helpful for other agents who might work on this ticket or other similar tickets Last updated 3 months ago Was this helpful? Submit Thanks! --- # Ticket Routing ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") In Frappe Helpdesk, you can automate ticket routing using the Server Script feature. The `Server Script` DocType allows you to write server-side Python code without creating a custom app or deploying anything. Read more about server scripts from [here](https://docs.frappe.io/framework/user/en/desk/scripting/server-script) . 1.Route tickets based on the type of ticket ------------------------------------------- ![](https://docs.frappe.io/files/Screenshot%202025-08-19%20at%2011.16.11%E2%80%AFPM.png) `agent_group` is the name of the field that translates to "Team". if (doc.ticket_type == "Bug"): doc.agent_group = "Frappe Cloud" elif (doc.ticket_type == "Customization"): doc.agent_group = "Billing" else: doc.agent_group = "Product Experts" 2.Route tickets based on the type of email\_account --------------------------------------------------- ![](https://docs.frappe.io/files/Screenshot%202025-08-19%20at%2011.18.41%E2%80%AFPM.png) if (doc.email_account == "Accounting"): doc.agent_group = "L1 Accounting" elif (doc.email_account == "Warehouse"): doc.agent_group = "L2 Warehouse" else: doc.agent_group = "L1" 3.Route tickets based on custom fields -------------------------------------- To add custom fields follow [this](https://docs.frappe.io/helpdesk/field-dependency#-adding-a-custom-field) . After adding custom fields you can write your script like this to route the tickets based on custom fields ![](https://docs.frappe.io/files/Screenshot%202025-08-19%20at%2011.20.27%E2%80%AFPM.png) if (doc.custom_category == "Frappe Cloud"): doc.agent_group = "Frappe Cloud" elif (doc.custom_category == "Accounting"): doc.agent_group = "Billing" else: doc.agent_group = "Product Experts" Last updated 1 month ago Was this helpful? Submit Thanks! --- # Email Notifications ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") Some emails are sent by Helpdesk based on the activities carried out by the users. Currently, there are 4 kinds of emails: * Share Feedback * Acknowledgement * Reply From Contact * Reply From Agent To customize the content and the related options associated with each kind of email, you can use the 'Email Notifications' tab of the settings view. ![email notification list](https://docs.frappe.io/files/email-notification-listb47594.png) Share Feedback -------------- This email is sent to the user who has raised the ticket after the ticket is closed or resolved. The purpose of the email is to get feedback on the support experience. This **only works** for **tickets** raised via **Email**, as we already have provision to get feedback for the tickets raised via customer portal. If **feedback** already **exists** for the ticket, the **email** will **not** be **sent**. The available customizations are highlighted in the image below. ![share feedback customizations](https://docs.frappe.io/files/share-feedbackc4e5ff.png) ### Available variables (share feedback) The content field supports Jinja templates. The dynamic variables that can be used with the template are listed below: * `url`: `str` The url of the feedback form * `doc`: `HDTicket` The support ticket document. All fields associated with the `HDTicket` [doctype](https://docs.frappe.io/framework/user/en/basics/doctypes) are available. Acknowledgement --------------- This email is sent to the user right after creating an email ticket. The purpose of the email is to let the user know that a support ticket was created because of the sent email. The available customizations are highlighted in the image below. ![acknowledgement customizations](https://docs.frappe.io/files/acknowledgement.png) ### Available variables (acknowledgement) The content field supports Jinja templates. The dynamic variables that can be used with the template are listed below: * `doc`: `HDTicket` The support ticket document. All fields associated with the `HDTicket` [doctype](https://docs.frappe.io/framework/user/en/basics/doctypes) are available. Reply From Contact ------------------ This email is sent to all of the assigned agents after a reply from one of the contacts. The purpose of this email is to let all of the assigned agents know that a contact has replied. The available customizations are highlighted in the image below. ![reply from contact customizations](https://docs.frappe.io/files/reply-from-contact.png) > The email content is used only for tickets raised via Portal. ### Available variables (reply from contact) The content field supports Jinja templates. The dynamic variables that can be used with the template are listed below: * `ticket_url`: `str` The url of the support ticket * `doc`: `HDTicket` The support ticket document. All fields associated with the `HDTicket` [doctype](https://docs.frappe.io/framework/user/en/basics/doctypes) are available. Reply From Agent ---------------- This email is sent to all of the recipients associated with an agent reply. The purpose of this email is to let the recipients know that an agent has sent a message. The available customizations are highlighted in the image below. ![reply from agent customizations](https://docs.frappe.io/files/reply-from-agent.png) > The email content is used only for tickets raised via Portal. ### Available variables (reply from agent) The content field supports Jinja templates. The dynamic variables that can be used with the template are listed below: * `message`: `str` The content of the reply * `ticket_url`: `str` The url of the ticket on Customer portal * `doc`: `HDTicket` The support ticket document. All fields associated with the `HDTicket` [doctype](https://docs.frappe.io/framework/user/en/basics/doctypes) are available. Last updated 1 month ago Was this helpful? Submit Thanks! --- # Party ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/books.png) ### Books [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) _Party_ is a term used in Frappe Books for any entity to whom a Sale or from whom a Purchase is made. Types of Party -------------- A Party is classified by their Role it's used for. | # | Role | Name | Invoice | Navigation | | --- | --- | --- | --- | --- | | 1 | Customer | Customer | Sales Invoices | `Sales > Customers` | | 2 | Supplier | Supplier | Purchase Invoices | `Purchases > Suppliers` | | 3 | Both | Party | Sales and Purchase Invoices | `Common > Party` | ::: warning Usage Make sure that you create the Party under the correct Navigation as this cannot be changed after creation. ::: Party Fields ------------ 1. Party Image: an image to identify the Party by. 2. Party Name: a name to identify the Party by, each Party should have a unique name. 3. Email: the Party's email address that may be displayed when printing the invoice. 4. Phone: the Party's phone number that may be displayed when printing the invoice. 5. Address: the Party's address that may be displayed when printing the invoice. 6. Default Account: default account that may be credited or debited when a transaction involving the part is made. 7. Currency: the currency in which to create the invoice for the Party. 8. Role: the role of the Party, whether they are a Customer, Supplier or Both. Recent Invoices --------------- The Party Quick Edit Form has a Recent Invoices widget. This shows the last three invoices made for a Party. [![Recent Invoices Widget](https://github.com/frappe/books_docs/raw/master/docs/entries/images/recent-invoices.png)](https://github.com/frappe/books_docs/blob/master/docs/entries/images/recent-invoices.png) Each row shows the following information * Invoice Name * Invoice Status * Date * Paid Amount * Outstanding Amount Clicking on a row will take you to the Invoice from where [Payments can be made](https://github.com/frappe/books_docs/blob/master/transactions/payments#making-payments-from-invoices) . Last updated 2 months ago Was this helpful? Submit Thanks! --- # Web Form ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") Web Forms in Frappe CRM let you collect leads directly from your website without writing a single line of code. Follow these simple steps to create one: ![](https://docs.frappe.io/files/Screenshot%202025-03-20%20at%204.50.28%E2%80%AFPM.png) 1. **Switch to Desk:** First, switch to the desk view by clicking the profile button in the top left corner and selecting Apps > Desk. ![](https://docs.frappe.io/files/Screenshot%202025-03-20%20at%204.29.35%20PM.png) 2. **Create Web form:** * Search for Web Form List in the search bar. * Click on the "Add Web Form" button. * Fill in the basic details: * Title: Give your form a meaningful title (like "Lead Capture Form"). * Route: Set the URL path for the form (e.g., /lead-capture). * DocType: Select CRM Lead as the DocType since you’re capturing leads. * Customize your form fields: * Click on Get Fields to automatically fetch the fields from the CRM Lead DocType. * You can also manually add more fields if needed or customize the existing ones. * Adjust labels, set mandatory fields, and add default values as required. * Make your Web Form live on your website by clicking the "Publish" button. * The URL of your newly created Web Form will be available in the sidebar. Click on "See on Website" link to access your Web Form. ![](https://docs.frappe.io/files/Screenshot%202025-03-20%20at%204.52.43%E2%80%AFPM.png) > Note: You can also directly create deals via web form by setting the doctype as "CRM Deal" instead. For more customization in Web Form, refer [this docs](https://docs.frappe.io/framework/v14/user/en/web-form) . That’s it! You’ve now got a live Web Form capturing leads directly into Frappe CRM. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Student Leave Application ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **Student Leave Application is a formal document to keep a track of leaves for a student.** To access Student Leave Application list, go to: > Home > Education > Attendance > Student Leave Application 1 How to create a Student Leave Application ------------------------------------------- 1. Go to the Student Leave Application list, and click on New. 2. Select the Student. 3. Set the 'From Date' and 'To Date' fields for specifying the period. 4. Marking Attendance for the Leave Application is governed by the 'Attendance Based On' field. In ERPNext, Student Attendance can be marked in two ways: **Course Schedule**: If attendance is taken for every lecture (in colleges/universities), then the leave application can be created for that particular course schedule slot. **Student Group**: If attendance is taken for the entire day then student group (class/division) is used to mark attendance so that leave is calculated for the entire day 5. Based on the Attendance field, select the Student Group or Course Schedule. Optionally enter the reason. 6. In case the student is not attending the institute to participate or represent the institute in any event, he/she can be marked as "Present" from the Leave Application itself by checking _Mark as Present_. 7. Save. The 'Total Leave Days' will be calculated and set in the document after excluding the holidays which are part of your default [Holiday List](https://docs.frappe.io/human-resources/holiday-list) . ![Screenshot 2024-05-23 at 6.23.14 PM](https://docs.frappe.io/files/Screenshot%202024-05-23%20at%206.23.14%20PM.png) ### 1.2 On Submission of Student Leave Application Once the Student Leave Application is submitted, a Student Attendance record is automatically created with status as 'Leave'. If _Mark as Present_ is checked, then the status of the Attendance Record is set as 'Present'. The Leave Application is linked to this Student Attendance document for reference. ![Screenshot 2024-05-23 at 6.23.27 PM](https://docs.frappe.io/files/Screenshot%202024-05-23%20at%206.23.27%20PM.png) If any of the dates within the leave period is a holiday, then, Student Attendance record creation is skipped for that date. ### 1.3 On Cancellation of Student Leave Application On cancellation of the Student Leave Application, the linked Student Attendance record is also cancelled automatically. 2. Tutorial Video for Student Leave Application * * * 3. Related Topics 4. [Student Attendance](https://docs.frappe.io/education/student-attendance) . Last updated 3 weeks ago Was this helpful? Submit Thanks! --- # Table Restrictions ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Row-Level Security (Table Restrictions) --------------------------------------- ### What are Table Restrictions? Table restrictions are **filter expressions** that automatically limit which rows users can see in a table. This is the key feature for implementing "users can only see their own data" scenarios. ### How to Set Table Restrictions ![india-team](https://docs.frappe.io/files/SCR-20251027-dzbt.png) 1. Click on a team → **Access** tab 2. Select a data source to expand it 3. Check the tables you want to grant access to 4. Click **"Set Filters"** next to a table name 5. Enter a filter expression 6. Click **Done** to save ### Filter Expression Syntax Expressions use Python-like syntax with table column names: # Basic equality column_name == 'value' # Multiple conditions region == 'West' AND active == 1 # Comparisons revenue > 100000 # String operations customer_name.startswith('A') # NULL checks manager IS NOT NULL * * * Last updated 3 months ago Was this helpful? Submit Thanks! --- # Teams ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) ### What are Teams? Teams are groups of users who share access to the same resources. Every Insights installation has an **Admin** team with full access. ### Creating Teams 1. Go to **Settings** → **Permissions** 2. Click **"Create Team"** 3. Enter team name (e.g., "Sales Team West", "Finance Team") 4. Click **Create** ### Managing Team Members ![manage-team](https://docs.frappe.io/files/SCR-20251027-dzha.png) 1. Click on a team from the list 2. Go to the **Members** tab 3. Add/remove users using email addresses **Example:** Team: Sales Team West Members: - john@company.com - jane@company.com - robert@company.com * * * Last updated 3 months ago Was this helpful? Submit Thanks! --- # Pinned View ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") Pinned View is a handy feature that allows you to save frequently used views and access them quickly from the sidebar. What are Pinned Views? ---------------------- Pinned Views are essentially saved views that you've designated for easy access. This means you can create custom filters and configurations for your data, save them as views, and then pin them to the sidebar for instant retrieval. How to Pin a View ----------------- 1. **Navigate to the list view:** Locate the list view from the sidebar (e.g., a list of leads, deals or contacts) you want to create a pinned view for. 2. **Create or Select a Saved View:** If you haven't already, use the filters and options available to create a custom view of your data. You can then save this view for future reference. Alternatively, select an existing saved view that you use frequently from the drop-down in the list view header towards the left. 3. **Access the Pin Option:** Click on the three-dot menu (...) associated with the saved view. 4. **Pin the View:** From the menu that appears, select "Pin View." Managing Pinned Views --------------------- Once you've pinned a view, it will be displayed in a dedicated "Pinned Views" section within the sidebar. You can access this view with a single click whenever needed. Unpinning Views: ---------------- To remove a view from the pinned section and revert it to a regular saved view, follow the same steps mentioned above. Access the three-dot menu for the pinned view and select "Unpin View." Last updated 2 months ago Was this helpful? Submit Thanks! --- # Customer ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") In Frappe Helpdesk, a customer represents an organization or individual who receives support services. Managing customer information efficiently is crucial for delivering high-quality support and maintaining strong relationships. The customer record encompasses all relevant data, including contact details, support history, and any associated tickets. Key Features of Customers in Frappe Helpdesk -------------------------------------------- * **Profile Information**: Stores essential details such as customer name, address, email, phone number, and company affiliation. This helps in identifying and contacting the customer easily. * **Linked Contacts**: Associates multiple contacts with a single customer, allowing support agents to manage communications with various representatives from the same organization. * **Support Tickets**: Tracks all support tickets linked to the customer, providing a comprehensive view of their support history and current issues. This helps in understanding the customer’s past and ongoing problems. * **Customer Portal**: Provides customers with access to a dedicated portal where they can create new tickets, track the status of existing ones, and access the Knowledge Base for self-help solutions. * **Notes and Attachments**: Enables adding notes and attachments to customer records, facilitating detailed documentation, and sharing of important files relevant to the customer’s issues. Use Cases for Customers in Frappe Helpdesk ------------------------------------------ * **Issue Tracking**: Centralizes all issues reported by the customer, enabling efficient tracking and resolution. * **Communication Management**: Facilitates organized and streamlined communication with the customer through linked contacts and historical interaction data. * **Service Level Agreements (SLAs)**: Monitors and manages SLAs by tracking the response and resolution times for tickets associated with the customer. * **Customer Relationship Management**: Helps in maintaining and nurturing relationships by keeping detailed records of interactions, feedback, and preferences. Benefits of Managing Customers ------------------------------ * **Enhanced Support Efficiency**: Quick access to customer information and history helps in resolving issues faster and more accurately. * **Personalized Service**: Understanding customer history and preferences allows support agents to provide tailored and more effective solutions. * **Improved Customer Satisfaction**: Efficient issue resolution and personalized service lead to higher levels of customer satisfaction and loyalty. * **Holistic View**: Provides a 360-degree view of the customer, encompassing all interactions, issues, and relevant data, which is valuable for strategic decision-making. By effectively managing customers within Frappe Helpdesk, support teams can deliver superior service, maintain strong customer relationships, and ensure a seamless and efficient support experience. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Loyalty Program ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/books.png) ### Books [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Loyalty Program is used to reward customers with points for their purchases, which can then be redeemed on future purchases. Enabling Loyalty Program ------------------------ To enable Loyalty Program you will have to first check the Enable Loyalty Program. To > **Setup > Settings > General Tab.** ![Enable Inventory](https://raw.githubusercontent.com/frappe/books_docs/00c35515b24bd93d6d4c3ab24602f549e6b23c66/docs/transactions/images/enable-loyalty-program.png) Once that is done you will have to restart Frappe Books to see the Loyalty Program in the sidebar. > Note: Loyalty Program cannot be disabled once it has been enabled. Creating Loyalty Program ------------------------ To create a Loyalty Program first navigate to the Loyalty Program page > **Sales > Loyalty Program** Then click on the blue `+` button to open the Loyalty Program form. ![Sales Invoice Form](https://raw.githubusercontent.com/frappe/books_docs/00c35515b24bd93d6d4c3ab24602f549e6b23c66/docs/transactions/images/loyalty-program.png) 1. Enter a unique name for the Loyalty Program. 2. Add the From and To Date for program's validity period. 3. Ensure the **IsEnabled** checkbox is checked. This will mark the program active. 4. Collection Rules: * **Tier name:** To differentiate between different levels of rewards. * **Collection Factor:** How much amount needs to be spent to gain 1 Loyalty Point. * **Minimum Amount:** Minimum amount to be spent to qualify into a tier. 5. Set an **Expense Account** from where you'll offer the benefits. This is useful to track the benefits offered separately. 6. Set the number of days in the Expiry Duration field after which the loyalty points will expire. Loyalty Program in Customer --------------------------- Set a Loyalty Program in the Customer to assign a Loyalty Program. ![Sales Invoice Form](https://raw.githubusercontent.com/frappe/books_docs/00c35515b24bd93d6d4c3ab24602f549e6b23c66/docs/transactions/images/choose-loyalty-program.png) Loyalty points earned can be viewed in the Customer. ![Sales Invoice Form](https://raw.githubusercontent.com/frappe/books_docs/00c35515b24bd93d6d4c3ab24602f549e6b23c66/docs/transactions/images/loyalty-points.png) Loyalty Program Functionality ----------------------------- ### Earning Points 1. Assign this Loyalty Program to a Customer. 2. Create a new Sales Invoice for the Customer to whom you have assigned Loyalty Program. 3. For this example, an invoice is created with a grand total of 3,000 INR. According to the Loyalty Program, if a customer spends a minimum of 2,000 INR, they are eligible to earn loyalty points. For every 300 INR spent, the customer will receive 1 loyalty point. Therefore, with a total spend of 3,000 INR, the customer earns 10 loyalty points. 4. Upon submission of the invoice, a Loyalty Point Entry will be created for this invoice. This acts as a log to give an overview of which Customer earned how many points against which Sales Invoice. ![Sales Invoice Form](https://raw.githubusercontent.com/frappe/books_docs/00c35515b24bd93d6d4c3ab24602f549e6b23c66/docs/transactions/images/loyalty-point-entry.png) ### Redeeming Points 1. When creating an invoice for a Customer who has loyalty points, go to the Loyalty Point Redemption section and enable the checkbox **Redeem Loyalty Points**. 2. The fields for **Loyalty Points** will become visible under this section. You can fill in the points to redeem. 3. The total amount of the invoice will be adjusted based on the redeemed points, and you will only need to pay the remaining balance after the points have been applied. ![Sales Invoice Form](https://raw.githubusercontent.com/frappe/books_docs/00c35515b24bd93d6d4c3ab24602f549e6b23c66/docs/transactions/images/redeem-loyalty-points.png) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Discount Accounting ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/books.png) ### Books [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Discount is a deduction that is applied to the cost of an item. Frappe Books supports applying discount to an invoice on an item-wise basis. Enable Discount Accounting -------------------------- To enable discount accounting, first navigate to General Settings: `Setup > Settings > General` Then check the Enable Discount Accounting checkbox. [![Enable Discount Accounting](https://github.com/frappe/books_docs/raw/master/docs/transactions/images/enable-discount-accounting.png)](https://github.com/frappe/books_docs/blob/master/docs/transactions/images/enable-discount-accounting.png) ::: warning Once Discount Accounting is enabled, it cannot be disabled. ::: After that set the account that will be used for discounts [![Set Discount Account](https://github.com/frappe/books_docs/raw/master/docs/transactions/images/set-discount-account.png)](https://github.com/frappe/books_docs/blob/master/docs/transactions/images/set-discount-account.png) ::: info The discount account is an Indirect Income account, you can create it using the [Chart of Accounts](https://github.com/frappe/books_docs/blob/master/miscellaneous/chart-of-accounts) ::: Setting Discount Amount ----------------------- Discount is applied on an item-wise basis. After you have enabled discount click on the edit button on the item row to set the discount. [![Setting the Discount](https://github.com/frappe/books_docs/raw/master/docs/transactions/images/set-discount.png)](https://github.com/frappe/books_docs/blob/master/docs/transactions/images/set-discount.png) This will open Quick Edit Form to edit the invoice item values. Discount can be set in two ways: 1. Setting a Discount Percent (default) 2. Setting a Discount Amount To set the Discount Amount click on Set Discount Amount. Once the Discount Amount or Percent is set the Discounted Amount will be shown. ::: tip Setting Discounted Amount You can directly set the Discounted Amount, Frappe Books will automatically calculate the item rate. ::: Discount After Tax ------------------ By default the Discount is applied before the Tax is calculated. To apply the Discount after the Tax, select the Discount After Tax checkbox after opening the settings for the Invoice. [![Discount after Tax](https://github.com/frappe/books_docs/raw/master/docs/transactions/images/discount-after-tax.png)](https://github.com/frappe/books_docs/blob/master/docs/transactions/images/discount-after-tax.png) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Course ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **A course can be considered as a subject or a part of an educational program which is to be taught for a term.** For example, if for a particular term, Economics Major is a program taught in the institute, then Mathematical Methods for Economics would be a Course covered under the program. ![Course](https://docs.frappe.io/files/education-program-workflow.png) A course will have a set of [topics](https://docs.frappe.io/education/topic) that are to be covered under it's scope. To access the course list, go to: > Home > Education > Masters > Course 1\. Prerequisites ----------------- Before creating a course, it is advised to create: 1. Department 2. Topics 2\. How to create a course -------------------------- 1. Go to Course List and click on New. 2. Enter the Course Name. 3. Select the Department under which this course is being made. 4. Add the Topics. You can also create the topics from here itself. 5. Add the Description for the course. 6. Save. ![Course](https://docs.frappe.io/files/education-course-1.png) 3\. Features ------------ ### 3.1. Assessment For every new Course a User can have a New Assessment setting where in they can define the criteria based on which the students will be assessed for the course. 1. **Default Grading Scale**: A default [Grading Scale](https://docs.frappe.io/education/grading_scale) can be set up for the course, wherein you can define what would be the achievement level of the student based on the scores they earn for a course. 2. **Assessment Criteria**: You can define the [Assessment Criteria](https://docs.frappe.io/education/assessment_criteria) for this course wherein based on the different parameters of assessment, the student's understanding of the subject would be assessed. ![Course](https://docs.frappe.io/files/education-course-2.png) 4\. More Actions ---------------- Once the course has been created, the following documents can be created from the course, which will later be linked to the course. 1. [Program](https://docs.frappe.io/education/program) 2. [Student Group](https://docs.frappe.io/education/student-group) 3. [Course Schedule](https://docs.frappe.io/education/course-schedule) 4. [Assessment Plan](https://docs.frappe.io/education/assessment_plan) ![Course](https://docs.frappe.io/files/education-course-3.png) 5\. Video Tutorial for Course ----------------------------- Last updated 2 months ago Was this helpful? Submit Thanks! --- # Organizational Chart ESC Type to search documentation ↵ to select ↑↓ to navigate 0 results ![](https://docs.frappe.io/files/hr.png) ### Frappe HR [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Learn](https://school.frappe.io/lms/courses) [Discuss](https://discuss.frappe.io/c/hr/22) [Website](https://frappe.io/hr) [](https://github.com/frappe/hrms "Github") **An organizational chart shows the organizational structure by depicting connections between different employees with their designation, image, and name. In large organizations where it's difficult to remember names, people can interact with the org chart and know the hierarchy through faces and other info.** To access Employee Grade, go to: > Home > Human Resources > Employee > Organizational Chart * The org chart is created based on the "Reports To" field in Employee master. * The employees that don't report to anyone are shown in the first level. * The chart expands horizontally on the desktop view and vertically on mobile. * Each node has details like the Employee Name, Image, Designation, and the total number of connections. * The connections are the total number of descendants a particular node has till the end of the hierarchy. * The edit button in every node navigates to the Employee Master. * As you navigate through the chart, the active hierarchy is highlighted. * You can use the Company filter to check the org chart for individual companies. ![Org Chart](https://frappehr.com/files/org-chart.png) ![Org Chart Mobile](https://frappehr.com/files/org-chart-mobile-2.png) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Teams ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083735.png) ### Drive [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedrive) [Website](https://frappe.io/products/drive) [](https://github.com/frappe/drive "Github") The reason Drive is great for businesses is because of the teams feature. You can have as many te ### Create and Manage You can create and edit teams by going to _Settings > Teams_ along with managing or inviting members. There are three types of users: 1. normal users, 2. _managers_. By default, only the creator of a team is a manager. You can add other managers, 3. _guests_, who only have read access Last updated 3 months ago Was this helpful? Submit Thanks! --- # Host Locally ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083735.png) ### Drive [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedrive) [Website](https://frappe.io/products/drive) [](https://github.com/frappe/drive "Github") ### Docker (_recommended_) This is the quickest way to set up Frappe Drive and take it for a test _drive_. The Frappe Framework is multi-tenant and supports multiple apps by default. This `docker compose` is just a standalone version with Frappe Drive pre-installed. Just put it behind your desired reverse-proxy if needed, and you're good to go. If you wish to use multiple Frappe apps or need multi-tenancy. I suggest moving over to our production ready self-hosted workflow, or join us on Frappe Cloud to get first party support and hassle-free hosting. 1. Setup folder: mkdir frappe-drive && cd frappe-drive 2. Download the required files (Docker Compose file and Frappe Bench setup script): wget -O docker-compose.yml https://raw.githubusercontent.com/frappe/drive/main/docker/docker-compose.yml wget -O init.sh https://raw.githubusercontent.com/frappe/drive/main/docker/init.sh 3. Run the container! docker compose up -d ### Using Bench This is the bare metal way to setup Drive. 1. [Install Bench.](https://frappeframework.com/docs/user/en/installation) 2. Install Frappe Drive using `bench get-app drive`. 3. Create your site - `bench new-site site.name`... 4. ... and install the app: `bench install-app drive`. 5. Install some Drive specific system packages: _Ubuntu/Debian (apt based distros)_: sudo apt install ffmpeg libmagic _macOS_: brew install libmagic ffmpeg 6. Start up the bench if you haven't already - `bench start`. 7. Drive is now accessible at `localhost:8000` or `sitename:8000`. Last updated 3 months ago Was this helpful? Submit Thanks! --- # New Wiki Page ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083725.png) ### Wiki [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) A new Wiki Page can be created simply by clicking the Edit Sidebar button on the left sidebar and then clicking on the + icon near the desired Wiki Group we want the Wiki Page to be in. Once an empty editor is opened you can add the title and content. ![](https://docs.frappe.io/files/New%20wiki%20page.gif) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Wiki Space ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083725.png) ### Wiki [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Wiki v2 introduced a concept called Wiki Space, which are basically isolated instances of Wiki. Creating Wiki Space ------------------- To create a new Wiki Space 1. In desk click on Add Wiki Space 2. Type in the Wiki Space route 3. Optionally add Wiki Pages (that aren't associated with other Wiki Spaces) ![](https://wiki.frappe.cloud/files/4op3AHQ.gif) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Sharing ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083735.png) ### Drive [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedrive) [Website](https://frappe.io/products/drive) [](https://github.com/frappe/drive "Github") The most important part of any cloud is access. Frappe Drive has three types of permissions: * View - allowing people to view, download, comment, and share the file * Edit - allowing people to edit a file or document * Upload - allows people to upload files to a folder By _default_: * In the _Home_ folder, only you have access to the files and folders. You can share them with anyone, choosing the access you want to give. * In a _team_, all members have view and upload access to folders and files - they don't have write access unless you explicitly give them. ### Folders When a folder has a specific share settings, all the items inside that folder (recursively) have the same access **until** the permissions of a folder or file inside this folder is overridden. For example: Folder A -> file.txt -> file2.txt -> Folder C -> file3.jpeg Folder B -> file4.doc At first, default permissions (private if in the "Home" view, read + comment + write for all team members if in the "Team" view). Then, if I share `Folder A` with a specific user with View access - then all the items within (including the "nested" file `file3.jpeg`) are _also_ shared with that user with the View Access. _However_, if I make `Folder C` private again, then that user will be able to see neither `Folder C` nor any of its items (`file3.jpeg`, in this case). Put simply, access "bubbles" downwards. When a user tries to access an item, Drive traverses up the path checking for any sharing settings configured. If it finds one, it stops and uses that. If it doesn't, it implements default permissions. ### Sharing You can share with specific users, specific teams, or the world: ![](https://docs.frappe.io/files/Permissions%20Frappe%20Build.png) If you share an item publicly, **anyone can access the file**. They will not need to login. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Files ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083735.png) ### Drive [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedrive) [Website](https://frappe.io/products/drive) [](https://github.com/frappe/drive "Github") The only way to currently add files to Frappe Drive is through the client. Either by dragging the files/folder onto it or by selecting the file upload option. > Frappe Drive saves file paths in the database, so its imperative that you do not modify contents of `/private/files/$user_hash_folder` or the `file_path` in the database. This can lead to lost files and corrupted data ### Special files **Links**: these are not files at all! They are actually links to some external website. This feature is useful in cases of having a Google Sheeets, for example, or a file hosted on some other cloud solution. That said, they are treated like files in every way - you can control access, favourite, or do anything you like. You can add links using the dialog - or just copy a link and Drive will detect it for you. **Documents**: this is a beta product - Frappe Writer. It is a Google Docs equivalent. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Microsoft Documents ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083735.png) ### Drive [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedrive) [Website](https://frappe.io/products/drive) [](https://github.com/frappe/drive "Github") It's simple to get previews on Microsoft documents like Word, Excel, or PowerPoint files! Ask your site administrator to go to `/drive/disk-settings` and set the `JWT Token` to anything they like. **This should not be released**, as it can give access to your files. We do not currently support editing files (OnlyOffice integration) - you can upvote this feature request [here](https://github.com/frappe/drive/issues/343) . Last updated 3 months ago Was this helpful? Submit Thanks! --- # Previews ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083735.png) ### Drive [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedrive) [Website](https://frappe.io/products/drive) [](https://github.com/frappe/drive "Github") For most common file types, Frappe Drive allows you to preview it in the browser itself. Here is a (non-exhaustive) list of file types we support. Want something added? Please [get in touch](mailto:safwan@frappe.io) or open [an issue](https://docs.frappe.io/drive/github.com/frappe/drive/issues/new) ! **Office** * `application/pdf` * `application/vnd.openxmlformats-officedocument.wordprocessingml.document` * `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` **Images** * `image/png` * `image/jpg` * `image/gif` * `image/svg` * `image/webp` **Videos** Frappe Drive lacks any transcoding pipeline for now so only H264, H265_, and AV1_ codecs are supported for video streaming. * `video/mp4` * `video/webm` * `video/quicktime` **Text** Generally most text files should preview but this is ever expanding so we might miss some. * Most mime types with starting with `text/` * Support for this codec is [platform dependant](https://caniuse.com/hevc) . For example: H265 only works on MacOS and Windows running Chrome (Safari also supports it). Last updated 3 months ago Was this helpful? Submit Thanks! --- # Storage ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083735.png) ### Drive [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedrive) [Website](https://frappe.io/products/drive) [](https://github.com/frappe/drive "Github") A team has a specific total storage limit, and a per-user limit. This can be configured in Desk (in the `Drive Team` DocType). Storage settings ---------------- Frappe Drive offers a comprehensive breakdown of your storage. You can see both the team's and your personal files'. We also highlight the files contributing most to your storage, if you wanted to cut down on your cloud storage. ![](https://docs.frappe.io/files/Storage.png) Adding Storage -------------- ### Frappe Cloud On Frappe Cloud your storage limit is automatically handled by the plan you select and the corresponding disk space that plan has. Additionally, you can also use a disk storage add-on to increase your disk size. Self-hosted ----------- You can set your storage limit inside your `Drive Team` DocType. Under the hood it's simply updating the `site_config`. Last updated 3 months ago Was this helpful? Submit Thanks! --- # New Wiki Group ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083725.png) ### Wiki [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Wiki Groups can be added simply by clicking on the the Edit Sidebar button on the left sidebar and then clicking on the Add Group button followed by adding the Title of the sidebar. You will need to add or move a page to persist the page after save. > Groups will be saved after an interval post changes ![](https://wiki.frappe.cloud/files/Screen-Recording-2023-05-09-at-4.gif) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Check Page Revisions ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083725.png) ### Wiki [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) You can check revisions by clicking on the Kebab (3-dot) menu button and select Revisions. ![](https://wiki.frappe.cloud/files/Screen-Recording-2023-05-09-at-4(3).gif) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Approving Changes ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083725.png) ### Wiki [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Users that do not have System Manager roles need approval to merge their patches. A Patch can be approved from the desk. ![](https://wiki.frappe.cloud/files/SDWcRZn.gif) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Wiki Migration Guide ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083725.png) ### Wiki [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Sidebar Migration ----------------- Wiki v2 uses a simpler sidebar structure with a parent (Wiki Group) and child (Wiki Page) structure, unlike the earlier version which allows unlimited nesting. Every Wiki Group (nested or not) will be un-nested after migration. Due to the changes in the data structure we need to ensure some things for smooth migration. 1. Make sure there are no Wiki Sidebars with duplicate names (or every item will be under those Wiki Groups will be grouped under a single Wiki Group) 2. Make sure that title fields of `Wiki Sidebar` are not empty Last updated 3 months ago Was this helpful? Submit Thanks! --- # Wiki Settings ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083725.png) ### Wiki [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Wiki Settings allow you to change generic configurations of the wiki app. General ------- ![](https://docs.frappe.io/files/Screenshot%202025-03-06%20at%204.11.59%E2%80%AFPM.png) 1. **Light Mode Logo**: The default logo that is visible on the top left of each wiki page 2. **Add Dark Mode:** Add dark mode theming to Wiki 3. **Dark Mode Logo:** The logo that is displayed on dark mode instead of the default logo 4. **Default Wiki Space:** The default Wiki Space you will be redirected 5. **Enable Table of Content:** Show or hide the Table of Content displayed on right side 6. **Disable guest access:** Make your wiki only accessible by logged in/authenticated users Navbar ------ ![](https://docs.frappe.io/files/Screenshot%202025-03-06%20at%204.14.17%E2%80%AFPM.png) 1. **Navbar Items**: Add Navbar Items similar to how it is in Website module 2. **App switcher list:** Add items in top left dropdown menu list 3. **Add Search Bar**: Add a Redisearch powered search bar to the navbar 4. **Use Redisearch for Search:** Use Redis Search for searching wiki pages Feedback -------- ![](https://docs.frappe.io/files/Screenshot%202025-03-06%20at%204.15.47%E2%80%AFPM.png) 1. **Enable Feedback:** Allow users to submit feedback 2. **JavaScript**: Allows you to add Custom JS that would be run on each Wiki Page Last updated 3 months ago Was this helpful? Submit Thanks! --- # Overview ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) What are Data Sources? ---------------------- Data sources are your database connections. They act as a bridge between Insights and your database, allowing you to analyze your data seamlessly. Once connected, you can: * Browse your tables * Create queries to analyze data * Build charts and dashboards * Share insights with your team Supported Databases and Data Sources: ------------------------------------- * Site DB (Auto-configured) * CSV / Excel Upload * MariaDB / MySQL * PostgreSQL * DuckDB * ClickHouse Not sure which database you use? Ask your IT team or database administrator. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Create Your First Dashboard ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) In this guide, we'll create a comprehensive sales performance dashboard using the Demo Data that comes with Frappe Insights. We'll walk through creating a query, building multiple charts, and combining them into an interactive dashboard. 1\. Create a Workbook --------------------- 1. On the Workbook list page, click **\+ New Workbook** 2. Name it "Sales Performance" 3. Click on "Query Builder" ![New Workbook](https://docs.frappe.io/files/new-workbook.png) 2\. Create the Base Query ------------------------- Let's create a query that combines data from multiple tables. When the query builder opens, select `orders` as your source table. Add the following operations in sequence: ### Join Tables 1. Click **Add Operation** → **Join Table** * Select `orderitems` * Join Type: Left Join * Join On: order\_id = order\_id * Select columns: price, freight\_value, product\_id 2. Click **Add Operation** → **Join Table** * Select `products` * Join Type: Left Join * Join On: product\_id = product\_id * Select columns: product\_category\_name 3. Click **Add Operation** → **Join Table** * Select `customers` * Join Type: Left Join * Join On: customer\_id = customer\_id * Select columns: customer\_state ### Filter and Select 4. Click **Add Operation** → **Filter Rows** * Column: order\_status * Condition: Equals * Value: "delivered" 5. Click **Add Operation** → **Choose Columns** * order\_id * order\_item\_id * order\_status * order\_purchase\_timestamp * price * freight\_value * product\_category\_name * customer\_state 6. Name your query "Sales Data" ![Sales Data Query](https://docs.frappe.io/files/sales-data-query.png) 3\. Create Charts ----------------- Now let's create various charts to visualize our sales data: ### Sales Overview * Click **\+ New Chart** * Chart Type: Number * Title: "Sales Overview" * In the Columns section: 1. Click **\+ Add Column** * Function: Count Distinct * Column: order\_id * Click the gear icon to set label as "Total Orders" 2. Click **\+ Add Column** * Function: Sum * Column: price * Click the gear icon to set label as "Total Revenue" 3. Click **\+ Add Column** * Function: Average * Column: price * Click the gear icon to set label as "Average Order Value" * Select "order\_purchase\_timestamp" as the Date Column * Sort: order\_purchase\_timestamp (Ascending) * Enable "Show Comparison" * Enable "Show Sparkline" ![Sales Overview](https://docs.frappe.io/files/sales-overview-number-chart.png) ### Revenue by Month * Click **\+ New Chart** * Chart Type: Line * Title: "Monthly Revenue" * X-axis: `order_purchase_timestamp` * Y-axis: * Function: Sum of * Column: price * Click the gear icon to set label as "Revenue" ![Monthly Revenue](https://docs.frappe.io/files/monthly-revenue-line-chart.png) ### Revenue by Product Category * Click **\+ New Chart** * Chart Type: Row * Title: "Revenue by Category" * X-axis: product\_category\_name * Y-axis: * Function: Sum of * Column: price * Click the gear icon to set label as "Revenue" * Sort: Revenue (Descending) ![Revenue by Category](https://docs.frappe.io/files/top-categories-row-chart.png) ### Quaterly Revenue by State * Click **\+ New Chart** * Chart Type: Table * Title: "Quarterly Revenue by State" * Rows: * Column: order\_purchase\_timestamp * Click the gear icon to set label as "Quarter" & granularity as "Quarter" * Columns: * Column: customer\_state * Click the gear icon to set label as "State" * Values: * Function: Sum of * Column: price * Click the gear icon to set label as "Revenue" * Sort: Quarter (Ascending) * Enable "Show Color Scale" ![Quaterly Revenue by State](https://docs.frappe.io/files/quarterly-state-performance-table-chart.png) 4\. Build the Dashboard ----------------------- Let's combine all charts into an interactive dashboard: 1. Click **\+ New Dashboard** 2. Set title to "Sales Performance Dashboard" 3. Drag and drop the charts from the left panel to the dashboard: * First row: Add "Sales Overview" chart * Second row: Add "Monthly Revenue" & "Revenue by Category" charts * Third row: Add "Quarterly Revenue by State" chart 4. Apply dashboard filters: * Click on the **Filter** button on the top right * Click on **Add Filter** in the filter dialog * Select `product_category_name` as the filter column * Select `health_beauty` as the filter value * Click **Apply Filter** ![Sales Dashboard](https://docs.frappe.io/files/sales-performance-dashboard.png) This sample dashboard gives a complete view of the sales performance, from high-level metrics to detailed breakdowns by category and location. The filters allow you to drill down into specific segments and analyze the data further. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Manage Data Sources ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Managing Data Sources --------------------- View Tables: Click a data source to view tables. ### Refresh Table List: If new tables are added, open the data source → click ... → Refresh Tables ### Edit Connections: * Admins can edit credentials, database name, SSL settings * Regular users can view and query, but not edit ### Organizing Multiple Connections: Use descriptive names, include database type, and specify environment (e.g. “Production Sales PostgreSQL”, “Staging Site DB”). Last updated 3 months ago Was this helpful? Submit Thanks! --- # Add Data Source ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Prerequisites ------------- Before connecting a data source, make sure you have the following information (ask your database admin if needed): Field Description Host Server address (e.g. db.mycompany.com or localhost) Port Connection port (e.g. 3306 for MariaDB, 5432 for PostgreSQL) Database Name The database to connect to Username Login username Password Login password SSL (optional) Whether to use a secure connection > Note: Make sure you have `Insights Admin` role in order to add a database as datasource Quick Start: Adding a Data Source --------------------------------- ### Step 1: Access Data Sources Click Data Sources in the sidebar. Click + Add Data Source. Choose your database type. ### Step 2: Enter Connection Details For example, connecting to MariaDB: Title: A friendly name (e.g. “Production Database”) Host: Server address (localhost, db.mycompany.com, etc.) Port: Usually 3306 for MariaDB (prefilled) Database Name: Exact database name Username / Password: Database credentials Use SSL: Check if required ### Step 3: Add and Test Click Add Data Source once details are entered. Insights will save your connection, load tables, and make them available for querying. ### CSV / Excel Upload Ideal for quick data imports, smaller datasets, or testing Insights without a database. How to Upload: Click + Add Data Source → Upload CSV or Excel Choose or drag-and-drop the file Preview data (check columns and types) Edit table name if needed Click Import Table Supported Formats: * CSV (.csv) * Excel (.xlsx) File size limit: 50MB (check with admin) Tips: First row should be headers Keep column names simple Use consistent date formats Remove empty rows at the end ### Site Database (Auto-Configured) What is this? If you're running Insights on the same site as other Frappe backend apps, it automatically connects to your site's database. This gives you instant access to all your ERPNext, Frappe or custom app data! Features: Auto-configured, always active No credentials needed All DocTypes available as tables Relationship links preconfigured #### Common Issues: ##### Connection refused: Check host and port ##### Access denied: Verify username and password ##### Unknown database: Check spelling Last updated 3 months ago Was this helpful? Submit Thanks! --- # Expressions ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) ### Expressions The expression/formula language in Insights is based on python syntax. The underlying library used for query building is `ibis`, you can check the documentation [here](https://ibis-project.org/tutorials/ibis-for-sql-users) to know more. Following are the list of helper functions that make it easier to write expressions in Insights: #### Aggregate Functions 1. Count * Syntax: `count(column)` * Description: Returns the count of non-null values in the column. * Example: `count(sales)` * Returns: 100 2. Count Distinct * Syntax: `distinct_count(column)` * Description: Returns the count of distinct values in the column. * Example: `distinct_count(customer_id)` * Returns: 50 3. Sum * Syntax: `sum(column)` * Description: Returns the sum of values in the column. * Example: `sum(sales)` * Returns: 10000 4. Average * Syntax: `avg(column)` * Description: Returns the average of values in the column. * Example: `avg(sales)` * Returns: 100 5. Minimum * Syntax: `min(column)` * Description: Returns the minimum value in the column. * Example: `min(sales)` * Returns: 50 6. Maximum * Syntax: `max(column)` * Description: Returns the maximum value in the column. * Example: `max(sales)` * Returns: 200 7. Group Concat * Syntax: `group_concat(column)` * Description: Concatenates the values in the column. * Example: `group_concat(product_name)` * Returns: "Product A, Product B, Product C" 8. Sum if * Syntax: `sum_if(condition, column)` * Description: Returns the sum of values in the column that satisfy the condition. * Example: `sum_if(sales > 1000, sales)` * Returns: 5000 9. Count if * Syntax: `count_if(condition, column)` * Description: Returns the count of values in the column that satisfy the condition. * Example: `count_if(sales > 1000, sales)` * Returns: 5 10. Distinct Count if * Syntax: `distinct_count_if(condition, column)` * Description: Returns the count of distinct values in the column that satisfy the condition. * Example: `distinct_count_if(sales > 1000, customer_id)` * Returns: 3 #### Conditional Functions 1. If Else * Syntax: `if_else(condition, true_value, false_value)` * Description: Returns the true\_value if the condition is true, else returns the false\_value. * Example: `if_else(sales > 1000, "High", "Low")` * Returns: "High" 2. Case * Syntax: `case(condition1, value1, condition2, value2, ..., default_value)` * Description: Returns the value corresponding to the first true condition. If no condition is true, returns the default\_value. * Example: `case(sales > 1000, "High", sales > 500, "Medium", "Low")` * Returns: "High" 3. Coalesce * Syntax: `coalesce(column1, column2, ..., default_value)` * Description: Returns the first non-null value from the columns. If all columns are null, returns the default\_value. * Example: `coalesce(product_name, product_code, "Unknown")` * Returns: "Product A" #### String Functions 1. Lower * Syntax: `lower(column)` * Description: Converts the column values to lowercase. * Example: `lower(product_name)` * Returns: "product a" 2. Upper * Syntax: `upper(column)` * Description: Converts the column values to uppercase. * Example: `upper(product_name)` * Returns: "PRODUCT A" 3. Concat * Syntax: `concat(column1, column2, ..., separator)` * Description: Concatenates the columns with the separator. * Example: `concat(first_name, last_name, " ")` * Returns: "John Doe" 4. Replace * Syntax: `replace(column, old_value, new_value)` * Description: Replaces the old\_value with the new\_value in the column. * Example: `replace(product_name, "A", "B")` * Returns: "Product B" 5. Substring * Syntax: `substring(column, start, length)` * Description: Returns a substring of the column starting from the start index with the specified length. * Example: `substring(product_name, 0, 7)` * Returns: "Product" 6. Contains * Syntax: `contains(column, substring)` * Description: Returns true if the column contains the substring, else false. * Example: `contains(product_name, "Product")` * Returns: True 7. Not Contains * Syntax: `not_contains(column, substring)` * Description: Returns true if the column does not contain the substring, else false. * Example: `not_contains(product_name, "A")` * Returns: False 8. Starts With * Syntax: `starts_with(column, prefix)` * Description: Returns true if the column starts with the prefix, else false. * Example: `starts_with(product_name, "Product")` * Returns: True 9. Ends With * Syntax: `ends_with(column, suffix)` * Description: Returns true if the column ends with the suffix, else false. * Example: `ends_with(product_name, "A")` * Returns: True 10. Length * Syntax: `length(column)` * Description: Returns the length of the column. * Example: `length(product_name)` * Returns: 10 #### Numeric Functions 1. Abs * Syntax: `abs(column)` * Description: Returns the absolute value of the column. * Example: `abs(sales)` * Returns: 100 2. Round * Syntax: `round(column, decimals)` * Description: Rounds the column to the specified number of decimals. * Example: `round(sales, 2)` * Returns: 100.50 3. Floor * Syntax: `floor(column)` * Description: Returns the largest integer less than or equal to the column. * Example: `floor(sales)` * Returns: 100 4. Ceil * Syntax: `ceil(column)` * Description: Returns the smallest integer greater than or equal to the column. * Example: `ceil(sales)` * Returns: 101 #### Date Functions 1. Year * Syntax: `year(column)` * Description: Returns the year part of the date column. * Example: `year(order_date)` * Returns: 2022 2. Quarter * Syntax: `quarter(column)` * Description: Returns the quarter part of the date column. * Example: `quarter(order_date)` * Returns: 3 3. Month * Syntax: `month(column)` * Description: Returns the month part of the date column. * Example: `month(order_date)` * Returns: 10 4. Week of Year * Syntax: `week_of_year(column)` * Description: Returns the week of the year of the date column. * Example: `week_of_year(order_date)` * Returns: 41 5. Day of Year * Syntax: `day_of_year(column)` * Description: Returns the day of the year of the date column. * Example: `day_of_year(order_date)` * Returns: 288 6. Day of Week * Syntax: `day_of_week(column)` * Description: Returns the day of the week (0-6) of the date column. * Example: `day_of_week(order_date)` * Returns: 4 7. Day * Syntax: `day(column)` * Description: Returns the day part of the date column. * Example: `day(order_date)` * Returns: 15 8. Hour * Syntax: `hour(column)` * Description: Returns the hour part of the date column. * Example: `hour(order_date)` * Returns: 10 9. Minute * Syntax: `minute(column)` * Description: Returns the minute part of the date column. * Example: `minute(order_date)` * Returns: 30 10. Second * Syntax: `second(column)` * Description: Returns the second part of the date column. * Example: `second(order_date)` * Returns: 45 11. Microsecond * Syntax: `microsecond(column)` * Description: Returns the microsecond part of the date column. * Example: `microsecond(order_date)` * Returns: 500000 12. Date Diff * Syntax: `date_diff(column1, column2, unit)` * Description: Returns the difference between two date columns in the specified unit. Units can be "year", "quarter", "month", "week", "day", "hour", "minute", "second", "millisecond", "microsecond", "nanosecond". * Example: `date_diff(order_date, delivery_date, "day")` * Returns: 5 13. Format Date * Syntax: `format_date(column, format)` * Description: Formats the date column according to the specified format. The format should be a valid ANSI `strftime` format. * Example: `format_date(order_date, "%Y-%m-%d")` * Returns: "2022-10-15" 14. Now * Syntax: `now()` * Description: Returns the current date and time. * Example: `now()` * Returns: "2022-10-15 10:30:00" 15. Today * Syntax: `today()` * Description: Returns the current date. * Example: `today()` * Returns: "2022-10-15" #### Boolean Functions 1. Is in * Syntax: `is_in(column, value1, value2, ...)` * Description: Returns true if the column value is in the list of values, else false. * Example: `is_in(product_name, "Product A", "Product B")` * Returns: True 2. Is Not in * Syntax: `is_not_in(column, value1, value2, ...)` * Description: Returns true if the column value is not in the list of values, else false. * Example: `is_not_in(product_name, "Product A", "Product B")` * Returns: False 3. Is Set * Syntax: `is_set(column)` * Description: Returns true if the column value is not null, else false. * Example: `is_set(product_name)` * Returns: True 4. Is Not Set * Syntax: `is_not_set(column)` * Description: Returns true if the column value is null, else false. * Example: `is_not_set(product_name)` * Returns: False 5. Is Between * Syntax: `is_between(column, start, end)` * Description: Returns true if the column value is between the start and end values, else false. * Example: `is_between(sales, 1000, 5000)` * Returns: True 6. Is Not Between * Syntax: `is_not_between(column, start, end)` * Description: Returns true if the column value is not between the start and end values, else false. * Example: `is_not_between(sales, 1000, 5000)` * Returns: False #### Utility Functions 1. USD to INR * Syntax: `to_inr(currency_column, amount_column, rate=83)` * Description: Converts the values in the amount column from USD to INR based on the rate. If the currency is not USD, the amount is returned as is. Default rate is 83. * Example: `to_inr(currency, amount, 83)` * Returns: 8300 2. INR to USD * Syntax: `to_usd(currency_column, amount_column, rate=83)` * Description: Converts the values in the amount column from INR to USD based on the rate. If the currency is not INR, the amount is returned as is. Default rate is 83. * Example: `to_usd(currency, amount, 83)` * Returns: 100 3. Row Number * Syntax: `row_number()` * Description: Returns the row number of the current row. * Example: `row_number()` * Returns: 1 4. Previous Period Value * Syntax: `previous_period_value(column, date_column, offset=1)` * Description: Returns the value of the column for the previous period based on the date column. Offset specifies the number of periods to go back. * Example: `previous_period_value(sales, order_date, 1)` * Returns: 1000 5. Next Period Value * Syntax: `next_period_value(column, date_column, offset=1)` * Description: Returns the value of the column for the next period based on the date column. Offset specifies the number of periods to go forward. * Example: `next_period_value(sales, order_date, 1)` * Returns: 2000 6. Percentage Change * Syntax: `percentage_change(column, date_column, offset=1)` * Description: Returns the percentage change in the value of the column compared to the previous period based on the date column. Offset specifies the number of periods to go back. * Example: `percentage_change(sales, order_date, 1)` * Returns: 10 7. Is First Row * Syntax: `is_first_row(group_by, order_by, sort_order="asc")` * Description: Returns 1 if the current row is the first row in the group, else 0. Sort order can be "asc" or "desc". * Example: `is_first_row(customer_id, order_date, "asc")` * Returns: 1 8. Create Buckets * Syntax: `create_buckets(column, num_buckets)` * Description: Creates buckets based on the values in the column. The number of buckets specifies the number of buckets to create. * Example: `create_buckets(sales, 5)` * Returns: "1000-2000" Last updated 3 months ago Was this helpful? Submit Thanks! --- # Overview ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) What are Queries? ----------------- Queries let you fetch and transform data from your databases. Think of a query as a recipe for getting the exact data you need. You start with a table then add steps to filter, calculate, and organize the data. Insights offers three ways to build queries: 1. Query Builder Visual, no-code interface (recommended for most users) 2. SQL Editor Write SQL directly (for SQL experts) 3. Script Editor Python scripts for complex transformations Creating Your First Query ------------------------- ### Start a New Query #### 1\. Open your workbook 1. Click the Queries tab 2. Click New Query 3. Choose your query type: * Visual Query Builder -> Build visually * SQL Editor -> Write SQL * Script Editor -> Write Python ![Query Builder](https://docs.frappe.io/files/Query_Builderfe073a.jpeg) We'll focus on the Query Builder since it's the easiest to get started with. #### 2\. Select Your Data Source 1. Click Select a table 2. Choose your database connection 3. Pick a table to start with ![select table](https://docs.frappe.io/files/select%20table.jpeg) You can select a table from: * Demo Data * Site DB * Uploads * Other Queries in the WorkBook Now you're ready to perform operations on the table Last updated 3 months ago Was this helpful? Submit Thanks! --- # Operations ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/insights.png) ### Insights [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Common Operations ----------------- ![operations list](https://docs.frappe.io/files/operations-list.png) ### Choose Columns What it does: Select which columns you want to include in your results. This helps focus your analysis on the data that matters. ##### When to use it * You only need specific columns from a table * You want to hide unnecessary columns to simplify your results * You need to improve query performance by reducing data volume ##### How it works From your available columns, select only those you want to see in your results. All other columns will be hidden. ##### Example From a Customer table with 20 columns, select only "Customer Name", "Email", "Region", and "Total Orders" for a customer contact list. ##### Tips * Use this operation early in your query to improve performance * Fewer columns means faster queries * You can add columns back later if needed ### Filter Rows ![filter operation](https://docs.frappe.io/files/filter-operation.png) What it does: Show only the rows that match specific conditions. This helps you focus on relevant data. #### When to use it: * You want to analyze a specific time period * You need data for a particular region or category * You want to exclude certain values (like cancelled orders) * You need to remove incomplete or invalid data #### Available filter types ##### Comparison Filters * Equals: Exact match * Does not equal: Exclude specific values * Greater than / Less than: For numbers and dates * Greater than or equal to / Less than or equal to: Include boundary values ##### List Filters * In: Match any value in a list (e.g., "New York", "Los Angeles", "Chicago") * Not in: Exclude values in a list ##### Text Filters * Contains: Find text anywhere in the column * Does not contain: Exclude text * Starts with: Match beginning of text * Ends with: Match end of text ##### Special Filters * Is set: Has a value (not empty) * Is not set: Is empty or null * Between: Value falls within a range * Within: For relative date ranges (last 7 days, last month, etc.) How it works You can combine multiple filters using: * And: All conditions must be true * Or: Any condition can be true ##### Examples * Show orders from the last 30 days * Display sales from "North" and "South" regions only * Exclude cancelled orders * Show customers with email addresses ##### Tips * Apply filters early in your query for better performance * Use "within" for dynamic date filtering (always shows last 7 days, etc.) * Combine multiple filters to create precise conditions ### Join Table What it does: Combine data from two tables based on matching values in specific columns. This lets you bring related information together. #### When to use it * You need information from multiple tables * You want to enrich your data with additional details * You need to combine related datasets #### Join types explained ##### Inner Join * Shows only rows that have matches in both tables * Use when you only want complete data * Example: Show orders with customer details (only for orders that have a customer) ##### Left Join * Shows all rows from your current table, plus matching rows from the joined table * Use when you want to keep all your original data * Example: Show all customers, including those who haven't placed orders yet ##### Right Join * Shows all rows from the joined table, plus matching rows from your current table * Less commonly used than Left Join * Example: Show all products, including those that haven't been ordered ##### Full Join * Shows all rows from both tables, whether they match or not * Use when you need comprehensive data from both sides * Example: Show all customers and all orders, even if some don't match ##### How it works 1. Select the table you want to join with 2. Choose the join type 3. Specify which columns should match between the tables 4. Select which columns from the joined table you want to include ##### Example Join your "Orders" table with a "Customers" table using "Customer ID" to show customer names and contact information alongside order details. ##### Tips * Most common join type is Left Join * Join columns should contain matching values (like IDs) * Select only the columns you need from the joined table * If column names conflict, they will be automatically renamed ### Append Table What it does: Stack rows from another table below your current data. This combines datasets vertically. ##### When to use it * You want to combine data from multiple time periods * You need to merge data from different regions or locations * You have similar data in separate tables that should be analyzed together ##### How it works 1. Select the table to append 2. Choose whether to remove duplicate rows 3. Only columns that exist in both tables will be included ##### Options * Include duplicates: Keep all rows, even if they're identical * Remove duplicates: Show each unique row only once Example: Combine "Q1 Sales" and "Q2 Sales" tables to analyze sales for the first half of the year. ##### Tips * Both tables must have at least one column with the same name * Only matching columns appear in the results * Column types are automatically aligned * Use "Remove duplicates" if you think there might be overlapping data ### Add New Column What it does: Create a new calculated column based on your existing columns using formulas or expressions. ##### When to use it * You need to perform calculations on your data * You want to create derived metrics * You need to combine information from multiple columns ##### Common calculations * Math operations: Add, subtract, multiply, divide * Percentages: (part / total) \* 100 * Profit calculations: revenue - cost * Text combinations: Combine first and last names * Conditional logic: Different values based on conditions ##### How it works 1. Give your new column a name 2. Choose the data type (Number, Text, Date, etc.) 3. Enter your formula using existing column names #### Examples * Calculate profit: revenue - cost * Find profit margin percentage: (profit / revenue) \* 100 * Calculate order total: quantity \* unit\_price * Combine text: first\_name + " " + last\_name #### Tips * Use clear, descriptive names for your calculated columns * Make sure columns are the correct data type before calculating * Test your formulas with a small sample first * You can reference columns by their names in your formulas ### Group & Summarize What it does: Group your data by categories and calculate summary statistics like totals, averages, and counts. ##### When to use it * You want to see totals by category (sales by region, orders by product) * You need to calculate averages or other statistics * You want to analyze trends over time * You need to create aggregated reports ##### Summary functions Sum: Add up all values * Example: Total sales, total quantity Count: Count the number of rows * Example: Number of orders, number of customers Count Distinct: Count unique values only * Example: Number of unique customers, number of different products Average: Calculate the mean value * Example: Average order value, average age Minimum: Find the smallest value * Example: Lowest price, earliest date Maximum: Find the largest value * Example: Highest price, most recent date ##### How it works 1. Choose dimensions (what to group by): Categories like Region, Product, Date 2. Choose measures (what to calculate): Metrics like Total Sales, Average Price, Order Count 3. Results show one row per unique combination of dimensions Time-based grouping: When grouping by dates, you can choose the time period: * Second, Minute, Hour (for detailed timestamps) * Day (daily analysis) * Week (weekly summaries) * Month (monthly trends) * Quarter (quarterly reports) * Year (yearly comparisons) ##### Examples * Total sales by region: Group by "Region", Sum of "Sales Amount" * Average order value by product: Group by "Product Name", Average of "Order Value" * Monthly revenue: Group by "Order Date" (by Month), Sum of "Revenue" * Customer count by city: Group by "City", Count of "Customer ID" ##### Tips * You can group by multiple dimensions (e.g., Region and Product) * You can calculate multiple measures (e.g., Total Sales and Average Price) * Use descriptive names for your measures * For dates, choose the right time granularity for your analysis * This operation enables drill-down features in charts ### Custom Operation What it does: Apply advanced transformations using custom Python expressions. This is for advanced users who need operations beyond the standard options. ##### When to use it * You need transformations not available in other operations * You have complex business logic to implement * You need advanced data manipulation * You're comfortable with Python programming ##### What you can do * Access all your columns as variables * Use Python expressions to transform data * Apply complex conditional logic * Perform advanced calculations ##### Example Create ranking or apply windowing functions that aren't available through the standard operations. Important notes: * Requires knowledge of Python and data manipulation * Use only when standard operations don't meet your needs * Test carefully before applying to large datasets * The expression must return a valid data table Last updated 3 months ago Was this helpful? Submit Thanks! --- # Branding and Customization ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") You can tailor the portal’s appearance to match your brand identity through the **LMS Settings**. Visual Branding --------------- Navigate to `Settings` and then go to `Branding` in the Settings Sidebar to update: * **Brand Name:** The name displayed in the sidebar heading. * **Logo & Favicon:** Upload your organization's logo for the sidebar and the favicon for browser tabs. ![](https://docs.frappe.io/files/Screenshot%202026-02-24%20at%201.29.55%E2%80%AFAM.png) _Branding Section in Settings_ * * * Sidebar Customization --------------------- * **Menu Links:** In `Settings` > `Sidebar`, you can toggle which default links appear in the sidebar. * **Custom Links:** In `Sidebar`, Use the `More` button configuration to add other website links. Last updated 1 month ago Was this helpful? Submit Thanks! --- # User Roles & Permissions ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") Frappe Learning uses specific roles to balance ease of use with system security. ![](https://docs.frappe.io/files/Screenshot%202025-02-06%20at%203.25.51%E2%80%AFPM.png) _User Profile Page_ There are 4 user roles in Frappe Learning: | Role | Permissions | Best For | | --- | --- | --- | | **LMS Student** | Can browse courses, enroll in batches, and view content. | All students. | | **Course Creator** | Can create, edit, and manage courses, chapters, and lessons. | Course authors and teachers. | | **Batch Evaluator** | Can create batches/live classes and grade student assignments. | Teaching assistants and instructors. | | **Moderator** | Full access to all content, users, and system-wide settings. | System Administrators. | To manage roles, admins can navigate to the **Profile** (`Settings` > `My Profile`) page of the member in the portal or the `User`DocType in the Desk. Last updated 1 month ago Was this helpful? Submit Thanks! --- # Configuring Custom Base Path ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") By default, your portal is accessible at `your-site.com/lms`. If you prefer a different directory (e.g., `/school` or `/academy`), you can change the **Base Path**. 1. Access your server's terminal. 2. Open your `site_config.json` file. 3. Add the `lms_path` key: { "lms_path": "school" } 4. **Important:** Clear cache and restart to apply changes. You can do it by running the following commands: bench clear-cache bench restart The dashboard will now be accessible at `/school` instead. Last updated 1 month ago Was this helpful? Submit Thanks! --- # Learning Hierarchy ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") This is the structure that a course in Frappe Learning follows. A course contains chapters. Chapters contain lessons. ![Screenshot 2024-05-16 at 4.03.52 PM](https://docs.frappe.io/files/Screenshot%202024-05-16%20at%204.03.52%20PM831306.png) _Structure of Courses, Chapters and Lessons in Frappe Learning_ Last updated 1 month ago Was this helpful? Submit Thanks! --- # Add a Preview Video ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") A preview video acts as a teaser for guest users. 1. In the Course form, locate the `Preview Video` field. 2. To use a YouTube video: Go to YouTube, click the `Share` button under the video, and copy the link provided. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%2010.53.10%E2%80%AFAM.png) 3. Paste the link into the field. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%2011.05.29%E2%80%AFAM.png) _Course Fields_ 4. This video will appear on the Course landing page, allowing users to watch it before they enroll. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%2011.06.06%E2%80%AFAM.png) _Course Preview_ Last updated 1 month ago Was this helpful? Submit Thanks! --- # Create a Course ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/learning.png) ### Learning [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Home](https://frappe.io/learning) [](https://github.com/frappe/lms "GitHub") A **course** is the primary entity of the Learning app. You can make your courses in 2 ways: 1. Using the Learning Portal. 2. Importing them from a spreadsheet (Data Import) 3. Importing from ZIP (not a SCORM Package) * * * ### Using the Learning Portal 1. Go to `Courses` on the sidebar, click the `+ Create` button, and select `New Course` from the menu. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%209.37.40%E2%80%AFAM.png) _Step 1: Courses -> New Course -> New Course_ 2. Fill in the basic details (Title, Short Introduction, etc.). ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%2010.11.38%E2%80%AFAM.png) _Course Creation Modal_ 3. Click the `Create` button. You will be redirected to the `Course Settings` page, where you can fill out the [remaining details](https://docs.frappe.io/learning/create-a-course#course-fields-reference) like metadata, images, and pricing. * * * ### Importing from a Spreadsheet Use this method to upload multiple courses at once. Note that this imports course metadata (Title, Description, etc.) but **cannot** import course content like Chapters or Lessons. 1. Go to `Courses` on the sidebar, click `+ Create`, and select `Import Course`. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%209.37.40%E2%80%AFAM.png) _Step 1: Courses -> New Course -> Import Course_ 2. Download Template: * **All Fields:** To fill in every available detail. * **Mandatory:** To get only the required fields. * **Custom:** To select specific fields. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%209.47.25%E2%80%AFAM.png) _Download CSV Template options_ ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%209.48.09%E2%80%AFAM.png) _Custom Template Download Modal_ 3. Fill in your data in the spreadsheet. Leave the **ID** column empty; the system will auto-generate these. 4. Upload your Excel/CSV file. Or click the Google Sheet option and paste your URL. Make sure to copy the URL from your browser address bar. _The Google Sheet Link must end with a **gid=** parameter_. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%209.46.07%E2%80%AFAM.png) _Importing from Google Sheet_ 5. Map your columns if the headers don't match exactly. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%209.53.01%E2%80%AFAM.png) _Map your columns_ 6. Review your data and if everything is okay, click the `Import` button. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%2010.05.58%E2%80%AFAM.png) _Review and Import_ 7. Now scroll down to see which rows succeeded and review any errors for failed rows. ![](https://docs.frappe.io/files/Screenshot%202026-02-23%20at%2012.03.25%E2%80%AFPM.png) _View Import Logs_ * * * Course Fields Reference ----------------------- | Field | Description | Mandatory | | --- | --- | --- | | **Title** | Name of the course displayed on the course page and listings. | ✅ | | **Short Introduction** | Brief summary shown in course cards and search results. | ✅ | | **Course Description** | Detailed explanation of course content, objectives, and outcomes. | ✅ | | **Instructors** | Email IDs of instructors authorized to manage and teach the course. | ✅ | | **Category** | Grouping category (e.g., Programming, Design) used for filtering. | ❌ | | **Tags** | Keywords indicating difficulty or prerequisites to help users decide if it's right for them. | ❌ | | **Course Image** | Thumbnail image representing the course visually. | ❌ | | **Color** | Background color of the course card; fallback if no image is uploaded. | ✅ | | **Published** | Toggle to make the course visible on the website to users. A course will appear on the website to the users only when it is published. This setting is only visible to Moderators. | ❌ | | **Published On** | The date shown to learners indicating when the course went live. | ❌ | | **Upcoming** | If a course is about to become available to users soon but not yet, mark it as Upcoming. Note that even for an upcoming course to be visible on the website, it should be published. | ❌ | | **Featured** | Highlights the course in designated "Featured" sections of the portal. | ❌ | | **Disable Self Enrollment** | Enable this if you don't want users to enroll themselves into the course directly but instead want the Administrator to enroll them. | ❌ | | **Preview Video** | Introductory video or teaser accessible before a student enrolls. | ❌ | | **Related Courses** | Linked courses shown as recommendations on the course page. | ❌ | | **Paid Course** | If enabled, students must complete payment to access the course content. | ❌ | | **Paid Certification** | Requires an additional fee to be paid before the certificate is issued. | ❌ | | **Amount** | The cost of the course (only applicable if Paid Course or Paid Certification is enabled). | ✅\* | | **Currency** | The currency in which the course price is listed (only applicable if Paid Course or Paid Certification is enabled). | ✅\* | | **Evaluator** | Evaluators for course certification (only applicable if Paid Certification is enabled). | ✅\* | | **Time Zone** | Time Zone for Evaluation Schedule (only applicable if Paid Certification is enabled). | ✅\* | | **Completion Certification** | Issues a certificate to the student automatically upon finishing the course. | ❌ | | **Meta Description** | SEO-friendly description used by search engines. | ❌ | | **Meta Keywords** | SEO-friendly keywords used by search engines. | ❌ | \*Mandatory only if the related Paid/Certification features are enabled. Last updated 12 hours ago Was this helpful? Submit Thanks! --- # Custom Branding ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") You can now customize your Frappe CRM with a custom **Logo**, **Name**, and **Favicon** based on your business requirements. This feature is accessible under Settings → General. ![](https://docs.frappe.io/files/Screenshot%202025-02-11%20at%206.29.14%E2%80%AFPM.png) ![](https://docs.frappe.io/files/Screenshot%202025-02-11%20at%206.28.29%E2%80%AFPM.png) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Home Actions ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") You can now add, edit, or hide custom links with icons in the dropdown menu. This feature is accessible under Settings → General. ![](https://docs.frappe.io/files/Screenshot%202025-02-11%20at%205.33.20%E2%80%AFPM.png) ![](https://docs.frappe.io/files/Screenshot%202025-02-11%20at%205.31.00%E2%80%AFPM.png) For custom icons, you can use Feather Icons or add an SVG in the icon field. ![](https://docs.frappe.io/files/Screenshot%202025-02-11%20at%205.31.55%E2%80%AFPM.png) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Invite Users ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") The Invite Members feature allows you to invite agents via email and assign them either Manager Access or Regular Access based on their role. ![](https://docs.frappe.io/files/Screenshot%202025-02-11%20at%205.37.56%E2%80%AFPM.png) Access Levels ------------- * **Manager Access:** Full access to all features, including editing layouts, integration settings, and other manager-level controls. * **Regular Access:** Restricted access, with limitations on editing layouts, managing integrations, and other advanced settings. How to Invite Members --------------------- 1. Go to Settings → Invite Members. 2. Enter the agent’s email address. 3. Select the access level: Manager or Regular Agent. 4. Click Send Invite. ![](https://docs.frappe.io/files/Screenshot%202025-02-11%20at%205.37.00%E2%80%AFPM.png) Invitation & Login Process -------------------------- 1. The invited agent will receive an email with a login link. 2. They can log in using the provided link. 3. After logging in, they can change their password from Profile Settings. ![](https://docs.frappe.io/files/Screenshot%202025-02-11%20at%206.13.22%E2%80%AFPM.png) ![](https://docs.frappe.io/files/Screenshot%202025-02-11%20at%206.09.12%E2%80%AFPM.png) This feature ensures secure onboarding while maintaining role-based access control. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Lead ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") In Frappe CRM, a Lead represents a potential customer who has shown some level of interest in your products or services. These leads can be generated through various channels, including: * Website inquiries (contact forms, live chat) * Referrals from existing customers * Networking events and conferences * Paid marketing campaigns (social media ads, search engine ads) ![](https://docs.frappe.io/files/b3rtjWu.png) Capturing Lead data ------------------- The Lead page in Frappe CRM serves as a central hub for capturing and managing all your potential customer information. This is where you'll gather the initial details about an interested party, such as: * Name and contact information (email, phone) * Company information (if applicable) * How they heard about you (lead source) * Specific interests or needs (products/services) > **Important Note:** The Lead page focuses solely on capturing this initial data. It doesn't automatically create Contacts or Organizations within Frappe CRM. ![](https://docs.frappe.io/files/1tGhE2u.png) Converting Leads to Deals ------------------------- Once you've collected enough information and qualified the Lead (determined their potential for conversion), you can seamlessly move them further down the sales funnel by converting them into a Deal. ![](https://docs.frappe.io/files/VdLy471.png) During the conversion process, you will receive an option to: * Create new Contact and Organization records based on the details captured in the Lead. * Select existing Contact and Organization records if they already exist in your CRM. By converting qualified Leads into Deals, you can initiate the sales process and track your progress towards closing the deal. Additional tips --------------- * Use clear and concise labels for each data field on the Lead page. * Consider customizing the Lead page to capture information specific to your sales process. * Leverage features like lead scoring to prioritize your efforts and focus on the most promising leads. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Contact ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") Contact store essential details like phone numbers and addresses, facilitating further communication and engagement with leads and deals. You can have multiple contacts for the same Deal. Create a Contact ---------------- * Go to the Contact tab and click on "Create" * Fill in all the relevant information like Name, Email, Mobile No. and Address * Click on Create ![](https://docs.frappe.io/files/9icymcr.png) Once added, the Contact will be visible in the Contact list. ![](https://docs.frappe.io/files/pU0RsaF.png) Contact created via Lead ------------------------ When you get a new Lead, add its contact details like Name, Email, Mobile No. and Organization. ![](https://docs.frappe.io/files/MDZaaF4.png) Once you convert a Lead to Deal, the contact information saved in the Lead will get created as a new Contact record. You can also select an existing Organization or Contact when you convert a Lead to Deal as shown in the screenshot below. ![](https://docs.frappe.io/files/Pya1HGH.png) Linking a Contact to a Deal --------------------------- You can further link an existing Contact to a Deal via the "Add Contact" button in the Deal record. ![download (2)](https://docs.frappe.io/files/download%20(2).png) Multiple contacts can be added to an existing Deal. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Deal ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2045.png) ### CRM [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappecrm) [Website](https://frappe.io/products/crm) [](https://github.com/frappe/crm "Github") The Deal page is your central hub for managing potential business opportunities (deals) with your customers and prospects. Here, you can track progress, collaborate with colleagues, and close deals efficiently. ![](https://docs.frappe.io/files/mqv7Px8.png) What is a Deal? --------------- A deal represents a potential sales transaction your company is pursuing with a customer or prospect. It's associated with specific products or services and reflects the potential revenue you could generate if the opportunity is successfully closed. After conversion ---------------- When a lead shows promise, you can convert them into a deal. This action: * Moves all communication history from the lead to the deal page, ensuring a seamless transition for your agents. * Automatically creates an organization and contact record associated with the deal. * Allows you to add additional contacts to the deal and set a primary contact person. The Deal page: Your deal closing powerhouse ------------------------------------------- The Deal page is your one-stop shop for nurturing leads and closing deals. It provides all the tools you need to streamline your sales process and maximize success. Here's what you can do on the Deal page: * **Communication Channels:** Seamlessly connect with your customers via email or phone calls directly from the Deal page. * **Call Tracking & Recording:** Keep track of call details and access recordings for future reference. * **Detailed Notes:** Capture important details about your interactions with the customer for future reference. * **Task Management:** Create tasks associated with the deal and assign them to yourself or other team members. * **Collaboration:** Mention team members in comments to keep everyone informed and facilitate collaboration. This centralized approach keeps all deal-related information and activities in one place. You can focus on your customers, close deals faster, and improve your overall sales efficiency. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Agents & Teams ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") In Helpdesk, the way tickets are handled depends on three key concepts: Roles, Agents, and Teams. ### 1\. Roles Roles define what a user can do in the system. There are three main roles: * **Admin** Has full access across the system — including all tickets, settings, teams, and configurations. * **Agent Manager** * Work on tickets * Delete tickets * Create custom views and manage [public views](https://docs.frappe.io/helpdesk/custom-views) * Manage Knowledge Base articles * Manage Dashboard and get an overview of other agents in your team * **Agent** * Work on tickets * Create custom views and manage private views * Manage Knowledge Base articles * Manage Dashboard only for themselves These roles help control permissions and ensure each user sees and does only what they’re meant to. * * * ### 2\. Agents Agents are the users responsible for working on support tickets. They’re assigned to tickets directly or through teams. Read [more](https://docs.frappe.io/helpdesk/agent) about agents. * They can belong to one or more teams. * Their workload is managed either manually or automatically through assignment rules. * * * ### 3\. Teams (Agent Groups) Teams, also referred to as **Agent Groups** in single ticket view, are used to group agents for ticket distribution and assignment. * A team consists of one or more agents. * When a new team is created, an [Assignment Rule](https://docs.frappe.io/helpdesk/assignment-rule) is automatically created in the system. * This rule ensures that when a ticket is assigned to that team, the system will pick one of the team members and assign the ticket to them — based on round-robin, load balancing, or some other logic. You can manage the members of a team anytime — adding or removing agents immediately affects who gets assigned tickets. Helpdesk creates two teams for you by default. Try adding members in each team and then try to assign a ticket to another team. You will notice that on changing the team (Agent Group), the ticket gets re-assigned to the agent of the selected team. ![](https://docs.frappe.io/files/Auto%20Assignment.gif) #### Custom Assignment Logic You can also define your own assignment logic using [Server Scripts](https://docs.frappe.io/framework/user/en/desk/scripting/server-script) . For example, assign tickets to different teams based on priority: This server script below ensures that based on priority, the teams & agents are assigned automatically. Here is an example of auto agent group assignment: ![](https://docs.frappe.io/files/Server%20Script%20Assg.gif) ![](https://docs.frappe.io/files/Screenshot%202025-04-22%20at%205.08.05%20PM.png) if doc.priority == "Low": doc.agent_group = "Team A" else: doc.agent_group = "Team B" Now let us understand how you can reduce your ticket count and provide your customers with resolution faster using Knowledge Base. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Customers & Contacts ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") ### Customer A **Customer** refers to an organization or a company. It is used to group contacts under a common entity. #### Adding New Customer 1. Navigate to Customer Page using the sidebar, 2. Click on **"Add New Customer"**, present on the top right corner. 3. Fill in the following details: * **Customer Name**: Name of the organization (e.g., _Frappe ._). * **Domain**: Email domain(s) associated with the company (e.g., `frappe.io`, `mycompany.com`). 4. Click **Add** to save the customer. * * * ### Contact A **Contact** is an individual user, who may be linked to a Customer (organization). This allows personalized communication while optionally grouping them with a company. #### Creating New Contact 1. Navigate to Contact Page using the sidebar, 2. Click on **"Create New Contact"**, present on the top right corner. 3. Fill in the following fields: * **Email ID** _(required)_ * **First Name** _(required)_ * **Last Name** * **Phone** * **Customer**: _(Optional)_ Select a customer this contact belongs to. 4. Click **Create** to save the contact. #### Contact Profile View Once a contact is created, click on the contact in the list view and a popup will appear which includes various information such as: * **Upload photo** * **Edit emails and phone numbers** * **Assign or update customer** * **Invite as user** Click **Save** after making changes. ##### Invite as User When you click **Invite as user**, an email will be sent to the **first email address** listed. This email contains a link for the contact to **set their password** and access the system as a user. ### Notes * Linking a Contact to a Customer is **optional**. * If you do not want a Contact to be associated with a Customer, simply leave the **Customer** field empty. * Contacts under the same Customer can collaborate and see each other’s support tickets. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Student ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **The Student document will hold all the data of any Student in your Academy like their Personal Information, Photo, Date of Birth, Address, etc.** This form will also contain any additional details like the Student's Guardian and Sibling details. ![Student](https://docs.frappe.io/files/education-student-1.png) The student is enrolled in a [Program](https://docs.frappe.io/education/program) when the application is approved. Once the enrollment is done the [Student Applicant](https://docs.frappe.io/education/student-applicant) status is update to Admitted. To access Student, go to: > Home > Education > Student > Student 1\. Prerequisites ----------------- Before creating a student, it is advised to create the following first: * User(If Applicable) 2\. How to create a New Student ------------------------------- 1. Go to the student list and click on New. 2. Enter the First Name, Middle Name and Last Name of the student. 3. Enter other details like Student Email Address, User ID(If Applicable) and Joining Date. 4. Save. ![Student](https://docs.frappe.io/files/education-student-4.png) 3\. Features ------------ Apart from the aforementioned details, some additional details of the student that can be captured are as follows: ### 3.1. Personal Details Personal details of the Student like their Date of Birth, Gender, Blood Group, and Nationality can be added here. ![Student](https://docs.frappe.io/files/education-student-personal.png) ### 3.2. Home Address The address of the student, along with the City, State, and Pincode can be captured here. Two address lines can be captured for each student. ![Student](https://docs.frappe.io/files/education-student-address.png) ### 3.3. Guardian Details The details of the student's guardian and their relationship with the student can be captured here. You can create a [Guardian](https://docs.frappe.io/education/guardian) from here itself, or create a guardian first and then create the Student. ![Student](https://docs.frappe.io/files/education-student-guardian.png) ### 3.4. Sibling Details This section will have all the details of the Student's Siblings. You can select if the sibling is studying in the Same Institute or no. If the Sibling is also a student of your institute, you will be required to enter their Student ID, if not, you can enter the name of the Institution they are associated with. Their academic details like Program and personal details like Gender and Date of Birth can also be captured. ![Student](https://docs.frappe.io/files/education-student-sibling.png) ### 3.5. Exit Details The Student's exit details can be captured here, like their Date of Leaving, and Leaving Certificate Number as captured in your institute's records can be captured. Further, you can also enter the Reason For Leaving in here. ![Student](https://docs.frappe.io/files/education-student-7.png) > Note: On top of the student form, there is an **'Enabled'** checkbox using which the student by default would always be enabled. Once you have recorded the Student's Exit Details, you must uncheck this box to disable the student. ![Student](https://docs.frappe.io/files/education-student-3.png) ### 3.6. After Saving Once you save the Student Form, the student gets created in the system and you will be able to link this document to other documents related to Admission, Assessment, Attendance, Student Activity, Student LMS Activity, and Fees. Further, you will also be able to see a dashboard that will indicate their activities throughout the year. 4\. Other actions ----------------- Once a student is created in the system, you can also view the Accounting Ledger, which will show a report of all the payments made by the student. ![Student](https://docs.frappe.io/files/education-student-2.png) 5\. Related Topics ------------------ 1. [Guardian](https://docs.frappe.io/education/guardian) 2. [Student Group](https://docs.frappe.io/education/student-group) 3. [Student Attendance](https://docs.frappe.io/education/student-attendance) 4. [Program](https://docs.frappe.io/education/program) 5. [Course](https://docs.frappe.io/education/course) 6\. Video Tutorial on Student Management ---------------------------------------- .embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } Last updated 2 months ago Was this helpful? Submit Thanks! --- # Student Batch ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **A Student batch is a collection of students from within Student Groups.** For example, A group of students studying the same Program together will be called a Student Batch. ![education-student-workflow](https://docs.frappe.io/files/education-student-workflow.png) To access the Student Batch, go to: > Home > Education > Settings > Student Batch Name When a student is enrolled for a [Program](https://docs.frappe.io/education/program) , the batch can be selected for the student, and they shall be a part of that batch. You can also get a Student Batch-Wise Attendance report to view the number of students present from the Batch. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Knowledge Base ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") The Knowledge Base is a powerful tool for agents to create, organize, and reuse helpful articles when responding to tickets. It helps ensure accurate and consistent replies while reducing time spent typing the same responses. In addition, these articles are shown on the Customer Portal, allowing customers to find answers and solve issues on their own — which can lead to a **reduction in ticket volume** and faster resolution times. (We will talk about the Customer Portal in the next lesson) On the sidebar click on "Knowledge Base" or the "book icon" to navigate to Knowledge Base. * * * ### Creating a new article To create a new article: 1. Click the **“+ Add New”** button on the top-right corner 2. A dropdown will appear with two options: * **Article** * **Category** Click **“Article”** to get started. ![](https://docs.frappe.io/files/Article.png) > The article will be created under the **General** category by default. You can change the category later inside the article editor. Edit the title and add some description of the article and click on "Create" ![](https://docs.frappe.io/files/New%20Article.png) You have successfully created your first article🎉 #### Publishing * New articles are saved in **Draft Mode** (internal only) * Click **“Publish”** to make it **Public** * **Draft Mode**: Visible only to the internal team * **Public Mode**: Visible to customers on the Customer Portal #### Article Actions: * **Edit** – Modify title, content, or category * **Move** – Change category of the article. * **Share Link** – Copy article URL (for customers, if public) * **Delete** – Remove the article * * * ### Creating a new category Creating categories is optional but important as it helps your organisation to maintain the articles and find them easily. To create a new category: 1. Click the **“+ Add New”** button on the top-right corner 2. A dropdown will appear with two options: * **Article** * **Category** Click on **“Category”** ![](https://docs.frappe.io/files/New%20Cate.png) When you create a new category, a dialog box popus up, add the category name and click on "Create". When a category is created, an article named "New Article" is also created under the newly created category, you can edit the article and click on "Save". Here is a small video to understand the flow: ![](https://docs.frappe.io/files/KB%20New%20Category%20Flow.gif) * * * ### Knowledge Base List View After creating articles and categories, your Knowledge Base would look something like this In the list view, articles are grouped by categories. You can filter and manage everything from here. ![](https://docs.frappe.io/files/Screenshot%202025-04-23%20at%201.06.59%20AM.png) #### Features in the List View Each category has "three dots" icon on the right side of it. Clicking on it opens various options: ![](https://docs.frappe.io/files/Screenshot%202025-04-23%20at%2012.35.07%20AM.png) * **Add New Article** * **Edit Category Title** * **Merge** this category into another * **Share** category link * **Delete** the category #### Bulk Actions * Select multiple articles using checkboxes present on the left side of each row. * A popover menu appears click on three dots icon, you will see 2 buttons: * **Delete** – Removes all selected articles * **Move To** – Move selected articles to a different category > ⚠️ If a category is deleted, all its articles are automatically moved to the **General** category. > ℹ️ A category must contain at least one article. To move its only article, delete the category instead. Now that you've understood how the Knowledge Base works from the agent's side — from creating articles to managing categories — let's move on to explore the **Customer Portal** and how customers interact with your support system. Last updated 3 months ago Was this helpful? Submit Thanks! --- # Student Category ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **Student Category allows you to classify the students based on various categories.** In Institutions, there may be fee concession for some categories such as Handicapped Students, Foreign Nationals, Reserved Categories by the government, etc. When a Student is enrolled for a [Program](https://docs.frappe.io/education/program) , you can select the select the Category for the Student. To access Student category, go to: > Home > Education > Settings > Student Category ![education-student-category-1](https://docs.frappe.io/files/education-student-category-1.png) 1. How to create a Student Category * * * To create a new student category, click on New Student Category and add the name of the Student Category. ![education-student-category-2](https://docs.frappe.io/files/education-student-category-2.gif) You can select the Student Category while making the Fee Structure and accordingly the student from the selected groups can be filtered out while making the Fee Schedule. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Student Group Creation Tool ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **The Student group creation tool allows you to create student groups in bulk.** To access the Student Group Creation Tool, go to: \> Home > Education > Tools > Student Group Creation Tool 1\. How to use the Student Group Creation Tool ---------------------------------------------- 1. Select the **Academic Term** and the **Program** for which a student group is to be created. 2. Select the **Program** under which you are creating the student group. 3. By default, the student group is created based on the courses only. The check-box for **Separate course based Group for every Batch** allows you to create different batch-wise Student groups for each course. 4. Click on get **Get Courses**: All the courses within the selected Program will be enlisted here. You can choose and delete courses from the list already added in the list. You can also select and add courses from other programs on this list. 5. Click on **Create Students Groups**. Multiple Student groups for each course and batch will be created. ![Student Group Creation Tool](https://docs.frappe.io/files/education-student-group-creation-tool.gif) 2\. Tutorial Video on Student Group Creation Tool ------------------------------------------------- .embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } Last updated 2 months ago Was this helpful? Submit Thanks! --- # Inviting agents ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") > Note: This feature is available only on the `develop` branch The Invite Agents tab in the settings modal can be used to invite new or existing (haven't been invited yet) users to Helpdesk. ![invite agents tab in the settings modal](https://docs.frappe.io/files/Screenshot%202025-08-12%20at%201.11.50%E2%80%AFPM.png) Steps to invite --------------- 1. List out the emails you wish to invite in a comma-separated format. !['invite by email' field filled example](https://docs.frappe.io/files/Screenshot%202025-08-12%20at%201.23.22%E2%80%AFPM.png) 2. Select a suitable role. > If you are a `Manager`, you will be only shown `Agent` or `Manager` options !['role' field select expanded example](https://docs.frappe.io/files/Screenshot%202025-08-12%20at%201.26.35%E2%80%AFPM.png) 3. Trigger the invitation action using the 'Send Invites' button. ![invites sent example](https://docs.frappe.io/files/Screenshot%202025-08-12%20at%205.11.42%E2%80%AFPM.png) All of the email addresses that were successfully invited will receive an invitation email with a link to accept the invitation. The sent invitations auto-expire in 3 days. Once an invitation expires, an email will be sent to the sender of the invitation. Cancel an invitation -------------------- To cancel a pending invitation, you can trigger the cancel invitation action using the 'Cancel Invitation' button in the UI. ![cancel a pending invitation](https://docs.frappe.io/files/Screenshot%202025-08-12%20at%205.20.45%E2%80%AFPM.png) Once the invitation is cancelled, an email is sent to let the invitee know that the invitation was cancelled. Accept an invitation -------------------- To accept an invitation, use the link present in the invitation email. The link will redirect the invitee to a page that can be used to set/update the password **if a new [Framework](https://docs.frappe.io/framework/user/en/introduction) user was created because of accepting the invitation**. To disable redirecting the invitee to set a password, you can disable username/password login present under the System Settings section of the Desk view. ![system settings](https://docs.frappe.io/files/Screenshot%202025-08-12%20at%205.42.02%E2%80%AFPM.png) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Customer Portal ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") The **Customer Portal** allows your users to sign in to the Helpdesk and manage their support interactions. When a [contact](https://docs.frappe.io/helpdesk/customers-contacts) logs in, they are automatically redirected to the Customer Portal. Once you’ve [invited](https://docs.frappe.io/helpdesk/customers-contacts#inviting-as-user) a contact, they can access the portal to: * Submit new tickets * Track the status of existing tickets * Access the Knowledge Base with relevant search functionality > 🔍 The portal provides a self-service experience for your customers, reducing support load and improving user satisfaction. ### 📝 Submitting New Tickets To create a new ticket: 1. Click on the **Tickets** page from the sidebar. 2. Click the **Create** button. 3. Fill in the **Subject** and other necessary details. ![](https://docs.frappe.io/files/CP%20Suggestion%20&%20Ticket%20Creation.gif) > 💡 As you type the subject, relevant articles will appear based on your query. > This helps customers resolve issues on their own before submitting a ticket. To add more fields in the ticket form on the Customer Portal, check out [this guide](https://docs.frappe.io/helpdesk/field-dependency) . * * * ### 📊 Tracking Ticket Status On the **Tickets** list view, users can manage and track the status of their submitted tickets. #### Custom Views * You can create personalized views to filter tickets based on status, priority, or other fields. * Learn [how](https://docs.frappe.io/helpdesk/custom-views) to create & configure custom views. #### Exporting Tickets 1. Use the checkboxes beside each ticket to select one or multiple rows. 2. Once you selected the roww, a popover appears at the bottom. 3. Click the **three dots** (•••) to: * Export the selected tickets * Or export **all tickets** in the list ![](https://docs.frappe.io/files/Export%20Customer%20Portal.gif) * * * ### 📚 Knowledge Base The Customer Portal includes a built-in **Knowledge Base** to help users find answers faster. * As users type their questions, relevant articles automatically appear. ![](https://docs.frappe.io/files/Screenshot%202025-04-23%20at%203.32.27%20PM.png) * Users can browse through the Knowledge Base to find the information they need without having to raise a ticket. ![](https://docs.frappe.io/files/KB%20Customer.gif) > 🧠 A well-maintained Knowledge Base can significantly reduce support load by enabling users to self-serve. > You can setup Knowledge Base as the landing page for your customers/contacts, to do so go to [HD Settings](https://docs.frappe.io/helpdesk/settings) > => Find "Prefer Knowledge Base" => click & save. ### 🚀 You’re Ready to Get Started! You’ve now learned the basics to start using **Frappe Helpdesk** — from managing customers and contacts to submitting and tracking tickets via the Customer Portal. To explore more advanced features, visit our [full documentation](https://docs.frappe.io/helpdesk) . We recommend checking out the **Customisations** section to tailor Frappe Helpdesk according to your specific needs and workflows. Happy supporting! 💬 Last updated 3 months ago Was this helpful? Submit Thanks! --- # Custom Actions ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083730.png) ### Helpdesk [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://t.me/frappedesk) [Website](https://frappe.io/helpdesk) [](https://github.com/frappe/helpdesk "Github") Custom actions allow you to perform specific tasks directly from the Ticket page. These actions can be anything from integrating with external apps to updating ticket data or creating related documents... Creating Custom Actions ----------------------- Custom actions are implemented using Form Scripts in Desk: 1. **Navigate to Desk:** Switch to Desk and navigate to HD Form Script. 2. **Select Doctype:** Choose the Doctype (e.g., HD Ticket) where you want to add the custom action. You'll be presented with a boilerplate code. 3. **Apply To:** Choose "Form". 4. **Define Your Action:** Here's how to define different types of actions: **Single Button:** This code creates a single button labelled "Open in Desk" that opens the current Ticket in a new browser tab. ![](https://docs.frappe.io/files/Normal%20Button%20Script.png) ``` const actions = [{\ "label": "Open in Desk",\ "onClick": () => {\ let URL = `https://frappehelpdesk.frappe.cloud/app/hd-ticket/${doc.name}`\ window.open(URL, '_blank')\ },\ "variant": 'solid' | 'subtle' | 'outline' | 'ghost',\ "theme" : 'gray' | 'blue' | 'green' | 'red'\ }] ``` You can add variant and theme to your buttons. Default variant is "solid". Default color is "gray". Both of these properties are optional. You can also add your own tailwind classes here using the "class" key `e.g: class: 'rounded-lg bg-surface-pink-1' ` ![](https://docs.frappe.io/files/Normal%20Button.png) **Grouped Actions:** This code creates a group of buttons hidden under a three-dot menu labelled "Add." Clicking on either "Open Weekly Analysis or "Open Article Analysis" will trigger their respective onClick functions (defined elsewhere). ![](https://docs.frappe.io/files/Three%20dots%20script.png) ``` const actions = [\ {\ group: 'Reports',\ hideLabel: true,\ items: [\ {\ label: 'Open Weekly Analysis',\ onClick: () => {},\ },\ {\ label: 'Open Articles Analytics',\ onClick: () => {},\ },\ ],\ },\ {\ group: 'Ticket',\ items: [\ {\ label: 'Create a new ticket',\ onClick: () => {},\ },\ // suggest some action other than open in fc\ {\ label: 'Open Customer Details',\ onClick: () => {},\ },\ ],\ },\ ] ``` ![](https://docs.frappe.io/files/Drop%20down%20three%20dots.png) **Grouped Actions with label:** This code creates a group of buttons hidden under a dropdown button labelled "Reports". Clicking on either "Open Weekly Analysis or "Open Article Analysis" will trigger their respective onClick functions (defined elsewhere) ![](https://docs.frappe.io/files/Button%20Dropdown%20script.png) ``` const actions = [{\ "buttonLabel": "Reports",\ "group": "Add",\ "hideLabel": true,\ "items": [\ {\ label: 'Open Weekly Analysis',\ onClick: () => {},\ },\ {\ label: 'Open Articles Analytics',\ onClick: () => {},\ },\ ]\ }] ``` ![](https://docs.frappe.io/files/Dropdown%20button.png) **Combined Actions:** You can combine both single buttons and group actions into a single list and pass them as the "actions" property. ![](https://docs.frappe.io/files/Combined%20Script.png) ![](https://docs.frappe.io/files/Combined%20Script%20UI.png) Using Context and Actions ------------------------- The `doc` parameter provides context about the current Ticket page. You can utilize this context along with various functionalities to create your custom actions: * `doc`: Access Ticket field values (e.g., `doc.raised_by`, `doc.customer`). * `$dialog`: Opens a confirmation dialog with actions. (you can pass title,message,html & actions as key while creating dialog) * `updateField`: Updates a specific field value (e.g., `updateField('status', 'closed', callback)`). * `router`: Navigate to a different page using Vue Router. * `call`: Calls an API from the client side. You can add the server side end point in server script. * `createToast`: Displays success or error messages. Field Values in HD Form script doct * `Enabled`: Enable script, if no other options are ticket, the script will be applied to the Agent's Ticket View * `Apply to customer portal`: Script will be applied to Ticket View of Customer * `Apply on new page`: Script will be applied on creation of New Ticket ![](https://docs.frappe.io/files/Screenshot%202025-03-29%20at%209.02.54%20PM.png) Function Support on various pages: | Functions | Ticket Agent | Ticket Customer | New Ticket | | --- | --- | --- | --- | | call | ✓ | ✓ | ✓ | | updateField | ✓ | ✓ | ✗ | | router | ✓ | ✓ | ✓ | | $dialog | ✓ | ✓ | ✓ | | createToast | ✓ | ✓ | ✓ | | applyFilters | ✗ | ✗ | ✓ | Example: Custom Actions for Ticket Management --------------------------------------------- Here's an example showcasing various custom actions you can create to manage Deals: ![](https://docs.frappe.io/files/Dialogs.gif) function setupForm({ doc, updateField, call, router, $dialog, createToast, }) { const actions = [\ {\ group: "Actions",\ hideLabel: true,\ items: [\ {\ label: "Open FC Info",\ onClick: () => {\ // Call API to get custom information\ call("show_custom_info", {\ ticket: doc.name,\ // Include relevant fields for fetching data\ }).then((data) => {\ if (data.name) {\ $dialog({\ title: data?.title,\ message: data?.message,\ html: data?.html, // this field can be in HTML format\ actions: [\ {\ label: "Open in FC",\ variant: "solid",\ onClick(close) {\ let URL = `http://helpdesk:8010/app/hd-ticket/${doc?.name}`;\ window.open(URL, "_blank");\ },\ },\ // add more actions\ ],\ });\ }\ });\ },\ },\ {\ label: "Close this ticket",\ onClick: () => {\ $dialog({\ title: "Close this ticket?",\ message: "Are you sure you want to mark this close this ticket?",\ actions: [\ {\ label: "Close",\ theme: "red",\ variant: "solid",\ onClick(close) {\ updateField("status", "Closed", () => {\ createToast({\ title: "Ticket has been closed",\ icon: "alert-circle",\ });\ close();\ });\ },\ },\ {\ label: "Cancel",\ variant: "outline",\ onClick(close) {\ close();\ },\ },\ ],\ });\ },\ },\ ],\ },\ ]; if (doc.status !== "Closed") { actions.push({ label: "Close the ticket", onClick: () => { $dialog({ title: `Close ticket: ${doc.name}`, message: "Are you sure you want to close this ticket?", actions: [\ {\ label: "Close",\ theme: "red",\ variant: "solid",\ onClick(close) {\ updateField("status", "Closed", () => {});\ close();\ },\ },\ {\ label: "Cancel",\ variant: "outline",\ onClick(close) {\ close();\ },\ },\ ], }); }, }); } return { actions, }; } Last updated 1 month ago Was this helpful? Submit Thanks! --- # Import Wizard ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/books.png) ### Books [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) The Import Wizard is a powerful tool that can allow you to: 1. Import Data from a `.csv` file 2. Make multiple entries quickly Basics ------ To use the Import Wizard navigate to it using the sidebar: `Setup > Import Wizard`. Or alternatively open the Quick Search, type "Import Wizard" and hit enter. ### The Interface Once the Import Wizard has been opened you will have to select and Import Type which decides the kind of entries to be imported. [![Select Import Type](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/select-import-type.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/select-import-type.png) After selecting the import type, you'll see the additional controls that are now available. [![Import Wizard Controls](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/import-wizard-controls.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/import-wizard-controls.png) ### Using a Template To import data you, it needs to fit some template for this, first click on the Save Import Template button. This will download a `.csv` template file. :::tip The Template.csv file The Template.csv file can be filled using any spreadsheet software. [![Import Template CSV](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/import-template-csv.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/import-template-csv.png) The Import Template has three rows: 1. Entry type row: Some entries have child tables and this indicates whether the column belongs to the child table. 2. Field label row: This tells us which field of the entry (or its child table) does the column belong to. 3. Field key row: This row allows the Import Wizard to auto assign the columns when the file is selected. If this row is not present then Column Assignment Bar can be used to assign the fields. ::: To use the Template.csv file you must 1. Import it into your spreadsheet software of choice 2. Enter the values in the spreadsheet cells 3. Export the sheet as a `.csv` file Once you have exported the `.csv` file, click on Select File to select the file. The Import Wizard will read the file and add rows to the table. ### Verifying and Importing You can now check the imported values and if everything seems right. If you want to remove a row, click on the row index to delete it. [![Import File Selected](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/import-file-selected.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/import-file-selected.png) :::tip The Add Row button You can click on the Add Row button to add an additional empty row to the bottom of the import table which can be edited to enter the required values. This feature can be used for making multiple entries quickly without even selecting a file. ::: :::info Fixing Conversion Errors If the Import Wizard couldn't convert a value then it will be marked with a red border. [![Conversion Error](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/import-conversion-error.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/import-conversion-error.png) You can hover over the field to view what the raw value was and fix the value to remove the error ::: Finally if everything is fine, click on Import Data to begin importing the data. ### After Importing Once import is done, you'll see the Import Complete modal [![Import Complete](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/import-complete.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/import-complete.png) Clicking on Show Me will take you to the List View of the newly created entries. Clicking on Done will reset the Import Wizard allowing you to make more entries. :::info Fixing Failed Imports If certain entries could not be imported then you can click on the Fix Failed button that is visible only on failed imports. Clicking it will clear all the successful imports and allow you to fix the failed ones and retry. ::: Picking Import Columns ---------------------- You can pick the specific columns you want to import by clicking on the `...` button and then clicking on `Pick Import Columns`. This will open the Pick Import Columns modal [![Pick Import Column](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/picking-import-columns.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/picking-import-columns.png) The fields marked by the red `*` are required fields and cannot be unselected. Other than these you can choose to keep or remove the rest of the columns. Removing a column will: 1. Remove it from the exported template. 2. Prevent it from being assigned to a column. Column Assignment Bar --------------------- The Column Assignment Bar is used to mark a column in the table as a certain field. This is useful if the file you have selected doesn't use the Import Wizard's template. Along with assigning columns you can even de-assign columns by selecting None [![Import Column Assignment](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/import-column-assignment.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/import-column-assignment.png) If None is selected then that column is ignored while importing data. Importing Entries with Child Tables ----------------------------------- Sales Invoice is an example of an entry with a child table. Here child table refers to the items table which lists all the items included in the sale. When importing entry with a child table: 1. Unique placeholder names should be provided even if the entry uses a Number Series. 2. Each row in the child table should be one row. 3. All rows of an entry should have the same non child table row data. For Example | Invoice Name | Customer | Item (Table Row) | Amount (Table Row) | | --- | --- | --- | --- | | A | Lin | Bat | 100 | | A | Lin | Ball | 50 | | B | Andy | Pen | 200 | | B | Andy | Pencil | 10 | | B | Andy | Ink | 80 | Here the import table has two Sales Invoices with unique names A, and B. Invoice A has two items and Invoice B has three items. Each item is a single row in the import table. And for every child table row in the import table the non child table data, i.e. Invoice Name and Customer are repeated. ::: warning Not following these guidelines may either cause the data to not be imported properly or to fail altogether. ::: Last updated 2 months ago Was this helpful? Submit Thanks! --- # Quick Search ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/books.png) ### Books [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) The Quick Search interface is a quick way to navigate around in Frappe Books. To activate it you can click on the search button in the header: [![Quick Search Bar](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/search-bar.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/search-bar.png) Or you can press `Ctrl + K` or `Cmd + K` depending on your operating system. Dialog ------ [![Quick Search Dialog](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/search-dialog.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/search-dialog.png) To search for anything type what you are looking for in the input bar at the top. ::: tip Fuzzy Search Because of the fuzzy search method used, you don't have to type the exact name of the thing you are searching. So if you make spelling mistakes it is fine, you will still find what you are looking for. ::: Each row in the search results is classified as one of the following Types: | # | Type | Color | Purpose | Example | | --- | --- | --- | --- | --- | | 1 | Docs\* | blue | Opens the selected entry | PAY-1001 | | 2 | List | teal | Opens the List View | Sales Items | | 3 | Create | green | Opens a Form or Quick Edit Form to create an entry | Purchase Invoice | | 4 | Report | yellow | Opens the selected report | General Ledger | | 5 | Page | red | Opens the page | Dashboard | ::: info Docs\* Rows of the _Docs_ type will show they type of entry it is. For example, Item or Purchase Invoice. ::: In the bottom section you will find the filters which will help you narrow your search results. Filters ------- Clicking on More Filters will display all the filters. [![Quick Search Filters](https://github.com/frappe/books_docs/raw/master/docs/miscellaneous/images/search-filters.png)](https://github.com/frappe/books_docs/blob/master/docs/miscellaneous/images/search-filters.png) There are two kinds of filters here. 1. Regular Filters: coloured buttons in the first row. 2. Doc Filters: blue coloured buttons after the first row. ::: tip Skip Filters Skip Child Tables and Skip Transactions are used to toggle multiple Doc Filters at once. ::: ### Regular Filters Clicking on one of the regular filters will exclude that type from the search. For example, if you unselect Doc then only List, Create, Report and Page type rows will show in the suggestions. ### Doc Filters Clicking on a Doc filter will exclude that kind of entry from the search. For example, if you unselect Payment, all Payments will be excluded from the search. Examples -------- The Quick Search functionality is very powerful, you can run various kind of queries just by entering a few letters. Here are a few examples. 1. Finding all the Sales Invoices created for Karen 2. Finding all the Purchases Invoices with the item Jacket 3. Finding the Payment for Purchase Invoice PINV-1099 4. Finding all Payments received from Jack ::: tip Keyword Order The order of the keyword doesn't matter. You can enter the search keywords in any order. ::: Last updated 2 months ago Was this helpful? Submit Thanks! --- # Dashboard ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/books.png) ### Books [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Dashboard show an overview of Cash Flow, Profit and Loss, Pending Payments and Expenses. You can access the Dashboard from the sidebar. [![Dashboard](https://github.com/frappe/books_docs/raw/master/docs/analytics/images/dashboard.png)](https://github.com/frappe/books_docs/blob/master/docs/analytics/images/dashboard.png) Period Selector --------------- All sections of the Dashboard have a Period Selector. The default value is **This Year**. There are three options. Consider today's date as 16 Jun, 2022. The three options will show analytics for the given range: | # | Option | From | Until (Today) | | --- | --- | --- | --- | | 1 | This Year | 16 Jun, 2021 | 16 Jun, 2022 | | 2 | This Quarter | 16 Mar, 2022 | 16 Jun, 2022 | | 3 | This Month | 16 May, 2022 | 16 Jun, 2022 | ::: info Options The Cashflow and the Profit and Loss chart don't show the **This Month** option. ::: Cashflow -------- [![Cashflow](https://github.com/frappe/books_docs/raw/master/docs/analytics/images/cashflow.png)](https://github.com/frappe/books_docs/blob/master/docs/analytics/images/cashflow.png) The Cashflow chart shows the total amount of money being transferred into and out of your company over a period. ::: tip Cashflow The Cashflow chart is calculated from the Cash and Bank account balances. ::: ::: info Hover Hover tooltip shows the Inflow or Outflow amount for that month. ::: Pending Payments ---------------- [![Pending Payments](https://github.com/frappe/books_docs/raw/master/docs/analytics/images/pending-payments.png)](https://github.com/frappe/books_docs/blob/master/docs/analytics/images/pending-payments.png) Pending Payments shows the invoice paid and unpaid (outstanding) amounts. It has two sub-sections 1. The Sales Invoice section shows the total outstanding amount which is pending from your customers for your sales. 2. The Purchase Invoice section shows the total outstanding amount that you have to pay to your suppliers for your purchases. ::: info Hover Hover tooltip shows the number of Paid and Unpaid invoices. ::: Profit and Loss --------------- [![Profit and Loss Bar](https://github.com/frappe/books_docs/raw/master/docs/analytics/images/pnl-bar.png)](https://github.com/frappe/books_docs/blob/master/docs/analytics/images/pnl-bar.png) This chart shows the profit (or loss) per month for a given period. ::: tip Profit and Loss Profit and Loss is the difference between the Income and Expense accounts. ::: ::: info Hover Hover tooltip shows the Profit or Loss amount for that month. ::: Top Expenses ------------ [![Top Expenses](https://github.com/frappe/books_docs/raw/master/docs/analytics/images/top-expenses.png)](https://github.com/frappe/books_docs/blob/master/docs/analytics/images/top-expenses.png) This section shows your top five expenses sorted from your highest expenses to lowest expenses by category. ::: tip Expenses The Top Expenses chart is calculated from the Expense account balances. ::: Last updated 2 months ago Was this helpful? Submit Thanks! --- # Accounting Basics ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/books.png) ### Books [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) A small primer to get you up to speed on the concepts of accounting. Let's understand the concept of accounting with the example of an imaginary business that is just starting out. **Owner Investment**: Let’s say we’re starting a Home Interior business and we have ₹5,00,000 of capital to start our business. > Bank balance will initially be ₹5,00,000. **First Expense**: We will need an operating place where we can work and meet clients. For this, we rent out a co-working space for ₹40,000 per month. This is our first expense. > Bank balance will now be ₹5,00,000 - ₹40,000 = ₹4,60,000. **First Income**: We have invested some cash, and we have a working place. Now we make our first sale having a value of ₹30,000. We earned ₹30,000 from our first customer. This is our first income. > Bank balance at this point will be ₹4,60,000 + ₹30,000 = ₹4,90,000. **Accounts Payable**: Finally, Let’s say we decided to hire a Web Agency to build a website for us, they charge ₹50,000 which will be paid after 2 months from current date. At this point we haven’t paid them any money, but we are liable to pay them in the future. This is a liability and will be recorded under Accounts Payable. Events and Accounts ------------------- Let’s list these events down in a table: | # | Event | Amount | | --- | --- | --- | | 1 | Owner Investment | \+ ₹5,00,000 | | 2 | Rent | \- ₹40,000 | | 3 | Sales | \+ ₹30,000 | | 4 | Accounts Payable | \- ₹50,000 | | 5 | _Total_ | _₹4,40,000_ | Now, let's categorize these into the five types of Accounts and list their final balances: | # | Account | Amount | | --- | --- | --- | | 1 | Asset (Bank) | ₹4,90,000 | | 2 | Liabilities (Accounts Payable) | ₹50,000 | | 3 | Equity (Owner Investment) | ₹5,00,000 | | 4 | Income (Sales) | ₹30,000 | | 5 | Expense (Rent) | ₹40,000 | Impact on Accounts ------------------ Let’s take a look at each transaction and understand which accounts will get affected, from an accounting point-of-view: ### 1\. Cash Investment Since you, the owner, invested money into the business, it is a liability. So, Accounts Payable, which is a Liability account, is increased by ₹5,00,000. Also, the money in the Bank Account, which is an Asset account, is increased by ₹5,00,000. | Account | Credit | Debit | | --- | --- | --- | | Accounts Payable | ₹5,00,000 | 0 | | Bank Account | 0 | ₹5,00,000 | ### 2\. Rent Rent is an immediate expense, so it is recorded in the Rent Account, which is an Expense account, it is increased by ₹40,000. Also, the money is spent from the Bank Account, which is an Asset account, it is decreased by ₹40,000. | Account | Credit | Debit | | --- | --- | --- | | Rent Account | 0 | ₹40,000 | | Bank Account | ₹40,000 | 0 | ### 3\. First Sale We got an immediate payment, it is recorded in Sales Account, which is an Income account, the balance is increased by ₹30,000. Also, we received the money in our Bank Account directly, so it’s balance increases by ₹30,000. | Account | Credit | Debit | | --- | --- | --- | | Income Account | ₹30,000 | 0 | | Bank Account | 0 | ₹30,000 | ### 4\. Hiring a Web Agency We hired a Web Agency for some work, and we are liable to pay them in the future. This is recorded in Accounts Payable by increasing the amount by ₹50,000. Since this is an expense for us, we also increase the balance in the Vendor Expense Account by ₹50,000. | Account | Credit | Debit | | --- | --- | --- | | Accounts Payable | ₹50,000 | 0 | | Expense Account | 0 | ₹50,000 | * * * As you might have noticed, every transaction we do in our business affects two accounts. This is the basis of double-entry bookkeeping system. You can test this out by creating a **Sales Invoice** in Frappe Books, and then check the **General Ledger Report** to see which accounts were affected. Credit and Debit ---------------- The words Credit and Debit mean different things when applied to different accounts. * For **Assets** and **Expense** accounts Credit implies a decrease in balance and Debit implies an increase in balance. * For **Liabilities** and **Income** accounts Credit implies an increase in balance and Debit implies and decrease in balance. ::: tip AEDLIC You can remember this by the abbreviation **AEDLIC** which would stand for: **A**ssets and **E**xpenses **D**ebit, **L**iabilities and **I**ncome **C**redit ::: Last updated 2 months ago Was this helpful? Submit Thanks! --- # Student Applicant ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **A Student Applicant record gets created when a student applies to your institute for admission.** You can Approve or Reject a student applicant. By accepting a student applicant you can add them to the student master. To access student Applicant, go to: > Home > Education > Admission > Student Applicant 1\. Prerequisites ----------------- Before creating a Student Applicant, it is advisable to first create the following: 1. [Academic Term](https://docs.frappe.io/education/academic-term) 2. [Academic Year](https://docs.frappe.io/education/academic-year) 3. [Program](https://docs.frappe.io/education/program) 2\. How to create a Student Applicant ------------------------------------- 1. Go to the student Applicant and click on New. 2. Enter the **First Name** of the student Applicant. 3. Enter the **Program** for which the student has applied. 4. Enter the **Student Email Address**. 5. Save. ![Student Applicant](https://docs.frappe.io/files/education-student-applcant-1.gif) 3\. Features ------------ ### 3.1 Online Application via a Web Form A Student Applicant gets automatically created when a student applies online. This can be made possible through the Student Applicant Web Form which is created by default in the system. Search for "[Web Form List](https://docs.frappe.io/website/web-form) " in the awesome bar to access the list of all the web forms in the system. Once the student applies, the status of the application by default is "Applied". You can either "Approve" or "Reject" the form. ![Student Applicant](https://docs.frappe.io/files/education-student-applicant-5.png) Once the application is approved, you can "Enroll" the student to a program. When you click the **Enroll** button, the system shall create a student against that applicant and redirect you to the [Program Enrollment form](https://docs.frappe.io/education/program-enrollment) . ![Student Applicant](https://docs.frappe.io/files/education-student-applcant-6.gif) > Note: Once a student is created against the student applicant, the system will set the application status to 'Admitted' and will not allow you to change the application status unless the student record is deleted. 4\. Video Tutorial for Student Application ------------------------------------------ Last updated 2 months ago Was this helpful? Submit Thanks! --- # Student Group ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083734.png) ### Education [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **A student group is a collection of students from the same batch or taking the same course.** For example, if a group of students studying the same program together will be called a student batch, then from within this group, the cluster of students who have taken up the same elective course will be called a Student Group. ![Student Group](https://docs.frappe.io/files/education-student-workflow.png) To access Student Group, go to: > Home > Education > Student > Student group 1\. Prerequisites ----------------- Before creating a Student group, it is advisable that you first create the following: 1. [Student](https://docs.frappe.io/education/student) 2. [Program Enrollment](https://docs.frappe.io/education/program-enrollment) 3. [Student Batch name](https://docs.frappe.io/education/student-batch-name) 4. [Student Category](https://docs.frappe.io/education/student-category) 5. [Instructor](https://docs.frappe.io/education/instructor) 2\. Creating a Student Group ---------------------------- 1. Go to Student Group List and click on New. 2. **Group Based On**: Select the basis on which you would like to create the student group. The three options available are: * Batch: List of all the students from within a specific batch will be fetched in this case. * Course: Lst of all the students who have enrolled for a specific course will be fetched in this case. * Activity: You can select this option when you want to create a group of students for certain activities happening in the school. 1. **Student Group Name**: Enter the name of the student group. 2. Save. ![Student Group](https://docs.frappe.io/docs/v13/assets/img/education/education-student-group-1) ### 2.1. Additional Options while creating a Student Group Apart from the above mandatory options, the following fields should also be filled in the form to create a Student Group: 1. Select the **Academic Year** and **Academic Term** for which the Student Group is being made. 2. **Program**: Select the Program for which the Student Group is being made. 3. **Batch**: Select the Batch based on which you would want to fetch the list of students for the student group. 4. **Max Strength**: Enter the Maximum number of students that can be a part of this Student Group. If the number of selected students in the group is more than the Max Strength, the system will not allow you to save this group and an error will be shown. ![Student Group](https://docs.frappe.io/files/education-student-group-max-student-limit-error.png) 1. **Student Category**: If you want the students of a specific category to be a part of this group, you can select that. 2. **Course**: This option only appears when then Group is Based on a Course. You can select a particular course here, and a list of only those students who have been enrolled in this course would be fetched to create this student group. ### 2.2. Features: * **Students**: Enter the names of the students that you wish to add to this Student Group. The student list will be fetched according to the parameters selected above, like Academic Year, Academic Term, Batch, Program, Course, etc. * **Get Students**: Based on the parameters selected above, the system will automatically fetch the list of students, and all the students who have the criteria matching with the Student Group, will be enlisted in the Students list once you click on 'Get students'. > Note: You have to select the students Manually for an Activity-Based group as this group may not have any defined criteria and any student can be selected to be added in this group. **Get Students** will not be functional in this condition. * **Instructors**: Select the Instructors who will be teaching or mentoring this particular group of students. ![Student Group](https://docs.frappe.io/files/education-student-group-4.png) 3\. After creating a Student Group ---------------------------------- Once the student group has been created and saved, the following can be created from the Student group: 1. **Attendance**: You will be redirected to [Student Attendance Tool](https://docs.frappe.io/education/student-attendance-tool) through which you can mark the attendance of all the students for a particular date. 2. **Course Schedule**: You will be redirected to [Course Schedule](https://docs.frappe.io/education/course-schedule) , wherein you will be able to see the schedule for this student group and further you can also create a New Course Schedule for the students in this group. 3. **Assessment Plan**: You will be redirected to [Assessment Plan](https://docs.frappe.io/education/assessment_plan) list, where all the assessment plan for your student group will be listed and you will also be allowed to create a New Assessment Plan for the group. 4. **Update Email Group**: Once you select this option if the Email Ids of the Students in this group will be added to the Email Group and you will be able to send newsletters to all the subscribers in this Student Group. ![Student Group](https://docs.frappe.io/files/education-student-group-update-email.png) 1. **Newsletters**: You will be able to send [Newsletters](https://docs.frappe.io/CRM/newsletter) to all the subscribers from within the student group with this option. ![Student Group](https://docs.frappe.io/files/education-student-group-4.png) 4\. Video --------- .embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } Last updated 2 months ago Was this helpful? Submit Thanks! --- # Loan Security Type ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083723.png) ### Lending [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **A loan security type is a way to classify securities/collaterals based on types.** Depending on the type of loan security, you can categorize a security under its respective type like stocks, bullion, property, etc. ![](https://docs.frappe.io/files/BrXjKoR.png) To access the Loan Security Type, go to: > **Home > Lending > Loan Security> Loan Security Type** **1\. How to create a Loan Security Type** ------------------------------------------ 1. Go to the Loan Security Type List, and click on Add Loan Security Type. 2. Entry security type, haircut, and loan-to-value ratio. 3. Save Last updated 3 months ago Was this helpful? Submit Thanks! --- # Bank Account ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083723.png) ### Lending [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) Non-Banking Financial Companies (NBFCs), maintain different disbursement and payment accounts that are crucial elements in managing the flow of funds for loans and other financial services. A disbursement account in the context of NBFCs is used to manage the release of loan funds to borrowers. This account is an integral part of the loan process, where the NBFC controls the outflow of funds to ensure they are directed correctly. A payment account in NBFCs is used to manage incoming funds, primarily loan repayments, and other payments related to financial services provided by the NBFC. Frappe Lending allows users to map these accounts in the Bank Account master. To access the Bank Account, go to: > **Home > Lending > Banking > Bank Account** **1\. Prerequisites** --------------------- Before creating a Loan Product, it is advised to create the following: * Company * Bank **2\. How to create a Bank Account** ------------------------------------ 1. Go to the Bank Account List, and click on Add Bank Account. 2. Enter the bank account name, select the bank, add the ledger from the chart of accounts and check "Is Company Account" and add the company. 3. Save ![](https://docs.frappe.io/files/qV5zp9G.png) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Loan Security Price ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083723.png) ### Lending [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) A Loan Security Price is the security/collateral rate pledged against a loan for a specific period. This rate is auto-applied if a loan security is pledged/assigned against a loan during that specific period. To access the Loan Security Pricie, go to: > **Home > Lending > Loan Security > Loan Security Price** **1\. Prerequisites** --------------------- Before creating a Loan Product, it is advised to create the following: * **Loan Security** **2\. How to create a Loan Security Price** ------------------------------------------- 1. Go to the Loan Security Price List, and click on Add Loan Security Price. 2. Select the Loan Security, and enter the rate and validity period. 3. Save ![](https://docs.frappe.io/files/QGjMbdX.png) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Loan Security ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083723.png) ### Lending [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **A Loan Security is the actual security that is going to be pledged against a loan.** During a loan process, if the loan for which the customer is applying is a secured loan then some security needs to be pledged against that loan. Loan Security specifies the actual security that is going to be pledged against a Loan. To access the Loan Security, go to: > **Home > Lending > Loan Security > Loan Security** **1\. Prerequisites** --------------------- Before creating a Loan Security, it is advised to create the following: * Loan Security Type **2\. How to create a Loan Security** ------------------------------------- 1. Go to the Loan Security List, and click on Add Loan Security. 2. Enter the loan security name/code, loan security type. 3. Save ![](https://docs.frappe.io/files/xzZMDAj.png) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Loan Disbursement ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083723.png) ### Lending [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **Loan disbursement is the process of releasing the approved loan funds from the lender to the borrower or directly to a third party, such as a seller or service provider, depending on the type of loan. This marks the stage where the borrower can access the funds for the intended purpose, such as purchasing a home, car, or funding a business. This is also the stage where the lender starts loan accounting in his system.** To access the Loan Disbursement, go to: > **Home > Lending > Disbursement and Repayment> Loan Disbursement** **1\. Prerequisites** --------------------- Before creating a Loan Disbursement, it is mandatory to create the following: * Loan **2\. How to create a Loan Disbursement** ----------------------------------------- 1. Go to the Loan Disbursement List, and click on Add Loan Disbursement. 2. Enter the loan account number and the disbursement amount. 3. Optional user can also select the bank account ledger of disbursement or else the default one from Loan Product will be used 4. Save **3\. Withholding Security Deposit** ------------------------------------ Optionally users can withhold one EMI as a security deposit while disbursing the loan, for this all the user has to do is enable the "Withhold Security Deposit" checkbox during the disbursement. ![Security Deposit](https://docs.frappe.io/files/Security%20Deposit.png) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Loan Booking ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083723.png) ### Lending [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) ![Loan Cycle](https://docs.frappe.io/files/Loan%20Cycle.png) **Loan booking refers to the process of officially recording a loan in the financial institution's system after it has been approved and the terms have been finalized. This is a critical step in the loan lifecycle, as it marks the point at which the loan becomes an active obligation for both the lender and the borrower.** To access the Loan, go to: > **Home > Lending > Loan > Loan** **1\. Prerequisites** --------------------- Before creating a Loan Product, it is advised to create the following: * Applicant (Customer, Employee, or a Member) * Company * Loan Product **2\. How to create a Loan** ---------------------------- 1. Go to the Loan List, and click on Add Loan. 2. Enter the loan details like loan product, applicant, tenure, posting date, etc. 3. Save 4. Repayment Frequencies * * * Irrespective of the repayment schedule type users can select a frequency like Monthly, Weekly, Bi-weekly, Quarterly, One Time as per their requirement. Based on this frequency the repayment schedule will be generated. ![](https://docs.frappe.io/files/loan-repayment-frequency.png) 4. Adding moratorium during loan booking * * * A **moratorium** in a loan context refers to a temporary suspension or postponement of loan repayments for a specified period of time, during which the borrower is not required to make any payments towards the loan principal or interest. The moratorium period is usually granted during times of financial hardship, economic downturns, or in special circumstances such as the COVID-19 pandemic. It allows borrowers relief from financial stress, giving them time to stabilize their finances before resuming regular loan payments. To add a moratorium, the user can mention the Moratorium Tenure and moratorium type at the loan booking stage ![](https://docs.frappe.io/files/chocp3b.png) There are two moratorium types available, if EMI is selected, both interest and principal are not applicable and if the Principal is selected the only interest is payable, and the principal component is not applicable. 5. Revolving limits for Line Of Credit loans * * * **Revolving limits** in **line of credit loans** refer to the maximum amount of credit that a borrower can access and use on a recurring basis. A **line of credit (LOC)** is a flexible loan option that allows borrowers to draw funds as needed, up to a specified credit limit, repay the borrowed amount, and then access the credit again without having to apply for a new loan. This process is known as revolving credit because the credit becomes available again as the borrower repays it, up to the original limit. ![](https://docs.frappe.io/files/MuuLwuj.png) 6. Loan Account Freezing (Death Marking) * * * If the borrower dies or is unable to make the repayments due to any circumstances the loan account can be frozen. Upon freezing the accounts the loan interest accrual and demand generation stops. ![Freeze Loan Account](https://docs.frappe.io/files/Freeze%20Loan%20Account.png) Last updated 3 months ago Was this helpful? Submit Thanks! --- # Point of Sale (POS) ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/books.png) ### Books [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) **POS** (Point of Sale) refers to the time and place where retail transactions occur. This system enables efficient sales processing, payment reconciliation, and shift management for retail environments. ### 1\. Open POS Shift ![](https://docs.frappe.io/private/files/Screenshot%20from%202025-08-11%2009-48-11.png) Before initiating sales, a POS shift must be opened to record opening balances and enable accurate tracking of cash and other payment methods throughout the session. **Steps to Create an Open POS Shift** 1. Cash in Denominations Enter the quantity of each currency denomination (e.g., ₹1000, ₹500, ₹100). The system will automatically calculate the total opening cash amount based on these inputs. 2. Opening Amounts by Payment Method * The calculated cash amount is automatically populated under the “Cash” payment method. * Opening balances for other payment methods (e.g., Card, UPI, Wallet) can be entered if applicable. 3. Once all amounts are verified, click Submit. The POS shift will be marked as open, recording the shift’s opening date and time. ### 2\. Creating a POS Invoice ![](https://docs.frappe.io/private/files/Screenshot%20from%202025-08-11%2010-16-20.png) After opening a POS shift, sales billing can begin through the POS interface. **How to create a POS Invoice ?** 1. Go to the POS interface and choose a customer for the sale. 2. From the item list displayed on the left, click on the items to add them to the cart. 3. Adjust the quantity for each item as needed. 4. To change item rates or apply discounts, ensure these options are enabled in the POS Settings. 5. Verify the grand total and the total quantity in the summary section at the bottom. 6. Click the Pay button and select the desired payment method. 7. Submit the sales invoice when prompted to complete the transaction. 8. Once the invoice is submitted, you can print the POS invoice directly by selecting the Pay and Print option. ### 3\. Adding an Item ![](https://docs.frappe.io/private/files/Screenshot%20from%202025-08-11%2011-24-53.png) Items can be selected in two ways: by clicking on the item name or by scanning the barcode. * Enter Barcode / Weight-enabled barcode in the box as shown in the image, the item will be automatically added to the cart. * If the product list in the dropdown is very long, use the search field by typing the product name in the search box. **Filter by Group:** A field that allows filtering and displaying items based on their assigned item group. When an item group is selected from the dropdown list, only items belonging to that group are shown. ![](https://docs.frappe.io/private/files/Screenshot%20from%202025-08-11%2011-10-06.png) * To change the quantity of an item, click the expand arrow and either enter the desired quantity in the **Transfer Quantity** field or use the up/down arrows to adjust it. * To remove an item from the cart, click the delete button next to the corresponding item. ### 4\. Additional POS Features ![](https://docs.frappe.io/private/files/Screenshot%20from%202025-08-12%2011-30-14.png) **1.Grid View:** Displays items in a grid format with images when the grid view icon is clicked. **2.[Sales Invoice](https://docs.frappe.io/books/sales-invoices) List:** Redirects to the Sales Invoice List. **3.[Loyalty Program](https://docs.frappe.io/books/loyalty-program) :** Shows the loyalty points earned by the selected customer. Points can be redeemed from this view. The button is disabled if the customer has no loyalty points. **4.[Coupon Code](https://docs.frappe.io/books/coupon-code) :** Allows redemption and application of available coupon codes for the selected items. The button is disabled if no coupon codes are available. **5.[Price List](https://docs.frappe.io/books/price-list) :** Displays applicable price lists for the selected items, allowing you to apply them. The button is disabled if no price list is available. **6.[Item Enquiry](https://docs.frappe.io/books/item-enquiry) :** Allows the user to record and track specific item-related queries.This feature helps maintain detailed records of customer enquiries for better follow-up and service. ### 5\. Cart Actions ![](https://docs.frappe.io/private/files/Screenshot%20from%202025-08-11%2012-06-19.png) * Total Quantity: The Total Quantity refers to the combined number of all items included in a transaction or order. * Item Discounts: The Item Discounts refer to price reductions applied to specific products or services in the order. * Grand Total: The Grand Total is the final amount payable after applying all discounts, charges, and taxes to the subtotal. * Save Button: The system immediately stores the current transaction as a Draft Invoice, retaining all entered details for future review, modification, or completion. * Cancel Button: The system discards the current transaction and resets the POS interface to its default state, ready for a new entry. * Held Button: The system displays two sections: * Saved - Shows all transactions that have been saved but not yet submitted. * Submitted – Displays all submitted invoices, including those that are partially paid. ![](https://docs.frappe.io/private/files/Screenshot%20from%202025-08-11%2014-22-42.png) A search function is available within the Held section to quickly locate invoices by their invoice name. * Return Button: It displays a list of all return invoices, and selecting an invoice will redirect the user and add its items to the POS cart. ![](https://docs.frappe.io/private/files/Screenshot%20from%202025-08-11%2014-28-48.png) A search function is available to quickly locate invoices by their invoice name. * PAY Button: After adding items and selecting the customer, click the **Pay** button to view available payment methods, including **Cash**, **Bank**, and **Transfer**; upon selection, the payable amount will be displayed for confirmation. ### 6\. Payment Workflow ![](https://docs.frappe.io/private/files/Screenshot%20from%202025-08-11%2014-30-54.png) 1. Click Pay after adding items and selecting the customer. 2. Choose a payment method (e.g., Cash, Bank, Transfer). The payable amount is displayed for confirmation. Available payment actions: * Submit: Marks the invoice as submitted and saves it under Held > Submitted. * Cancel: Cancels the payment process and closes the payment interface. * Pay: Completes the payment and generates the invoice. * Pay & Print: Completes the payment, generates the invoice, and prints it immediately. ### 7\. Close POS Shift ![](https://docs.frappe.io/private/files/Screenshot%20from%202025-08-11%2014-53-23.png) The Close POS Shift feature is used to end a POS shift by recording final cash counts, calculating payment totals, and reconciling amounts. 1. Closing Cash * The cashier can manually enter the quantity of each cash note or coin, with values initially pre-filled from the Opening Cash. * When the counts are updated, the system automatically recalculates the total Closing Cash and displays the difference between the Closing Amount and the Expected Amount. 2. Closing Amounts * It displays a read-only table showing the Payment Method, Opening Amount, Expected Amount, Closing Amount, and Difference Amount for each payment type. * This section is used for reconciliation, helping identify any cash shortages or surpluses by comparing the Closing Amount (entered for Cash; zero for non-cash) against the Expected Amount. The **Submit** button validates all closing amounts, sets the Closing Date, and links the record to the Opening Shift. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Create an App ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083729.png) ### Framework [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Tutorial](https://docs.frappe.io/framework/user/en/tutorial/install-and-setup-bench) [Learn](https://school.frappe.io/lms/courses?category=Framework) [Discuss](https://discuss.frappe.io/c/framework/5) [Website](https://frappe.io/framework) [](https://github.com/frappe/frappe "GitHub") Create a Frappe app scaffold using the bench CLI. Create app ---------- Before we start, make sure you're in a bench directory. To confirm, run `bench find .`: $ bench find . /home/frappe/frappe-bench is a bench directory! To create our Library Management app, run the `new-app` command: bench new-app library_management You should get some prompts, and output like the following. You can enter information manually, or press enter to select the defaults App Title (default: Library Management): App Description: Library Management System App Publisher: Faris Ansari App Email: faris@example.com App Icon (default 'octicon octicon-file-directory'): App Color (default 'grey'): App License (default 'MIT'): 'library_management' created at /home/frappe/frappe-bench/apps/library_management Installing library_management $ ./env/bin/pip install -q -U -e ./apps/library_management $ bench build --app library_management yarn run v1.22.4 $ FRAPPE_ENV=production node rollup/build.js --app library_management Production mode ✔ Built js/moment-bundle.min.js ✔ Built js/libs.min.js ✨ Done in 1.95s. You will be prompted with details of your app, fill them up and an app named `library_management` will be created in the `apps` folder. To see a complete list of all icons supported in the octicons library, check out [https://primer.style/octicons/](https://primer.style/octicons/) App directory structure ----------------------- Your app directory structure should look something like this: apps/library_management ├── README.md ├── library_management │ ├── hooks.py │ ├── library_management │ │ └── __init__.py │ ├── modules.txt │ ├── patches.txt │ ├── public │ │ ├── css │ │ └── js │ ├── templates │ │ ├── __init__.py │ │ ├── includes │ │ └── pages │ │ └── __init__.py │ └── www └── pyproject.toml * **library\_management:** This directory will contain all the source code for your app * **public**: Store static files that will be served from Nginx in production * **templates**: Jinja templates used to render web views * **www**: Web pages that are served based on their directory path * **library\_management:** Default Module bootstrapped with app * **modules.txt:** List of modules defined in the app * **patches.txt**: Patch entries for database migrations * **hooks.py**: Hooks used to extend or intercept standard functionality provided by the framework * **pyproject.toml:** Specifies how your app is built, you can optionally add 3rd party Python dependencies here which will get installed when your app is installed. Next: [Create a Site](https://docs.frappe.io/framework/user/en/tutorial/create-a-site) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Install and Setup Bench ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083729.png) ### Framework [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Tutorial](https://docs.frappe.io/framework/user/en/tutorial/install-and-setup-bench) [Learn](https://school.frappe.io/lms/courses?category=Framework) [Discuss](https://discuss.frappe.io/c/framework/5) [Website](https://frappe.io/framework) [](https://github.com/frappe/frappe "GitHub") Bench is the command line tool to manage Frappe apps and sites. Installation ------------ If you haven't installed Bench, follow the [Installation](https://docs.frappe.io/framework/user/en/installation) guide. After installation, you should be able to run commands that start with `bench`. Run the following command to test your installation: $ bench --version 5.1.0 Create the frappe-bench directory --------------------------------- Let's create our project folder which will contain our apps and sites. Run the following command: $ bench init frappe-bench This will create a directory named `frappe-bench` in your current working directory. It will do the following: 1. Create a python virtual environment under `env` directory. 2. Fetch and install the `frappe` app as a python package. 3. Install node modules of `frappe`. 4. Build static assets. Directory Structure ------------------- . ├── Procfile ├── apps │ └── frappe ├── config │ ├── pids │ ├── redis_cache.conf │ ├── redis_queue.conf │ └── redis_socketio.conf ├── env │ ├── bin │ ├── include │ ├── lib │ └── share ├── logs │ ├── backup.log │ └── bench.log └── sites ├── apps.txt ├── assets └── common_site_config.json * **env**: Python virtual environment * **config**: Config files for Redis and Nginx * **logs**: Log files for every process (web, worker) * **sites:** Sites directory * **assets:** Static assets that served via Nginx in production * **apps.txt:** List of installed frappe apps * **common\_site\_config.json:** Site config that is available in all sites * **apps:** Apps directory * **frappe:** The Frappe app directory * **Procfile:** List of processes that run in development Start the Bench Server ---------------------- Now that we have created our `frappe-bench` directory, we can start the Frappe web server by running the following command: $ cd frappe-bench $ bench start 18:16:36 system | redis_cache.1 started (pid=11231) 18:16:36 system | redis_socketio.1 started (pid=11233) 18:16:36 system | redis_queue.1 started (pid=11234) 18:16:36 system | socketio.1 started (pid=11236) 18:16:36 system | web.1 started (pid=11237) 18:16:36 system | watch.1 started (pid=11240) 18:16:36 system | schedule.1 started (pid=11241) 18:16:36 system | worker_short.1 started (pid=11242) 18:16:36 redis_queue.1 | 11234:C 10 Jul 2020 18:16:36.320 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 18:16:36 redis_queue.1 | 11234:C 10 Jul 2020 18:16:36.320 # Redis version=6.0.5, bits=64, commit=00000000, modified=0, pid=11234, just started 18:16:36 redis_queue.1 | 11234:C 10 Jul 2020 18:16:36.320 # Configuration loaded 18:16:36 system | worker_long.1 started (pid=11244) 18:16:36 redis_cache.1 | 11231:C 10 Jul 2020 18:16:36.318 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 18:16:36 redis_cache.1 | 11231:C 10 Jul 2020 18:16:36.318 # Redis version=6.0.5, bits=64, commit=00000000, modified=0, pid=11231, just started 18:16:36 redis_cache.1 | 11231:C 10 Jul 2020 18:16:36.318 # Configuration loaded 18:16:36 redis_cache.1 | 11231:M 10 Jul 2020 18:16:36.320 * Increased maximum number of open files to 10032 (it was originally set to 256). 18:16:36 redis_queue.1 | 11234:M 10 Jul 2020 18:16:36.325 * Increased maximum number of open files to 10032 (it was originally set to 256). 18:16:36 system | worker_default.1 started (pid=11245) 18:16:36 redis_cache.1 | 11231:M 10 Jul 2020 18:16:36.337 * Running mode=standalone, port=13000. 18:16:36 redis_cache.1 | 11231:M 10 Jul 2020 18:16:36.337 # Server initialized 18:16:36 redis_cache.1 | 11231:M 10 Jul 2020 18:16:36.337 * Ready to accept connections 18:16:36 redis_queue.1 | 11234:M 10 Jul 2020 18:16:36.367 * Running mode=standalone, port=11000. 18:16:36 redis_queue.1 | 11234:M 10 Jul 2020 18:16:36.367 # Server initialized 18:16:36 redis_queue.1 | 11234:M 10 Jul 2020 18:16:36.367 * Ready to accept connections 18:16:36 redis_socketio.1 | 11233:C 10 Jul 2020 18:16:36.359 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 18:16:36 redis_socketio.1 | 11233:C 10 Jul 2020 18:16:36.359 # Redis version=6.0.5, bits=64, commit=00000000, modified=0, pid=11233, just started 18:16:36 redis_socketio.1 | 11233:C 10 Jul 2020 18:16:36.359 # Configuration loaded 18:16:36 redis_socketio.1 | 11233:M 10 Jul 2020 18:16:36.374 * Increased maximum number of open files to 10032 (it was originally set to 256). 18:16:36 redis_socketio.1 | 11233:M 10 Jul 2020 18:16:36.417 * Running mode=standalone, port=12000. 18:16:36 redis_socketio.1 | 11233:M 10 Jul 2020 18:16:36.418 # Server initialized 18:16:36 redis_socketio.1 | 11233:M 10 Jul 2020 18:16:36.418 * Ready to accept connections 18:16:37 socketio.1 | listening on *: 9000 18:16:41 web.1 | * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit) 18:16:41 web.1 | * Restarting with fsevents reloader 18:16:41 watch.1 | yarn run v1.22.4 18:16:41 watch.1 | $ node rollup/watch.js 18:16:42 watch.1 | 18:16:42 watch.1 | Rollup Watcher Started 18:16:42 watch.1 | 18:16:42 watch.1 | Watching... 18:16:42 web.1 | * Debugger is active! 18:16:42 web.1 | * Debugger PIN: 100-672-925 18:16:43 watch.1 | Rebuilding frappe-web-b4.css 18:16:44 watch.1 | Rebuilding frappe-chat-web.css 18:16:44 watch.1 | Rebuilding chat.js 18:16:45 watch.1 | Rebuilding frappe-recorder.min.js 18:16:48 watch.1 | Rebuilding checkout.min.js 18:16:48 watch.1 | Rebuilding frappe-web.min.js 18:16:51 watch.1 | Rebuilding bootstrap-4-web.min.js 18:16:52 watch.1 | Rebuilding control.min.js 18:16:54 watch.1 | Rebuilding dialog.min.js 18:16:57 watch.1 | Rebuilding desk.min.css 18:16:57 watch.1 | Rebuilding frappe-rtl.css 18:16:58 watch.1 | Rebuilding printview.css 18:16:58 watch.1 | Rebuilding desk.min.js 18:17:04 watch.1 | Rebuilding form.min.css 18:17:04 watch.1 | Rebuilding form.min.js 18:17:07 watch.1 | Rebuilding list.min.css 18:17:07 watch.1 | Rebuilding list.min.js 18:17:09 watch.1 | Rebuilding report.min.css 18:17:09 watch.1 | Rebuilding report.min.js 18:17:12 watch.1 | Rebuilding web_form.min.js 18:17:12 watch.1 | Rebuilding web_form.css 18:17:13 watch.1 | Rebuilding email.css 18:17:13 watch.1 | Rebuilding social.min.js 18:17:13 watch.1 | Rebuilding barcode_scanner.min.js 18:17:15 watch.1 | Rebuilding data_import_tools.min.js This will start several processes including a Python web server based on Gunicorn, redis servers for caching, job queuing and socketio pub-sub, background workers, node server for socketio and a node server for compiling JS/CSS files. The web server will start listening on the port `8000` but we don't have any sites yet to serve. Our next step is to create our app and create a site that will have this app installed. Make sure not to close the terminal where `bench start` is running. To run bench commands, create another terminal and cd into the `frappe-bench` directory. Good job on following the tutorial so far! Next: [Create an App](https://docs.frappe.io/framework/user/en/tutorial/create-an-app) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Create a DocType ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083729.png) ### Framework [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Tutorial](https://docs.frappe.io/framework/user/en/tutorial/install-and-setup-bench) [Learn](https://school.frappe.io/lms/courses?category=Framework) [Discuss](https://discuss.frappe.io/c/framework/5) [Website](https://frappe.io/framework) [](https://github.com/frappe/frappe "GitHub") DocType is analogous to a Model in other frameworks. Apart from defining properties, it also defines the behavior of the Model. Enable Developer Mode --------------------- Before we can create DocTypes, we need to enable developer mode on our bench. This will enable boilerplate creation when we create doctypes and we can track them into version control with our app. Go to your terminal and quit the bench server if it's already running then from the `frappe-bench` directory, run the following command: bench set-config -g developer_mode true bench start Creating a DocType ------------------ While in Desk, navigate to the **DocType List** using the [Awesomebar](https://docs.frappe.io/framework/user/en/desk#awesomebar) . This list will include DocTypes bundled with the framework, those that are a part of the installed Frappe apps and custom ones, which you can create specific to each site. The first doctype we will create is **Article**. To create it, click on New. 1. Enter Name as Article 2. Select Library Management in Module 3. Add the following fields in the Fields table: 1. Article Name (Data, Mandatory) 2. Image (Attach Image) 3. Author (Data) 4. Description (Text Editor) 5. ISBN (Data) 6. Status (Select) - Enter two options: Issued and Available (Type Issued, hit enter, then type Available) 7. Publisher (Data) Refer the following GIF to check how it should be done: ![Article DocType](https://docs.frappe.io/files/article-doctype.gif) After adding the fields, click on Save. You will see a **Go to Article List** button at the top right of the form. Click on it to go to the Article List. Here you will see a blank list with no records because the table has no records. Let's create some records. But before that, we need to clear the Desk cache. Click on the **Settings** dropdown on the right side of the navbar and click on **Reload**. Now, you should see the **New** button. Click on it and you will see the Form view of the Article doctype. Fill in the form and click on Save. You have created your first Article document. Go back to the list view and you should see one record. ![Article New Form](https://docs.frappe.io/files/article-new-form.gif) ### What happened when you created the Article DocType? **1\. Database Table** A database table with the name `tabArticle` was created with the fields we specified in the fields table. You can confirm this by checking it from the MariaDB console bench --site library.localhost mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2445938 Server version: 10.4.13-MariaDB Homebrew Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [_ad03fa1a016ca1c4]> desc tabArticle; +--------------+--------------+------+-----+-----------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+-----------+-------+ | name | varchar(140) | NO | PRI | NULL | | | creation | datetime(6) | YES | | NULL | | | modified | datetime(6) | YES | MUL | NULL | | | modified_by | varchar(140) | YES | | NULL | | | owner | varchar(140) | YES | | NULL | | | docstatus | int(1) | NO | | 0 | | | parent | varchar(140) | YES | MUL | NULL | | | parentfield | varchar(140) | YES | | NULL | | | parenttype | varchar(140) | YES | | NULL | | | idx | int(8) | NO | | 0 | | | article_name | varchar(140) | YES | | NULL | | | image | text | YES | | NULL | | | author | varchar(140) | YES | | NULL | | | description | longtext | YES | | NULL | | | isbn | varchar(140) | YES | | NULL | | | status | varchar(140) | YES | | Available | | | publisher | varchar(140) | YES | | NULL | | | _user_tags | text | YES | | NULL | | | _comments | text | YES | | NULL | | | _assign | text | YES | | NULL | | | _liked_by | text | YES | | NULL | | +--------------+--------------+------+-----+-----------+-------+ 21 rows in set (0.002 sec) MariaDB [_ad03fa1a016ca1c4]> The fields we specified in Title Case were converted to snake case automatically, and are used as the column names in the table. For e.g., `article_name`, `image`, `author` , and `description`. However, many other fields were created like `name`, `creation`, `modified`, `modified_by` . These are standard fields created for all doctypes. `name` is the primary key column. If you created a record with the Form, you can also run a standard select query to get the rows. MariaDB [_ad03fa1a016ca1c4]> select * from tabArticle; +------------+----------------------------+----------------------------+---------------+---------------+-----------+--------+-------------+------------+-----+-----------------------------+-- | name | creation | modified | modified_by | owner | docstatus | parent | parentfield | parenttype | idx | article_name | i +------------+----------------------------+----------------------------+---------------+---------------+-----------+--------+-------------+------------+-----+-----------------------------+-- | bd514646b9 | 2020-10-10 16:24:43.033457 | 2020-10-10 16:24:43.033457 | Administrator | Administrator | 0 | NULL | NULL | NULL | 0 | The Girl with all the Gifts | N +------------+----------------------------+----------------------------+---------------+---------------+-----------+--------+-------------+------------+-----+-----------------------------+-- MariaDB [_ad03fa1a016ca1c4]> **2\. Desk Views** There are a number of views that were also created for our DocType. The Article List is the list view that shows the records from the database table. The Form view is the view that is shown when you want to create a new document or view an existing one. **3\. Form Layout** If you notice, the layout of fields in the form is according to how you ordered them in the Fields table. For e.g., Article Name is the first field followed by Image which is followed by Author. In later parts of the tutorial we will learn how to customize this further. **4\. Boilerplate code** * * * **NOTE** Make sure you uncheck the 'Custom?' checkbox in the doctype configuration. Otherwise the files discussed below won't be generated. An explaination for this is given [here](https://discuss.erpnext.com/t/whats-the-difference-between-customize-form-vs-custom-doctype/42676/2) * * * If you look at the changes in your app, you should find a number of files that were created. Go to your terminal and from the `frappe-bench` directory run the following commands. $ cd apps/library_management $ git status -u On branch master Untracked files: (use "git add ..." to include in what will be committed) library_management/library_management/doctype/__init__.py library_management/library_management/doctype/article/__init__.py library_management/library_management/doctype/article/article.js library_management/library_management/doctype/article/article.json library_management/library_management/doctype/article/article.py library_management/library_management/doctype/article/test_article.py nothing added to commit but untracked files present (use "git add" to track) **article.json** - JSON file that defines the doctype attributes **article.js** - Client-side controller for the Form view **article.py** - Python controller for Article **test\_article.py** - Python Unit Test boilerplate for writing tests As you can see, a DocType describes a lot of things about the model. Not only does it define the table and column names but also how it will be rendered in various views in the Desk. Good job following the tutorial so far. Let's keep going! Next: [DocType Features](https://docs.frappe.io/framework/user/en/tutorial/doctype-features) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Create a Site ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/Group%2083729.png) ### Framework [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Tutorial](https://docs.frappe.io/framework/user/en/tutorial/install-and-setup-bench) [Learn](https://school.frappe.io/lms/courses?category=Framework) [Discuss](https://discuss.frappe.io/c/framework/5) [Website](https://frappe.io/framework) [](https://github.com/frappe/frappe "GitHub") Each site comes with a database. They may be customized throughsite specific scripting or Apps may be installed on them. Create a new site ----------------- To create a new site, run the following command from the `frappe-bench` directory: $ bench new-site library.localhost MySQL root password: Installing frappe... Updating DocTypes for frappe : [========================================] 100% Set Administrator password: *** Scheduler is disabled *** Current Site set to library.localhost This command will create a new database, so you need to enter your MariaDB root password. It will also ask to set the password for the Administrator user, just set a password that you won't forget. This will be useful later. Now, you will have a new folder named `library.localhost` in the `sites` directory. If site creation fails for any reason, you'll be prompted to roll back the changes. This will delete the `library.localhost` or equivalent in your sites directory, and delete the database/user that was created. This will allow you to easily retry without having to manually cleanup the unusable site. Site Directory Structure ------------------------ The site directory structure will look something like this: sites/library.localhost ├── indexes │ └── web_routes ├── locks ├── logs ├── private │ ├── backups │ └── files ├── public │ └── files └── site_config.json The `indexes` folder has indexes generated via Website Search. The `locks` folder maintains file based locks over in-site documents as well as indicators of the state of the site itself. As you can see, the `private` folder will contain any database backups and private files. Private files are user uploaded files that need authentication to be accessible. The `public` folder will contain files that are accessible without authentication. This can contain website images that should be accessible without login. The `site_config.json` file contains configuration that is specific to this site which should not be version controlled. This is similar to an environment variables file. If you look at the contents of the file, it contains the database configuration values for this site. { "db_name": "_ad03fa1a016ca1c4", "db_password": "pz1d2gN5y35ydRO5", "db_type": "mariadb" } Access site in your browser --------------------------- `bench` allows you to create multiple sites and access them separately in the browser on the same port. This is what we call multi-tenancy support in bench. Frappe will identify which site to serve by matching the hostname of the request with the site name, so you should be able to access your site on http://library.localhost:8000 If your site name doesn't end with `.localhost`, this will not work directly for you, because you have to tell your operating system that site\_name should point to localhost. To do that, you can add the following entry to your `/etc/hosts` file. 127.0.0.1 site_name This will map `library.localhost` to `localhost`. Bench has a convenient command to do just that. $ bench --site site_name add-to-hosts This will ask for your root password and will add an entry to your `/etc/hosts` file. ![Site Login Page](https://docs.frappe.io/files/site-login-page.png) Great, now you can access your site at `http://library.localhost:8000`. Congratulations for making it this far. Install app on site ------------------- To install our Library Management app on our site, run the following command: $ bench --site library.localhost install-app library_management Installing library_management... To confirm if the app was installed, run the following command: $ bench --site library.localhost list-apps frappe library_management You should see `frappe` and `library_management` as installed apps on your site. > When you create a new site, the `frappe` app is installed by default. Login to Desk ------------- To create DocTypes in our app, we must log in to Desk. Go to http://library.localhost:8000 and it should show you a login page. Enter Administrator as the user and password that you set while creating the site. ![Setup Wizard](https://docs.frappe.io/files/setup-wizard.png) After successful login, you will see the setup wizard. This is a one-time setup wizard used to set up localization details for your site. Go ahead, select your language, and complete the wizard. Good job making it this far! You should see the Desk that looks something like this: ![Desk](https://docs.frappe.io/files/desk.png) Site commands ------------- We ran a couple of bench commands with the `--site` option. These commands are called site commands. Here are some of the useful site commands. **Python Console** # access the python console $ bench --site library.localhost console Apps in this namespace: frappe, library_management In [1]: **MariaDB Console** # access the mariadb console $ bench --site library.localhost mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2333498 Server version: 10.4.13-MariaDB Homebrew Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [_ad03fa1a016ca1c4]> **Database Backup** $ bench --site library.localhost backup Backup Summary for library.localhost at 2020-10-06 23:21:17.277960 Config : ./library.localhost/private/backups/20201006_232116-library_test-site_config_backup.json 94.0B Database: ./library.localhost/private/backups/20201006_232116-library_test-database.sql.gz 217.4KiB Backup for Site library.localhost has been successfully completed You can see a list of all site commands by running the following command: $ bench --help Usage: bench frappe [OPTIONS] COMMAND [ARGS]... Options: --site TEXT --profile Profile --verbose Verbose --force Force --help Show this message and exit. Commands: add-system-manager Add a new system manager to a site add-to-email-queue Add an email to the Email Queue add-to-hosts Add site to hosts backup Backup browse Opens the site on web browser build Minify + concatenate JS and CSS files, build... build-message-files Build message files for translation build-search-index bulk-rename Rename multiple records via CSV file clear-cache Clear cache, doctype cache and defaults clear-website-cache Clear website cache console Start ipython console for a site data-import Import documents in bulk from CSV or XLSX... destroy-all-sessions Clear sessions of all users (logs them out) Next: Create a DocType Last updated 2 months ago Was this helpful? Submit Thanks! --- # Branch ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/hr.png) ### Frappe HR [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Learn](https://school.frappe.io/lms/courses) [Discuss](https://discuss.frappe.io/c/hr/22) [Website](https://frappe.io/hr) [](https://github.com/frappe/hrms "Github") **A Branch office is an outlet of a company located at a different location, other than the main office.** Frappe HR allows you to create and keep a record of the different branches of your organization. To access Branch, go to: > **Home > Human Resources > Employee > Branch** **1\. Prerequisites** --------------------- Before creating a Branch, it is mandatory you create the following documents: * [Company](https://docs.erpnext.com/docs/user/manual/en/company-setup) **2\. How to create a Branch** ------------------------------ 1. Go to the Branch list, click on New. 2. Enter the name of the Branch. 3. Save. ![Branch](https://frappehr.com/files/branch.png) You can link the Branch to the [Employee](https://docs.frappe.io/hr/employee) master. **3\. Related Topics** ---------------------- 1. [Employee](https://docs.frappe.io/hr/employee) 2. [Employment Type](https://docs.frappe.io/hr/employment-type) 3. [Department](https://docs.frappe.io/hr/department) 4. [Designation](https://docs.frappe.io/hr/designation) 5. [Employee Grade](https://docs.frappe.io/hr/employee-grade) 6. [Employee Group](https://docs.frappe.io/hr/employee-group) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Employment Type ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/hr.png) ### Frappe HR [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Learn](https://school.frappe.io/lms/courses) [Discuss](https://discuss.frappe.io/c/hr/22) [Website](https://frappe.io/hr) [](https://github.com/frappe/hrms "Github") **You can employ people under a number of categories each having their own wage and leave entitlements. This is called an Employment Type.** Frappe HR allows you to select an Employment Type from a pre-defined list or even create a new Employment Type based on your requirements. To access the Employment Type, go to: > **Home > Human Resources > Employee > Employment Type** **1\. How to create an Employment Type** ---------------------------------------- 1. Go to the Employment Type list, click on New. 2. Enter the Name of the Employment Type. 3. Save. ![Employment Type](https://frappehr.com/files/employment-type.png) The Employment Type can be linked to the [Employee](https://docs.frappe.io/hr/employee) master. **2\. Related Topics** ---------------------- 1. [Employee](https://docs.frappe.io/hr/employee) 2. [Employment Type](https://docs.frappe.io/hr/employment-type) 3. [Branch](https://docs.frappe.io/hr/branch) 4. [Department](https://docs.frappe.io/hr/department) 5. [Designation](https://docs.frappe.io/hr/designation) 6. [Employee Grade](https://docs.frappe.io/hr/employee-grade) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Department ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/hr.png) ### Frappe HR [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Learn](https://school.frappe.io/lms/courses) [Discuss](https://discuss.frappe.io/c/hr/22) [Website](https://frappe.io/hr) [](https://github.com/frappe/hrms "Github") **A Department is a specialized functional area or a division within an organization.** You can configure the Departments in your organization, set Leave Block List, and also Leave and Expense Approvers for the same. To access Department, go to: > Home > Human Resources > Employee > Department Department is a tree-structured master, which means you can create parent departments and sub-departments as shown below: ![Department Tree](https://frappehr.com/files/department-tree.png) > **Note:** The 'Is Group' checkbox needs to be checked if the Department is a parent department. **1\. Prerequisites** --------------------- Before creating a Department, it is advisable you create the following documents: * [Company](https://docs.erpnext.com/docs/user/manual/en/company-setup) **2\. How to create a Department** ---------------------------------- 1. Go to the Department list, click on New. 2. Enter Department name. 3. Select Company name. 4. Select Leave Block List (optional) applicable for this department. 5. Save. ![Department](https://frappehr.com/files/department.png) **3\. Features** ---------------- ### **3.1 Leave and Expense Approvers** You can set Leave and Expense Approvers for a particular Department in the 'Leave Approver' and 'Expense Approver' table respectively. ![Leave and Expense Approver](https://frappehr.com/files/leave-and-expense.png) > **Note:** Multiple Leave and Expense Approvers can be set for a particular Department. However, the first Approver in the list will be set as the default Approver. **4\. Related Topics** ---------------------- 1. [Employment Type](https://docs.frappe.io/hr/employment-type) 2. [Employee Grade](https://docs.frappe.io/hr/employee-grade) 3. [Employee Branch](https://docs.frappe.io/hr/branch) 4. [Employee Designation](https://docs.frappe.io/hr/designation) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Designation ESC ↵ to select ↑↓ to navigate ![](https://docs.frappe.io/files/hr.png) ### Frappe HR [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Learn](https://school.frappe.io/lms/courses) [Discuss](https://discuss.frappe.io/c/hr/22) [Website](https://frappe.io/hr) [](https://github.com/frappe/hrms "Github") **Designations are the official job titles given to employees.** With reference to company management, there are various stakeholders like directors, officers, managers and shareholders who guide a company towards the fulfillment of its business objectives. Frappe HR allows you to create various designations and also mention the skills required for the same. To access Designation, go to: > **Home > Human Resources > Employee > Designation** **1\. How to create a Designation** ----------------------------------- 1. Go to Designation list, click on New. 2. Enter the Designation name. 3. Enter Description and Required Skills (optional). 4. Save. ![Designation](https://frappehr.com/files/designation.png) > **Note: The skills required for an Employee of a particular Designation that are specified in the "Required Skills" section of the Designation doctype can be directly fetched in the** [**Employee Skill Map**](https://docs.frappe.io/hr/employee-skill-map) > **to evaluate an employee's performance based on his skills.** **3\. Related Topics** ---------------------- 1. [Employee](https://docs.frappe.io/hr/employee) 2. [Employment Type](https://docs.frappe.io/hr/employment-type) 3. [Branch](https://docs.frappe.io/hr/branch) 4. [Department](https://docs.frappe.io/hr/department) 5. [Employee Grade](https://docs.frappe.io/hr/employee-grade) 6. [Employee Skill Map](https://docs.frappe.io/hr/employee-skill-map) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Forgot Password ESC ↵ to select ↑↓ to navigate ![](https://frappe.io/files/cloud.png) ### Cloud [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://support.frappe.io/helpdesk/my-tickets/new) [Blog](https://frappe.io/blog?category=frappe-cloud) [](https://github.com/frappe/press "GitHub") [Website](https://frappe.io/cloud) [Community](https://discuss.frappe.io/c/frappe-cloud/) If you've forgotten your Frappe Cloud password, you can use the **forgot password** link in the login page to obtain instructions to recover your account ![](https://docs.frappe.io/files/zxILVOH.png) Last updated 2 months ago Was this helpful? Submit Thanks! --- # Disable Account / Cancel Subscription ESC ↵ to select ↑↓ to navigate ![](https://frappe.io/files/cloud.png) ### Cloud [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://support.frappe.io/helpdesk/my-tickets/new) [Blog](https://frappe.io/blog?category=frappe-cloud) [](https://github.com/frappe/press "GitHub") [Website](https://frappe.io/cloud) [Community](https://discuss.frappe.io/c/frappe-cloud/) If you no longer want to use Frappe Cloud services and you want to disable your account, follow these steps: 1. Login to your dashboard 2. Drop all the sites and servers 3. Click on Settings in the top bar 4. Under Team Actions section, click on the Disable button against Disable Account![Screenshot from 2023-12-04 19-41-08](https://docs.frappe.io/files/Screenshot%20from%202023-12-04%2019-41-08.png "Screenshot from 2023-12-04 19-41-08.png") 5. After you confirm, your account will get disabled * Your sites will get suspended * You won't be able to create new sites * Your billing will be paused > Frappe Cloud is not responsible for any refunds if the above steps are not followed properly before disabling or closing your account. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Login from Frappe apps ESC ↵ to select ↑↓ to navigate ![](https://frappe.io/files/cloud.png) ### Cloud [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://support.frappe.io/helpdesk/my-tickets/new) [Blog](https://frappe.io/blog?category=frappe-cloud) [](https://github.com/frappe/press "GitHub") [Website](https://frappe.io/cloud) [Community](https://discuss.frappe.io/c/frappe-cloud/) > This feature is only available for sites created through SaaS flow (i.e. [frappecloud.com/erpnext/signup](http://frappecloud.com/erpnext/signup) > ). 1. Go to desk of your site. 2. Click on `Login to Frappe Cloud` button inside the menu. ![Screenshot 2024-10-28 at 5.50.14 PM](https://docs.frappe.io/files/Screenshot%202024-10-28%20at%205.50.14%E2%80%AFPM.png "Screenshot 2024-10-28 at 5.50.14 PM.png") 3. It will take few seconds to initiate the login request, after that you will be presented a modal like this ![Screenshot 2024-10-28 at 5.51.08 PM](https://docs.frappe.io/files/Screenshot%202024-10-28%20at%205.51.08%E2%80%AFPM.png "Screenshot 2024-10-28 at 5.51.08 PM.png") 4. Check your mailbox. You will recieve an e-mail with a verification code. ![Screenshot 2024-10-28 at 5.51.51 PMb](https://docs.frappe.io/files/Screenshot%202024-10-28%20at%205.51.51%E2%80%AFPMdb8d68.png "Screenshot 2024-10-28 at 5.51.51 PMb.png") 5. Put the verification code in input box and click on `Verify` ![Screenshot 2024-10-28 at 5.52.15 PM](https://docs.frappe.io/files/Screenshot%202024-10-28%20at%205.52.15%E2%80%AFPM.png "Screenshot 2024-10-28 at 5.52.15 PM.png") 6. You should be now logged-in and redirected to Frappe Cloud dashboard ![Screenshot 2024-10-28 at 5.52.58 PM](https://docs.frappe.io/files/Screenshot%202024-10-28%20at%205.52.58%E2%80%AFPM.png "Screenshot 2024-10-28 at 5.52.58 PM.png") 7. You will also get a `Login Successful` banner ![Screenshot 2024-10-28 at 5.52.51 PM](https://docs.frappe.io/files/Screenshot%202024-10-28%20at%205.52.51%E2%80%AFPM.png "Screenshot 2024-10-28 at 5.52.51 PM.png") > Sometimes many browser block url redirection. In that case, there are two solutions - > > 1. Tap on `Click Here to login` link inside the modal. > > ![Screenshot 2024-10-28 at 5.52.51 PM](https://docs.frappe.io/files/Screenshot%202024-10-28%20at%205.52.51%E2%80%AFPM77e6e1.png "Screenshot 2024-10-28 at 5.52.51 PM.png") 2. Your browser will show a message that popup has been blocked. This message can be vary based on the browser. > > ![Screenshot 2024-10-28 at 5.52.36 PM](https://docs.frappe.io/files/Screenshot%202024-10-28%20at%205.52.36%E2%80%AFPM.png "Screenshot 2024-10-28 at 5.52.36 PM.png") > > In case of firefox, you can choose `Show https://....` option. Last updated 2 months ago Was this helpful? Submit Thanks! --- # Creating a new site ESC ↵ to select ↑↓ to navigate ![](https://frappe.io/files/cloud.png) ### Cloud [ERPNext](https://docs.frappe.io/erpnext) [Framework](https://docs.frappe.io/framework) [Cloud](https://docs.frappe.io/cloud) [Frappe HR](https://docs.frappe.io/hr) [Learning](https://docs.frappe.io/learning) [CRM](https://docs.frappe.io/crm) [Builder](https://docs.frappe.io/builder) [Insights](https://docs.frappe.io/insights) [Education](https://docs.frappe.io/education) [Helpdesk](https://docs.frappe.io/helpdesk) [Wiki](https://docs.frappe.io/wiki-v2) [Drive](https://docs.frappe.io/drive) [Books](https://docs.frappe.io/books) [Gantt](https://docs.frappe.io/gantt) [Print Designer](https://docs.frappe.io/print-designer) [Lending](https://docs.frappe.io/lending) [Studio](https://docs.frappe.io/studio) [Support](https://support.frappe.io/helpdesk/my-tickets/new) [Blog](https://frappe.io/blog?category=frappe-cloud) [](https://github.com/frappe/press "GitHub") [Website](https://frappe.io/cloud) [Community](https://discuss.frappe.io/c/frappe-cloud/) Simplest guide to creating a new site on Frappe Cloud 1. From the Sites tab on the dashboard, click on **New Site**. 2. Select the apps you want to install on your site ![](https://docs.frappe.io/files/adOvj8s.png) 3. Select the site version you want, and the site region you want.![](https://docs.frappe.io/files/YrCJl0a.png) 4. Select the appropriate plan you want for your site. For more details visit our [pricing page](https://docs.frappe.io/pricing) . ![](https://docs.frappe.io/files/jGRWR5c.png) 5. Choose a unique hostname for your site. Subdomain could be 5 to 32 characters long and contain lowercase alphabets, numbers, and hyphens. A subdomain can not start or end with hyphens.![](https://docs.frappe.io/files/XByVq6n.png) 6. It will take a few seconds for site creation depending on the apps you have chosen. 7. Click on Visit Site at the top of the page to access your site. 8. After site creation you will see a message, you can proceed to complete the setup wizard by clicking on login. You must log in and complete the setup wizard on your site. Analytics will be collected only after the setup is complete. > Note: All sites are only available on HTTPS. Last updated 2 months ago Was this helpful? Submit Thanks! ---