The goal of the series is to introduce new developers to Frappe development and best practices. We expect the developers to know Python / Flask to start off and at the end of the series, these developers would understand how to build new Frappe apps, including doctypes, scripts, reports, print formats and portal pages. This will be based on the new design.
Topics
Introduction to Frappe Framework and the series (~3-4 mins)
Welcome
What will you expect to learn
Who is this intended for (do the flask tutorial before you join)
Why is Frappe
A full stack framework - battries included
Metadata modeling
Out of the box admin interface
Build complex tools like ERPNext
Setting up Bench
Pre requisites
Installing bench from pip
Starting bench locally
Procfile - all the processes required to run frappe
Create your first site
Set /etc/hosts
site_config.json
Login
Creating an app
Introduction to apps
Create your first app
Explanation of what we are building - a library management system
Folder structure for bench (apps and sites folders)
Creating DocTypes
What is a doctype
Create a new one - add come fields
Show in database
Layouts - section and column breaks
Naming - by series or by name
Explain the commonly used fieldtypes
Linking DocTypes
Link Fields
Show links in dashboard
Creating Tables in DocTypes (parent child)
Create a child table (Library Loan / Library Loan Item)
Add to parent
DocType naming - how parent and child are named, singular, title case
Controllers - Python
Adding validations, business logic
Show the folder structure
Frappe ORM - get_doc, get_value etc.
Document Events - before_insert, validate, on_update, on_submit (introduce the idea of submission)
Debugging (print - shows up on the bench console, frappe.msgprint)
Controllers - JS
Handling change events
Common API
Commit and push (git)
Print Formats
Print Format Builder
Making HTML formats
Standard HTML (commit and push to app)
Reports
Report Builder
Query Reports
Script Reports
Commit and push
Portal Pages
www folder
Building context
Navigtion - Website Settings
Building templates
Extending / Migrating
Hooks
Migrating (patches)
Would love to have your comments, any other topics of interest that we missed out?
Very Nice.
Maybe a little about git and how git plays a roll in the eco-system when developing in Frappe.
Also when building new apps how does it affect upgrades to the core , how to integrate the newly created app into ERPNext.
Similarly to @msalim79, I would love to learn more about your debugging workflow. How do you test your code ? Do you have a specific workflow you follow when developing. For instance, using Atom + push to git + pull on site + using bench console + etc.
Otherwise, I am just wondering how is it very different than what is already there in the documentation of https://frappeframework.com/docs. I understand that the format is different (video instead of documentation) but I hope it will bring something new as well in terms of content. I like the idea of a kb (like here) video style.
Hi,
Thanks a lot for this initiative @rmehta.
I would like to add below points:
Steps how to migrate customization (custom field, custom doctype, custom app, custom report) from dev to test then production
Steps How to build new custom report from scratch (like sales invoice, or POS invoice) where jinja2 is used.
Barcode label
Steps how to customize workflow approvals.
How to fix translation locally
How to contribute back to ERPNext
How to add custom script
email settings
Integration with external systems
Just show simple cases and not necessarily advanced complicated use cases, hello world is enough, most of the time we don’t know from where to start.
Very important, do not skip any step because trainer will get lost very soon.
Congrats @Tropicalrambler I am using his blogs already and I enjoy a lot.
My two cents on what else should also make it to the list:
Writing custom API - this is useful when wanting to do integration {E.g. Mailchimp etc}
Background Jobs - how to write and use Background Jobs {E.g. Sending automated reports, Pushing data to 3rd Party APIs}
Query Permissions - there were times when I wanted to hide data few rows in a DocType knowing how to use Query Permissions saved the day
Understanding Triggers: Knowing the exact sequence in which triggers will get fired would save time for lot of developers
Where to put the logic? There are scenarios when putting logic in frontend {js files} makes sense at time it makes sense to put it in backend {python files}. Knowing when to use one vs another would help
Attachments: Knowing how to use API to sync attachment between few linked documents can go long way
Roles & Permissions: How to programatically create users & assign roles
custom app as an extension of ERPNext, integration of custom app with ERPNext
exporting customizations to new app, hooks
managing changes to ERPNext (what touches core, what not, updating ERPNext with custom apps)
maintaining dev/test/prod environments, deploying changes and new apps to prod
custom naming, managing naming with custom scripts
fetching values accross different doctypes, automatic fetching of values from another doctype for example on create document
examples of automatic calculations in dialogs, for example calculate and show margin during quotation creation below item table, or conditional sum (for example show sum of items of specific item category)
Thanks everyone for the comments. Added debugging to the flow. I think the advanced topics can be part of an advanced tutorial. We can take this up once this one has been completed.
Thanks Rushabh! We are humbled and grateful for allowing us the opportunity to work these topics.
Back in 2016 when I selected ERPNext for our startup, I remember loving the openness of the community and how this would come in handy for learning. Meeting everybody at the conference in 2017 was profound in letting me know that I was not alone in what I perceived a Quixotic adventure.
I have read all posts from @msalim79, @f_deryckel, @nmami, @black_mamba, @martin42, @brian_pond before my reply and noted every request. We will discuss this with Rushabh and prioritize them into a logical structure as Frappe requires for the topics to be included into the queue for creation.
At the time there was sufficient information for us to launch into learning the framework, and I realized that to really leverage the power of ERPNext I would have to learn software development concepts. As my learning progressed, other people and companies started approaching our small team of 3 with the same pain points with their current ERP / POS / Inventory / Sales systems, and thus decided to structure a team to begin helping. Even though it has taken a lot of time 2017-2021, we have been working hard to develop the skills required: Software development in Python / Javascript / HTML / CSS / Vue JS, Git workflows, delegation of tasks and issues. Another skill we figured out was extremely useful was diagramming, and @Martin_Seibert was instrumental in helping empower us with diagrams.net / draw.io.
Our workflow for video creation is (loosely)
Topic scripting
Storyboarding
Slides and graphic elements
Screencasting of the process (large font, keycasting and mouse click visualization)
Editing
Narration (noise reduced, almost-studio-quality and best possible pronunciation and language)
Since I (try to) have a hardcore open source stance, we are working with the following choices of software:
ERPNext Text editor for Topic scripting - text, bullet points, etc. Textmate - text editing Storyboarder - storyboards drawio - slides Shotcut - video editing Blender - video editing and some compositing Audacity - narrations and audio editing VLC - Playback and review
Again, many thanks for the opportunity and feedback.
Thanks, we appreciate feedback, and since the project will have all the source files properly indexed, any corrections can be made relatively easy with community feedback.
Hi,
One important point, if you can include at the end how to read js code and py code for a complex report and a complex doctype, know reading existing code is an endless knowledge source.
Thx
Nofal
Deployment for production which would include gunicorn, werkzeug, letsencrypt ssl, security hardening using firewall and defending Frappe against threats like DDos.
FWIW … considering the diversity and amount of effort this takes (it is a lot!), if participants here could do their own versions of recordings of the problems and solutions they are aware of under free as in free beer terms, it might help support the cause and also potentially help give ideas and support to this sponsored route.
I would be happy to rework and iterate (and hopefully improve!) on any content generated that is simple enough to be comprehended by my limited skills.