We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback
00:00

Formal Metadata

Title
Odoo
Subtitle
The underdog python killer app
Alternative Title
Odoo the underdog python killer app. A python framework for web based business apps.
Title of Series
Part Number
68
Number of Parts
173
Author
License
CC Attribution - NonCommercial - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Identifiers
Publisher
Release Date
Language
Production PlaceBilbao, Euskadi, Spain

Content Metadata

Subject Area
Genre
Abstract
Antony Lesuisse - Odoo the underdog python killer app. A python framework for web based business apps. Odoo is used by 2 millions of users, although relatively unknown in the python community, it has a vibrant community and is one of the most active python open source project. I will present you the Odoo framework and how it can help to be more productive when building web based business apps. I will highlight its advantages compared to more popular framework such as django.
Keywords
51
68
Thumbnail
39:40
108
Thumbnail
29:48
GoogolBoom (sailing)Metropolitan area networkModule (mathematics)Asynchronous Transfer ModeValue-added networkHigher-order logicGrand Unified TheoryInformation systemsBinary fileAbstract syntax treeUniformer RaumEuler anglesPersonal area networkInformationProduct (business)CodeDemosceneBitWordUniverse (mathematics)Web 2.0Programming languageEmailSinc functionAreaError messageWeb applicationProjective planeWebsiteLecture/ConferenceXMLSource code
Module (mathematics)Asynchronous Transfer ModeGoogolBoom (sailing)Line (geometry)Total S.A.Software frameworkMobile appCodeCartesian coordinate systemSet (mathematics)Goodness of fitSoftwareText editorDifferent (Kate Ryan album)Computer animationLecture/Conference
Module (mathematics)Mobile appKernel (computing)NumberDivisorCore dumpProjective planeLecture/ConferenceComputer animation
GoogolBoom (sailing)Module (mathematics)Module (mathematics)Projective planeMereologyNeuroinformatikLecture/ConferenceComputer animation
GoogolBoom (sailing)AutomorphismRoutingExtension (kinesiology)World Wide Web ConsortiumProduct (business)Modul <Datentyp>CodeForm (programming)SicAsynchronous Transfer ModeModule (mathematics)Software frameworkFunctional (mathematics)Template (C++)Set (mathematics)CodeCartesian coordinate systemLibrary (computing)Projective planeClient (computing)Mobile appInformationMechanism designWeb applicationLine (geometry)Point (geometry)Endliche ModelltheoriePolar coordinate systemMultiplication signMachine codeInformation securityModul <Datentyp>Orientation (vector space)Web 2.0PhysicalismServer (computing)Data managementPower (physics)Lecture/ConferenceComputer animation
GoogolBoom (sailing)SineVarianceFront and back endsWorld Wide Web ConsortiumSoftware bugAddressing modeMultiplication signWeb applicationBitLibrary (computing)BuildingDatabaseProjective planeGoodness of fitGame theoryInstallation artMobile appLecture/ConferenceComputer animation
GoogolBoom (sailing)Einstein field equationsWebsiteOrder (biology)Binary fileMetropolitan area networkValue-added networkCodeMultiplication signObject (grammar)Lecture/ConferenceComputer animation
Network topologyRevision controlSoftware developerCustomer relationship managementDataflowComputer animation
Tabu searchMusical ensembleGreatest elementArithmetic meanDataflowEntropie <Informationstheorie>View (database)InformationPoint (geometry)Phase transitionMessage passingOrder (biology)Thread (computing)Keyboard shortcutPropositional formulaFacebookSet (mathematics)Object (grammar)Field (computer science)EmailData managementCustomer relationship managementTelecommunicationAddress spaceComputer animationProgram flowchart
EmailRevision controlGoodness of fitComputer animation
Order (biology)Goodness of fitDataflowSource codeXMLProgram flowchartComputer animation
Metropolitan area networkMaxima and minimaInclusion mapComputer iconDataflowKey (cryptography)InternetworkingRevision controlComputer animationJSON
InternetworkingTraffic reporting1 (number)Cartesian coordinate systemComputer animationProgram flowchart
World Wide Web ConsortiumClient (computing)Cellular automatonEigenvalues and eigenvectorsWeb 2.0Point (geometry)Server (computing)Order (biology)Communications protocolMereologyTouch typingCanadian Mathematical SocietySource codeXMLProgram flowchartComputer animation
Total S.A.Canadian Mathematical SocietyMultiplication signResultantMobile appWeb 2.0WebsiteVotingComputer animationProgram flowchart
InformationBlock (periodic table)Different (Kate Ryan album)Canadian Mathematical SocietyContent (media)WebsiteStandard deviationWeb 2.0Computer animation
Network topologyBlock (periodic table)WebsiteBlogWeb pagePairwise comparison
Logical constantForm (programming)Physical systemFront and back endsDataflowMultiplication signSphereProgram flowchartComputer animationLecture/Conference
Graphics tabletPort scannerGoogolBoom (sailing)Order (biology)Product (business)InformationDecision tree learningObject (grammar)Computer animationProgram flowchartLecture/Conference
Order (biology)MalwareHeat transferData storage deviceField (computer science)Form (programming)CodeDataflowINTEGRALLine (geometry)Computer configurationQuicksortComplex (psychology)Computer animationProgram flowchartSource code
Order (biology)Marginal distributionConfiguration spaceCASE <Informatik>Field (computer science)Computer animationProgram flowchart
GoogolBoom (sailing)Field (computer science)WebsiteWeb 2.0Computer animationLecture/Conference
Personal area networkGraphics tabletDuality (mathematics)Value-added networkMetropolitan area networkMaxima and minimaPort scannerArmWebsitePoint cloudCustomer relationship managementTemplate (C++)Block (periodic table)BuildingProjective planePhysical systemPoint (geometry)DatabaseEvent horizonCartesian coordinate systemWeb pageDescriptive statisticsData managementEnterprise architectureProduct (business)TouchscreenComputer animationProgram flowchart
GoogolBoom (sailing)Metropolitan area networkProjective planeSoftware frameworkProgram flowchartLecture/ConferenceSource code
Metropolitan area networkServer (computing)Data typeHigher-order logicGrand Unified TheoryIntelObject (grammar)Field (computer science)Software frameworkType theorySource code
Metropolitan area networkValue-added networkPointer (computer programming)Inclusion mapDivision (mathematics)Maxima and minimaStatisticsState of matterInheritance (object-oriented programming)Sima (architecture)ArmAutomorphismIntegerType theorySelectivity (electronic)Field (computer science)Data storage deviceTheory of relativityObject (grammar)Total S.A.MathematicsCellular automatonOrder (biology)Attribute grammarCASE <Informatik>NeuroinformatikSource code
Metropolitan area networkTotal S.A.Alpha (investment)IntelMaxima and minimaDivision (mathematics)PixelField (computer science)Multiplication signFunctional (mathematics)Line (geometry)Total S.A.NeuroinformatikMathematicsLogicDatabaseRegular graphSource code
Metropolitan area networkMaxima and minimaData typeDivision (mathematics)Software engineeringDuality (mathematics)CodeObject (grammar)Functional (mathematics)TouchscreenView (database)Source code
Descriptive statisticsView (database)Field (computer science)Group actionDifferent (Kate Ryan album)Electronic mailing listWeb pageProduct (business)Template (C++)Order (biology)Extension (kinesiology)Web 2.0Mechanism designSource codeTable
GoogolBoom (sailing)Object (grammar)Module (mathematics)Product (business)Inheritance (object-oriented programming)Marginal distributionFunction (mathematics)Source codeLecture/Conference
Metropolitan area networkGoogolBoom (sailing)Field (computer science)NeuroinformatikView (database)Phase transitionMereologyElectronic visual displayForm (programming)Source codeLecture/Conference
Graphics tabletPersonal area networkView (database)Form (programming)Complex systemComplex (psychology)Loop (music)Computer animationProgram flowchart
GoogolBoom (sailing)Event horizonInformation securityMechanism designWritingReading (process)Lecture/ConferenceSource codeComputer animationProgram flowchart
GoogolBoom (sailing)Group actionElectronic mailing listGame controllerRight angleInformation securityMechanism designExecution unitWordMultiplication signRow (database)Set (mathematics)Rule of inferenceOperator (mathematics)Goodness of fitFilter <Stochastik>Instance (computer science)ExpressionSubsetProcess (computing)AreaDomain nameTelecommunicationEstimatorOrder (biology)Data storage devicePhysical systemDatabaseImplementationProxy serverMathematicsLecture/Conference
GoogolBoom (sailing)Matching (graph theory)Point cloud1 (number)ResultantOrder (biology)Computer animationLecture/Conference
GoogolBoom (sailing)Module (mathematics)Complex (psychology)Point cloudField (computer science)Computer animationLecture/Conference
GoogolBoom (sailing)Formal languageMereologyModule (mathematics)WordPoint cloudDatabaseRevision controlField (computer science)DichotomyLecture/Conference
GoogolBoom (sailing)Water vaporMereologyInternetworkingCartesian coordinate systemUsabilityLogicDifferent (Kate Ryan album)Multiplication signModule (mathematics)Computer animationLecture/Conference
Software frameworkPoint (geometry)Goodness of fitINTEGRALGroup actionComputer animation
GoogolBoom (sailing)DatabasePhysical systemLibrary (computing)Order (biology)Special unitary groupConnected spaceLecture/Conference
Red HatGoogolRobotLevel (video gaming)XML
Transcript: English(auto-generated)
So we will try to make it short, like around 35 minutes. So what I want to do is first five minutes, just give you a few information about what is Odoo. And after we'll do a small demonstration about the product, and
then I will show you a little bit of code to see how it works behind the scenes. So let's start with some information about Odoo. Odoo is actually a big project, but it's not very well known among the Python community. It started ten years ago, in 2005, and
actually, the reason why we did it in Python. So I was at the university around 2000 in Belgium, and there is a guy, and I was coding in C, in PHP. We were doing a lot of websites, and one day, there was a guy that came,
and his name is Denis Frere, here. I just found an email from that era. You see, people were talking about hosting some Perl web application, and he says, you should do it in Python. And he came to the university, to the dorms, and
he showed us what was Python. And we started to learn Python, and since that time, Python is my main programming language. So I've been programming in Python for 15 years. And okay, let's go back to Odoo itself.
So Odoo is a framework and also a set of application built on that framework. The total code base of Odoo is around 140k lines of code. 40k lines of code are the frameworks, and the rest is the 30 main apps.
So we are a company, the company is named Odoo. We edit a software, the software is also named Odoo. And that software is actually 30 different business apps.
And I will show you a demonstration of a few of them after. And then after, you have a lot of people that are doing other apps, and using the framework, or extending the apps that we ship. And so you have a very vivid community around Odoo.
We have around 400 contributors in the core. We have a truck factor of 11. So a truck factor is the number of people you have to kill if you want to kill the project. And if you compare to Django, for example, it's 5%. If you kill 5%, Django will probably stop.
And Rails is 7, Odoo is 11, the Linux kernel is around 150. So, and if you take account of the people that doesn't contribute to the core, but to other modules, then there is around 2,000 contributors.
So it's a very big project. And there is around 500 companies that do their living because of Odoo. And some of them are in Spain. We have 2,800 stars on GitHub. And we have 2 millions of users.
So by users, I mean somebody who every day sits at these computers and use Odoo. Maybe not the whole day, but at least some part of the day. So every day, we have 2 million people that would log and use Odoo.
Why is it different? I think it's superior to many frameworks, actually to almost every framework. Maybe there are some frameworks that I don't know, but because it's very modular. And all frameworks say they are modular. But Odoo is modular in a different way, and I will show you some example after.
It's business oriented. So it has all the features you need to do business apps, like the security mechanism to people in the company might not see some information that other people can see. So all that kind of thing is built in.
And it's only since one year that it's fully web-based. Before that, it was not fully web-based. It was, you know, at first started as a client and server application. So you had to run a client application on every PCs, and you were running a server.
Since one year, it's fully web-based. And it uses a special templating engine that nobody else uses, but I will show you why I think it's superior. And also it has a small JavaScript framework built on standard libraries.
And so it has a rich client. It's a full, like a native application in JavaScript. And also it is very simple because you see, it's only 40k lines of code for the framework, and the API is around 30 functions. So if you know those 30 functions, you know to use all the,
you know how to consume and program everything you know to do. And the power of Odoo comes from what is already available from its add-ons. And you have add-ons for everything, everything related to business.
So when you need to make invoices, payment, manage product, deal with customers, with physical product, accounting, those kind of things, they are built in Odoo. So I think many people who develop new web application, they spend most of their time reinventing the wheel.
Because when you do a new, for example, a new startup, at some point you have to invoice customers, you have to do payment, you have to manage people, you have to, so those sets of features, they're built in Odoo and you don't waste your time doing that again and again.
So why isn't it more popular? I think there are a few reasons. One of them is because it's business oriented and business is not fun. You know, people prefer to doing games instead of business. It's wrong. Actually doing business apps is very fun. Also, it was not web-based before, so
now you can build web application using Odoo. Before it was not possible, it was just a tool to manage companies. So it's very recent. And also, we had no documentation or bad documentation. It's only since December that we have a good documentation. And also, Odoo is not a good Python citizen.
For example, it's not packaged on PIP, for example. So you cannot do PIP install Odoo, because Odoo is quite a big project. And it's actually also lots of JavaScript, lots of other things. It uses PostgreSQL as a database storage, so it's not just a Python library.
And also, there were a lot of ugly code, you know, ugly quirks in Odoo. And we fixed most of them in the V8 API that we released in September last year. So no, it's much more cleaner, much more Python-ing than it was before. Because we started at the time when ORM didn't exist.
SQL object was the first in Python that I used, but it was much later after we started Odoo. Yeah, also, Odoo was named OpenERP before, and before that, it was also named Tiny ERP. So we changed the name two times.
So I will show you what it looks like. Let's go, okay. So I will show you the new UI. The new UI is still alpha, so sometimes I might switch to the stable tree, because some things might not work in the development version.
That's the master tree here. So basically, at least at the beginning, Odoo was just a tool to manage company. And I will show you just a simple flow of what happens every day in not every, but many companies.
So we will look at the CRM. The CRM is a tool to organize your sales. So how it works is like this, and it's the same in many, many companies. So you first have a contact with the customers. And this is these customers that wants to buy some keyboards.
So that's the first contact you have with the person. And what will happen is that you will call the customers, discuss with him, clarify his needs. Then probably you will do a concrete proposition about selling him something. And then there is sometimes a negotiation phase, and
then after, we get a deal or we lost the deal. So opportunities are just one of the simple object that Odoo manage. And you saw here, that's the view with the flows of opportunities. And I can show you what an opportunity looks like. It's just a few information with some fields like, okay, who's the customers?
This is Agollet. And what's the revenue we expect from that deal? What's the probability? Okay, and there, so it's just crud. So it's just information that you save.
And you can see the flow there. And you see at the bottom of the document, we have what we call the chatter. It's just like a Facebook thread, and it's available on every business document in Odoo. So when I look at the opportunity,
I can discuss with my customers using this here. I need to add this email address. Okay, it's already done. So I send in a message, what are you interested in, blah, blah, blah, blah. It will send him an email. If the person replies by email, it will come back on the thread below. So I can manage all my communication from the opportunity itself.
So at what point, the customer will say, okay, I want to buy this or this. So what I do, I will create a quotation. A quotation is just a set of things that I propose to sell to a customer. Like maybe some keyboard here.
And after, I can send the quotation by email. Oops, oops, okay. Yeah, I send the quotation by email.
The person can reply on the quotation, it will appear below. And then after, there are two ways you can close the deal. One of them would be, okay, the customers by phone say, yes,
I want to buy this, send me the goods. Or you can also use an online version where I click here. I can see the quotation here. And the person can accept the quotation online. Sign, it's difficult with the mouse, okay.
And here, I accepted the quotation. I go back into sales. And after the quotation is done, what we will do is to create an invoice. I create an invoice. And also, it will create a delivery order.
So the delivery order, it's just a document that goes to the warehouse, and people will deliver the goods to the customers. And the invoice is the other part, it's the customers that has to pay the money. And after, the person's pay, I won't go into all the details,
because I want to make it quick, but you get the ID. After, the customers will pay, and we can reconcile, that's the old UI. I just wanted to show here, it's the way you reconcile invoices with the payments. So you get some money on the bank account, you have some invoices, and
then you reconcile them. And then the deal is completely finished, because we've delivered the goods, and we've got the money from the customers. Very simple flow. And what's available also in Odoo, we have,
Okay, I've lost the Wi-Fi.
I wanted to show you, I had another version online with more data and more things installed, but I think, I don't have internet anymore,
so I want to show, okay, I can show it here. So you have also tools to do reports. For example, you want to know the sales made by every country, by every sales team.
Okay, it's always the same here. And you can also get nice, I will just install something, okay? So what you see here are all the application of Odoo.
The basic ones, the ones that we as the company Odoo edit, and there are plenty more outside that are made by other companies. And I'm installing the CRM so that we get more data here. Let's go back to, okay.
So what we saw was just a simple sales flow. But there are other way to sell your stuff. One other way would be to have a shop. And Odoo also has a point of sale. I hope it's open, yeah, okay, here. And the point of sale is just, okay, is touch base.
So you can click here, click, click, click, up, and pay. So that's what the person will use in his shop at the, I don't know, in French we say, a la case, a casa, maybe in Spanish.
So here I pay some amount. I can validate. Okay, I need to pay at least the amount, okay, here. Okay, and then I go to the next order, you see? So that's another sales channel.
And I told you recently we added the web layer on top of Odoo. Odoo was already using HTTP because the client server protocol was XML RPC. So we had a small web layer, but we decided that because we had
almost everything that the company needs to manage itself, we were just lacking one step was the website part of the company. So we say, okay, let's do a CMS. And I know Plone or Zop was supposed to be the killer app
at the time I've started with Python, but didn't happen. So I will show you what the web layer of Odoo looks like. Let's go now on the website.
So we say, okay, okay. Because we have information about many things that happens in the company.
And the company needs to be public, needs to have a presence on the web. So we wanted to make a simple tool to allow people to create their own website. And there are many CMS available, maybe thousands, hundreds at least of them.
So we wanted to make something different, something really easy to use. And we made this website builder. The website builders worked with blocks. So what you do is you drag and drop different kinds of blocks like this.
Okay, and you save, and then you edit these blocks. And that's the basic blocks that you see, but I will show you some theme after. And then you can edit the content here and change it. And because you use blocks, you're not creating all the layout yourself.
So you can have beautiful looking websites. Because some designers created some very fancy blocks for you. So for example, if you want to compare price, you can use this block to compare price and say, okay, we have three offers with that price, that price, etc.
Okay, and that's just static pages. After, because we use the same system, for example, here I have a contact form. And when I fill my contact form here, it's linked with the backend I showed you before.
So when I will fill the contact form, if I go onto sales, I can see that I have a new opportunity. Actually, it's a lead, yeah, it's here.
So each time I fill a form, I arrive in my CRM, and then the flow of sales begins. Okay, pretty straightforward. And after, we said, okay, we have all the information about the product. So let's do an e-commerce.
And we just published the product online here. And we added the Add to Cart button. And when you do Add to Cart, you actually do a sales order, like I did before. I did the sales order myself. Now it's the customer itself that creates the sales order. But the object behind is the same.
So for the whole e-commerce that you can see here, I need to fill all the information, blah, blah, blah. Okay, shipping to the same address, and then I can pay. Here, I only install wire transfer, but
we have integration with many payment provider, okay? And the whole e-commerce flow that you saw here takes only 1,000 lines of code. Because we had all the built-ins in Odoo already.
And I only showed you the easy stuff. Because you can add more and more feature and get very complex flow in the companies by adding some options. So the forms I showed you when I do a sales order, it's just one of two fields.
Let's go back to a sales order. You see, it's very simple, name of the customer's address, things to sell. But you have many case where you need more. It's okay, you go in configuration, in settings, and then you enable new stuff.
Like for example, I want to display margin on the sales order. So I want to know how much I get when I sell something 100 euro, how much do I gain on it? And I go back to my sales order, okay? And here, you see there is a new field.
And you can add many, many things. And at the end, you get 20 fields, and it's very complex. But the way it's designed, it's so that people can start easy. But if they have complex things, they can manage it. Okay, so let's go back to my website.
And what's displayed on the website, what you can see here, if I edit, I can edit everything. So here, if I edit this, it will change the name of the product, okay? If I change the price, it will change the price.
So everything that appears on the screen, you can edit it. And we do that because we have a special template engines. And we know, when we display something on the screen, where it comes from in the database. So you can edit everything. And the same system to edit static page can be used to edit product.
So I can use also my building blocks here. And here, I save the description of the product. Okay, so what I showed you is just two applications.
The CRM and invoicing, and we also host it online for people. So we have a cloud offer, that's the pricing of the cloud offer. But you can see there are lots of more application like managing,
manufacturing, accounting, project management, inventory, point of sale, events, so if you want to manage an event like this, you can use also Odoo. Also, yeah, I wanted to say, the people, the guy who introduced me to Python,
that guy, Denis Frères, was the guy who started EuroPython. So he started the first year in Charleroi. I remember we're organizing the event with him. So if you are all here today, it's because also of him. Let's go back to my, yeah.
So I finished my demonstration. It's not, I don't want to be complete. I just want to tease your curiosity so that after you might go and say, that Python project looks interesting. So let's dive into the code and look what it looks like, and why I think it's superior to many frameworks.
Okay, hello, it's big enough so that people can read. So in Odoo, you define object,
like I think in many frameworks, like Django or Rails, by defining the fields. So for example, we will check an invoice. An invoice, that's a journal. Let's take an invoice here, okay.
Yeah, it's an invoice. So there are many types of fields. Odoo stores its data into PostgreSQL, okay? So you have char fields, selection fields, integer,
boolean, dates, and relational fields. So you have many to one when it's a relation to another object, and many to many when you have multiple relation between two objects. Pretty common. And what you have a special in Odoo is the compute attribute.
So when you say, for example, amount tax, or maybe amount total, it's easier. Amount total is the amount of the invoice, and it depends on the other data. So it's a compute field, so you say, okay, this field,
it's not a real field that is simply stored. It's a field that you compute when other value changes. So I will, let's check, okay. So this function is called each time a dependency fields of the amount is changed.
So each time, for example, you add a line on the invoice, you have to compute the total again. So it's just a function here that you define, and it will compute the value. And then you have two different way to use compute fields. One of them is say, okay, each time I need the field, just compute it.
Or you can store it. So you say store true. So it means that we compute it when it change, but then we store it in database. And by storing in the database, it's much more easier to after search for the value of the fields. Because if you want to search for value, if it's not stored, you have to compute all the values to know which one is the correct.
So you use it like a regular fields, but it's computed. And many of the business logic goes into those compute fields. After, you have a few functions, business functions,
that are linked to the different buttons on the object. So for example, when I click Confirm an invoice, what should it do? So that's all the code that we see here, okay? And after, you have the view. So how to display the invoice on the screen.
And I show you the back-end view of, it's in XML. So let's check account invoice.
So that's the view description. So it's just a list of fields to display, blah, blah, blah, with some layouting like I want to see different tabs or group the fields together. And that's it. After, you have also web pages, but we don't have web pages for invoice.
But for the sales order or the product page, I will show you what the page looks like. No, I won't show you that. I will show you the extension mechanism.
But it's also, it's just an XML-based template like Genshi or KID or ZOBE template. Actually, it was inspired by ZOBE template. And what I want to show you is how to add new stuff on Odoo. And that's the strength of Odoo.
That you can say, okay, I show you that I installed product margin. It's just a module that adds a field and show you the margin. How does it do that? You can inherit object and override method. But everybody knows how to, it's common in Python.
So it's very easy. But what you can do is you can add new columns on those objects. So you can add new fields. And once you've added those fields, here, I added the compute fields. That's the old syntax. And I added the to function to compute the fields.
After, I want to display the field somewhere. So I go in the view, and I say, okay, I want to extend the view. And after this part of the view, I want to display this. And everything is constructed this way. That's why I showed you at the beginning that my form view was very simple.
Where is it? Here, I show you my form view is very simple. But the more and more module I install, the more complex it gets. And it's really small Lego bricks that you can build on up to.
And you get a very, very complex system. And everything works together. I think I will ask if you have any question. I will take question. And I hope that I teased your curiosity and that you will look at or do.
If you have any question after the talk, feel free to come to see me. I'll be there this afternoon, and also I'll be there at the social event. So don't hesitate to come and ask me a question. Thank you. And let's proceed with the question if somebody has questions.
Yeah?
Hello? Yeah? I would like to know how you compute the read access and write access for documents. So we have two mechanism of security in Odoo. One is the access control list. So you can say this person from this group doesn't have the right to read,
write, create things. It's almost like ACL in Unix. And you have a second mechanism. It's record rules. It's more precise. It can give you visibility. So you say, every time somebody do this operation, apply this set of criteria. I didn't show you, but we have a filter mechanism here where you can say,
I want to see the sales order that are to these customers, okay? So we have a syntax to express filters, and it's called domains. And you can apply domains based on the person who use it.
So for example, you can say, every salesman can only see his invoices, or that kind of things. And it was built into Odoo since the very beginning, and it didn't change. How do you deal with large data sets?
How do you, because I'm familiar with the approach. The biggest deployment of Odoo is 50 terabytes, I think, of data. And we don't do nothing.
It's just Postgres is very cool, and Postgres can deal with a lot of data. So we rely on Postgres. And also, when you have blobs, attachments, image, they are stored outside the database. So only the business data are stored in Postgres. I didn't perform my question precisely enough.
How do you deal with situations where a subset of users in these really large data sets, when a particular user only has access to a very small amount of documents? For instance, you have 100,000 documents, and the user can only see 15.
And what's the problem? Well, there's not, your implementation bypasses that. Yes, no, you can use this syntax, but what's the criteria? You have thousands of documents, why does he see only 15?
It's for whatever reasons. Once you define the reason, you get the system work. You just define why, and it just applies. I can show you an example if you want.
Hi, I have two quick questions. One is if you start with a managed solution, is there a possibility to go to a hosted solution, so that you retain all the data? Actually, yes and no.
So if you start with what you have for the 10 euros, I don't know, a month, and then want to host it yourself, if you can do it and retain all the data? So in the cloud solution, we only ship the basic apps, the 30 basic ones. When you, if you want to use, sorry, I don't have access.
If you want to use external modules, you need to be self-hosted. So you need to be on-premise. So the cloud solution is just for people, for small companies, because, or for simple companies. When you have complex needs, probably you need to go self-hosted, okay?
And the other question is when you have saved fields. When you have what? Saved fields, the fields where they save. You can add custom fields, and actually, I didn't show you, but you can do it from the UI.
You can add fields and customize everything from the UI. You can do it in Python modules, or you can do it in the database itself. When do they know when to update? When you are on the cloud, we migrate database from version to version. So we keep the customization, and sometimes it's manual work,
because we have to make sure everything works. And that's part of our offer. If you are on your own, you have to be careful with your customization when you migrate from version to version. Is it clear? Okay, just come to see me after. Okay, any other question?
Hey, do you know about any company using Odoo in Brazil? Yeah, I don't know the names, but there is a partner named Acresion, that's a company that integrates Odoo there, and they have plenty of reference.
I don't have internet access, but I could show you. No problem, just curious, because in Brazil, you have some business logic with this particular to the country, so... Oh, yeah, I know they told me that, you know, it's a hell about accounting and the paperwork you have to do.
So they have a lot of module to deal with that. And I know it's very complex. So this is already done, so if I install Odoo, and I can just use it in Brazil? Yeah, you can use it. And I forgot to mention also, in Portugal, it's not in Spain, but in Portugal, the biggest installation of Odoo is 500,000 people.
It's all the teachers in Portugal that have to use Odoo, because they use Odoo to schedule, you know, to assign teachers to the school and that kind of work. So the Ministry of Education use Odoo for everything now.
They replaced, I think, 1,000 different applications, no, 100 different applications with Odoo. Yeah, cool, thank you. We still have time for a very short question. Okay. Which one is the shortest?
I have a short question. Yeah, okay. The answer may be long. When you go enterprise, one of the common challenges is in integration. You have legacy apps, some of those will go away,
some of those need to stay forever, so you need at some point to consider how to bring in day to either live or migrating into and out of Odoo. So you can do it both ways. Would you think this is a good framework for that? Yeah, you can do it both ways.
Either you access the Odoo API using Gson RPC or XML RPC from the other apps, or you do it from within Odoo using any Python library. You access the database or the API of other systems. So there's a lot of work and connectors for other systems.
Well, thank you again, Anthony. Thank you. The lunch is happening now, so just try to get some food.