Home
Open Object Developer Book
Contents
1. Action ir actions act window View Ref Model ir ui menu Type ofview Tree Domain Value parent_id 3 Enregistrement 1 1 State Document en cours d dition 2 Nouveau S Sauver D Effacer Recherche X Suivant Requ tes Pas de requ te amp 3 Examples of actions This action is declared in server bin addons project project_view xml record model ir actions act window id open view my project field name name gt project project lt field gt field name res_model gt project project lt field gt lt field name view_type gt tree lt field gt field name domain parent id False manager uid lt field gt field name view id ref view my project record This action is declared in server bin addons stock stock_view xml record model ir actions act window id action picking form field name name gt stock picking lt field gt field name res_model gt stock picking lt field gt field name type gt ir actions act_window lt field gt field name view_type gt form lt field gt field name view id ref view picking form field name context contact display partner lt field gt record 11 2 Actions 105 Open Object Developer Book Release 1 0 11 2 6 Url Action 11 2 7 Wizard Action Here s an example of a XML file that decla
2. S RO A 181 20 2 The objects methods 4 uo Ro 9 va RR ae x m bea B mU A ob 181 21 XML RPC Web services 183 CONTENTS 3 Open Object Developer Book Release 1 0 21 1 Interfaces RR 21 2 Python Example 21 3 PHP Example 00 20400 Part 7 Other Topics 22 RAD Tools 22 5 D A 22 ee BS 8 Appendices 23 Appendices Index 23 1 Appendices Coding Conventions 23 2 Releasing a module 23 3 Translations Index 193 195 AA a A it 195 nm 195 199 201 TETTE 201 TID 202 FTT 203 209 CONTENTS Part I Forewords CHAPTER ONE INTRODUCTION Open ERP is a rich development environment Thanks to its Python and PostgreSQL bindings and above all its Object Relational Mapping ORM you can develop any arbitrary complex module in Open ERP Open Object Developer Book Release 1 0 8 Chapter 1 Introduction CHAPTER TWO WHO IS THIS BOOK FOR Open Object Developer Book Release 1 0 10 Chapter 2 Who is this book for CHAPTER THREE CONTENT OF THE BOOK Open Object Developer Book Release 1 0 12 Chapter 3 Content of the book CHAPTER FOUR ABOUT THE AUTHOR S Open Object Developer Book Release 1 0 14 Chapter 4 About the author s Part II Part 1 Getting Started with OpenERP CHAPTER FIVE DEVELOPMENT ENVI
3. Destination Description Formula Confirm the Invoice with the Number str object number Events Formula Invoice str object number Partner Formula object partner id id User Formula object partner id user id id Record Id Origin SR Create Object action have the easy but tricky configuration for the movement you have to remember the fields name or check it out from the code it self in future we will develop the expression builder inside OpenERP so you can build the complex expression Important fields are Object Select the object on which we want to implement the Server Action when work flow will execute on this object Model This is the target model where the new object is to be created if its empty it refers to the current object and allow to select the fields from the same but its advisable to provide the model in all case if different or if the same Fields Mapping Need to provide the 3 values 1 Field any of the fields from the target model 2 type of the value you can give either value or expression 3 provide the value or expression the expression again start with the object keyword and its refers to the current object which selected in to the Object field You must select the all required fields from the object 166 Chapter 16 Server Action Open Object Developer Book Release 1 0 Record Id After creating the new record where the id of the new record if going to st
4. This inheritance mechanism is usually called instance inheritance or value inheritance A resource instance has the VALUES of its parents 9 6 Fields Introduction Objects may contain different types of fields Those types can be divided into three categories simple types relation types and functional fields The simple types are integers floats booleans strings etc the relation types are used to represent relations between objects one2one one2many many2one Functional fields are special fields because they are not stored in the database but calculated in real time given other fields of the view Here s the header of the initialization method of the class any field defined in Open ERP inherits as you can see in server bin osv fields py def init self string unknown required False readonly False domain context states priority 0 change default False size None ondelete setnull translate False select False x args 9 7 Type of Fields 9 7 1 Basic Types boolean 9 5 Inheritance by Delegation inherits 71 Open Object Developer Book Release 1 0 A boolean true false Syntax fields boolean Field Name Optional Parameters integer An integer Syntax fields integer Field Name Optional Parameters float A floating point number Syntax fields float Field Name Optional Parameters Note The optiona
5. name Fabien Pinckaers tang s TEER partner id sock execute dbname uid pwd res partner create partner address partner id partner id type default street Chauss e de Namur 40 0367 city Grand Rosiere phone 3281813700 fax 73281733501 address id sock execute dbname uid pwd res partner address create address Search a partner args vat ZZZ2222 query clause ids sock execute dbname uid pwd res partner search args Read partner data fields name active vat ref fields to read data sock execute dbname uid pwd res partner read ids fields ids is a list of id Update partner data values vat ZZ12Z22 data to update result sock execute dbname uid res partner write ids values Delete partner ids list of id result sock execute dbname uid res partner unlink ids 21 1 Interfaces 185 Open Object Developer Book Release 1 0 21 1 3 PHP Access Open server using xml rpc Download the XML RPC framework for PHP windows linux download the xml rpc framework for php from http phpxmlrpc sourceforge net The latest stable release is version 2 2 released on February 25 2007 Setup the XML RPC for PHP extract file xmlrpc 2 2 tar gz and take the file xmlrpc inc from lib directory place the xmlrpc in
6. lt xsl template gt lt xsl template match transfer list gt lt xsl apply templates select transfer gt lt xsl template gt lt xsl template match transfer gt lt setNextTemplate name other_pages gt lt para gt Document lt xsl value of select name gt lt para gt lt para gt Type lt xsl value of select type gt lt para gt lt para gt Reference lt xsl value of select reference gt lt para gt lt para gt Partner ID lt xsl value of select partner_id gt lt para gt lt para gt Date lt xsl value of select date gt lt para gt lt para gt Amount lt xsl value of select amount gt lt para gt lt xsl if test number change gt 0 gt lt para gt Change lt xsl value of select change gt lt para gt lt xsl if gt lt setNextTemplate name first_page gt lt pageBreak gt lt xsl template gt lt xsl stylesheet gt 14 3 Reports without corporate header Example with corporate defaults 14 3 Reports without corporate header 153 Open Object Developer Book Release 1 0 lt xsl stylesheet version 1 0 xmlns xsl http www w3 org 1999 XSL Transform xmlns fo http www xsl import href base report rml template xsl lt xsl variable name page_format gt a4_normal lt xsl variable gt lt xsl template match gt lt xsl call template name rml gt lt xsl template gt lt
7. 8 1 The Modules Introduction 59 Open Object Developer Book Release 1 0 8 1 2 OpenERP Module Descriptor File terp Normal Module In the created module directory you must add a terp file This file which must be in Python format is responsible to 1 determine the XML files that will be parsed during the initialization of the server and also to 2 determine the dependencies of the created module This file must contain a Python dictionary with the following values name The Plain English name of the module version The version of the module description The module description text author The author of the module website The website of the module license The license of the module default GPL 2 depends List of modules on which this module depends The base module must almost always be in the dependen cies because some necessary data for the views reports are in the base module init xml List of xml files to load when the server is launched with the init module argument Filepaths must be relative to the directory where the module is Open ERP XML File Format is detailed in this section update xml List of xml files to load when the server is launched with the update module launched Filepaths must be relative to the directory where the module is Open ERP XML File Format is detailed in this section installable True or False Determines if the module is i
8. Open Object Developer Book Release 1 0 10 5 Design Elements The common structure to all the XML files of Tiny ERP is described in the DataLoadXML Data Loading Using XML Files section The files describing the views are also of the form Example lt xml version 1 0 gt lt terp gt lt data gt view definitions lt data gt lt terp gt The view definitions contain mainly three types of tags e record tags with the attribute model ir ui view which contain the view definitions themselves e record tags with the attribute modelz ir actions act window which link actions to these views menuitem tags which create entries in the menu and link them with actions New You can precise groups for whom the menu is accessible using the groups attribute in menuitem tag New You can now add shortcut using the shortcut tag Example shortcut name Draft Purchase Order Proposals model purchase order logins demo menu m Note that you should add an id attribute on the menuitem which is refered by menu attribute record model ir ui view id v gt field name name sale order form field field name model gt sale order lt field gt field name priority eval 2 field name arch type xml gt lt form string Sale Order gt lt form gt lt field gt lt record gt Default value for the priority field 16 When not specified the system will use the
9. To install bazaar on any ubuntu distribution you can edit etc apt sources list by sudo gedit etc apt sources list and put these lines in it deb http ppa launchpad net bzr ubuntu intrepid main deb src http ppa launchpad net bzr ubuntu intrepid main 17 Open Object Developer Book Release 1 0 Then do the following sudo apt get install bzr To work correctly bzr version must be at least 1 3 Check it with the command bzr version If you don t have at least 1 3 version you can check this url http bazaar vcs org Download On debian in any distribution the 1 5 version is working you can get it on this url http backports org debian pool main b bzr bzr 1 5 1 bpo40 1_1386 deb If you experience problems with Bazaar please read the on Bazaar version control system before asking questions 5 1 2 Working with Branch The combination of Bazaar branch hosting and Launchpad s teams infrastructure gives you a very powerful capability to collaborate on code Essentially you can push a branch into a shared space and anyone on that team can then commit to the branch This means that you can use Bazaar in the same way that you would use something like SVN i e centrally hosting branch that many people commit to You have the added benefit though that anyone outside the team can always create their own personal branch of your team branch and if they choose upload it back to Launchpad This is
10. lt field name signal gt mymod_negotiation lt field gt lt record gt lt record model workflow transition id t3 gt lt field name act_from ref act_negotiation gt field name act to ref act won field name signal gt mymod_won lt field gt record record model workflow transition id t4 gt lt field name act_from ref act_negotiation gt lt field name act_to ref act_lost gt lt field name signal gt mymod_lost lt field gt lt record gt Add mymod_workflow xml to terp py Edit your module s terp py and add mymod_workflow xml to the update_xml array so that OpenERP picks it up next time your module is loaded Add Workflow Buttons to your View The final step is to add the required buttons to mymod_views xml file Add the following at the end of the form section of your object s view definition 124 Chapter 12 Workflow Business Process Open Object Developer Book Release 1 0 lt separator string Workflow Actions colspan 4 gt lt group colspan 4 col 3 gt button name mymod assigned string Assigned states new gt button name mymod negotiation string In Negotiation states assigned gt lt button name mymod won string Won states negotiating gt lt button name mymod lost string Lost states negotiating lt group gt 12 9 3 Testing Now use the Module Manager to install or update your module If you have d
11. lt record model ir ui view id view_partner_form gt lt field name name gt res partner form inherit lt field gt lt field name model gt res partner lt field gt lt field name inherit_id ref base view_partner_form gt lt field name arch type xml gt lt notebook position inside gt lt page string Relations gt lt field name relation_ids colspan 4 nolabel 1 gt lt page gt lt notebook gt lt field gt lt record gt The inheritance engine will parse the existing view and search for the the root nodes of lt field name arch type xml gt It will append or edit the content of this tag If this tag has some attributes it will look for the matching node including the same attributes unless position This will add a page to the notebook of the res partner form view in the base module You can use these values in the position attribute inside default your values will be appended inside this tag after add the content after this tag before add the content before this tag replace replace the content of the tag Second Example record model ir ui view id view partner form field name name res partner form inherit field field name model res partner field field name inherit id ref base view partner form field name arch type xml gt lt page string Extra Info position replace gt lt field name relation_ids colspan 4 nolabel 1 gt
12. 9 Objects Fields and Methods 67 94 OpenERP Objects 220225 bem heb e dy Seb Re CELA db db Ebc se dd 67 92 The ORM Object Relation Model iu Eee ES 68 9 3 QpenERP Object Attributes uuu OR Red ow ce e ds 68 94 Object Inheritance Inherit e AS RE ee 70 95 Inheritance by Delesation inherits a SO RUP orc OE RS 71 916 Etelds IntroductiOn b4n 59 Fb 2G oo RC ES ES E BS 71 CONTENTS 1 Open Object Developer Book Release 1 0 97 Typeot Fields i lt e eae tr RUE A Rep RR RUE GROS ob 71 9 8 ORM methods e ede 80 10 Views and Events 87 10 1 Introducti nto VIeWS pes s a a ae 87 10 2 3XForm VIeWS 87 NOS SINGS VIEWS EE CX c r TL TTE Tv 89 10 44 Graph VIEWS 5 55 Rh a aue Re e n ECC 89 10 5 Design Elements dove Rue Bal em tem Ro e en eee 91 10 6 Inheritance Views 22 lt Bo ee weh de e epe us 95 IUVENI ETT 97 11 Menu and Actions 101 MENUS oS Gis e RE G Vue Nul eec 101 1 2 ACHONS 225 Boe A e 102 E
13. e dic HERR ho 107 Part 3 Business Process Development 111 12 Workflow Business Process 113 E desa A SS 113 12 2 Defining Workflow ew A a 117 12 3 General structure of a workflow XML 117 24 Actmaty cara A AAA AAA hae ewe ex 118 12 5 raniti e ar a we ee ee AA e eS 120 12 6 IEXPLESSION Socios el A A A E SEO 121 User Role is soo e A re UR RR eR ss 121 12 8 Error Handle sce 2845 mae A A Res AE EM Re eee P XL 122 12 9 Creating a Wortkilow 22552525025 a he ae ge 122 13 Creating Wizard The Process 127 13 4 A 444 294445545 624 127 13 2 Wizards Principles 2 2255 o a 129 13 3 s soso reset Ro ORO a a eu dece eode oh A de 133 ISA Wizard 2525 ws rtu Sq et petite esempi e us 134 13 2 OsSvamemory Wizard s ppe behave eee a a bes SOEUR be ROS A 136 14 Reports 139 2 CONTENTS Open Object Developer Book Release 1 0 14 1 OpenOffice org reports vou ee A A e 139 142 XSL RMILTepOoFS 22255555 RS rl ee ee eG e det 144 14 3 Reports without corporate header ve E Rok em E A A 153 14 4 Eac
14. logfile LOGFILE file where the server log will be stored n INTERFACE interface INTERFACE specify the TCP IP address p PORT port PORT specify the TCP port net_interface NETINTERFACE specify the TCP IP address for netrpc Jnet_port NETPORT specify the TCP port for netrpc 26 Chapter 5 Development Environment Open Object Developer Book Release 1 0 no netrpc disable netrpc no xmlrpe disable xmlrpc i INIT init INIT init a module use all for all modules without demo WITHOUT_DEMO load demo data for a module use all for all modules u UPDATE update UPDATE update a module use all for all modules Jstop after init stop the server after it initializes debug enable debug mode S secure launch server over https instead of http smtp SMTP_SERVER specify the SMTP server for sending mail price_accuracy PRICE_ACCURACY specify the price accuracy Database related options d DB_NAME database DB_NAME specify the database name r DB_USER db_user DB_USER specify the database user name w DB PASSWORD db_password DB_PASSWORD specify the database pass word pg_path PG_PATH specify the pg executable path Jdb hostZDB HOST specify the database host Jdb PORT specify the database port Internationalization options Use these options to translate Tiny ERP to another language See 118 section of the user man ual Option l
15. o partner invoice id zip o partner invoice id city or J o partner invoice id country id and s o partner invoice id country id and invoice id country id name or o partner shipping id city or o partner shipping id zip o partner id title or o partner id name o partner order id title or o partner order id name o partner order id street o partner order id street2 or o partner order id zip or o partner order id city or J o partner order id state id and o partner order id state id name or o partner order id country id and o partner order id country id name or Tel o partner order id phone or removeParentNode para Fax o partner order id fax or removeParentNode para TVA o partner id vat or removeParentNode para o state lt gt draft and removeParentNode para Quotation N o name o state draft and removeParentNode para Order N Your Reference Date Ordered order ref True Description VAT Our Salesman fermatt ang o date order date o user id name o name Payment Terms Lo payment term name Quantity Unit Price Disc Price line name 1 join map lambda formatLa formatLang formatL formatLang li 14 1 2 Dynamic cont
16. Get modifications on your branch from others EDIT STUFF bzr Gi commit your changes on your public branch If your changes fixe a public bug on launchpad you can use this to mark the bug as fixed by your branch bzr ci fixes 1p 453123 Where 453123 is a bug ID Once your branch is mature mark it as mature in the web interface of launchpad and request for merging in the official release Your branch will be reviewed by a commiter and then the quality team to be merged in the official release How to commit Your Work If you want to contribute on OpenERP or OpenObject here is the proposed method You create a branch on launchpad on the project that interest you It s important that you create your branch on launchpad and not on your local system so that we can easily merge share code between projects and centralize futur developments You develop your own features or bugfixes in your own branch on launchpad Don t forget to set the status of your branch new experimental development mature so that contributors knows what they can use or not Once your code is good enough you propose your branch for merging Your work will be evaluated by one responsible of the commiters team If they accept your branch for integration in the official version they will submit to the quality team that will review and merge in the official branch If the commiter team refuses your branch they will explain why so that you can review
17. allows to enable or disable the report header located in server_dir bin addons custom 14 2 XSL RML reports RML reports don t require programming but require two simple XML files to be written afile describing the data to export xml afile containing the presentation rules to apply to that data xsl XML template XSL stylesheet RML file PDF report The role of the XML template is to describe which fields of the resource have to be exported by the server The XSL RML style sheet deals with the layout of the exported data as well as the static text of reports Static text is referring to the text which is common to all reports of the same type for example the title of table columns XML datas Example 144 Chapter 14 Reports Open Object Developer Book Release 1 0 Here is as an example the different files for the simplest report in the ERP pnk x Tiny sprl ASUS Agrolait Banque Plein Aux As China Export Ditrib PC Ecole de Commerce de Liege Elec Import Maxtor Mediapole SPRL Opensides sprl Tecsas sarl XML Template lt xml version 1 0 gt lt ids gt lt id type fields name id gt lt name type field name name lt ref type field name ref gt lt id gt lt ids gt XML data file generated lt xml version 1 0 gt lt ids gt lt id gt lt name gt Tiny sprl lt name gt lt ref gt pnk00 lt ref gt lt id gt l
18. examples account transfer a money transfer account invoice an invoice account invoice line an invoice line Generally the first word is the name of the module account stock sale Other advantages of an ORM simpler relations invoice partner address 0 city objects have properties and methods invoice pay 3400 EUR inheritance high level constraints Itis easier to manipulate one object example a partner than several tables partner address categories events 52 Chapter 8 First Module to OpenERP Open Object Developer Book Release 1 0 Function a datetime integer sec E boolean fnany2one ome 2 oret act except orm fav lae lago Servicelnavailable browse record Localservice Dispatcher fattpDaeman fake cursor rind fields RpcGateway bmlrpe RpcGateway KMLRPCRequestHandler SimpleThreadedXMLRPCServer iseazch Server bind Figure 8 1 The Physical Objects Model of OpenERP version 3 0 3 Simples PostgreSQL The ORM of Open ERP is constructed over PostgreSQL It is thus possible to query the object used by Open ERP using the object interface or by directly using SQL statements But it is dangerous to write or read directly in the Postgr
19. field name signal field field name role id ref role id 1 field name condition gt lt field gt field name trigger_model gt lt field gt field name trigger expr id field record Only the fields act from and act to are mandatory 12 6 Expressions Expressions are written as in python True 1 e hello in bye Any field from the resource the workflow refers to be used in these expressions For example if you were creating a workflow for partner addresses you could use expressions like zip 1400 phone mobile 12 7 User Role Roles can be attached to transitions If a role is given for a transition that transition can only be executed if the user who triggered it possess the necessary role 12 6 Expressions 121 Open Object Developer Book Release 1 0 Each user can have one or several roles Roles are defined in a tree of roles parent roles having the rights of all their children Example CEO Technical manager Lead developper Developpers Testers Sales manager Commercials Let s suppose we handle our own bug database and that the action of marking a bug as valid needs the Testers role In the example tree above marking a bug as valid could be done by all the users having the following roles Testers Lead developper Technical manager CEO 12 8 Error handling As of
20. fields repeatIn list varname repeat the template whole doc or current paragraph for each object in the list Use varname in the template s tags setTag para change the enclosing RML tag usually by an other xpre is a preformatted paragraph in the converted from sxw rml document removeParentNode 14 7 2 Useful tags repeatIn objects o objects to be printed repeatIn o invoice_line 1 print every line o quantity Operations are OK 07d int o number number formating reduce lambda x obj x obj qty list O total qty of list try objects as list user name user name setLang o partner_id lang Localized printings time strftime d m Y format dd MM Y Y Y Y check python doc for more about d time strftime time ctime 0 10 time strftime time ctimeQ 4 prints only date time ctime it prints the actual date amp time time ctime split 3 prints only time one more interesting tag if you want to print out the creator of an entry create uid or the last one who wrote on an entry write uid you have to add something like this to the class your report refers to create uid fields many2one res users User readonly 1 and then in your report it s like this to print out the corresponding name o create_uid name Sometimes you might want to print out something only if a certa
21. gt 8 1 The Modules Introduction 57 Open Object Developer Book Release 1 0 lt menuitem name Human Resource Employee Info action wizard_employee_info type wizard id menu_wizard_employee_info gt lt data gt lt terp gt Workflow The objects and the views allow you to define new forms very simply lists trees and interactions between them But it is not enough you have to define the dynamics of these objects A few examples aconfirmed sale order must generate an invoice according to certain conditions a paid invoice must only under certain conditions start the shipping order The workflows describe these interactions with graphs One or several workflows may be associated to the objects Workflows are not mandatory some objects don t have workflows Below is an example workflow used for sale orders It must generate invoices and shipments according to certain conditions 58 Chapter 8 First Module to OpenERP Open Object Developer Book Release 1 0 has_xtock able_prochncte cancel ship_cancel In this graph the nodes represent the actions to be done create an invoice cancel the sale order generate the shipping order The arrows are the conditions waiting for the order validation invoice paid click on the cancel button The squared nodes represent other Workflows the invoice the shipping
22. is mandatory I LANGUAGE language LANGUAGE specify the language of the translation file Use it with 118n export and 118n import i18n export TRANSLATE_OUT export all sentences to be translated to a CSV file and exit JHil8n importZ TRANSLATE IN import a CSV file with translations and exit modules TRANSLATE_MODULES specify modules to export Use combina tion with 118n export OpenERP Server and Web Client Start Stop OpenERP 4 2 First check that all the required dependencies are installed Then create the terp database You have to make sure that your user has the correct credentials to create databases with PostgreSQL For more information on this subject please refer to the PostgreSQL manual 5 createdb terp encoding unicode 5 1 Working with Launchpad 27 Open Object Developer Book Release 1 0 Once the database created you can start OpenERP The content of the database will automatically be created at the first start 5 tinyerp server py OpenERP 5 0 and above Check that all the required dependencies are installed Make sure you are logged on as a user that has catalog admin rights in PostgreSQL Refer to the PostgreSQL manual for more info on this Start the OpenERP Server openerp server py Finally connect to the server with the GTK Client or eTiny and use the Create Database option to c Shutting down the server The easiest way the shut down the server on a
23. openerp server py P status pickle init data_yourcompany This method provides a faster importation of the data and if it crashes in the middle of the import it will continue at the same line after rerunning the server This may preserves hours of testing when importing big files 18 1 3 Using Open ERP s ETL The next version of Open ERP will include an ETL module to allow you to easily manages complex import jobs If you are interrested in this system you can check the complete specifications and the available prototype at this location bzr branch lp openerp commiter openobject addons trunk extra addons etl to be continued 18 1 Data Importation 175 Open Object Developer Book Release 1 0 176 Chapter 18 Data Migration Import Export CHAPTER NINETEEN UPGRADING SERVER MODULES The upgrade from version to version is automatic and doesn t need any special scripting on the user s part In fact the server is able to automatically rebuild the database and the data from a previously installed version The tables are rebuilt from the current module definitions To rebuild the tables the server uses the definition of the objects and adds modifies database fields as necessary To invoke a database upgrade after installing a new verion you need to start the server with the Cupdate all argument tinyerp server py update all You can also only upgrade specific modules for example tinyerp server py upd
24. password Object id xmlrpcLogin execute login params if id instanceof Integer return Integer id return 1 catch XmlRpcException e logger warn XmlException Error while logging to TinyERP e return 2 catch Exception e logger warn Error while logging to TinyERP return 3 Search TODO Create TODO Write TODO 21 2 Python Example Example of creation of a partner and his address import xmlrpclib Sock xmlrpclib ServerProxy http localhost 8069 xmlrpc object uid 1 pwd partner title Monsieur name Fabien Pinckaers lang ir active True partner id sock execute dbname uid pwd res partner create partner 21 2 Python Example 189 Open Object Developer Book Release 1 0 address partner partner type default street Rue du vieux chateau 21 Carp 11457 city Walhain phone 32 10 68 94 39 f 432 10 68 94 39 Sock execute dbname uid res partner address create address To get the UID of a user you can use the following script Sock xmlrpclib ServerProxy http localhost 8069 xmlrpc common UID sock login terp3 admin admin CRUD example login function is under http localhost 8069 xmlrpc common For object retrieval use http localhost 806
25. 1596 send request confirmed Canceled The workflow is thus modified as above and the orders will react as we want to We then only need to modify the order form view and add a validation button at the desired location We could then further improve this workflow by sending a request to the sales manager when an order enters the Validation state Workflow nodes can execute object methods only two lines of Python are needed to send a request asking the sales manager to validate or not the order 12 1 Introduction 115 Open Object Developer Book Release 1 0 12 1 2 WkfExample2 A sale order that generates an invoice and a shipping order True pider confirm True True cancel order_policy prepaid or invoiced thie ine older_policy prepaid or cancel cancel lorder_policy postpaid and shipped has stockable productsi True abtlow cancel invoice_except True Tme invoice_comected lpoice cancel not his stockable products Latis cancel True s Cip except mibllowdone invoice_end invoice_cancel True hip corrected ship cancel Chip end Tme done WkfExample3 Acount invoice basic workflow 116 Chapter 12 Workflow Business Process Open Object Developer Book Release 1 0 cancel proforma Workflow account invoice basic OSV account invoice 12 2 Defining Workflow Workflows are defined in the file server bin addons base ir
26. 2 Creating a new report Tiny Report gt Open a new report Sale Order Open New Report Use Model in Report The general template is made up of loops such as the list of selected orders and fields from the object which can also be looped Format them to your requirements then save the template The existing report templates make up a rich source of examples You can start by adding the loops and several fields to create a minimal template When the report has been created send it to the server by clicking Tiny Report gt Send to server which brings up the Send to server dialog box Enter the Technical Name of sale order to make it appear beside the other sales order reports Rename the template as Sale Order New in Report Name check the checkbox Corporate Header and finally click Send Report to Server To send it to the server you can specify if you prefer Open ERP to produce a PDF when the user prints the document or if Open ERP should open the document for editing in OpenOffice org Writer before printing To do that choose PDF or SXW a format of OpenOffice org documents in the field Select Report Type Open ERP objects can be created from PostgreSQL views The technique is as follows 1 Declare your columns dictionary fields must have the flag readonly True 2 Specify the parameter _auto False to the Open ERP object so no table corresponding to the columns diction nary is created automatically 3 Add a method in
27. 20 Working with Web Services CHAPTER TWENTYONE XML RPC WEB SERVICES Jump to navigation search 1 XML RPC standard http www xmlrpc org RPC Over HTTP Function Parameters amp Result encoded in XML 2 Principle calls to objects methodes o read write o create o unlink delete XML RPC is known as a web service Web services are a set of tools that let one build distributed applications on top of existing web infrastructures These applications use the Web as a kind of transport layer but don t offer a direct human interface via the browser 1 Extensible Markup Language XML provides a vocabulary for describing Remote Procedure Calls RPC which is then transmitted between computers using the HyperText Transfer Protocol HTTP Effectively RPC gives developers a mechanism for defining interfaces that can be called over a network These interfaces can be as simple as a single function call or as complex as a large API XML RPC therefore allows two or more computers running different operating systems and programs written in different languages to share processing For example a Java application could talk with a Perl program which in turn talks with Python application that talks with ASP and so on System integrators often build custom connections between different systems creating their own formats and protocols to make communications possible but one can often end up with a large number of poorly documented singl
28. 4 a boolean if true the button 15 set as the default action since 4 2 13 2 Wizards Principles 131 Open Object Developer Book Release 1 0 Here is a screenshot of this form Tiny OOO Ele User Form Options Plugins Help D B ti 3 B gt 3 la x New save Delete Find Back Forward Other View Action Print Attachment Close Menu Account Chart Account Entry Line Information Analytic Lines General information Name 2 Effective date 03 13 2007 Q Account 560 Compte courant De Partner Ref asustek Debit 545 00 Credit 0 00 Optional information Currency 22 7 7 D Amount Currency 0 00 5 Quantity 0 00 2 Entry D amp St TE D Litigation Maturity date D 5 05 1j Q Creation date 1 2007 Q State Journal Sses pumd Period 0 0 Reconcile A B Active C3 X Recondiliation Reconciliation transactions of Transaction Credit amount Debit amount write off Write Off amount Cancel Reconcile Enregistrements 1 1 Document en cours d dition 5 sate hitp ifocalhost 8069 terp Administrator Requests Pas de requ te Ly Result call a method to determine which state is next def _check_refund self cr uid data context return datas form refund id and wait invoice or end result type choice next state check refund Result print
29. Configuration teve Action Name Action State Print Invoice Report Client Action Invoice Confirmation Email Email Only one client action will be execute last clinent action will be consider in case of multipls clinets actions Important Fields are Object Select the object on which we want to implement the Server Action when work flow will execute on this object Other Actions We need to select the server action in this fields we are free to select the as many as actions as we can Just we need to take care for the problem of the multi action other things is very easy Link it up with the Work flow The important things is to link the server action with the work flow its bit easy to link with action with the work flow Open the work flow editor in GTK select the work flow and go to the start and select the Sever Action This will automatically be called when the comes to that state File User Form Options Plugins BA i Menu amp Project Dashboard ts Workflo 0 OpenERP Link Activities open Workflow account invoice basic amp Q Kind Function Name account invoice basic On Create Server Action Print Invoice Activities action_move_create action_number Activity Python Action write state open Name Workflow draft account invoice
30. File Format is detailed in this section update_xml List of xml files to load when the server is launched with the update module launched Filepaths must be relative to the directory where the module is Open ERP XML File Format is detailed in this section installable True or False Determines if the module is installable or not active True or False default False Determines the modules that are installed on the database creation Example is an example of __terp__ py file for the product module 8 1 The Modules Introduction 51 Open Object Developer Book Release 1 0 name Products Pricelists version zz 1 0 author i Open category Generic Modules Inventory Control depends base account init xmi e demo xml product demo xml update xml product data xml product report xml product wizard xml product view xml installable True active True The files that must be placed in init xml are the ones that relate to the workflow definition data to load at the installa tion of the software and the data for the demonstrations The files in update xml concern views reports and wizards Objects Tiny ERP resources are objects menus actions reports invoices partners Tiny ERP is based an ob ject relational mapping of a database to control the information Object names are hierarchical as in the following
31. Linux type system is to send the SIG INT signal to the server Find the Process ID ps grep i tiny e Use the kill comand with PID kill 2 pid 5 2 Configuration Two configuration files are available e one for the client terprc e one for the server terp_serverrc Those files follow the convention used by python s ConfigParser module Lines beginning with FP or are comments Those files are not necessary If they are not found the server and the client will start with the default configuration The client configuration file is automatically generated upon the first start The one of the server can automatically be created using the command tinyerp server py s 5 2 1 Server Configuration File The server configuration file terp serverrc is used to save server startup options For the version 5 X configuration file is openerp_serverrc Here is the list of the available options interface Address to which the server will be bound 28 Chapter 5 Development Environment Open Object Developer Book Release 1 0 port Port the server will listen on database Name of the database to use user Username used when connecting to the database translate_in File used to translate Open ERP to your language translate_out File used to export the language Open ERP use language Use this language as the language of the server This must be specified as an ISO country code as specified by the
32. Open ERP can be used in several langages reports must be translatable But in a report everything doesn t have to be translated only the actual text has to be translated not the formatting codes A field will be processed by the translation system if the XML tag which surrounds it whatever it is has a t 1 attribute The server will translate all the fields with such attributes in the report generation process Useful links http www reportlab com docs RML_UserGuide pdf RML UserGuide pdf reportlab com e http www zvon org xxl XSLTutorial Output index html XSL Tutorial zvon org http www zvon org xxl XSLTreference Output index html XSL Reference zvon org http www w3schools com xsl XSL tutorial and references W3Schools e http www w3 org TR xslt XSL Specification W3C Example with corporate defaults xsl stylesheet version 1 0 xmlns xsl http www w3 org 1999 XSL Transform xmlns fo http www xsl import href custom corporate_defaults xsl gt lt xsl import href base report rml_template xsl gt lt xsl variable name page_format gt a4_normal lt xsl variable gt lt xsl template match gt xsl call template name 2 rml xsl template xsl template name stylesheet xsl template xsl template name story gt xsl apply templates select transfer list gt 152 Chapter 14 Reports Open Object Developer Book Release 1 0
33. SuserId lt 0 1 connect msg new xmlrpcemsg execute msg addParam new xmlrpcval dbname string msg addParam new xmlrpcval userld int msg gt addParam new xmlrpcval password string msg addParam new xmlrpcval relation string msg addParam new xmlrpcval search string msg addParam new xmlrpcval key array Sresp client gt send msg val Sresp gt value Sids val gt scalarval return Sids Create TODO Write TODO 21 1 4 JAVA Access Open server using xml rpc Download the apache XML RPC framework for JAVA Download the xml rpc framework for java from http ws apache org xmlrpc The latest stable release is version 3 1 released on August 12 2007 TinyERP errors throw exception because the framework allows only an int as the error code where Tinyerp return a string Demo script Find Databases 21 1 Interfaces 187 Open Object Developer Book Release 1 0 import java net URL import java util Vector import org apache commons lang StringUtils import org apache xmlrpc XmlRpcException import org apache xmlrpc client XmlRpcClient import org apache xmlrpc client XmlRpcClientConfigImpl public Vector lt String gt getDatabaseList String host int port XmlRpcClient xmlrpcDb new XmlRpcClient XmlRpcClientConfigImpl xmlrpcConfigDb new XmlRpcClientConfigImpl xmlrpcConfigDb setEnabled
34. Tree Form Domain Value The domain that decreases the visible data with this view 11 2 3 The view The view describes how the edition form or the data tree list appear on screen The views can be of Form or Tree type according to whether they represent a form for the edition or a list tree for global data viewing A form can be called by an action opening in Tree mode The form view is generally opened from the list mode like if the user pushes on switch view 11 2 Actions 103 Open Object Developer Book Release 1 0 11 2 4 The domain This parameter allows you to regulate which resources are visible in a selected view restriction For example in the invoice case you can define an action that opens a view that shows only invoices not paid The domains are written in python list of tuples The tuples have three elements the field on which the test must be done the operator used for the test lt gt like the tested value For example if you want to obtain only Draft invoice use the following domain state draft In the case of a simple view the domain define the resources which are the roots of the tree The other resources even 1f they are not from a part of the domain will be posted 1f the user develop the branches of the tree 11 2 5 Window Action Actions are explained in more detail in section Administration Modules Actions Here s the templat
35. a key of the client when to launch which client To declare a new wizard you need to add it to the module name wizard xml file which contains all the wizard declarations for the module If that file does not exist you need to create it first Here is an example of the account wizard xml file lt xml version 1 0 gt lt terp gt lt data gt delete model ir actions wizard search wiz name like account gt wizard string Reconcile Transactions model account move line 134 Chapter 13 Creating Wizard The Process Open Object Developer Book Release 1 0 name account move line reconcile wizard string Verify Transac steptions model account move line name account move line check keyword tree but action wizard string Verify Transactions model account move line name account move line check wizard string Prin Journal model account account journal Invoice model account invoice name account invoice split wizard string Refund Invoice model account invoice name account invoice refund name accoun wizard string Spli ls ct seb oc data terp Attributes for the wizard tag id optional string The string which will be displayed if there are several wizards for one resthe user will be presented a list with wizards names model The name of the model where the data needed by the wizard is nam
36. a new language Please keep in mind to use the same translation string for identical sources Launchpad Online Translation may give helpful hints More information on accelerators on this website http translate sourceforge net wiki guide translation accelerators To translate or modify the translation of a language already translated you have to 206 Chapter 23 Appendices Index Open Object Developer Book Release 1 0 1 Export all the sentences to translate in a CSV file To export this file use this command Jopenerp server py il8n export file csv I LANG where LANG is the language to which you want to translate the program 2 Translate the last column of the file You can make a translation for a language which has already been translated or for a new one If you ask for a language already translated the sentences already translated will be written in the last column For example here are the first lines of a translation file Dutch type name res id src value field account account code 0 Code Code field account account name 0 Name Name model account account name 2 Assets Aktiva model account account name 25 Results Salden model account account name 61 Liabilities Verbindlichkeiten 3 Import this file into Open ERP as explained in the preceding section Notes You should perform all these tasks on an empty database so as to avoid
37. architecture The server and the client communicate using the XML RPC protocol XML RPC is a very simple protocol which allows the client to do remote procedure calls The function called its arguments and the result are sent HTTP and encoded using XML For more information on XML RPC please see http www xml rpc com Since version 4 2 there is a new protocol between client server that have been called net rpc It is based on the python cPickle function it is faster than the xml rpc Client The logic of Open ERP is entirely on the server side The client is very simple his work is to ask data forms lists trees from the server and to send them back With this approach nearly all developments are made on the server side This makes Open ERP easier to develop and to maintain The client doesn t understand what it posts Even actions like Click on the print icon are sent to the server to ask how to react The client operation is very simple when a user makes an action save a form open a menu print it sends this action to the server The server then sends the new action to execute to the client 35 Open Object Developer Book Release 1 0 There are three types of action Open a window form or tree Print a document Execute a wizard Architecture OpenERP Server OpenERP Client Wizard Explanation of modules Server Base distribution We use a distributed communication mechanism inside
38. clone lp openerp openobject server trunk server bzr clone lp openerp openobject client trunk client n n rp openobject client web trunk client web rp openobject addons trunk addons bzr clone lp op bzr clone lp op If you want to get a clone of the extra addons repository you can execute this command bzr clone lp openerp commiter openobject addons trunk extra addons extra addons run the setup scripts in the respective directories python2 4 setup py build python2 4 setup py install Currently the initialisation procedure of the server parameter init all to populate the database seems to be broken in trunk It is recommended to create a new database via the gtk client Before that the web client will not work Start OpenERP server like this openerp server py addons path path to my addons The bin addons will be considered as default addons directory which can be overriden by the path to my addons That is if an addon exists in bin addons as well as path to my addons cus tom path the later one will be given preference over the bin addons default path Command line options General Options version show program version number and exit h help show this help message and exit c CONFIG config CONFIG specify alternate config file s save save configuration to terp_serverrc v verbose enable debugging pidfile PIDFILE file where the server pid will be stored
39. field The relations fields are also automatically evaluated to allow you to recover the values in the neighbors objects Signature def browse self cr uid select offset 0 limit 2000 Parameters select this parameter accept data of several types an integer identifier of a resource list of integers list of identifiers offset optional the number of results to pass limit optional the maximum number of results to return Returns if an integer identifier has been passed as select parameter return an object having the properties described here above if a list of integer identifiers has been passed return the object list Example Let s consider the case of a partner object res partner and of a partner contact object res partner address Let s suppose that we know the identifier of a partner contact name contact id and we want to recover his name and the account number of the company he works for Knowing that the object res partner contains the field 9 8 ORM methods 81 Open Object Developer Book Release 1 0 bank fields char Bank account size 64 and the object res partner address contains the fields partner id fields many2one res partner Partner required True name fields char Contact Name size 64 the most simple way to proceed is to use the browse method addr obj self pool get res partner address browse cr
40. field n The example below is from the sale order view You can use the context keyword to access data in the context that can be used as params of the function field name shop id select 1 on change onchange shop id shop id def onchange shop id self cr uid ids shop v if shop_id shop self pool get sale shop browse cr uid shop_id v project_id shop project_id id if shop pricelist_id id v pricelist_id shop pricelist_id id v payment_default_id shop payment_default_id id return value v When editing the shop_id form field the onchange_shop_id method of the sale_order object is called and returns a dictionary where the value key contains a dictionary of the new value to use in the project_id pricelist_id and payment default id fields Note that it is possible to change more than just the values of fields For example it is possible to change the value of some fields and the domain of other fields by returning a value of the form return domain d value value context in record model iractions act window id a gt you can add a context field which will be pass to the action See the example below 10 7 Events 97 Open Object Developer Book Release 1 0 lt record model ir actions act_window id a gt field name name gt account account treel lt field gt field name res model account acco
41. form _form lt xml version 1 0 gt lt form title Reconciliation gt lt separator string Reconciliation transactions colspan 4 gt lt field name trans_nbr gt lt newline gt lt field name credit gt lt field name debit gt lt separator string Write Off colspan 4 gt field name writeoff gt lt newline gt lt field name writeoff_acc_id colspan 3 gt lt form gt The fields description is similar to the fields described in the python ORM objects Example transaction fields trans nbr string of Transaction type integer readonly True credit string Credit amount type float readonly True debit string Debit amount type float readonly True writeoff string Write Off amount type float readonly True writeoff id string Write Off account type many2one relation account account Each step state of a wizard can have several buttons Those are located on the bottom right of the dialog box The list of buttons for each step of the wizard is declared in the state key of its result dictionary For example state end Cancel gtk cancel reconcile Reconcile True 1 the next step name determine which state will be next 2 the button string to display for the client 3 the gtk stock item without the stock prefix since 4 2
42. instance of a class It s a bit confusing when you try to program inside Open ERP because the language used is Python and Python is a fully object oriented language and has objects and instances Luckily an Open ERP resource can be converted magically into a nice Python object using the browse class method Open ERP object method 67 Open Object Developer Book Release 1 0 9 2 The ORM Object Relation Model 9 2 1 The Models ORM is for Object Relational Mapping OpenERP modeling is based on objects but is data is stored in a classical relational database named Postgresql ORM job is to fill the gap between Open objects and sql tables Python is the programming langage giving the behavior and data description of Open objects This is not stored in the database ORM is the python class ancestor of all Open objects A Open object is modeling by a static python description for his behavior and data an a miror sql description for his data storage 9 3 OpenERP Object Attributes 9 3 1 Objects Introduction To define a new object you have to define a new Python class then instantiate it This class must inherit from the osv class in the osv module 9 3 2 Object definition The first line of the object definition will always be of the form class name of the object osv osv name name of the object columns name_of_the_object An object is defined by declaring some
43. is a XML format that represent a PDF document It can be converted to a PDF after We use RML for more easy processing XML syntax seems to be more common than PDF syntax The report engine The Open Report Engine process the RML file inserting data from the database at each expression in the RML file will be replaced by the name of the country of the partner of the printed invoice This report engine produce the same RML file where all expressions have been replaced by real data The final document Finaly the RML file is converted to PDF or HTML according to the need using OpenReport s scripts 14 1 1 Creating a SXW You can design reports using OpenOffice Here s as an example the file server bin addons sale report order sx w 2 140 Chapter 14 Reports Open Object Developer Book Release 1 0 repeatin objects o setLang o partner id lang Shipping address o partner id title o partner id name o partner_shipping_id title or o partner shipping id name o partner_shipping_id street o partner shipping id street2 or o partner shipping id state id and shipping id state id name or o partner shipping id country id and shipping id country id name or Invoice address o partner invoice id street o partner invoice id street2 and s o partner invoice id street2 J
44. is still not available The problem is that OpenERP uses the PDF standard fonts 14 fonts they are not embedded in the document but the reader provides them that are Typel and have only Latin1 characters 14 8 1 The solution consists of 3 parts Provide TrueType fonts and make them accessible for ReportLab Register the TrueType fonts with ReportLab before using them in the reports Replace the old fontNames in xsl and rml templates with the TrueType ones 14 8 2 All these ideas are taken from the forums Free TrueType fonts that can be used for this purpose are in the DejaVu family http dejavu fonts org wiki index php titlezMain Page They can be installed in the ReportLab s fonts directory system wide and include that directory in rl config py ina subdirectory of the OpenERP installation and give that path to ReportLab during the font registration In the server bin report render rml2pdf init py 14 8 Unicode reports 157 Open Object Developer Book Release 1 0 import reportlab rl_config reportlab rl config warnOnMissingFontGlyphs 0 from reportlab pdfbase import pd metrics from reportlab pdfbase ttfonts import TTFont import reportlab enc UTF 8 repeat these for all the fonts needed pdfmetrics registerFont TTFont DejaVuSans DejaVuSans ttf enc pdfmetrics registerFont TTFont DejaVuSans Bold DejaVuSans Bold ttf enc from reportlab lib fonts import addMapping repeat the
45. language application 15 1 Introduction 159 Open Object Developer Book Release 1 0 160 Chapter 15 118n Internationalization Part V Part 4 Business Process Advance Configuration 161 CHAPTER SIXTEEN SERVER ACTION 16 1 Introduction Server action is an new feature to the OpenERP available since the version 5 0 beta This is the interesting features for the customizer to full fill the customers requirements This features enables to provides the quick and easy configura tion some process which is day to day requirements Like send email on confirmation of the sale order or confirmation of the Invoice log the operation of the invoice confirm cancel etc or need to develope some system which runs wizard report on the confirmation of the sales purchase or invoice So Server action is the only one answer to solve all this kind of problems without doing any development just a few configuration and the system is ready to answer few of above questions Following are the list of action types which are supplied under the Server Action Client Action Trigger Email SMS Create Object Write Object Multi Action Each type of action have the special features and different configuration parameters We will see one by one all type of action how to configure and list of parameters that affect the system 16 2 Client Action This action executes at client side this is a good idea to run t
46. list must be of the form of the operator value gt lt lt gt IN sql LIKE ILIKE sql child_of offset optional do not return the offset first results limit optional maximum number of results to return Returns the list of ids of matching resources Example ids pooler get pool cr dbname get res partner search cr uid category id Customer 80 Chapter 9 Objects Fields and Methods Open Object Developer Book Release 1 0 This example will return a list with all the partners that have the category Customer read Description List of fields resources values Signature def read self cr uid ids fields None context Parameters ids list of the identifiers of the resources to read list of integers fields optional the list of the interested fields If a value is not provided for this param eter the function will check all the fields context optional the actual context dictionary Returns list of dictionaries a dictionary per resource asked of the form name of the field value Example values pooler get pool cr dbname get res partner read cr uid ids name category id context context browse Description Return one or several resources with the objects form These object fields can be reached directly with the pointed notation object name of the
47. lt page gt lt field gt lt record gt Will replace the content of the Extra Info tab of the notebook by one relation ids field The parent and the inherited views are correctly updated with update all argument like any other views To delete a field from a form an empty element with position replace atribute is used Example lt record model ir ui view id view_partner_form3 gt lt field name name gt res partner form inherit lt field gt lt field name model gt res partner lt field gt lt field name inherit_id ref base view_partner_form gt lt field name arch type xml gt lt field name lang position replace gt 96 Chapter 10 Views and Events Open Object Developer Book Release 1 0 lt field gt lt record gt Take into account that only one position replace attribute can be used per inherited view so multiple inherited views must be created to make multiple replacements 10 7 Events 10 7 1 On Change The on_change attribute defines a method that is called when the content of a view field has changed This method takes at least arguments cr uid ids which are the three classical arguments and also the context dictio nary You can add parameters to the method They must correspond to other fields defined in the view and must also be defined in the XML with fields defined this way field name name of field on change name of method other field 1 other
48. of activity definitions 12 5 Transition 12 5 1 Introduction Workflow transitions are the conditions to be satisfied to go from one activity to the next one They are represented by one way arrows joining two activities The conditions are of different types role to satisfy by the user button pressed in the interface end of a subflow through a selected activity of subflow The roles and signals are evaluated before the expression If a role or a signal is false the expression will not be evaluated Transition tests may not write values in objects The fields act from Source activity When this activity is over the condition is tested to determine if we can start the ACT TO activity act to The destination activity condition 120 Chapter 12 Workflow Business Process Open Object Developer Book Release 1 0 Expression to be satisfied if we want the transition done signal When the operation of transition comes from a button pressed in the client form signal tests the name of the pressed button If signal is NULL no button is necessary to validate this transition role_id The role that a user must have to validate this transition Defining Transitions Using XML Files The general structure of a transition record 15 as follows lt record model workflow transition id transition_id gt field name act from ref activity id 1 field name act to ref activity id 2
49. port port used by the server path section share path used to find Tiny ERP shared files pixmaps path used to find Tiny ERP pixmaps files tip section autostart Should the client display tips at startup position Tip number the client will display 24 Chapter 5 Development Environment Open Object Developer Book Release 1 0 form section autosave Will the client automatically save the change you made to a record printer section preview Preview report before printing softpath Path to the pdf previewer softpath_html Path to the html previewer path Command used to print logging section logger log channels to display List values are common common message view view form 9 9 common options 9 rpc request rpc result Orpc exceptionO level logging level to show output file used by the logger verbose set the log level to INFO client section default path Default path used by the client when saving loading datas Default values login login admin port 8069 server 192 168 1 4 printer path none preview True softpath none logging output stdout logger verbose True level ERROR form autosave False 5 1 Working with Launchpad 25 Open Object Developer Book Release 1 0 client default_path home user Web Client Configuration Get a clone of each repository bzr
50. returns False the workitem disappears STOPALL A sub workflow is executed when an activity is of the type SUBFLOW This activity ends when the sub workflow has finished While the sub workflow is active the workitem of this activity is frozen 12 4 5 action The action indicates the method to execute when a workitem comes into this activity The method must be defined in a object which belongs this workflow and have the following signature def object method self cr uid ids In the action though they will be called by a statement like object method Signal send flow start Indicates if the node is a start node When a new instance of a workflow is created a workitem is activated for each activity marked as a flow start Be warned to not use this flag unless your activity really is a flow start There are tiny versions that do not care about the tags contents like true or false Using such tag and tiny version you will always end up whith an activity which is tagged as flow start true leaving u with a nasty hunt to find out where your workflowdesign could be wrong 12 4 6 flow stop Indicates if the node is an ending node When all the active workitems for a given instance come in the node marked by flow stop the workflow is finished Be warned to not use this flag unless your activity really is a flow stop There are tiny versions that do not care about the tags contents like tru
51. the menu that calls the report if any see below model the Open ERP object on which the report will be rendered rml the RML report model Important Note Path is relative to addons directory menu whether the report will be able to be called directly via the client or not Setting menu to False is useful in case of reports called by wizards auto determines if the RML file must be parsed using the default parser or not Using a custom parser allows you to define additional functions to your report 11 3 Security Three concepts are differentiated into Tiny ERP 1 The users person identified by his login password 2 The groups define the access rights of the resources 3 The roles determine the roles duties of the users Menu Menu P Operations Definitions Administration Actions Users Users Groups Roles The users They represent physical persons These are identified with a login and a password user may belong to several groups and may have several roles A user must have an action set up This action is executed when the user connects to the program with his login and password An example of action would be to open the menu at Operations 11 3 Security 107 Open Object Developer Book Release 1 0 The preferences of the user are available with the preference icon You can for example through these preferences determine the working language of this user English is se
52. the official and proposed way to contribute on OpenERP and OpenObject Quick Summary To download the latest sources and create your own local branches of OpenERP do this bzr branch lp openerp cd openerp bzr set py This will download all the component of openerp server client addons and create links of modules in addons in your server so that you can use it directly You can change the bzr_set py file to select what you want to download exactly Now you can edit the code and commit in your local branch EDIT addons account account py cd addons bzr ci m Testing Modifications Once your code is good enough and follow the Coding Guidelines you can push your branch in launchpad You may have to create an account on launchpad first register your public key and subscribe to the openerp community team Then you can push your branch Suppose you want to push your addons cd addons bzr push lp openerp community openobject addons YOURLOGIN YOURBRANCHNAM bzr bind lp openerp community openobject addons YOURLOGIN YOURBRANCHNAM E After having done that your branch is public on Launchpad in the OpenObject project and commiters can work on it review it and propose for integration in the official branch The last line allows you to rebind your branch to the 18 Chapter 5 Development Environment Open Object Developer Book Release 1 0 one which is on launchpad after having done this your commit will be
53. them as series goals anyone can propose a blueprint as a series goal As a driver or owner you can review proposed goals by following the Set goals link on your project s Blueprint overview page By following the Subscribe yourself link on a blueprint page you can ask Launchpad to send you email notification of any changes to the blueprint In most cases you ll receive notification only of changes made to the blueprint itself in Launchpad and not to any further information such as in an external wiki However if the wiki software supports email change notifications Launchpad can even notify you of changes to the wiki page If you re a blueprint owner and want Launchpad to know about updates to the related wiki page ask the wiki admin how to send email notifications Notifications should go to notifications specs launchpad net The Buleprints for OpenERP are listed here https blueprints launchpad net openerp https blueprints launchpad net openerp commiter 5 1 Working with Launchpad 21 Open Object Developer Book Release 1 0 Development Environment Windows Linux Mac OS Directory Structure Server GTK Client Web Client Configuration Two configuration files are available e one for the client terprc e one for the server terp serverrc Those files follow the convention used by python s ConfigParser module Lines beginning with FP or are comments Those files are not necessa
54. view with the lower priority 10 5 1 Grouping Elements Separator Adds a separator line Example 10 5 Design Elements 91 Open Object Developer Book Release 1 0 lt separator string Links colspan 4 gt The string attribute defines its label and the colspan attribute defines his horizontal size in number of columns Notebook notebook With notebooks you can distribute the view fields on different tabs each one defined by a page tag You can use the tabpos properties to set tab at up down left right Example notebook colspan 4 notebook Group group groups several columns and split the group in as many columns as desired colspan the number of columns to use rowspan the number of rows to use expand if we should expand the group or not col the number of columns to provide to its children string optional If set a frame will be drawn around the group of fields with a label containing the string Otherwise the frame will be invisible Example group col 3 field name invoiced select 2 gt lt button colspan 1 name make_invoice type object colspan 2 gt lt group gt Page Defines a new notebook page for the view Example page string Order Line gt page string defines the name of the page states confirmed string Make Invoice 92 Chapter 10 Views and Events Open Object Developer Book Rel
55. xsl template name stylesheet gt lt xsl template gt lt xsl template name story gt lt xsl apply templates select transfer list gt xsl template xsl template match transfer list gt xsl apply templates select transfer lt xsl template gt lt xsl template match transfer gt lt setNextTemplate name other_pages gt lt para gt Document lt xsl value of select name gt lt para gt lt para gt Type lt xsl value of select type gt lt para gt lt para gt Reference lt xsl value of select reference gt lt para gt lt para gt Partner ID lt xsl value of select partner_id gt lt para gt lt para gt Date lt xsl value of select date gt lt para gt lt para gt Amount lt xsl value of select amount gt lt para gt lt xsl if test number change gt 0 gt lt para gt Change lt xsl value of select change gt lt para gt lt xsl if gt lt setNextTemplate name first_page gt lt pageBreak gt lt xsl template gt lt xsl stylesheet gt 14 4 Each report with its own corporate header Example with corporate defaults xsl stylesheet version 1 0 xmlns xsl http www w3 org 1999 XSL Transform xmlns fo http www xsl import href custom corporate_defaults xsl gt 154 Chapter 14 Reports Open Object Developer Book Release 1 0 lt xsl import href base r
56. 0 00 PC1 Basic PC 300 PCE 1 1 Basic PC 300 PCE Mea Mainboard ASUStek 7 500 PCE 0 00 88 00 88 00 440 00 Untaxed Amount 326300 Taxes 000 Total 3263 00 Compute order State Quotation Sia confirm order cancel order Record 5 5 of 5 Editing document id 1 State gt pitlocalhost doc Administrator Requests No request B We can also make the opposite operation take a columns group and divide it in as many columns as desired The surrounded green zones of the screen above are good examples Precisely the green framework up and on the right side takes the place of two columns but contains 4 columns As we can see below in the purple zone of the screen there is also a way to distribute the fields of an object on different tabs 88 Chapter 10 Views and Events Open Object Developer Book Release 1 0 AA v o Jioc Ele User Form Options Plugins Shortcuts Help menu Al quotations 5 Order Reference 50002 shop Tiny sale Order other History gu Customer Ref Date Ordered 2009 03 18 Picked Quotation Order is Advance invoice Customer Bank Wealthy and sons 8 ordering Contact Arthur Grosbonnet 1 rue Rockfel EJ gA Invoice Address Arthur Grosbonnet 1 rue Rockfell EJ iB Shipping Address Arthur Grosbonnet 1 Rock
57. 8115 40 4 5 Mp ole E SPRL MR FabianPinckacrs chuussee de Namur 40 1367 Grand Rosicrc Hel gins Pel 52 91 81 3 6 Fis 132 8180 37 00 IV A 3E4 4 201 Request for Quotation PO 001 Other reference SOMOI Printed 21 AW2008 Total 1162 Please find here by a request for quotation Product Descrip tion wd irt ac PCI Desic Computer According to sales conditions Thanks Fabian Pinckacrs la 13 2 Pope dst Dido 1162 INSAT ST gt Modifying a document template OpenOffice org then opens the report in edit mode for you You can modify it using the standard word processing functions of OpenOffice org Writer The document is modified in its English version It will be translated as usual by Open ERP s translation system when you use it through the client interface if you ve personalized your own setup to translate to another language for you So you only need to modify the template once even if your system uses other languages but you ll need to add translations as described earlier in this chapter if you add fields or change the content of the existing ones Tip Attention Older reports The older reports haven t all been converted into the new form supported by Open ERP The data expressions in the old format are shown within double brackets and not in OpenOffice org fields You can transform an old report format to the new format from the OpenOffice org menu Tiny R
58. 9 xmlrpc object mmm import xmlrpclib user admin pwd admin dbname terp3 model res partner sock xmlrpclib ServerProxy http localhost 8069 xmlrpc common uid sock login dbname user pwd sock xmlrpclib ServerProxy http localhost 8069 xmlrpc object CREATE A PARTNER partner data name Tiny active True vat ZZZZZ partner id sock execute dbname uid pwd model create partner data The relation between res partner and res partner category is of type many2many To add categories to a partner use the following format partner data name Provider2 category 6 0 3 2 1 Where 3 2 1 are id fields of lines in res partner category SEARCH PARTNERS args vat ZZZZ2 sock execute dbname uid pwd model search args READ PARTNER DATA fields name active vat ref results sock execute dbname uid pwd model read ids fields print results EDIT PARTNER DATA 190 Chapter 21 XML RPC Web services Open Object Developer Book Release 1 0 values vat ZZ12Z2 results sock execute dbname uid model write ids values DELETE PARTNER DATA results sock execute dbname uid pwd model unlink ids PRINT example 1 PRINT INVOICE 2 IDS is the invoice ID as returned by 3 ids sock execute db
59. ECTS FIELDS AND METHODS 9 1 OpenERP Objects 9 1 1 Introduction All the ERP s pieces of data are accessible through objects As an example there is a res partner object to access the data concerning the partners an account invoice object for the data concerning the invoices etc Please note that there is an object for every type of resource and not an object per resource We have thus a res partner object to manage all the partners and not a Ores partnerQ object per partner If we talk in object oriented terms we could also say that there is an object per level The direct consequences is that all the methods of objects have a common parameter the ids parameter This specifies on which resources for example on which partner the method must be applied Precisely this parameter contains a list of resource ids on which the method must be applied For example if we have two partners with the identifiers 1 and 5 and we want to call the res_partner method send_email we will write something like res partner send email 1 5 We will see the exact syntax of object method calls further in this document In the following section we will see how to define a new object Then we will check out the different methods of doing this For developers Open ERP objects are usually called classes in object oriented programming A Open ERP resource is usually called an object in OO programming
60. ETE STOCK DIALOG AUTHENTICATION STOCK DIALOG ERROR STOCK DIALOG INFO STOCK DIALOG QUESTION STOCK DIALOG WARNING STOCK DIRECTORY STOCK DISCONNECT STOCK DND STOCK DND MULTIPLE STOCK EDIT STOCK EXECUTE STOCK FILE STOCK FIND STOCK FIND AND REPLACE STOCK FLOPPY STOCK GOTO BOTTOM STOCK GOTO FIRST STOCK LAST STOCK GOTO TOP STOCK GO BACK STOCK GO DOWN STOCK GO FORWARD STOCK GO UP STOCK HARDDISK STOCK HELP STOCK HOME STOCK INDENT STOCK INDEX STOCK ITALIC STOCK JUMP TO STOCK JUSTIFY CENTER STOCK JUSTIFY FILL STOCK JUSTIFY LEFT STOCK JUSTIFY RIGHT STOCK MEDIA FORWARD STOCK MEDIA NEXT STOCK MEDIA PAUSE STOCK MEDIA PLAY STOCK MEDIA PREVIOUS STOCK MEDIA RECORD STOCK MEDIA REWIND STOCK MEDIA STOP STOCK MISSING IMAGE 101 Open Object Developer Book Release 1 0 STOCK_NETWORK STOCK_NEW STOCK_NO STOCK_OK STOCK_OPEN STOCK PASTE STOCK PREFERENCES STOCK PRINT STOCK PRINT PREVIEW STOCK PROPERTIES STOCK QUIT STOCK REDO STOCK REFRESH STOCK REMOVE STOCK REVERT TO SAVED STOCK SAVE STOCK SAVE AS STOCK SELECT COLOR STOCK SELECT FONT STOCK SORT ASCENDING STOCK SORT DESCENDING STOCK SPELL CHECK STOCK STOP STOCK STRIKETHROUGH STOCK STOCK UNDERLINE STOCK UNDO STOCK UNINDENT STOCK YES STOCK ZOOM 100 STOCK ZOOM FIT STOCK ZOOM IN STOCK ZOOM OUT terp account terp crm terp mrp terp product terp purchase terp sale terp tools terp administration terp h
61. ForExtensions true xmlrpcConfigDb setServerURL new URL http host port xmlrpc db xmlrpcDb setConfig xmlrpcConfigDb try 1 Retrieve databases Vector lt Object gt params new Vector lt Object gt Object result xmlrpcDb execute list params Object a Object result Vector lt String gt res new Vector lt String gt for int 0 i lt a length i if a i instanceof String res addElement String a i catch XmlRpcException e logger warn XmlException Error while retrieving TinyERP Databases e return 2 catch Exception logger warn Error while retrieving TinyERP Databases return 3 Login import java net URL import org apache commons lang StringUtils import org apache xmlrpc XmlRpcException import org apache xmlrpc client XmlRpcClient import org apache xmlrpc client XmlRpcClientConfigImpl public int Connect String host int port String tinydb String login String password XmlRpcClient xmlrpcLogin new XmlRpcClient XmlRpcClientConfigImpl xmlrpcConfigLogin new XmlRpcClientConfigImpl 188 Chapter 21 XML RPC Web services Open Object Developer Book Release 1 0 xmlrpcConfigLogin setEnabledForExtensions true xmlrpcConfigLogin setServerURL new URL http host port xmlrpc common xmlrpcLogin setConfig xmlrpcConfigLogin try Connect params new Object tinydb login
62. Operi ERP OPEN SOURCE MANAGEMENT SOLUTION Open Object Developer Book Release 1 0 Tiny SPRL 2009 04 10 5 Open Object Developer Book Release 1 0 I Forewords 5 1 Introduction 7 2 Whois this book for 9 3 Content of the book 11 4 About the author s 13 Part 1 Getting Started with OpenERP 15 5 Development Environment 17 SJ Working with Launchpad s s p e uoc 9 Ges REOR 17 3 2 Configuration 225222225 a a E be ad 28 3 3 Command line opons s lt a sise n 25555 Ro eR ORE WR E Ge RE me OS S RE 32 54 OpenBRP Server and Web Client Start Stop s 24 66 oom Roy vom c 34 254 Shutin down tle Server de ede ai ede ie e semi segre P Ie ERAS UA 34 6 Moulder Development Approach 35 OpenObject Server and Modules iu 4 Boe e444 35 62 Module Integrations cord CE RR ROS EON A Se XS 38 63 2 222569 e Vero Ree eme om Roe s e qoe eg Be ae al 38 7 OpenObject Architecture Mvc 41 T MVC Model View Controller lt lt soe c e ca cme 2 22 24 9 x d 4 wy 41 L2 n RALIS E EES i ES RES S Ee n 42 III Part 2 Module Development 47 8 First Module to OpenERP 49 The Modules Introductions exa op xe RSEN ee Anm IE roS e 49
63. RONMENT 5 1 Working with Launchpad 5 1 1 Registration and Configuration Before you can commit on launchpad you need to create a login Go to https launchpad net log in register on top right You enter your e mail address and you wait for an e mail which will guide you trough the process needed to create your login This login is only needed if you intend to commit on bazaar on openerp commiter or on your own branch You can refer to this link https help launchpad net YourAccount NewAccount Any contributor who is interested to become a commiter must show his interest on working for openerp project and his ability to do it in a proper way as the selection for this group is based on meritocracy It can be by proposing bug fixes features requested on our bug tracker system You can even suggest additional modules and or functionalities on our bug tracker system You contribute or join Open ERP team https help launchpad net Teams Joining Contributors are people who wants to help the project getting better add functionnality and improve stability Everyone can contribute on the project with his own knowledge by reporting bugs purposing smart improvment and posting patch The community team is available on launchpad https launchpad net openerp community Member of the quality and commiter team are automatically members of the community Installing Bazaar Get Bazaar version control to pull the source from Launchpad
64. Rockfeller 75016 Paris 0 00 000 12 2009 03 18 50001 Agrolait Tiny sprl 0 00 ooo 32 D Record s 5 5 Editing document id 1 State http localhost 8069 doc administrator Requests request s Ba screen These views are simpler than the form views and thus have less options The different options of those views will be detailed into the next section 10 4 Graph views A graph is a new mode of view for all views of type form If for example a sale order line must be visible as list or as graph define it like this in the action that open this sale order line Do not set the view mode as tree form graph or form graph it must be graph tree to show the graph first or tree graph to show the list first This view mode is extra to your form tree view and should have a seperate menu item field name view type form field field name view mod gt tr graph field Then the user will be able to switch from one view to the other Unlike forms and trees Tiny ERP is not able to automatically create a view on demand for the graph type So you must define a view for this graph 10 3 Tree views 89 Open Object Developer Book Release 1 0 record model ir ui view id view_order_line_graph gt field name name sale order line graph field field name model sale order line field field name type graph field field name arc
65. True Example TODO 10 7 Events 99 Open Object Developer Book Release 1 0 100 Chapter 10 Views and Events CHAPTER ELEVEN MENU AND ACTIONS 11 1 Menus Here s the template of a menu item menuitem id menuitem_id name Position Of The Menu Item In The Tree action action id icon NAME FROM LIST groups groupname sequence lt integer gt gt Where id specifies the identifier of the menu item in the menu items table This identifier must be unique Mandatory field e name defines the position of the menu item in the menu hierarchy Elements are separated by slashes A menu item name with no slash in its text is a top level menu Mandatory field e action specifies the identifier of the action that must have been defined in the action table ir actions act window Note that this field is not mandatory you can define menu elements without associating actions to them This is useful when defining custom icons for menu elements that will act as folders for example this is how custom icons for Projects Human Resources in Open ERP are defined icon specifies which icon will be displayed for the menu item using the menu item The default icon is STOCK OPEN The available icons STOCK ABOUT STOCK ADD STOCK_APPLY STOCK BOLD STOCK CANCEL STOCK CDROM STOCK CLEAR STOCK CLOSE STOCK COLOR PICKER STOCK CONNECT STOCK CONVERT STOCK COPY STOCK CUT STOCK DEL
66. W3C verbose Will used debugged output init init a module use all for all modules update update a module use all for all modules upgrade Upgrade install uninstall modules db name specify the database name db user specify the database user name db password specify the database password pg path specify the pg executable path db host specify the database host db port specify the database port translate modules Specify modules to export Use in combination with i18n export You can create your own configuration file by specifying s or save on the server command line If you would like to write an alternativve configuration file use c config file gt or config lt config file gt Here is a basic configuration for a server options verbose Fals xmlrpc True database terp update port 8069 init interface 127 0 0 1 reportgz False Full Example for Server V5 0 printer path none softpath_html none preview True softpath none logging output stdout logger verbose True level error help index http www openerp com documentation user manual context http www openerp com scripts context_index php 5 2 Configuration 29 Open Object Developer Book Release 1 0 form autosave False toolbar True support recipient support openerp com support id tip position 0 autostart False client lang en US default pat
67. a loop in different elements You have to use intermediate variables like country id The first operation as an object call is much better for several reasons t uses objects facilities and works with modules inheritances overload t s simpler more explicit and uses less code t s much more efficient as you will see in the following examples Some fields do not directly correspond to a SQL field e g function fields in Python 42 Chapter 7 OpenObject Architecture Mvc Open Object Developer Book Release 1 0 7 2 2 Example 2 Prefetching Suppose that later in the code in another function you want to access the name of the partner associated to your sale order You can use this partner_name sale partner_id name And this will not generate any SQL query as it has been prefetched by the object relational mapping engine of Open ERP 7 2 3 Loops and special fields Suppose now that you want to compute the totals of 10 sales order by countries You can do this in Open ERP within a Open ERP object def get_totals self cr uid ids countries for sale in self browse cr uid 105 country sale partner_invoice_id country countries setdefault country 0 0 countries country sale amount_untaxed return countries And to print them as a good way you can add this on your object def print_totals self cr uid ids result self get_totals cr uid ids for country result keys pr
68. a report def invoice id self uid datas return ids s s actions get invoice id result type print report account invoice get id from action True state check Result client run an action 132 Chapter 13 Creating Wizard The Process Open Object Developer Book Release 1 0 def makeInvoices self cr uid data context return domain id in join map str newinv name Invoices view type form view mode tree form res model account invoice view id False context type out_refund type ir actions act window result type action action makeInvoices state end The result of the function must be an all the fields of an ir actions Here it is an ir action act window so the client will open an new tab for the objects account invoice For more information about the fields used click here It is recommended to use the result of a read on the ir actions object like this def account chart open window self cr uid data context mod obj pooler get pool cr dbname get ir model data act obj pooler get pool cr dbname get ir actions act window result mod obj get id cr uid account action account id mod obj read cr uid result res id 0 res id result act obj read cr uid id 0 res
69. abase DB_NAME specify the database name r DB_USER db_user DB_USER specify the database user name w DB PASSWORD db_password DB_PASSWORD specify the database pass word pg_path PG_PATH specify the pg executable path Jdb hostZDB HOST specify the database host Jdb PORT specify the database port 5 3 3 Internationalization options Use these options to translate Tiny ERP to another language See 118 section of the user man ual Option l is mandatory I LANGUAGE language LANGUAGE specify the language of the translation file Use it with 118n export and 118n import i18n export TRANSLATE_OUT export all sentences to be translated to a CSV file and exit JHil8n importZ TRANSLATE IN import a CSV file with translations and exit modules TRANSLATE_MODULES specify modules to export Use combina tion with 118n export 5 3 Command line options 33 Open Object Developer Book Release 1 0 5 4 OpenERP Server and Web Client Start Stop 5 4 1 OpenERP 4 2 First check that all the required dependencies are installed Then create the terp database You have to make sure that your user has the correct credentials to create databases with PostgreSQL For more information on this subject please refer to the PostgreSQL manual createdb terp ncoding unicode Once the database created you can start OpenERP The content of the database will automatically be created at the
70. ail system will display all the fields related to the current object selected in the Object field 16 4 Email Action 165 Open Object Developer Book Release 1 0 Message You can provide the message template with the fields that related to the current object And it will be merge when it is going to send the email This is the same language then the rml which is used to design the report here we can use the html tage to design the html format Working with You can select the any fields from the current object like here we select the invoice in the object For example to get the partner name we can use object partner_id name like the same object refers to the current object and we can access any fields which exist in the model After confirmation the invoice we get the confirmation email from the action 16 5 Create Object This is an interesting feature for the tiny partners those who want to track the transaction in the OpenERP like currently in the ERP you get the Event history on the Partners which logs the only the sales order events But 1 we want to start logging the invoice like the same we can easily do like that using the Create object Actions Action Name Create Partner Event History Action State Create Object po Object Invoice eS 5 Sequence 0 2 Create Write Fields Mapping Model res partner event B Q Field Mappings DOS
71. ale order addons sale report order rml parser order header True The parser inherit from the report_sxw rml_parse object and it add to the localcontext the function time so it will be possible to call it in the report After an instance of report_sxw report_sxw is created with the parameters the name of the report the object name on which the report is defined the path to the rml file the parser to use for the report by default rml_parse a boolean to add or not the company header on the report default True 14 1 OpenOffice org reports 143 Open Object Developer Book Release 1 0 The xml definition be visible from the client the report must be declared in an xml file generally module_name _report xml that must be put in the terp py file Here is an example for the sale order report lt xml version 1 0 gt lt terp gt lt data gt lt report id report_sale_order string Print Order model sale order name sale order rml sale report order rml auto False gt header False gt lt data gt lt terp gt The arguments are id the id of the report like any xml tag in OpenERP string the string that will be display on the Client button model the object on which the report will run name the name of the report without the first report rml the path to the rml file auto boolean to specify if the server must generate a default parser or not header
72. alse value in this case value because XML RPC communication between the server and the client doesn t allow to transmit this value store Enhancement It will compute the field depends on other objects Syntex store object_name function_name field_namel field_name2 priority It will call func tion function name when any changes will be applied on field list field1 field2 on object ob ject_name and output of the function will send as a parameter for main function of the field Example In membership module membership state fields function _membership_state method True string Current membership state store account invoice _get_invoice_partner state 10 membership membership line get partner id state 10 res partner lambda self cr uid ids c ids free member 10 9 7 Type of Fields 77 Open Object Developer Book Release 1 0 Property Fields Declaring a property A property is a special field fields property class res partner osv osv name res partner inherit res partner columns 1 property product pricelist fields property product pricelist type many2one relation product pricelist string Sale Pricelist method True view_load True group_name Pricelists Properties Then you have to create the default value in a XML file for this property lt record model ir property i
73. anted to any group then it is accessible to everybody If you want to grant access to some groups just go to Menu gt Administration gt Security gt Define access to Menu items and select the groups that can use this menu item 108 Chapter 11 Menu and Actions Open Object Developer Book Release 1 0 Fichier Utilisateur Formulaire Options Plugins Aide Ose 323 e029 550 Xx Menu Menu Complete Name Menu Operations Huissier Signal tique des ventes Menu Signal tique des ventes Parent Menu Huissier O Ajouter Enlever ID Groups Enregistrement 106 179 State Document en cours d dition 107 N Nouveau S Sauver D Effacer Administrator Requ tes Pas de requ te e Beware If the Administrator does not belong to one of the group he will not be able to reach this menu again 11 3 Security 109 Open Object Developer Book Release 1 0 110 Chapter 11 Menu and Actions Part 3 Business Process Development CHAPTER TWELVE WORKFLOW BUSINESS PROCESS 12 1 Introduction The workflow system in Open ERP is a very powerful mechanism that can describe the evolution of documents model in time Workflows are entirely customizable they can be adapted to the flows and trade logic of almost any company The workflow system makes Tiny ERP very flexible and allows it to easily support changing needs without h
74. applied on launchpad directly unless you use local bzr pull Get modifications on your branch from others EDIT STUFF bzr ci commit your changes on your public branch If your changes fixe a public bug on launchpad you can use this to mark the bug as fixed by your branch bzr ci fixes 1p 453123 Where 453123 is a bug ID Once your branch is mature mark it as mature in the web interface of launchpad and request for merging in the official release Your branch will be reviewed by a commiter and then the quality team to be merged in the official release Read more about Open ERP Team Pushing a new branch If you want to contribute on OpenERP or OpenObject here is the proposed method You create a branch on launchpad on the project that interest you It s important that you create your branch on launchpad and not on your local system so that we can easily merge share code between projects and centralize futur developments You develop your own features or bugfixes in your own branch on launchpad Don t forget to set the status of your branch new experimental development mature so that contributors knows what they can use or not Once your code is good enough you propose your branch for merging Your work will be evaluated by one responsible of the commiters team If they accept your branch for integration in the official version they will submit to the quality team that will review and merge in the off
75. are autoconf manual gettext PO Files html PO Files 56 Chapter 8 First Module to OpenERP Open Object Developer Book Release 1 0 CLIENT SERVER ACTION VIEW_ID OBJECT DOMAIN REQUEST VIEW VIEW FIELDS account invoice create datas To develop new objects design of new objects is restricted to the minimum create the objects and optionally create the views to represent them The PostgreSQL tables do not have to be written by hand because the objects are able to automatically create them or adapt them in case they already exist Reports Open ERP uses a flexible and powerful reporting system Reports are generated either in PDF or in HTML Reports are designed on the principle of separation between the data layer and the presentation layer Reports are described more in details in the Reporting chapter Wizards Here s an example of a XML file that declares a wizard lt xml version 1 0 gt lt terp gt lt data gt lt wizard string Employee Info model hr employee name employee info wizard id wizard_employee_info gt lt data gt lt terp gt A wizard is declared using a wizard tag See Add A New Wizard for more information about wizard XML also you can add wizard in menu using following xml entry lt xml version 1 0 gt lt terp gt lt data gt lt wizard string Employee Info model hr employee name employee info wizard id wizard_employee_info
76. at will be opened when the action is activated Context dictionaries are declared with the same syntax as Python dictionaries in the XML file For more information about context dictionaries see section The context Dictionary res model is the name of the object on which the action operates view type is set to form when the action must open a new form view and is set to tree when the action must open a new tree view 104 Chapter 11 Menu and Actions Open Object Developer Book Release 1 0 view mode is only considered if view type is form and ignored otherwise The four possibilities are form tree the view is first displayed as a form the list view can be displayed by clicking the alternate view button tree form the view is first displayed as a list the form view be displayed by clicking the alter nate view button form the view is displayed as a form and there is no way to switch to list view tree the view is displayed as a list and there is no way to switch to form view version 5 introduced graph and calendar views usage is used TODO target the view will open in new window like wizard They indicate at the user that he has to open a new window in a new tab Administration gt Custom gt Low Level gt Base gt Action gt Window Actions ERP Fichier Utilisateur Formulaire Options Plugins Aide Daw 50 5 Action
77. ate account base The database is rebuilt according to information provided in XML files and Python Classes For more information on these functionalities go to the section XML files and Defining Objects You can also execute the server with init all The server will then rebuild the database according to the existing XML files on the system delete all existing data and return Open ERP to its basic configuration 177 Open Object Developer Book Release 1 0 178 Chapter 19 Upgrading Server Modules Part Part 6 Service base Integration 179 CHAPTER TWENTY WORKING WITH WEB SERVICES 20 1 How to load data 1 Postgresql Simple standard Does not respect the WORKFLOW 2 XML files with update 3 XML RPC Script same as website interface How to backup restore a Postgresql database backup pg dump terp gt terp sql restore createdb terp encoding unicode psq l terp lt terp sql or psql d terp f terp sql 20 2 The objects methods 1 create field value return ID created 2 search arg1 value1 offset 0 limit 1000 return IDS found 3 read IDS field1 field2 return 14471 field1 field2 4 write IDS field1 valuel field2 3 return True 5 unlink IDS return True 181 Open Object Developer Book Release 1 0 182 Chapter
78. aving to program new functionalities Goals description of document evolution in time automatic trigger of actions if some conditions are met management of company roles and validation steps management of interactions between the different objects modules graphical tool for visualization of document flows To understand its utility see these three examples 12 1 1 WkfExample1 Discount On Orders The first diagram represent a very basic workflow of an order 113 Open Object Developer Book Release 1 0 E START STOP Canceled The order starts in the draft state when it is in redaction and not approved When the user press on the Confirm button the invoice is created and the order comes into the CONFIRMED state Then two operations are possible 1 the order is done shipped 2 the order is canceled Let s suppose a company has a need not implemented in OpenERP For example suppose their sales staff can only offer discounts of 15 or less Every order having a discount above 15 must be approved by the sales manager This modification in the sale logic doesn t need any line of python code A simple modification of the workflow allows us to take this new need into account and add the extra validation step 114 Chapter 12 Workflow Business Process Open Object Developer Book Release 1 0 Draft y START Ristournez 1596 stop Validation Ristourne
79. basic N Subflow 5 Signal subflow proforma account invoice basic Flow Start J Flow Stop O proforma2 account invoice basic Split Mode xor M Join Mode account invoice basic Outgoing transitions in this example I added the Action to print the Invoice when the Invoice will be confirmed 168 Chapter 16 Server Action CHAPTER SEVENTEEN DASHBOARD Open ERP objects can be created from PostgreSQL views The technique is as follows 1 Declare your _columns dictionary All fields must have the flag readonly True 2 Specify the parameter _auto False to the Open ERP object so no table corresponding to the _columns dictio nnary is created automatically 3 Add a method init self cr that creates a PostgreSQL View matching the fields declared in columns Example The object report crm case user follows this model class report crm case user osv osv name report crm case user _description Cases by user and section auto False columns 1 name fields date Month readonly True user id fields many2one res users User readonly True relate True section id fields many2one crm case section Section readonly True relate True amount revenue fields float Est Revenue readonly True amount costs fields float Est Cost readonly True amount revenue prob fields float Est Revx xProb readonly True nbr fi
80. c in the php library folder restart the apcahe iis server Demo script Login function connect 1 var Suser admin var Spassword admin var dbname db name var server url http localhost 8069 xmlrpc if isset COOKIE user id true if S_COOKIE user_id gt 0 return COOKIE user id Ssock new xmlrpc client server url common msg new xmlrpomsg login msg addParam new xmlrpcval dbname string msg addParam new xmlrpcval user string msg addParam new xmlrpcval password string Sresp sock gt send msg val resp value Sid val gt scalarval setcookie user_id Sid time 3600 gt 0 return Sid jelse return 1 Search Sclient xml rpc handler Srelation name of the relation ex res partner Sattribute name of the attribute ex code Soperator search term operator ilike x Skey search for 186 Chapter 21 XML RPC Web services Open Object Developer Book Release 1 0 function search client relation fattribute foperator keys var Suser admin var password admin var S userId 1 var dbname db name var server url http localhost 8069 xmlrpc key array new xmlrpcval array new xmlrpcval Sattribute string new xmlrpcval S operator string new xmlrpcval S keys string array if
81. cho Error else ew ew ew ew ew ew Sresp 5faultString xmlrpcval dbname xmlrpcval 3 xmlrpcval demo xmlrpcval res partner xmlrpcval create xmlrpcval SarrayVal string J string strimng s TString yo echo Partner resp value 5scalarval created 192 Chapter 21 XML RPC Web services Part Part 7 Other Topics 193 CHAPTER TWENTYTWO RAD TOOLS 22 1 DIA The uml_dia module helps to develop new modules after an UML description using the DIA tool http www gnome org projects dia It s not a typical module in the sense that you don t have to install it on the server as another module The contents of the module are just a python script for dia codegen openerp py a test dia diagram and the module generated by the test The module is located in the extra addons branch https code launchpad net openobject addons To use the module you need to make codegen openerp py accesible from dia usually in your usr share dia python directory and make sure that it gets loaded once To do it just open dia and open a Python Console from the Dialog Menu and type there import codegen openerp If everything goes alright you will have a new option in your Export dialog named PyDia Code Generation OpenERP that will create a zip module from your UML diagram To install win Dia in windows first install Pytho
82. compta_user gt lt field name name gt grcompta lt field gt lt record gt lt record model res groups id group_compta_admin gt lt field name name gt grcomptaadmin lt field gt lt record gt menuitem name Administration groups admin grcomptaadmin icon terp stock id menu_admi lt data gt lt terp gt This is as you can see an example taken from an accounting system French people call accounting comptabilit which explains the compta bit Defining a view is defining the interfaces the user will get when accessing your module Just defining a bunch of fields here should already get you started on a complete interface However due to the complexity of doing it right we recommend once again that you take a look at the 20 minutes Flash tutorial or download the travel agency module example Next you should be able to create different views using other files to separate them from your basic admin view 8 1 4 Creating Action Linking events to action The available type of events are client print multi print from a list or form client action multi action from a list or form tree but open double click on the item of a tree like the menu tree but action action on the items of a tree To map an events to an action record model ir values id ir open journal gt field name key2 tree but lt 1 gt field name model account journal p
83. cts Fields and Methods Open Object Developer Book Release 1 0 Tip Notice _name _inherit In this example the other_material will hold all fields specified by network material and it will additionally hold a new field manuf warranty All those fields will be part of the table other material New instances of this class will therefore never been seen by views or trees operating on the superclasses table network material This type of inheritancy is known as inheritance by prototyping e g Javascript because the newly created subclass copies all fields from the specified superclass prototype The child inherits data fields and behavior functions of his parent 9 5 Inheritance by Delegation inherits Syntax class tiny object osv osv name tiny object _table tiny object _inherits tiny object 1 name col 1 tiny object 2 name col 2 tin v The object tiny object inherits from all the columns and all the methods from the n objects tiny object 1 tiny object n 2 inherit from multiple tables the technique consists adding one column to the table tiny_object per inherited object This column will store a foreign key an id from another table The values name col 1 name col 2 name col n are of type string and determine the title of the columns in which the foreign keys from tiny object 1 tiny object n are stored
84. d property_product_pricelist gt lt field name name gt property_product_pricelist lt field gt field name fields id search model res partner name property product pricelist field name value eval product pricelist str list0 gt record Tip if the default value points to a resource from another module you can use the ref function like this field value eval product pricelist str ref module data_id gt Putting properties in forms To add properties in forms just put the lt properties gt tag in your form This will automatically add all properties fields that are related to this object The system will add properties depending on your rights some people will be able to change a specific property others won t Properties are displayed by section depending on the group name attribute It is rendered in the client like a separator tag How does this work The fields property class inherits from fields function and overrides the read and write method The type of this field is many2one so in the form a property is represented like a many2one function But the value of a property is stored in the ir property class table as a complete record The stored value is a field of type reference not many2one because each property may point to a different object If you edit properties values from the administration menu these are represented like a
85. d a form result Here is a screenshot of the wizard used to reconcile transactions when you click on the gear icon in an account chart 128 Chapter 13 Creating Wizard The Process Open Object Developer Book Release 1 0 GO Tiny file User Form Options Plugins Help t New Save Delete Other View ES Find p Back y Forward Menu Account Chart Account Entry Line Information Analytic Lines General information Name 2 Account 560 Compte courant De Debit 545 00 Optional information Currency D EN Amount Currency Quantity D Q St Maturity date State Journal sales Joumal De B 9 C36 X Reconciliation Reconcile Reconciliation transactions of Transaction Credit amount Debit amount write Off Write Off amount Enregistrements 1 1 Document en cours d dition 5 Action Cancel Reconcile 7 State OOO Attachment Close Print 03 13 2007 Q Effective date Partner Ref asustek 0 amp Credit 0 00 E 0 00 Entry 2 amp Litigation 03 13 2007 Q Creation date Period Active alhost 8069 terp fadministrat or Requests de requ te ES Ly 13 2 Wizards Principles A wizard is a succession of steps A step is composed of several actions 1 send a form to the client a
86. data model and user interface view concerns so that changes to the user interface do not impact the data handling and that the data can be reorganized without changing the user interface The model view controller solves this problem by decoupling data access and business logic from data presentation and user interaction by introducing an intermediate component the controller Controller For example in the diagram above the solid lines for the arrows starting from the controller and going to both the view and the model mean that the controller has a complete access to both the view and the model The dashed line for the arrow going from the view to the controller means that the view has a limited access to the controller The reasons of this design are From View to Model the model sends notification to the view when its data has been modified in order the view to redraw its content The model doesn t need to know the inner workings of the view to perform this operation However the view needs to access the internal parts of the controller From View to Controller the reason why the view has limited access to the controller is because the depen dencies from the view to the controller need to be minimal the controller can be replaced at any moment 7 1 1 MVC Model in Tiny ERP In Tiny ERP we can apply this model view controller semantic with model The PostgreSQL tables 41 Open Object Developer Book Re
87. e amount value amount gt cost TODO documenter format methode appell e def compute buyer costs self cr uid ids args attachment extract the first attachment of the resource whose id is taken from the field whose name is given in the name attribute and put it as an image in the report Example image type attachment name id gt Example Here is an example of XML file lt xml version 1 0 encoding ISO 8859 1 transfer list transfer type fields name id gt name type field name name partner id type field name partner id name date type field name date type type field name type reference type field name reference amount type field name amount gt change type field name change gt lt transfer gt transfer list 14 2 2 Introduction to RML For more information on the RML format please refer to the official Reportlab documentation http www reportlab com docs RML_UserGuide pdf 14 2 XSL RML reports 151 Open Object Developer Book Release 1 0 14 2 3 XSL RML Stylesheet There are two possibilities to do a XSL style sheet for a report Either making everything by yourself or use our predefined templates Either freestyle or use corporate_defaults rml_template import rml_template xsl required templates frames stylesheet story optional templates Translations As
88. e operator value field name operator value attribute2 field_name opera where attribute will be readonly invisible required Default value Example in product product field digits 14 3 name volume attrs readonly type service Example Here s the source code of the view of a sale order object This is the same object as the object shown on the screen shots of the presentation Example 10 5 Design Elements 93 Open Object Developer Book Release 1 0 lt xml version 1 0 gt lt terp gt lt data gt record id view_partner_form model ir ui view field name name res partner form field field name model res partner field field name type form field field name arch type xml form string Partners group colspan 4 col 6 gt lt field name name select 1 gt lt field name ref select 1 gt lt field name customer select 1 gt field domain domain partner name title gt field name lang select 2 field name supplier select 2 lt group gt lt notebook colspan 4 gt lt page string General gt lt field colspan 4 mode form tree name address nolabel 1 select 1 gt lt form string Partner Contacts gt lt field name name select 2 gt field domain domain contact name title field name function
89. e or false Using such tag and tiny version you will always end up whith an activity which is tagged as flow stop true leaving u with a nasty hunt to find out where your workflowdesign could be wrong 12 4 7 wkt id The workflow which this activity belongs to Defining activities using XML files 12 4 Activity 119 Open Object Developer Book Release 1 0 12 4 8 The general structure of an activity record is as follows record model workflow activity id activity id field name wkf id ref workflow id field name name activity name field field name split mode XOR OR AND lt field gt field name join_mode gt XOR AND lt field gt field name kind dummy function subflow stopall field field name action field field name signal send field field name flow start True False lt field gt field name flow stop True False lt field gt record The first two arguments wkf id and name are mandatory Be warned to not use flow start and flow stop unless your activity really is a flow start or flow stop There are tiny versions that do not care about the tags contents like True or False Examples There are too many possibilities of activity definition to choose from using this definition We recommend you to have a look at the file server bin addons sale sale workflow xml for several examples
90. e The name of the wizard It is used internally and should be unique replace optional Whether or not the wizard should override all existing wizards for this model Default value False menu optional Whether or not TruelFalse to link the wizard with the gears button i e show the button or not Default value True keyword optional Bind the wizard to another action print icon gear icon Possible values for the keyword attribut client print multi the print icon in a form client action multi the gears icon in a form tree but action the gears icon in a tree view with the shortcuts on the left tree but open the double click on a branch of a tree with the shortcuts on the left For example this 1s used to bind wizards in the menu ferp py If the wizard you created is the first one of its module you probably had to create the modulename wizard xml file yourself In that case it should be added to the update xml field of the py file of the module is for example the terp py file for the account module name Open ERP Accounting version 0 1 depends base init xml account workflow xml account data xml update xml account view xml account report xml account wizard xml 13 4 Add A New Wizard 135 Open Object Developer Book Release 1 0 13 5 osv_memory Wizard System To develop osv_memory wizard
91. e in combination with i18n export You can create your own configuration file by specifying s or on the server command line If you would like to write an alternativve configuration file use c config file gt or config lt config file gt Here is a basic configuration for a server options verbose Fals xmlrpc True database terp update port 8069 init interface 127 0 0 1 reportgz False Full Example for Server V5 0 printer path none softpath_html none preview True softpath none logging output stdout logger verbose True level error help index http www openerp com documentation user manual context http www openerp com scripts context_index php form autosave False toolbar True support recipient support openerp com support_id tip position 0 autostart False 5 1 Working with Launchpad 23 Open Object Developer Book Release 1 0 client lang en US default path home user filetype theme none toolbar icons form_tab_orientation 0 form_tab top survey position 3 path pixmaps usr share pixmaps openerp client share usr share openerp client login db eo2 login admin protocol http port 8069 server localhost GTK Client Configuration login section login login name to use to connect to Tiny ERP server server address used by the server
92. e menu The user clicks on the icon print or action 102 Chapter 11 Menu and Actions Open Object Developer Book Release 1 0 11 2 2 Example of events In Open ERP all the actions are described and not configured Two examples Opening of a window when double clicking in the menu User connection Opening of the menu When the user open the option of the menu Operations Partners Partners Contact the next steps are done to give the user information on the action to undertake 1 Search the action in the IR 2 Execution of the action a If the action is the type Opening the Window it indicates to the user that a new window must be opened for a selected object and it gives you the view form or list and the filed to use only the pro forma invoice b The user asks the object and receives information necessary to trace a form the fields description and the XML view User connection When a new user is connected to the server the client must search the action to use for the first screen of this user Generally this action is open the menu in the Operations section The steps are 1 Reading of a user file to obtain ACTION ID 2 Reading of the action and execution of this one The fields Action Name The action name Action Type Always ir actions act window View Ref The view used for showing the object Model The model of the object to post Type of View The type of view
93. e of an action XML record lt record model ir actions act_window id action_id_1 gt lt field name name gt action name lt field gt lt field name view_id ref view_id_1 gt field name domain gt list of 3 tuples max 250 characters lt field gt field name context gt context dictionary max 250 characters lt field gt field name res_model gt Open object lt field gt lt field name view_type gt form tree lt field gt lt field name view_mode gt form tree tree form form tree lt field gt lt field name usage gt menu lt field gt field name target gt new lt field gt lt record gt Where id is the identifier of the action in the table ir actions act_window It must be unique name is the name of the action mandatory view id is the name of the view to display when the action is activated If this field is not defined the view of a kind list or form associated to the object res model with the highest priority field is used if two views have the same priority the first defined view of a kind is used domain is a list of constraints used to refine the results of a selection and hence to get less records displayed in the view Constraints of the list are linked together with an AND clause a record of the table will be displayed in the view only if all the constraints are satisfied context is the context dictionary which will be visible in the view th
94. e the button s label e confirm the message for the confirmation window if needed Eg confirm Are you sure name the name of the function to call when the button is pressed In the case it s an object function it must take 4 argun cr is a database cursor uid is the userID of the user who clicked the button ids is the record ID list args is a tuple of additional arguments states a comma separated list of states from the state field or from the workflow in which the button must appear If the states attribute is not given the button is always visible type this attribute can have 3 values workflow value by default the function to call is a function of workflow object the function to call is a method of the object action call an action instead of a function Example lt button name order confirm states draft string Confirm Order icon gtk execute gt Label Adds a simple label using the string attribute as caption Example label string Test New Line Force a return to the line even if all the columns of the view are not filled in Example newline 10 6 Inheritance in Views When you create and inherit objects in some custom or specific modules it is better to inherit than to replace from an existing view to add modify delete some fields and preserve the others Example 10 6 Inheritance in Views 95 Open Object Developer Book Release 1 0
95. e use protocols The RPC approach spares programmers the trouble of having to learn about underlying protocols networking and various implementation details XML RPC can be used with Python Java Perl PHP C C Ruby Microsoft s NET and many other programming languages Implementations are widely available for platforms such as Unix Linux Windows and the Macintosh An XML RPC call is conducted between two parties the client the calling process and the server the called process A server is made available at a particular URL such as http example org 8080 rpcserv The above text just touches the surface of XML RPC I recommend O Reilly s Programming Web Service with XML RPC for further reading One may also wish to review the following links XML RPC Home Page XML RPC for C and C The Apache XML RPC Project Expat The XML Parser 21 1 Interfaces 21 1 1 XML RPC XML RPC Architecture Open ERP is a based on a client server architecture The server and the client s communicate using the XML RPC protocol XML RPC is a very simple protocol which allows the client to do remote procedure calls The called 183 Open Object Developer Book Release 1 0 function its arguments and the result of the call are transported using HTTP and encoded using XML For more information on XML RPC please see http www xml rpc com Architecture The diagram below synthesizes the client server architecture of Open ERP Ope
96. eSQL database as you will shortcut important steps like constraints checking or workflow modification Note The Physical Database Model of OpenERP Pre Installed Data sdefine lightblue color 27adfb Data can be inserted or updated into the PostgreSQL tables corresponding to the Tiny ERP objects using XML files The general structure of a Tiny ERP XML file is as follows lt xml version 1 0 gt lt terp gt lt data gt lt record model model name_1 id id_name_1 gt field name fieldi gt slightblues fieldl content lt field gt lt field name field2 gt Slightblues field2 content lt field gt 8 1 Modules Introduction 53 Open Object Developer Book Release 1 0 lt record gt lt record model model name_2 id id_name_2 gt 2 record Gane lt data gt lt terp gt Fields content are strings that must be encoded as UTF 8 in XML files Let s review an example taken from the TinyERP source base_demo xml in the base module lt record model res company id main_company gt lt field name name gt Tiny sprl lt field gt lt field name partner_id ref main_partner gt lt field name currency_id ref EUR gt lt record gt lt record model res users id user_admin gt lt field name login gt admin lt field gt lt field name password gt admin lt field gt lt field name name gt Administrator lt field gt lt field na
97. ease 1 0 10 5 2 Data Elements Field attributes for the field tag e select 1 mark this field as being one of the research criteria for this resource search view colspan 4 the number of columns on which a field must extend readonly 1 set the widget as read only required 1 the field is marked as required If a field is marked as required a user has to fill it the system won t save the resource if the field is not filled This attribute supersede the required field value defined in the object nolabel 1 hides the label of the field but the field is not hidden in the search view invisible2 True hides both the label and the field string change the field label Note that this label is also used in the search view see select attribute above domain can restrict the domain Example domain partner id partner id widget can change the widget Example widget oneZmany list one2one list one2many list many2one list many2many url email image float time reference on change define a function that is called when the content of the field changes Example on change onchange partner type partner id See ViewsSpecialProperties for details attrs Permits to define attributes of a field depends on other fields of the same window It can be use on page group buttor Format attribute field_nam
98. eate uid create date write uid write date Those fields represent respectively the id of the user who created the record the creation date of record the id of the user who last modified the record and the date of that last modification This data may be obtained by using the perm read method name required Name of the object Default value None _order Name of the fields used to sort the results of the search and read methods Default value id Examples _order name _order date order desc _rec_name Name of the field in which the name of every resource is stored Default value name Note by default the name get method simply returns the content of this field _Sequence Name of the SQL sequence that manages the 145 for this object Default value None _sql SQL code executed upon creation of the object only if _auto is True _table Name of the SQL table Default value the value of the name field above with the dots replaced by underscores _ 9 3 OpenERP Object Attributes 69 Open Object Developer Book Release 1 0 9 4 Object Inheritance _inherit 9 4 1 Introduction Objects may be inherited in some custom or specific modules It is better to inherit an object to add modify some fields It is done with _inherit object name 9 4 2 Extension of an object There are two possible ways to do this kind of inheritance Both ways result in a new class of da
99. eated invoice should confirm it self E the server action Object 9 Pun order Fo Sequence 5 Trigger Configuration Workflow on Invoice r fo Trigger On iQ Trigger Name invoice open account invoice 1 Action Type ir actions server This is the easy configuration for the trigger to have the system where the created invoice will confirm it self Important fields are 164 Chapter 16 Server Action Open Object Developer Book Release 1 0 Object Select the object on which we want to implement the Server Action when work flow will execute on this object Work flow on Here we select invoice need to select the model on which the automatic workflow will be called by the action system Trigger On We need to provide the id of the newly record here in this case Purchase order store the id of the Invoice after creating of the invoice in invoice_id field Trigger Name This is the signal name which we want to generate on the newly created object 16 4 Email Action This is the common requirement for all business process like send the confirmation by the email when sales order purchase order invoice payment shipping of goods will takes place For that we need only few things to configure and tiny will send the email very quickly and in easy way Even not need to setting up the your own email server you can use your exciting email server and account of you n
100. ects such as dict define a copy method 23 1 2 File names The structure of a module should be like this module init py __terp__ py module py module_other py module_view xml 201 Open Object Developer Book Release 1 0 module_wizard xml module_report xml module_data xml module_demo xml wizard init apy wizard name py report init py report name sxw report name rml report name py 23 1 3 Naming conventions modules modules must be written in lower case with underscores The name of the module is the name of the directory i sale sale commission objects the name of an object must be of the form name of module namel name2 name3 The namei part of the objec sale order sale order line sale shop sale commission commission rate fields field must be in lowercase separated by underscores Try to use commonly used names for fields name state acti many2one must end by id eg partner id order line id many2many must end by 145 eg category ids one2many must end by 145 eg line ids 23 2 Releasing a module 23 2 1 Introduction You can publish your work under our systems to Get help from contributors or interrested partners for the development Get feedback from testers and translators Get your module in the next distribution version of Open ERP if accepted by the editor so that you do not have to manage mi
101. ed on this fields for accountants these are not the same rights that are applied to partner objects So you have specific rights just for this field of the partner form only accountants may change the account receivable of a partner This is a multi company field the same partner may have different account receivable values depending on the company the user belongs to In a multi company system there is one account chart per company The account receivable of a partner depends on the company it placed the sale order The default account receivable is the same for all partners and is configured from the general property menu in administration Note One interesting thing is that properties avoid spaghetti code The account module depends on the partner base module But you can install the partner base module without the accounting module If you add a field that points to an account in the partner object both objects will depend on each other It s much more difficult to maintain and code for instance try to remove a table when both tables are pointing to each others Example 2 Product Times The product expiry module implements all delays related to products removal date product usetime This module is very useful for food industries This module inherits from the product product object and adds new fields to it class product product osv osv _inherit product product name product product columns 1
102. eferenced by the relation field whose name is given in the name attribute It means that its child nodes will be able to access the fields of that resource without having to prefix them with the field name that makes the link with the other object In our example above we could also have accessed the field name of the partner with the following lt partner type zoom name partner id name type field name name gt lt partner gt In this precise Case there is of course no point in using this notation instead of the standar lt name type field name partner_id name gt 150 Chapter 14 Reports Open Object Developer Book Release 1 0 The zoom type is only useful when we want to recover several fields in the same object function returns the result of the call to the function whose name is given in the name attribute This function must be part of the list of predefined functions For the moment the only available function is today which returns the current date call calls the object method whose name is given in the name attribute with the arguments given in the args attribute The result is stored into a dictionary of the form name of variable value and can be accessed through child nodes These nodes must have a value attribute which correspond to one of the keys of the dictionary returned by the method Example cost type call name 2 compute seller costs args gt name value nam
103. efined value cascade set null 2 Default value set null required True readonly True select True creates an index on the Foreign Key field Example commercial fields many2one res users Commercial ondelete cascade one2many TODO syntax fields one2many other object name Field relation id Fieldname optional parameter Optional parameters invisible True False states readonly True False Example address fields one2many res partner address id Contacts many2many TODO syntax 74 Chapter 9 Objects Fields and Methods Open Object Developer Book Release 1 0 fields many2many other object name relation object other object id actual object id Field Name where other object name is the other object which belongs to the relation relation object is the table that makes the link other object id and actual object id are the fields names used in the relation table Example category fields many2many res partner category res partner category rel partner id category Categories related Sometimes you need to refer the relation of a relation For example supposing you have objects City State Country and you need to refer Country in a City you can define a field as below in the City object country id fields
104. efore being connected to the server These few words and sentences are translated using GETTEXT The chosen language by default for these is the language of the computer from which the user connects The translation system of Open ERP is not limited to interface texts it also works with reports and the content of some database fields Obviously not all the database fields need to be translated The fields where the content is multilingual are marked thus by a flag 23 3 Translations 203 Open Object Developer Book Release 1 0 MISSING IMAGE FILE 23 3 1 How to change the language of the user interface The language is a user preference To change the language of the current user click on the menu User gt Preferences 204 Chapter 23 Appendices Index Open Object Developer Book Release 1 0 MISSING IMAGE FILE An administrator may also modify the preferences of a user including the language of the interface in the menu Administration gt Users gt Users He merely has to choose a user and toggle on preferences 23 3 Translations 205 Open Object Developer Book Release 1 0 MISSING IMAGE FILE 23 3 2 Store a translation file on the server To import a file having translations use this command Jopenerp server py i18n import file csv LANG where LANG is the language of the translation data in the CSV file Note that the translation file must be encoded in UTF8 23 3 3 Translate to
105. elds integer of Cases readonly True probability fields float Avg Probability readonly True state fields selection AVAILABLE STATES State size 16 readonly True delay close fields integer Delay to close readonly True Order desc user id section id def init self cr cr execute create or replace view report crm case user as select min c id as id substring c create date for 7 01 as name c state c user_id c section_id count nbr sum planned_revenue as amount_revenue sum planned_cost as amount_costs sum planned_revenuexprobability decimal 16 2 as amount revenue prob avg probability 1 16 2 as probability 169 Open Object Developer Book Release 1 0 to char avg date closed c create date DD d HH24 MI SS as delay close from crm case c group by substring c create date for 7 c state c user id c section id REE report crm case user 170 Chapter 17 Dashboard Part VI Part 5 Migration Upgradation Testing CHAPTER EIGHTEEN DATA MIGRATION IMPORT EXPORT 18 1 Data Importation 18 1 1 Introduction There are different methods to import your data into Open ERP Through the web service interface Using CSV files through the client interface Building a module with XML or CSV files with the content Directly int
106. ent in your report Dynamic content In the SXW RML reports you can put some Python code that accesses the Open ERP objects in brackets The context of the code the variable s values you can use is the following Available variables Here are Python objects variables available objects the list of objects to be printed invoices for example data comes from the wizard time the Python time module see Python documentation for more information user the user object launching the report Available functions nni Here are Python functions you can use setlang fr change the language used in automated translation fields repeatIn list varname repeat the current part of the template whole document current section current row in the table for each object in the list Use varname in the template s tags Since versions 4 1 X you can use an optionnal third argument that is the name of the RML tag you want to loop on setTag para xpre change the enclosing RML tag usually by an other xpre is a preformatted paragraph in the converted from sxw rml document 14 1 OpenOffice org reports 141 Open Object Developer Book Release 1 0 e removeParentNode tr removes the parent node of type tr this parameter is usually used together with a conditional see examples below Example of useful tags repeatIn objects o Lo
107. enters the state This list can be empty The function actions must have the following signatures def trans rec get self uid data res get False Where self is the pointer to the wizard object uid is the user ID of the user which is executing the wizard data is a dictionary containing the following data ids the list of ids of resources selected when the user executed the wizard id the id highlighted when the user executed the wizard form a dictionary containing all the values the user completed in the preceding forms If you change values in this dictionary the following forms will be pre completed The result Here are some result examples Result next step result type state state end Indicate that the wizard has to continue to the next state end If this is the end state the wizard stops Result new dialog for the client 130 Chapter 13 Creating Wizard The Process Open Object Developer Book Release 1 0 result type form arch _ form fields fields state reconcile Reconcile end Cancel The type form indicate that this step is a dialog to the client The dialog is composed of 1 aform with fields description and a form description 2 some buttons on wich the user press after completing the form The form description arch is like in the views objects Here is an example of
108. eport gt Convert Bracket Fields From the Tiny toolbar in OpenOffice org it s possible to connect to the Open ERP server by supplying the connection parameters add a loop select a related field amongst the available fields from the proposed object for example Order lines When it s printed this loop will be run for each line of the order The loop can be put into a table the lines will then be repeated or into an OpenOffice org section add a field you can then go through the whole Open ERP database from the selected object and then a particular 196 Chapter 22 RAD Tools Open Object Developer Book Release 1 0 field e add an expression enter an expression in the Python language to calculate values from any fields in the selected object Tip Technique Python Expressions Using the Expression button you can enter expressions in the Python language These expressions can use all of the object s fields for their calculations For example if you make a report on an order you can use the following expression 2f amount total 0 9 In this example amount total is a field from the order object The result will be 90 of the total of the order formatted to two decimal places Tiny Report gt Send to server Technical Name Report Name Sale Order Mod Corporate Header Send Report to Server You can check the result in Open ERP using the menu Sales Management gt Sales Orders gt Orders 22 2
109. eport rml template xsl lt xsl variable name page_format gt a4_normal lt xsl variable gt xsl template lt xsl stylesheet gt 14 5 Bar Codes 14 5 1 Barcodes in RML files Barcodes can be generated using the lt barcode gt tag in RML files The following formats are supported e codabar codell e code128 default if no code specified standard39 standard93 i2of5 extended39 extended93 msi fim postnet You can change the following attributes for rendering your barcode code char e ratio float xdim unit e height unit e checksum bool e quiet bool Examples barcode code code128 xdim 28cm ratio 2 2 gt SN12345678 lt barcode gt 14 5 Bar Codes 155 Open Object Developer Book Release 1 0 14 6 How to add a new report In 4 0 Administration gt Custom gt Low Level gt Base gt Actions gt ir actions report xml 14 7 Usual TAGS 14 7 1 Code find in tags is python code The context of the code the variable s values you can use is the following python objects variables available when the report start objects the list of objects to be printed invoices for example data comes from the wizard time see python documentation user the user object launching the report python functions you can use setlang fr change the langage used in automated translation
110. eports RML reports custom reports based on PostgreSQL views and displayed within the interface This chapter mainly describes OpenOffice org reports and then XSL RML reports Custom reports are described in section Advanced Modeling Reporting With PostgreSQL Views 14 1 OpenOffice org reports The document flow OpenOffice org reports are the most commonly used report formats OpenOffice org Writer is used in combination with 1 to generate a RML template which in turn is used to generate a pdf printable report OpenOffice org Writer SXW2RML Tiny ERP RML Server Template The internal process 139 Open Object Developer Book Release 1 0 SXW OpenOffice Template Tiny SXW2RML Script RML Template with expressions Tiny ERP Database OpenReport s RML2HTML Final HTML Final RML with expressions replaced by data Tiny ERP Report Engine OpenReport s RML2PDF Final PDF The SXW template file We use a SXW file for the template which is the OpenOffice 1 0 format The template includes expressions in brackets or OpenOffice fields to point where the data from the Open ERP server will be filled in This document is only used for developers as a help tool to easily generate the RML file Open ERP does not need this SXW file to print reports The RML template We generate a RML file from the SXW file using Open SXW2RML A RML file
111. erGuide_1_0 pdf XSL Specification http www w3 org TR xslt e XSL Tutorial http www zvon org xxl XSLTutorial Books Output contents html All these formats use XML http www w3 org XML 14 2 1 XML Template XML templates are simple XML files describing which fields among all available object fields are necessary for the report 14 2 XSL RML reports 149 Open Object Developer Book Release 1 0 File format Tag names can be chosen arbitrarily it must be valid XML though In the XSL file you will have to use those names Most of the time the name of a tag will be the same as the name of the object field it refers to Nodes without type attribute are transferred identically into the XML destination file the data file Nodes with a type attribute will be parsed by the server and their content will be replaced by data coming from objects In addition to the type attribute nodes have other possible attributes These attributes depend on the type of the node each node type supports or needs different attributes Most node types have a name attribute which refers to the name of a field of the object on which we work As for the browse method on objects field names in reports can use a notation similar to the notation found in object oriented programming languages It means that relation fields can be used as bridges to fetch data from other related objects Let s use the account transfer
112. eriod field field name name Open Journal lt field gt field name value eval ir actions wizard d action move journal line form select field name object eval True gt lt record gt If you double click on a journal period object account journal period this will open the selected wizard id action_move_journal_line_form_select You can use a res id field to allow this action only if the user click on a specific object 64 Chapter 8 First Module to OpenERP Open Object Developer Book Release 1 0 lt record model ir values id ir_open_journal_period gt lt field name key2 gt tree_but_open lt field gt field name model gt account journal period lt field gt lt field name name gt Open Journal lt field gt field name value eval ir actions wizard d action move journal line form select field name res id eval 3 gt field name object eval True record The action will be triggered if the user clicks on the account journal period n 3 When you declare wizard report or menus the ir values creation is automatically made with these tags wizard gt e menuitem gt report gt So you usually do not need to add the mapping by yourself 8 1 The Modules Introduction 65 Open Object Developer Book Release 1 0 66 Chapter 8 First Module to OpenERP CHAPTER NINE OBJ
113. es Others depends base desertrption i MA Multiline Description T init xml account workflow xml account data xml account demo xml demo xml account demo xml update xml account view xml account report xml account wizard xml active False installable True When initializing a module the files in the init xml list are evaluated in turn and then the files in the update xml list are evaluated When updating a module only the files from the update xml list are evaluated 6 3 Inheritance 6 3 1 Traditional Inheritance Introduction Objects may be inherited in some custom or specific modules It is better to inherit an object to add modify some fields Itis done with _inherit object name 38 Chapter 6 Moulder Development Approach Open Object Developer Book Release 1 0 Extension of an object There are two possible ways to do this kind of inheritance Both ways result in a new class of data which holds parent fields and behaviour as well as additional fielda and behaviour but they differ in heavy programatical consequences While Example 1 creates a new subclass custom_material that may be seen or used by any view or tree which handles network material this will not be the case for Example 2 This is due to the table other material the new subclass is operating on which will never be recognized by previous network materia
114. fell EJ fA Pricelist Public Pricelist EUR Sales order lines Description PC2 Computer assembled on demand MB1 Mainboard ASUStek purchased on order Untaxed Amount 1244 00 Order State Quotation Record 1 2 of 2 Editing document id 2 yjlocalhost s069 doc Analytic Account 1 Qty Discount Unit Price Net Price Subtotal 1 00 PCE 0 00 54000 54000 54000 8 00 0 00 8800 8800 704 00 Taxes 0 00 Total 1244 00 Compute Administrator Gia Confirm Order Cancel order State Requests request 10 3 Tree views These views are used when we work in list mode in order to visualize several resources at once and in the search 0 file User Form Options Plugins Shortcuts Help e Menu All Sales Order Order Reference m Date Ordered Customer Salesman J a a Ii k Date Ordered Reference Customer Shipping Address Picked Invoiced Untaxed Ar 2009 03 18 50005 China Export Zen 52 Chop Suey street 4785552 Shanghai 0 00 000 30 2090348 60004 Ecole de Commerce de Liege Karine Lesbrouffe 2 impasse dela Soif 6985 Liege 0 00 000 54 2009 03 18 50003 Agrolait Sylvie Lelitre 69 rue de Chimay 5478 Wavre ooo ooo 2 8 20090318 so002 Bank Wealthy and sons Arthur Grosbonnet 1 rue
115. field name type select 2 field name street select 2 field name street2 newline field name zip select 2 field name city select 2 newline field completion 1 name country id select 2 gt field name state id select 2 newline field name phone field name fax newline field name mobile gt field name email select 2 widget email form tree string Partner Contacts field name name field name zip field name city field name country id field name phone field name email tree field separator colspan 4 string Categories field colspan 4 name category id nolabel 1 select 2 page page string Sales amp amp Purchases separator string General Information colspan 4 field name user id select 2 gt field name active select 2 field name website widget url field name date select 2 field name parent id newline page lt page string History gt field colspan 4 name events nolabel 1 widget one2many li lt gt Open Object Developer Book Release 1 0 Button lt button gt add a button using the string attribute as label When clicked it can trigger methods on the object workflow transitions or actions reports wizards string defin
116. field of type reference When you read a property the program gives you the property attached to the instance of object you are reading It this object has no value the system will give you the default property The definition of a property is stored in the ir model fields class like any other fields In the definition of the property you can add groups that are allowed to change to property Using properties or normal fields When you want to add a new feature you will have to choose to implement it as a property or as normal field Use a normal field when you inherit from an object and want to extend this object Use a property when the new feature is 78 Chapter 9 Objects Fields and Methods Open Object Developer Book Release 1 0 not related to the object but to an external concept Here are a few tips to help you choose between a normal field or a property Normal fields extend the object adding more features or data A property is a concept that is attached to an object and have special features Different value for the same property depending on the company Rights management per field It s a link between resources many2one Example 1 Account Receivable The default Account Receivable for a specific partner is implemented as a property because This is a concept related to the account chart and not to the partner so it is an account property that is visible on a partner form Rights have to be manag
117. fields with predefined names in the class Two of them are required _name and _columns the rest is optional The predefined fields 9 3 3 Prefined names _auto Determines whether a corresponding PostgreSQL table must be generated automatically from the object Setting _auto to False can be useful in case of Open ERP objects generated from PostgreSQL views See the Reporting From PostgreSQL Views section for more details _columns required The object fields See the fields section for details _constraints The constraints on the object See the constraints section for details 68 Chapter 9 Objects Fields and Methods Open Object Developer Book Release 1 0 _sql_constraints The SQL Constraint on the object See theconstraints SQL section for more details _defaults The default values for some of the object s fields See the default value section for details _inherit The name of the osv object which the current object inherits from See the object inheritance section first form for details _inherits The list of osv objects the object inherits from This list must be given in a python dictionary of the form name_of_the_parent_object of the field See the object inheritance section second form for de tails Default value log access Determines whether or not the write access to the resource must be logged If true four fields will be created in the SQL table cr
118. file and use this one as dictionary Depending on context of the module this creates 30 80 exact translations 4 the new po file gt must not contain fuzzy comments inserted by kbabel for rough translation a grep v fuzzy new po file po file 5 check for correct spelling msgfmt po file o mo file 6 check your translation for correct context a import the po file for modules b install the mo file and restart the application for applications 7 adjust the translation Online in OpenERP a check context b check length of strings c export po file 8 upload po file to Launchpad a keep in mind that Launchpad Rosetta uses some tags not sure which in the header section of the exported po file to recognize the imported po file as valid b after some time hours you will receive a confirmation E Mail success error 23 3 4 Using context Dictionary for Translations The context dictionary is explained in details in section Objects Methods The context Dictionary If an additional language is installed using the Administration menu the context dictionary will contain an additional key lang For example if you install the French language then select it for the current user his or her context dictionary will contain the key lang to which will be associated the value fr FR 208 Chapter 23 Appendices Index Bazaar installation 17 Installatio
119. first start 5 tinyerp server py 5 4 2 OpenERP 5 0 and above Check that all the required dependencies are installed Make sure you are logged on as a user that has catalog admin rights in PostgreSQL Refer to the PostgreSQL manual for more info on this Start the OpenERP Server openerp server py Finally connect to the server with the GTK Client or eTiny and use the Create Database option to c 5 5 Shutting down the server The easiest way the shut down the server on a Linux type system is to send the SIG INT signal to the server Find the Process ID ps grep i tiny e Use the kill comand with PID kill 2 pid 34 Chapter 5 Development Environment CHAPTER SIX MOULDER DEVELOPMENT APPROACH 6 1 OpenObject Server and Modules OpenERP is a Client Server system that works over a IP Network OpenERP programming language is Python OpenERP uses Object Oriented technologies OpenERP records its data with a PostgreSQL relational database OpenERP business objects are modeled with an Object Relational Mapping ORM system OpenERP offers three Human Machine Interfaces a GTK client a QT client and a web client eTiny OpenERP uses ReportLab for report generation in PDF OpenERP uses XML for several purpose describing data view reports data transport XML RPC 6 1 1 Technical Architecture Server client XML RPC Open ERP is a based on a client server
120. flow xml follows exactly this model the code of its workflow tag is record model workflow id wkf sale field name name sale order basic field field name osv sale order field field name on create True field record 12 4 Activity 12 4 1 Introduction The wkf activity class represents the nodes of workflows These nodes are the actions to be executed 12 4 2 The fields 12 4 3 split mode XOR One necessary transition takes the first one found default OR Take only valid transitions 0 or more in sequential order AND valid transitions are launched at the same time fork In the OR and AND separation mode certain workitems can be generated In the AND mode the activity waits for all transitions to be valid even if some of them are already valid They are all triggered at the same time join mode join mode XOR One transition necessary to continue to the destination activity default 118 Chapter 12 Workflow Business Process Open Object Developer Book Release 1 0 AND Waits for all transition conditions to be valid to execute the destination activity 12 4 4 kind The type of the activity can take several values DUMMY Do nothing default FUNCTION Execute the function selected by an action e SUBFLOW Execute a sub workflow SUBFLOW ID The action method must return the ID of the concerned resource by the subflow If the action
121. g for each record which is related to the old application s ID Now we will export the table with addresses or contacts that are linked to partners through the relation field part ner id We will proceed in the same way to export the data and put them into our module psql trunk c select partner address id as id name partner partner id as partner_id id from res partner address F pset footer gt res partner address csv This should create a file called res partner address with the following data 174 Chapter 18 Data Migration Import Export Open Object Developer Book Release 1 0 id name partner id id partner_address2 Benoit Mortier partner_2 partner address3 Laurent Ja cot partner 3 partner address4 Laith Jubair partner 4 partner address5 Fabien Pinckaers partner 4 When you will install this module Open ERP will automatically import the partners and then the address and recreate efficiently the link between the two records When installing a module Open ERP will test and apply the constraints for consistency of the data So when you install this module it may crash for example because you may have different partners with the same name in the system due to the uniq constraint on the name of a partner So you have to clean your data before importing them If you plan to upload thousands of records through this technique you should consider using the argument P when running the server
122. grations testing per version 23 2 2 Open Forge Here is the process of publishing a module or patch 1 Create a project on http OpenForge com 202 Chapter 23 Appendices Index Open Object Developer Book Release 1 0 2 Upload your work on your Open Forge project 3 Create an entry on the module repository of Open ERP s website The Open Forge has tools to help your team collaborate like message forums tasks tracker and mailing lists tools to create and control access to Source Code Management repositories It is the central repository of collaborative developments for Open ERP 23 3 Translations Open ERP is multilingual You can add as many languages as you wish Each user may work with the interface in his own language Moreover some resources the text of reports product names etc may also be translated This section explains how to change the language of the program shown to individual users and how to add new languages to Open ERP Nearly all the labels used in the interface are stored on the server In the same way the translations are also stored on the server By default the English dictionary is stored on the server so if the users want to try Open ERP in a language other than English then you have to store these languages definitions on the server However it is not possible to store everything on the server Indeed the user gets some menus buttons etc that must contain some text even b
123. h home user filetype theme none toolbar icons form_tab_orientation 0 form_tab top survey position 3 path pixmaps usr share pixmaps openerp client share usr share openerp client login db eo2 login admin protocol http port 8069 server localhost 5 2 2 GTK Client Configuration login section login login name to use to connect to Tiny ERP server server address used by the server port port used by the server path section share path used to find Tiny ERP shared files pixmaps path used to find Tiny ERP pixmaps files 30 Chapter 5 Development Environment Open Object Developer Book Release 1 0 tip section autostart Should the client display tips at startup position Tip number the client will display form section autosave Will the client automatically save the change you made to a record printer section preview Preview report before printing softpath Path to the pdf previewer softpath_html Path to the html previewer path Command used to print logging section logger log channels to display List values are common common message view view form 9 9 common options 9 rpc request rpc result Orpc exceptionO level logging level to show output file used by the logger verbose set the log level to INFO client section default path Default path used by the client whe
124. h type xml gt graph string Sales Order Lines field name product id group True field name price unit operator x gt graph field record The graph view A view of type graph is just a list of fields for the graph 10 4 1 Graph tag The default type of the graph is a pie chart to change it to a barchart change graph string Sales Order Lines to graph string Sales Order Lines type bar gt You also may change the orientation Example graph string Sales Order Lines orientation horizontal type bar 10 4 2 Field tag The first field is the X axis The second one is the Y axis and the optionnal third one is the Z axis for 3 dimensional graphs You can apply a few attributes to each field axis group if set to true the client will group all item of the same value for this field For each other field it will apply an operator operator the operator to apply is another field is grouped By default it s Allowed values are addition multiply exponent min minimum of the list max maximum of the list Defining real statistics on objects The easiest method to compute real statistics on objects is 1 Define a statistic object wich is a postgresql view 2 Create a tree view and a graph view on this object You can get en example in all modules of the form report Example report crm 90 Chapter 10 Views and Events
125. h report with its own Corporate header o lt cose s co osa d acesa e ee 154 I4 Bar Codes 1 ice do a a BS BA Roe e o aio 155 14 6 3How toadd new Teport ooe es pe e SOROR E 156 147 Usual TAGS 3 24 2 2224 rr de Rd 156 14 8 Unicode reports ms soi bab a X RR a A mb 157 15 118n Internationalization 159 15 1 EntroductlOB oss oe s dw e Gee ae a a dE E 159 V Part 4 Business Process Advance Configuration 161 16 Server Action 163 1631 Introduction 4 2 wa epe RR a OE e 163 16 2 Client ACHOM 55225 s xo Uere E ER 163 16 3 THESSeE iu pA ege X xus EVER Est d qe roe e 164 164 epee lg Re ee ee gm De i 165 16 5 Create ODJECES ds COS Fi eg 166 10 0 Wrte Object bh hea AH tee etek SUE 167 16 7 Multi ACOD umso opere bet Bek be me EC Rr EROR de 167 17 Dashboard 169 VI Part 5 Migration Upgradation Testing 171 18 Data Migration Import Export 173 18 1 Data Impottatton sre iom e ud du oux wes Bee bobo S RH uS SUE eR n 173 19 Upgrading Server Modules 177 VII Part 6 Service base Integration 179 20 Working with Web Services 181 20 1 Howto loaddata c RR
126. he wizard or report at client side Using this type of action we can make the system like ERP will print the invoice after confirmation of the Invoice Like it will run the payment wizard after confirmation of the invoice Technically we can run all client action which execute at client side We can execute ir actions report custom ir actions report xml ir actions act window ir actions wizard or ir actions url Here is an example to show how we can configuration Client action to print the invoice after confirmation of the invoice 163 Open Object Developer Book Release 1 0 Action Name Action State Client Action Object Invoice rE IQ Sequence as H Client Action Invoices 5 Action Type iractions server This is an good and seems easy to configure the action Important fields are Object Select the object on which we want to implement the Server Action when work flow will execute on this object Client Action Select the client action that is to execute at client side Any of the following types e iractions report custom iractions report xml e iractions act window e jr actions wizard ir actions url 16 3 Trigger Trigger is an really excellent when we want to deal with the work flow of the other object which working the work flow of the first object For example we want to configure the system like when we confirm the purchase order and create the invoice that AUI cr
127. icial branch If the commiter team refuses your branch they will explain why so that you can review your code to better fits guidelines problem for futur migrations The extra addons branch that stores all extra modules is directly accessible to all commiters If you are a commiter you can work directly on this branch and commit your own work This branch do not require a validation of the quality team You should put there your special modules for your own customers If you want to propose or develop new modules we suggest you to create your own branch in the openobject addons project and develop within your branch You can fill in a bug to request that your modules are integrated in one of the two branches extra addons if your module touches a few companies addons if your module will be usefull for most of the companies We invite all our partners and contributors to work in that way so that we can easily integrate and share the work done between the different projects After having done that your branch is public on Launchpad in the OpenObject project and commiters can work on it review it and propose for integration in the official branch The last line allows you to rebind your branch to the one which is on launchpad after having done this your commit will be applied on launchpad directly unless you use 1 1 5 1 Working with Launchpad 19 Open Object Developer Book Release 1 0 bzr pull
128. id d and bom id is null order by sequence product ig ids map lambda x x 0 cr fetchall max prop 0 result False for bom in self pool get mrp bom browse cr uid ids prop 0 for prop_id bom property_ids if prop_id id in properties prop 1 if prop max prop or max prop 0 and not result result bom id return result def _bom_explode self cr uid bom factor properties addthis Fals factor factor bom product efficiency or 1 0 factor rounding factor bom product rounding if factor bom product rounding factor bom product rounding result result2 if bom type phantom and not bom bom lines newbom self bom find cr uid bom product id id bom product uom id properties level 10 if newbom res self bom explode cr uid self browse cr uid newbom 0 factor bom product properties addthis True level level 10 result result res 0 result2 result2 res 1 else return else if addthis and not bom bom lines result append name bom product id name product id bom product id id product bom product_qty factor product uom bom product uom id if bom routing_id for wc use in bom routing id workcenter lines WC use workcenter id Cycle factor wc use cycle nbr result2 append name bom routing_id name workcenter wc id sequence level 44 Chapte
129. in condition is fullfilled You can construct it with the pyhton logical operators not and and or Because every object in python has a logical value TRUE or FALSE 2 you can construct something like this 156 Chapter 14 Reports Open Object Developer Book Release 1 0 o prop draft and YES or NO print YES or NO 1t works like this and first value is TRUE then print out the second value First value is FALSE print out first value or first value is TRUE then print out the first value First value is FALSE print out second value in this example if o prop draft gt TRUE then o prop draft and YES reads Yes Next step is Yes or No which leads to a printed YES because a string s logical value is TRUE If o prop draft gt FALSE then it reads FALSE or No So No is printed One can use very comlpex structures To learn more search for some pyhton reference regarding logical opertors python function filter can filter try something like repeatIn filter lambda 1 l product id type service o invoice line line for printing only product with type service in a line s section To display binary field image on report to be checked setTag para image width 100 0 height 80 0 o image or setTag image para 14 8 Unicode reports As of OpenERP 5 0 rc3 unicode printing with ReportLab
130. ing the two next step in this wiki tutorial So just consider them as a help and head towards the next two pages first The custom py file should initially look like this intentionally removing the comments from osv import osv fields class custom material osv osv name network material inherit network material _columns _defaults custom material The signs represent comments You ll have to remove them rename the class and its attributes to something like this from osv import osv fields class travel hostel osv osv name travel hostel inherit res partner columns rooms fields one2many travel room hostel id Rooms quality fields char Quality size 16 _defaults travel_hostel Ideally you would copy that bunch of code several times to create all the entities you need travel_airport travel_room travel_flight This is what will hold the database structure of your objects but you don t really need to worry too much about the database side Just filling this file will create the system structure for you when you install the module 8 1 The Modules Introduction 63 Open Object Developer Book Release 1 0 Customizing the view You can now move on to editing the views To do this edit the custom_view xml file It should first look like this lt terp gt lt data gt lt record model res groups id group_
131. int 3s s 2 27 country code country name result country The 2 functions will generate 4 SQL queries in total This is due to the SQL engine of Open ERP that does prefetching works on lists and uses caching methods The 3 queries are 1 Reading the sale order to get ID s of the partner s address 2 Reading the partner s address for the countries 3 Calling the amount_untaxed function that will compute a total of the sale order lines 4 Reading the countries info code and name That s great because 1f you run this code on 1000 sales orders you have the guarantee to only have 4 SQL queries Notes IDS is the list of the 10 ID s 12 15 18 34 99 The arguments of a function are always the same cr the cursor database from psycopg uid the user id for security checks f you run this code on 5000 sales orders you may have 8 SQL queries because as SQL queries are not allowed to take too much memory it may have to do two separate readings 7 2 MVCSQL 43 Open Object Developer Book Release 1 0 7 2 4 A complete example Here is a complete example from the Open ERP official distribution of the function that does bill of material explosion and computation of associated routings class mrp bom osv osv def bom find self cr uid product id product uom properties bom result False Why searching on BoM without parent cr execute select id from mrp bom where product
132. it self cr that creates a PostgreSQL View matching the fields declared in columns Example The object report crm case user follows this model report crm case user osv osv name report crm case user _description Cases by user and section 22 2 Open Office Report Designer 197 Open Object Developer Book Release 1 0 _auto False _columns name fields date Month readonly True user id fields many2one res users User readonly True relate True section id fields many2one crm case section Section readonly True relate True amount revenue fields float Est Revenue readonly True amount costs fields float Est Cost readonly True amount revenue prob fields float Est Rev Prob readonly True nbr fields integer of Cases readonly Tru probability fields float Probability readonly True state fields selection AVAILABLE STATES Stat delay close fields integer Delay to close Size 16 readonly True _order name desc user id section def init self cr cr execute readonly True create or replace view report crm case user as select min c id as id substring c create date for 7 01 as name c state c user_id c section_id count as nbr sum planned revenue as amount revenue sum planned cost as amount co
133. just create a normal object But instead of inheriting from osv osv Inherit from osv osv_memory Methods of wizard are in object and if the wizard is complex You can define workflow on object osv memory object is managed in memory instead of storing in postgresql That s all nothing more than just changing the inherit So what makes them looks like old wizards n the action that opens the object you can put field name target gt new lt field gt It means the object will open in a new window instead of the current one e On a button you can use button special cancel gt to close the window Example In project py file class config compute remaining osv osv memory name config compute remaining def get remaining self cr uid ctx if active in ctx return self pool get project task browse cr uid ctx active id remaining hours return False columns 1 remaining hours fields float Remaining Hours digits 16 2 _defaults remaining hours _get_remaining def compute hours self cr uid ids context None if active id in context remaining hrs self browse cr uid ids 0 remaining hours self pool get project task write cr uid context active id remaining hours remaining hrs return type ir actions act window close config compute remaining View is same as normal view Note buttons Example record id view config co
134. l views or trees Example 1 class custom material osv osv name network material _inherit network material _columns manuf warranty fields boolean Manufacturer warranty defaults manuf warranty lambda False custom material Tip Notice name inherit In this example the custom material will add a new field manuf warranty to the object network material New instances of this class will be visible by views or trees operating on the superclasses table network material This inheritancy is usually called class inheritance in Object oriented design The child inherits data fields and behavior functions of his parent Example 2 class other material osv osv name other material inherit network material _columns manuf warranty fields boolean Manufacturer warranty _defaults manuf warranty lambda False other material Tip Notice name inherit In this example the other material will hold all fields specified by network material and it will additionally hold a new field manuf warranty those fields will be part of the table other material New instances of this class will therefore never been seen by views or trees operating on the superclasses table network material This type of inheritancy is known as inheritance by prototyping e g Javascript because the newly created subc
135. l parameter digits defines the precision and scale of the number The scale being the number of dig its after the decimal point whereas the precision is the total number of significant digits in the number before and after the decimal point If the parameter digits is not present the number will be a double precision floating point number Warning these floating point numbers are inexact not any value can be converted to its binary representation and this can lead to rounding errors You should always use the digits parameter for monetary amounts Example rate fields float Relative Change rate digits 12 6 Optional Parameters char A string of limited length The required size parameter determines its size Syntax fields char Field Name Size n Optional Parameters 4 where n is an integer Example city fields char City Name size 30 required True text A text field with no limit in length 72 Syntax fields text Field Name Optional Parameters Chapter 9 Objects Fields and Methods Open Object Developer Book Release 1 0 date A date Syntax fields date Field Name Optional Parameters datetime Allows to store a date and the time of day in the same field Syntax fields datetime Field Name Optional Parameters binary A binary chain selection A field which allows the user to make a selection bet
136. lass copies all fields from the specified superclass prototype The child inherits data fields and behavior functions of his parent 6 3 Inheritance 39 Open Object Developer Book Release 1 0 6 3 2 Inheritance by Delegation Syntax class tiny object osv osv name tiny object _table tiny object _inherits tiny object 1 name col 1 tiny object 2 name col 2 The object tiny object inherits from all the columns and all the methods from the n objects tiny object 1 tiny object n To inherit from multiple tables the technique consists in adding one column to the table tiny object per inherited object This column will store a foreign key an id from another table The values name col 1 name col 2 name col n of type string and determine the title of the columns in which the foreign keys from tiny object 1 tiny object n are stored This inheritance mechanism is usually called instance inheritance or value inheritance A resource instance has the VALUES of its parents 40 Chapter 6 Moulder Development Approach or pin CHAPTER SEVEN OPENOBJECT ARCHITECTURE MVC 7 1 MVC Model View Controller According to Wikipedia a Model view controller MVC is an architectural pattern used in software engineering In complex computer applications that present lots of data to the user one often wishes to separate
137. lease 1 0 view views are defined in XML files in Tiny ERP e controller The objects of TinyERP 7 2 MVCSQL 7 2 1 Example 1 Suppose sale is a variable on a record of the sale order object related to the sale order table You can acquire such a variable doing this sale self browse cr uid ID where cr is the current row from the database cursor uid is the current user s ID for security checks and ID is the sale order s ID or list of IDs if we want more than one Suppose you want to get the country name of the first contact of a partner related to the ID sale order You can do the following in Open ERP country name sale partner id address 0 country id name If you want to write the same thing in traditional SQL development it will be in python we suppose cr is the cursor on the database with psycopg cr execute select partner id from sale order where id d ID partner id cr fetchone 0 cr execute select country id from res partner address where partner id 5 d partner id country id cr fetchone 0 cr execute select name from res country where id d country id del partner id del country id country name cr fetchone 0 Of course you can do better if you develop smartly in SQL using joins or subqueries But you have to be smart and most of the time you will not be able to make such improvements Maybe some parts are in others functions There may be
138. lication to CSV file that will be loaded in Open ERP Open ERP has a builtin system to manage identifications columns of the original software For this exercice we will load data from another Open ERP database called old As this database is in SQL it s quite easy to export the data using the command line postgresql client psql As to get a result that looks like a CSV fiel we will use the following arguments of psql A display records without space for the row separators e F set the separator character as 5 pset footer don t write the latest line that looks like 21 rows When you import a CSV file in Open ERP you can provide a id column that contains a uniq identification number or string for the record We will use this id column to refer to the ID of the record in the original application As to refer to this record from a many2one field you can use FIELD NAME id Open ERP will re create the relationship between the record using this uniq ID So let s start to export the partners from our database using psql psql trunk c select partner 142 as from res partner F pset footer res partner csv This creates a res partner csv file containing a structure that looks like this id name partner 2 ASUStek partner 3 A grolait partner 4 Camptocamp partner 5 Syleam By doing this we generated data from the res partner object by creating a uniq identification strin
139. life time fields integer Product lifetime use time fields integer Product usetime removal time fields integer Product removal time alert time fields integer Product alert time product product This module adds simple fields to the product product object We did not use properties because We extend a product the life time field is a concept related to a product not to another object 9 7 Type of Fields 79 Open Object Developer Book Release 1 0 We do not need a right management per field the different delays are managed by the same people that manage all products 9 8 ORM methods create Description Create a new resource Signature def create cr uid vals context Parameters vals a dictionary of values for every field This dictionary must use this form of the field value context optional the actual context dictionary Returns the id of the newly created resource Example id pooler get pool cr dbname get res partner event create cr uid name Email sent through mass mailing partner id partner id description The Description for Partner Event search Description Search all the resources which satisfy certain criteria Signature def search self cr uid args offset 0 limit 2000 order None context None count False Parameters e args a list of tuples containing the search criteria This
140. me signature gt Administrator lt field gt lt field name action_id ref action_menu_admin gt lt field name menu_id ref action_menu_admin gt lt field name address_id ref main_address gt field name groups id eval 6 0 group admin field name company id ref main company gt record This last record defines the admin user The fields login password etc are straightforward The ref attribute allows to fill relations between the records field name company id ref main_company gt gt The field 9 9 company id 9 is many to one relation from the user object to the company object and main company is the id of to associate The eval attribute allows to put some python code in the xml here the groups id field is a many2many For such a field 6 0 group_admin means Remove all the groups associated with the current user and use the list group admin as the new associated groups and group admin is the id of another record The search attribute allows to find the record to associate when you do not know its xml id You can thus specify a search criteria to find the wanted record The criteria is a list of tuples of the same form than for the predefined search method If there are several results an arbitrary one will be chosen the first one field name partner id search model res partner gt gt This is a classical example
141. mpute remaining model ir ui view field name name Compute Remaining Hours field field name model config compute remaining field field name type gt form lt field gt field name arch type xml gt form string Remaining Hours separator colspan 4 string Change Remaining Hours newline field name remaining hours widget float time 136 Chapter 13 Creating Wizard The Process Open Object Developer Book Release 1 0 lt group col 4 colspan 4 gt lt button icon gtk cancel special cancel string Cancel gt lt button icon gtk ok name compute_hours string Update type object gt lt group gt lt form gt lt field gt lt record gt Action is also same as normal action don t forget to add target attribute Example record id action config compute remaining model ir actions act_window gt field name name Compute Remaining Hours lt field gt field name type ir actions act window field field name res model config compute remaining field field name view type form field field name view_mode gt form lt field gt field name target new field record 13 5 osv memory Wizard System 137 Open Object Developer Book Release 1 0 138 Chapter 13 Creating Wizard The Process CHAPTER FOURTEEN REPORTS There are mainly three types of reports in Open ERP OpenOffice org r
142. n Version String author Author Name category Profile depends List of the modules to install with the profile demo xml update xml active False installable True Example Here s the code of the file server bin addons profile manufacturing terp py which corresponds to the manufac turing industry profile in Open ERP name Manufacturing industry profile versqyon i 1 0 author Open category Profile depends mrp crm sale delivery 8 1 The Modules Introduction 61 Open Object Developer Book Release 1 0 demo xml update xml active False installable True 8 1 3 Create Module Getting the skeleton directory Creating a new module is quickly done by copying the module called simple or custom depending on your OpenERP version into a new directory As an example on Ubuntu cd usr lib tinyerp server addons sudo cp r custom travel You will need to give yourself permissions over that new directory if you want to be able to modify it sudo chown R whoami travel You got yourself the directory for a new module there and a skeleton structure but you still need to change a few things inside the module s definition Changing the default definition To change the default settings of the custom module which is now the travel module get yourself into the travel directory and edi
143. n Bazaar 17 R Report Modify 195 New 197 INDEX 209
144. n 2 2 then when you install Dia you will have an option to install the python plug in After this put the codegen openerp py file in C Program FilesDia and you will have the export function in Dia If you find that the zip file is corrupt use DiskInternals ZipRepair utility to repair the zip file before you ll be able to import it make sure the zip file you import has the same name you saved as 22 2 Open Office Report Designer Select Tiny Report gt Server parameters or Open ERP Report gt Server parameters in the top menu of OpenOffice org Writer You can then enter your connection parameters to the Open ERP server You must select a database min in which you ve already installed the module sale A message appears if you ve made a successful connection 22 2 1 Modifying a report The report editor lets you modify existing reports which will then replace the originals in your Open ERP database create new reports for the selected object To modify an existing report select Tiny Report Modify Existing Report Choose the report Request for Quotation in the Modify Existing Report dialog box and then click Save to Temp Directory 195 Open Object Developer Book Release 1 0 tile Edit vien Insert Format lable Jools Report Window Help a SECA sd aa PARA i BE veras EJEISE EE rr sx amp gt AEG 1 ee ee eee AAA 14
145. n ERP server and Open ERP clients communicate using XML RPC Tiny ERP Client Tiny ERP Server Client The logic of Open ERP is configured on the server side The client is very simple it is only used to post data forms lists trees and to send back the result to the server The updates and the addition of new functionality don t need the clients to be frequently upgraded This makes Open ERP easier to maintain The client doesn t understand what it posts Even actions like Click on the print icon are sent to the server to ask how to react The client operation is very simple when a user makes an action save a form open a menu print it sends this action to the server The server then sends the new action to execute to the client There are three types of action Open a window form or tree Print a document Execute a wizard 21 1 2 Python Access tiny server using xml rpc Demo script Create a partner and his address 184 Chapter 21 XML RPC Web services Open Object Developer Book Release 1 0 import xmlrpclib username admin the user pwd admin the password of the user dbname terp the database Get the uid Sock common xmlrpclib ServerProxy http localhost 8069 xmlrpc common uid sock common login dbname username pwd replace localhost with the address of the server sock xmlrpclib ServerProxy http localhost 8069 xmlrpc object partner
146. n be found at http www tinyreport org download html SXW to RML script setup Windows users In order to use the tiny sxw2rml py Python script you need the following packages installed Pyhton http www python org ReportLab http www reportlab org Installation Libxml for Python http users skynet be sbi libxml python 142 Chapter 14 Reports Open Object Developer Book Release 1 0 SXW to RML script setup Linux Open source users Ensure normalized oo2rml xsl is available to tiny_sxw2rml otherwise you will get an error like failed to load external entity normalized oo2rml xsl Running tiny sxw2rml When you have all that installed just edit your report template and run the script with the following command tiny sxw2rml py template sxw template rml Note tiny sxw2rml py help suggests that you specify the output file with OUTPUT but this does not seem to work as of V0 9 3 14 1 4 Tiny ERP Server PDF Output Server PDF Output About To generate the pdf from the rml file OpenERP needs a rml parser Parser The parsers are generally put into the folder report of the module Here is the code for the sale order report import time from report import report sxw class order report sxw rml parse def init self cr uid name context super order self init cr uid name context self localcontext update 1 time time report_sxw report_sxw report sale order s
147. n saving loading datas Default values login login admin port 8069 server 192 168 1 4 printer path none preview True softpath none 5 2 Configuration 31 Open Object Developer Book Release 1 0 logging output stdout logger verbose True level ERROR form autosave False client default_path home user 5 2 3 Web Client Configuration Get a clone of each repository rp openobject server trunk server rp openobject client trunk client rp openobject client web trunk client web rp openobject addons trunk addons bzr clone lp op bzr clone lp op bzr clone lp op bzr clone lp op 5953 38 If you want to get a clone of the extra addons repository you can execute this command bzr clone lp openerp commiter openobject addons trunk extra addons extra addons run the setup scripts in the respective directories python2 4 setup py build python2 4 setup py install Currently the initialisation procedure of the server parameter init all to populate the database seems to be broken in trunk It is recommended to create a new database via the gtk client Before that the web client will not work Start OpenERP server like this openerp server py addons path path to my addons bin addons will be considered as default addons directory which can be overriden by the path to my addons That is if an addon exists in bin addons as well a
148. name eval o should evaluate to the list of parameters of the method to be called excluding cr and uid Example function model ir ui menu name search eval name Operations getitem tag Takes a subset of the evaluation of the last child node of the tag type o int or list index int or string a key of a dictionary Example Evaluates to the first element of the list of ids returned by the function node lt getitem 0 type list gt function model ir ui menu name search eval name Operations lt getitem gt 8 1 The Modules Introduction 55 Open Object Developer Book Release 1 0 i18n Improving Translations Translating in launchpad Translations are managed by the Launchpad Web interface Here you ll find the list of translatable projects Please read the FAQ before asking questions Translating your own module Changed in version 5 0 Contrary to the 4 2 x version the translations are now done by module So instead of an unique 118n folder for the whole application each module has its own 118n folder In addition OpenERP can now deal with o files as import export format The translation files of the installed languages are automatically loaded when installing or updating a module OpenERP can also generate a tgz archive containing well organised po files for each selected module Process Defining the process Thourgh the inte
149. name uid pwd account invoice search number ilike invoicenumber type out_invoice import time import base64 printsock xmlrpclib ServerProxy http server 8069 xmlrpc report model account invoice id report printsock report dbname uid pwd model ids model model id ids 0 report ty time sleep 5 state False attempt 0 while not state report printsock report get dbname uid pwd id report state report state if not state time sleep 1 attempt 1 if attempt gt 200 print Printing aborted too long delay string pdf base64 decodestring report result file pdf open tmp file pdf w file pdf write string pdf file pdf close 21 3 PHP Example Here is an example on how to insert a new partner using PHP This example makes use the phpxmlrpc library available on sourceforge include xmlrpc inc SarrayVal array name new xmlrpcval Fabien Pinckaers string vat new xmlrpcval BE477472701 string Sclient new xmlrpc client http localhost 8069 xmlrpc object msg new xmlrpcmsg execute 21 3 PHP Example 191 Open Object Developer Book Release 1 0 gt msg gt addParam n Smsg gt addParam n msg gt addParam n msg gt addParam msg addParam msg gt addParam n Sresp client gt send msg if Sresp gt faultCode e
150. nd some buttons 2 get the form result and the button pressed from the client 3 execute some actions 4 send a new action to the client form print To define a wizard you have to create a class inheriting from wizard interface and instantiate it Each wizard must have a unique name which can be chosen arbitrarily except for the fact it has to start with the module name for example account move line reconcile The wizard must define a dictionary named states which defines all its steps Here is an example of such a class class wiz_reconcile wizard interface states al factions result _trans_rec_get type tform arch 3 _transaction_ form 13 2 Wizards Principles 129 Open Object Developer Book Release 1 0 fields transaction fields state reconcile Reconcile end Cancel j reconcile actions trans rec reconcile result type state state end wiz reconcile account move line reconcile The states dictionary define all the states of the wizard In this example init and reconcile There is another state which is named end which is implicit A wizard always starts in the init state and ends in the end state A state define two things 1 alist of actions 2 aresult 13 2 1 The list of actions Each step state of a wizard defines a list of actions which are executed when the wizard
151. nstallable or not active True or False default False Determines the modules that are installed on the database creation 60 Chapter 8 First Module to OpenERP Open Object Developer Book Release 1 0 Example is an example of __terp__ py file for the product module name Products Pricelists version 1 0 author Open category Generic Modules Inventory Control depends base account Tinite xmi El demo xml product demo xml update xml product data xml product report xml product wizard xml product view xml installable True active True The files that must be placed in init xml are the ones that relate to the workflow definition data to load at the installa tion of the software and the data for the demonstrations The files in update xml concern views reports and wizards Profile Module The purpose of a profile is to initialize Open ERP with a set of modules directly after the database has been created A profile is a special kind of module that contains no code only dependencies on other modules In order to create a profile you only have to create a new directory in server addons you should call this folder profile modulename in which you put an empty init file as every directory Python imports must contain an init py file anda terp py whose structure is as follows name Name of the Profile versio
152. o the SQL database using an ETL 18 1 2 Importing data through a module The best way to import data in Open ERP is to build a module that integrates all the data you want to import So when you want to import all the data you just have to install the module and Open ERP manages the different creation operations When you have lots of different data to import we sometimes create different modules So let s create a new module where we will store all our datas To do this from the addons directory create a new module called data yourcompany mkdir data yourcompany cd data yourcompany e touch _ init py You must also create a file called terp py in this new module Write the following content in this module file description name Module for Data Importation version 71 0 category Generic Modules Others description Sample module for data importation Tp website http www openerp com depends base rinit om 173 Open Object Developer Book Release 1 0 res paftner osv res partner address csv update xml 1 installable True active False The following module will import two different files res partner csv a CSV file containing records of the res partner object res partner address csv a CSV file containing records of the res partner address object Once this module is created you must load data from your old app
153. object as an example It contains a partner_id field This field is a relation field many to one pointing to the res partner object Let s suppose that we want to create a report for transfers and in this report we want to use the name of the recipient partner This name could be accessed using the following expression as the name of the field partner_id name Possible types Here is the list of available field types field It is the simplest type For nodes of this type the server replaces the node content by the value of the field whose name is given in the name attribute fields when this type of node is used the server will generate a node in the XML data file for each unique value of the field whose name is given in the name attribute Notes This node type is often used with id as its name attribute This has the effect of creating one node for each resource selected in the interface by the user The semantics of a node node type fields name field_name gt is similar to an SQL statement of the form SELECT FROM object table WHERE id in identifier list GROUP BY field name where identifier list is the list of ids of the resources se lected by the user in the interface eval This node type evaluate the expression given in the expr attribute This expression may be any Python expression and may contain objects fields names zoom This node type allows to enter into the resource r
154. odule Descriptor File init The init py file The init__ py file is like any Python module executed at the start of the program It needs to import the Python files that need to be loaded So if you create a module py file containing the description of your objects you have to write one line in init py import module OpenERP Module Descriptor File terp In the created module directory you must add a terp file This file which must be in Python format is responsible to 1 determine the XML files that will be parsed during the initialization of the server and also to 2 determine the dependencies of the created module 50 Chapter 8 First Module to OpenERP Open Object Developer Book Release 1 0 This file must contain a Python dictionary with the following values name The Plain English name of the module version The version of the module description The module description text author The author of the module website The website of the module license The license of the module default GPL 2 depends List of modules on which this module depends The base module must almost always be in the dependen cies because some necessary data for the views reports are in the base module init_xml List of xml files to load when the server is launched with the init module argument Filepaths must be relative to the directory where the module is Open ERP XML
155. of the use of E search 9 in demo data here we do not really care about which partner we want to use for the test so we give an empty list Notice the model attribute is currently mandatory 54 Chapter 8 First Module to OpenERP Open Object Developer Book Release 1 0 Record Tag Description The addition of new data is made with the record tag This one takes a mandatory attribute model Model is the object name where the insertion has to be done The tag record can also take an optional attribute id If this attribute 1s given a variable of this name can be used later on in the same file to make reference to the newly created resource ID A record tag may contain field tags They indicate the record s fields value If a field is not specified the default value will be used Example record model ir actions report xml id 10 gt field name model gt account invoice lt field gt lt field name name gt Invoices List lt field gt field name report_name gt account invoice list lt field gt field name report_xsl gt account report invoice xsl lt field gt lt field name report_xml gt account report invoice xml lt field gt lt record gt field tag The attributes for the field tag are the following name mandatory attribute indicating the field name e eval python expression that indicating the value to add e ref reference to an id defined in this file function tag model
156. on Discount Unit Price Net Price Subtotal PC2 Computer assembled on demand 1 00 PCE 0 00 54000 540 00 540 00 MB1 Mainboard ASUStek purchased on order 8 00 PCE 0 00 88 00 88 00 704 00 Untaxed Amount 1244 00 Taxes 0 00 Total 1244 00 Compute order State Quotation SiConfirm Order Cancel order Record 1 2 of 2 Editing document id 2 State 8 ylocalhost 8068 doc Administrator Requests No request m Views also support more advanced placement options A view field can use several columns For example on the screen shot below the zone in the blue frame is in fact the only field of a one to many We will come back later on this note but let s note that it uses the whole width of the screen and not only one column LI EE JAE Fle User Form Options Plugins Shortcuts Help nome S26 B e x Menu All sales Order Order Reference 50001 Customer Ref Picked Quotation Order Shop ya E Oste ordered 00ra A paid E sele order other data History Customer Agrolait ES 84 ordering contact Tiny Invoice Address GJ shoring M Pricelist Public Pricelist EUR EZ Analytic Account lo 5 Sales order lines 00 E Discount Unit Price Net Price Subtotal New server config material 100 PCE Description 123 00 12300 123 00 0 00 45000 45000 1 350 00 0 00 45000 45000 1 35
157. on mymod assigned field record record model workflow activity id act negotiation field name wkf id ref wkf mymod 12 9 Creating a Workflow 123 Open Object Developer Book Release 1 0 lt field name name gt negotiation lt field gt lt field name kind gt function lt field gt field name action mymod negotiation field record record model workflow activity id act won field name wkf id ref wkf mymod field name name gt won lt field gt field name kind gt function lt field gt field name action gt mymod_won lt field gt lt field name flow_stop gt True lt field gt lt record gt lt record model workflow activity id act_lost gt lt field name wkf_id ref wkf_mymod gt lt field name name gt lost lt field gt lt field name kind gt function lt field gt lt field name action gt mymod_lost lt field gt field name flow stop True field record 3 Workflow Transition records These define the possible transitions between workflow states record model workflow transition id t1 gt lt field name act_from ref act_new gt lt field name act_to ref act_assigned gt lt field name signal gt mymod_assigned lt field gt lt record gt lt record model workflow transition id t2 gt lt field name act_from ref act_assigned gt lt field name act_to ref act_negotiation gt
158. one everything correctly you shouldn t get any errors You can check if your workflow is installed in Administration gt Customisation gt Workflow Definitions When you are testing remember that the workflow will only apply to NEW records that you create 12 9 4 Troubleshooting If your buttons do not seem to be doing anything one of the following two things are likely 1 The record you are working on does not have a Workflow Instance record associated with it it was probably created before you defined your workflow 2 You have not set the field correctly in your workflow XML file 12 9 Creating a Workflow 125 Open Object Developer Book Release 1 0 126 Chapter 12 Workflow Business Process CHAPTER THIRTEEN CREATING WIZARD THE PROCESS 13 1 Introduction Wizards describe interaction sequences between the client and the server Here is as an example a typical process for a wizard 1 A window is sent to the client a form to be completed 2 The client sends back the data from the fields which were filled in 3 The server gets the result usually execute a function and possibly sends another window form to the client 127 Open Object Developer Book Release 1 0 A wizard process example Server Client Send a Form la dialog to the user send the datas entered in the form process send another form datas click on the process button process result sen
159. op on each objects selected for the print repeatIn o invoice_line 1 Loop on every line o prop draft and YES or Print YES or NO according the field prop round o quantity o price 0 9 2 Operations are OK 07d int o number Number formating reduce lambda obj x obj qty list 0 J Total qty of list try objects as list user name user name setLang o partner id lang Localized printings time strftime 7o d m Y 11 Show the time in format dd MM Y Y Y Y check python doc for more about od time strftime time ctime 0 10 or time strftime time ctime 4 Prints only date time ctime Prints the actual date amp time time ctime split 3 Prints only time o type in in invoice and Invoice or removeParentNode tr If the type is invoice or invoice then the word Invoice is printed if it s neither the first node above it of type tr will be removed 14 1 3 SXW2RML Open Report Manual About The Open ERP s report engine Open Report is a module that allows you to render high quality PDF document from an OpenOffice template sxw and any relational database It can be used as a OpenERP module or as a standalone program Open Report has been developed by Fabien Pinckaers tiny sxw2rml ca
160. ore So in future we can refer the same for the other operations 16 6 Write Object The same configuration as defined for the Create Object here we take an example that it will write the Additional Information on the same object Action Name Write Invoice Action State Write Object v Object Invoice r 5 Sequence 5 2 Create Write Fields Mapping Model Invoice us IQ Field Mappings DOS Destination Type Value Additionnal Information Formula Invoice Number str object number Record Id IQ Important Fields are same as the Create Object 16 7 Multi Action This is the most interesting action which allows to execute the multiple server action on the same business operations Like if you want to print and send the email on confirmation of the invoice We need to create the 3 Server Actions for that Print Invoice Invoice Confirmation Email Multi Action The only problem with the Multi Action is that it will execute many actions at the server side but only one client action will be executed For example we would like to print report execute the wizard this 2 operation is not allowd in the one multi action 16 6 Write Object 167 Open Object Developer Book Release 1 0 Action Name Action Multi Action State Multi Actions object OL sequence 5 Milti Actions Other Actions
161. ot have your email server you can use from the free email account by Gmail Yahoo etc Server Configuration supply the following parameters when we run OpenERP Server email from gajjarmantavya8yahoo co in user email address smtp smtp mail yahoo co in smtp server name or smtp port 587 smtp port smtp user gajjarmantavya user name usually same as the email address name without domain name smtp password x password to the user account smtp ssl False use in case if the server required ssl for sending email Email Action Configuration Action Name Invoice Confirmation Email Action State Email Object Invoice Fo Sequence 0 Email Configuration Email Configuration Contact E Mail 3 5 Dear object partner id name lt br gt lt br gt Message Your Invoice have been confirmed with the following details lt br gt lt br gt Invoice No object number lt br gt m Resim Manta abiangt data mimica 11 ebrio ae Access all the fields related to the current object using expression in double brackets object partner_id name 1 Important Fields are Object Select the object on which we want to implement the Server Action when work flow will execute on this object Contact We need to select the fields from which action will select the email address to whom we would like to send the em
162. over writing data To create a new database named terp_test use these commands createdb terp test encoding unicode terp_server py database terp_test init all Alternatively you could also delete your current database with these dropdb terp createdb terp encoding unicode terp_server py Init all 4 Using Launchpad Rosetta to translate modules and applications A good starting point is here https launchpad net openobject Online Select the module translation section and enter your translation Offline Use this if you want to translate some 100 terms It seems mandatory to follow theses steps to successfully complete a translation cycle tested on Linux 1 Download the lt po file gt from Launchpad 2 Get the message template file lt pot file gt from bzr branches a keep in mind that the lt pot file gt might not always contain all strings the lt pot files gt are updated irregularly b msgmerge lt pot file gt lt po file gt o lt new po file gt 23 3 Translations 207 Open Object Developer Book Release 1 0 3 translate lt new po file gt using poedit kbabel KDE a some programs like kbabel allow using dictionar 1es to create rough translations b It is especially useful to create a complete dictionary from existing translations to reuse existing terms related to th In OpenERP load most all of the modules Load your language 111 export all modules of your language as po
163. presented by business objects ir report custom e High quality personalized reports using openreport no programming required but you have to write 2 small XML files a template which indicates the data you plan to report an XSL RML stylesheet Hard coded reports OpenOffice Writer templates Nearly all reports are produced in PDF Server Business Objects Almost everything is a business object in Open ERP they described all data of the program workflows invoices users customized reports Business objects are described using the ORM module They are persistent and can have multiple views described by the user or automatically calculated Business objects are structured in the module directory Client Wizards Wizards are graphs of actions windows that the user can perform during a session Client Widgets Widgets are probably although the origin of the term seems to be very difficult to trace WIndow gaDGETS in the IT world which mean they are gadgets before anything which implement elementary features through a portable visual tool common widgets are supported entries textboxes floating point numbers dates with calendar checkboxes And also all special widgets buttons that call actions e references widgets one2one many2one many2many one2many in list Widget have different appearances in different views For example the date widget in the search dialog repre
164. r terp partner terp project terp report terp stock e groups specifies which group of user can see the menu item example groups admin See section Man agement of Access Rights for more information Multiple groups should be separated by a example groups admin user sequence is an integer that is used to sort the menu item in the menu The higher the sequence number the downer the menu item This argument is not mandatory if sequence is not specified the menu item gets a default sequence number of 10 Menu items with the same sequence numbers are sorted by order of creation order sequence id 11 1 1 Example In server bin addons sale sale_view xml we have for example lt menuitem name Sales Management Sales Order Sales Order in Progress id menu_action_order_tree4 a 11 2 Actions 11 2 1 Introduction The actions define the behavior of the system in response to the actions of the users login of a new user double click on an invoice click on the action button There are different types of simple actions Window Opening of a new window Report The printing of a report o Custom Report The personalized reports o RML Report The XSL RML reports Wizard The beginning of a Wizard Execute The execution of a method on the server side Group Gather some actions in one group The actions are used for the following events User connection The user double clicks on th
165. r 7 OpenObject Architecture Mvc Open Object Developer Book Release 1 0 cycle hour wc_use hour_nbr wc time_start wc time_stop cyclexwc time_cycle x wc time_efficiency or 1 for bom2 in bom bom_lines res self _bom_explode cr uid bom2 factor properties addthis True level level 10 result result res 0 result2 result2 res 1 return result result2 7 2 MVCSQL 45 Open Object Developer Book Release 1 0 46 Chapter 7 OpenObject Architecture Mvc Part III Part 2 Module Development 47 CHAPTER EIGHT FIRST MODULE TO OPENERP Open ERP is a Python based client server program for Enterprise Resource Planning It consist of a client tinyerp client and a server tinyerp server while the persistence is provided by Postgresql Open ERP currently uses XML RPC for communication over a network Once installed Open ERP has a modular structure that allows modules to be added as needed 8 1 The Modules Introduction The usage of the modules is the way to extend Tiny ERP functionality The default Tiny ERP installation is organized as a kernel and various modules among which we can distinguish base The most basic module Defines ir property res company res request res currency res user res partner crm Customer amp Supplier Relationship Management sale Sales Management mrp Manufacturing Resource Planning New module
166. racts function fields function get cur function id type many2one obj res partner functio method True string Contract Function hr employee Note three points type many2one is because the function field must create a many2one field function is declared as a 2 in hr contract also obj res partnerfunction is used to specify that the object to use for the many2one field is res partner function We called our method get cur function id because its role is to return a dictionary whose keys are ids of employees and whose corresponding values are ids of the function of those employees The code of this method is def cur function id self cr uid ids field name arg context for i in ids get the id of the current function of the employee of identifier i Sql req SELECT f id AS funo id FROM hr contract c LEFT JOIN res partner function f ON f id c function WHERE c employee id cr execute sqdl req Sql res cr dictfetchone if sgl res Th mployee has one associated contract res i sql res func id else fres 1 must be set to False and not to None because of XML RPC cannot marshal None unless allow none is enabled res i False return res The id of the function is retrieved using a SQL query Note that if the query returns no result the value of sql res func 14 will be None We force the F
167. rameters fields a list of fields that interest us if None all the fields e context context lang Result Example In payment line in account payment module def fields get self cr uid fields None context None res super payment line self fields get cr uid fields context if communication2 in res res communication2 setdefault states res communication2 states structured readonly True res communication2 states normal readonly False return res fields view get 84 Chapter 9 Objects Fields and Methods Open Object Developer Book Release 1 0 Description Signature def fields view get self cr view_id None view_type form con text toolbar False Parameters Result Example In membership module product product def fields view get self cr user view id None view type form context None toolbar False if product in context context product membership product model data ids form self pool get ir model data search cr user model ir ui vie membership products form membership resource id form self pool get ir model data read cr user model data ids form fields res id name dict model for i in resource id form dict model i name i res id if view_type form view_id dict_model membership_products_form else view_id dict_model membership_p
168. related state id country id type many2one relation module country string Country store False Functional Field A functional field is a field whose value is calculated by a function rather than being stored in the database Parameters fnct arg None fnct_inv None fnct inv arg None type green float black fnct_search None obj None method False store True where type is the field type name returned by the function It can be any field type name except function store If you want to store field in database or not Default is False method whether the field is computed by a method of an object or a global function fnct is the function or method that will compute the field value It must have been declared before declaring the functional field If method is True the signature of the method must be def fnct self cr uid ids field name arg context otherwise if it is a global function its signature must be 9 7 Type of Fields 75 Open Object Developer Book Release 1 0 def fnct cr table ids field_name arg context Either way it must return a dictionary of values of the form id _1_ value 1 7 107 2 value _2_ The values of the returned dictionary must be of the type specified by the type argument in the field declaration fnct inv is the function or method that will allow writing values in that field If method 18 true the signature of the method m
169. res a wizard lt xml version 1 0 gt lt terp gt lt data gt lt wizard string Employee Info model hr employee name employee info wizard id wizard_employee_info gt lt data gt lt terp gt A wizard 15 declared using a wizard tag See Add A New Wizard for more information about wizard XML also you can add wizard in menu using following xml entry lt xml version 1 0 gt lt terp gt lt data gt lt wizard string Employee Info model hr employee name employee info wizard id wizard_employee_info gt lt menuitem name Human Resource Employee Info action wizard_employee_info type wizard id menu_wizard_employee_info gt lt data gt lt terp gt 11 2 8 Report Action Report declaration Reports in Open ERP are explained in chapter Reports Reporting Here s an example of a XML file that declares a RML report lt xml version 1 0 gt lt terp gt lt data gt lt report id sale_category_print string Sales Orders By Categories model sale order name sale_category print rml sale_category report sale_category_report rml menu True auto False gt lt data gt lt terp gt 106 Chapter 11 Menu and Actions Open Object Developer Book Release 1 0 A report is declared using a report tag inside a data block The different arguments of a report tag are id an identifier which must be unique string the text of
170. rface and module recorder Then put the generated XML in your own module Views title Technical Specifications Architecture Views Views are a way to represent the objects on the client side They indicate to the client how to lay out the data coming from the objects on the screen There are two types of views form views tree views Lists are simply a particular case of tree views A same object may have several views the first defined view of a kind tree form will be used as the default view for this kind That way you can have a default tree view that will act as the view of a one2many and a specialized view with more or less information that will appear when one double clicks on a menu item For example the products have several views according to the product variants Views are described in XML If no view has been defined for an object the object is able to generate a view to represent itself This can limit the developer s work but results in less ergonomic views Usage example When you open an invoice here is the chain of operations followed by the client An action asks to open the invoice it gives the object s data account invoice the view the domain e g only unpaid invoices The client asks with XML RPC to the server what views are defined for the invoice object and what are the data it must show The client displays the form according to the view http www gnu org softw
171. roducts_tree return super Product self fields_view_get cr user view id view type context toolbar distinct_field get Description Signature def distinct_field_get self cr uid field value args offset 0 limit 2000 Parameters Result Example TODO 9 8 4 Methods concerning the name of the resources name get Description Signature def name get self cr uid ids context Parameters Result a list of tuples of the form id name Example In res partner address def name_get self cr user ids context if not len ids return res for r in self read cr user ids name zip city addr str r name or if r name and r zip or r city 9 8 ORM methods 85 Open Object Developer Book Release 1 0 addr addr str r zip or str r city or res append r id addr return res name search Description Signature def name search self cr uid name args operator ilike context Parameters Result Example In res country def name search self cr user name args None operator ilike context None limit 80 if not args args if not context context ids False if len name self search cr user code name args limit limit context context if not ids ids self search cr user name operator name arg
172. ry If they are not found the server and the client will start with the default configuration The client configuration file is automatically generated upon the first start The one of the server can automatically be created using the command tinyerp server py s Server Configuration File The server configuration file terp serverrc is used to save server startup options For the version 5 X configuration file is openerp_serverrc Here is the list of the available options interface Address to which the server will be bound port Port the server will listen on database Name of the database to use user Username used when connecting to the database translate in File used to translate Open ERP to your language translate out File used to export the language Open ERP use language Use this language as the language of the server This must be specified as an ISO country code as specified by the W3C verbose Will used debugged output 22 Chapter 5 Development Environment Open Object Developer Book Release 1 0 init init a module use all for all modules update update a module use all for all modules upgrade Upgrade install uninstall modules db_name specify the database name db_user specify the database user name db_password specify the database password pg path specify the pg executable path db host specify the database host db port specify the database port translate modules Specify modules to export Us
173. s self write cr uid ids state assigned return True def mymod negotiation self cr uid ids self write cr uid ids state negotiation return True def mymod won self cr uid ids self write cr uid ids state won return True def mymod lost self cr uid ids self write cr uid ids state lost return True Obviously you would extend these methods in the future to do something more useful Create your Workflow XML file There are three types of records we need to define in a file called mymod workflow xml 1 Workflow header record only one of these record model workflow id wkf mymod field name name mymod wkf field field name osv mymod mymod field field name on create True field record 2 Workflow Activity records These define the actions that should be executed when the workflow reaches a particular state record model workflow activity id act new field name wkf id ref wkf mymod field name flow start True field field name name new field field name kind gt function lt field gt field name action mymod new field record record model workflow activity id act assigned field name wkf id ref wkf mymod field name name assigned field field name kind gt function lt field gt field name acti
174. s limit limit context context return self name_get cr user ids context 86 Chapter 9 Objects Fields and Methods CHAPTER TEN VIEWS AND EVENTS 10 1 Introduction to Views As all data of the program is stored in objects as explained in the Objects section how are these objects exposed to the user We will try to answer this question in this section First of all let s note that every resource type uses its own interface For example the screen to modify a partner s data is not the same as the one to modify an invoice Then you have to know that the Open ERP user interface is dynamic it means that 1t is not described statically by some code but dynamically built from XML descriptions of the client screens From now on we will call these screen descriptions views A notable characteristic of these views is that they can be edited at any moment even during the program execution After a modification to a displayed view has occurred you simply need to close the tab corresponding to that view and re open it for the changes to appear 10 1 1 Views principles Views describe how each object type of resource is displayed More precisely for each object we can define one or several view s to describe which fields should be drawn and how There are two types of views 1 form views 2 tree views Note Since Open ERP 4 1 form views can also contain graphs 10 2 Form views The field dispo
175. s path to my addons cus tom path the later one will be given preference over the bin addons default path 5 3 Command line options 5 3 1 General Options version show program version number and exit h help show this help message and exit c CONFIG config CONFIG specify alternate config file 32 Chapter 5 Development Environment Open Object Developer Book Release 1 0 S save save configuration to terp serverrc v verbose enable debugging pidfile PIDFILE file where the server pid will be stored logfile LOGFILE file where the server log will be stored n INTERFACE Jinterface INTERFACE specify the TCP IP address p PORT port PORT specify the TCP port net_interface NETINTERFACE specify the TCP IP address for netrpc Jnet_port NETPORT specify the TCP port for netrpc no netrpc disable netrpc no xmlrpe disable xmlrpc i INIT init INIT init a module use all for all modules Iwithout demo WITHOUT DEMO load demo data for a module use all for all modules u UPDATE update UPDATE update a module use all for all modules stop after init stop the server after it initializes debug enable debug mode S secure launch server over https instead of http smtp SMTP_SERVER specify the SMTP server for sending mail price_accuracy PRICE_ACCURACY specify the price accuracy 5 3 2 Database related options d DB_NAME dat
176. s can be programed easily and require a little practice of XML and Python 8 1 1 Module Structure The Modules 1 Introduction 2 Files amp Directories a terp py b init py c XML Files i Actions 1i Menu Entries iii Reports iv Wizards 3 Profiles 49 Open Object Developer Book Release 1 0 Modules Files and Directories All the modules are located in the server addons directory The following steps are necessary to create a new module create a subdirectory in the server addons directory create a module description file terp py create the Python file containing the objects create xml files that download the data views menu entries demo data optionally create reports wizards or workflows The Modules Files And Directories XML Files XML files located in the module directory are used to modify the structure of the database They are used for many purposes among which we can cite initialization and demonstration data declaration views declaration reports declaration wizards declaration workflows declaration General structure of Tiny ERP XML files is more detailed in the section Data Loading Files XML Look here if you are interested in learning more about initialization and demonstration data declaration XML files The following section are only related to XML specific to actions menu entries reports wizards and workflows declaration Python M
177. s set according to the correction When a particular branch fixes the bug a commiter member of the Commiter Team set the status to Fix Com mited Only commiters have the right to change the status to Fix Committed after they validated the proposed patch or branch that fixes the bug The Quality Team have a look every day to bugs in the status Fix Commited They check the quality of the code and merge in the official branch if it s ok To limit the work of the quality team it s important that only commiters can set the bug in the status Fix Commited Once quality team finish merging they change the status to Fix Released 5 1 4 Translation Translations are managed by the Launchpad Web interface Here you ll find the list of translatable projects Please read the FAQ before asking questions 5 1 5 Blueprints Blueprint is a lightweight way to manage releases of your software and to track the progress of features and ideas from initial concept to implementation Using Blueprint you can encourage contributions from right across your project s community while targeting the best ideas to future releases Launchpad Blueprint helps you to plan future release with two tools milestones points in time such as a future release or development sprint series goals a statement of intention to work on the blueprint for a particular series Although only drivers can target blueprints to milestones and set
178. se for all the fonts needed addMapping DejaVuSans 0 0 DejaVuSans normal addMapping DejaVuSans Bold 1 0 DejaVuSans normal trml2pdf py should be modified to load this if invoked from the command line All the xsl and rml files have to be modified A list of possible alternatives Times Roman DejaVuSerif ttf Times BoldItalic DejaVuSerif BoldItalic ttf Times Bold DejaVuSerif Bold ttf Times Italic DejaVuSerif Italic ttf Helvetica DejaVuSans ttf Helvetica BoldItalic DejaVuSans BoldOblique ttf Helvetica Bold DejaVuSans Bold ttf Helvetica Italic DejaVuSans Oblique ttf Courier DejaVuSansMono ttf Courier Bold DejaVuSansMono Bold ttf Courier BoldItalic DejaVuSansMono BoldOblique ttf Courier Italic DejaVuSansMono Oblique ttf Helvetica ExtraLight DejaVuSans ExtraLight ttf TimesCondensed Roman DejaVuSerifCondensed ttf TimesCondensed BoldItalic DejaVuSerifCondensed BoldItalic ttf TimesCondensed Bold DejaVuSerifCondensed Bold ttf TimesCondensed Italic DejaVuSerifCondensed Italic ttf HelveticaCondensed DejaVuSansCondensed ttf HelveticaCondensed BoldItalic DejaVuSansCondensed BoldOblique ttf HelveticaCondensed Bold DejaVuSansCondensed Bold ttf HelveticaCondensed Italic DejaVuSansCondensed Oblique ttf 158 Chapter 14 Reports CHAPTER FIFTEEN I18N INTERNATIONALIZATION Explain about the multiple
179. sents two normal dates for a range of date from to Some widgets may have different representations depending on the context For example the one2many widget can be represented as a form with multiple pages or a multi columns list 6 1 OpenObject Server and Modules 37 Open Object Developer Book Release 1 0 Events on the widgets module are processed with a callback mechanism A callback mechanism is a process whereby an element defines the type of events he can handle and which methods should be called when this event is triggered Once the event is triggered the system knows that the event is bound to a specific method and calls that method back Hence callback 6 2 Module Integrations The are many different modules available for Open ERP and suited for different business models Nearly all of these are optional except ModulesAdminBase making it easy to customize Open ERP to serve specific business needs All the modules are a directory named addons on the server You simply need to copy or delete a module directory in order to either install or delete the module on the Open ERP platform Some modules depend on other modules See the file addons module terp py for more information on the depen dencies is an example of terp py name Open TERP Accounting version 1 0 author Bob Gates Not So Tiny website http www openerp com category Generic Modul
180. sition in a form view always follows the same principle Fields are distributed on the screen following the rules below By default each field is preceded by a label with its name Fields are placed on the screen from left to right and from top to bottom according to the order in which they are declared in the view 87 Open Object Developer Book Release 1 0 Every screen is divided into 4 columns each column being able to contain either a label or an edition field As every edition field is preceded by default by a label with its name there will be two fields and their respective labels on each line of the screen The green and red zones on the screen shot below illustrate those 4 columns They designate respectively the labels and their corresponding fields IB OpenERP JAE File User Form Options Plugins Shortcuts Help 5 Menu 32 Al Quotations 5 Order Reference 50002 Customer Ref Picked 5 Quotation Order Shop Tiny spri Ms Date ordered 2009 03 18 Q Paid Bb Advance Sale Order other data History Customer 1 Bank Wealthy and sons E3 f ordering contact arthur Grosbornet 1 rue Rockfell EJ gA Invoice Address 1 Arthur Grosbonnet 1 rue Rockfell E3 94 shipping Address arthur Grosbonnet 1 rue Rockfell 22 fA Pricelist 4 Public Pricelist EUR 8 Analytic Account Wi Sales order lines SBS im Descripti
181. sts sum planned revenuexprobability decimal 16 2 as amount revenue prob avg probability decimal 16 2 as probability to char avg date closed c create dat from crm case c group by substring c create date for 7 orm wa report crm case user DD d HH24 MI SS as delay close c state c user id c section id 198 Chapter 22 RAD Tools Part IX Part 8 Appendices 199 CHAPTER TWENTYTHREE APPENDICES INDEX 23 1 Appendices A Coding Conventions 23 1 1 Python coding Use tabs will be replaced by spaces soon Take care with default values for arguments they are only evaluated once when the module is loaded and then used at each call This means that if you use a mutable object as default value and then modify that object at the next call you will receive the modified object as default argument value This applies to dict and list objects which are very often used as default values If you want to use such objects as default value you must either ensure that they won t be modified or use another default value such as None and test it For example def foo a None if a is None This is what is in the Python documentation In addition it is good practice to avoid modifying objects that you receive as arguments if it is not specified If you want to do so prefer to copy the object first A list can easily be copied with the syntax copy original A lot of other obj
182. t terp py gedit in the following example is just a simple text editor Feel free to use another one cd travel gedit terp py The file looks like this Use the custom module to put your specific code separate modul name Module for custom developments version 2 71 0 author 2 Tiny category Generic Modules Others website http www tinyerp com description Sample custom module where you can put your customer specific developments depends base it ml pp update xml custom view xml active False installable True 62 Chapter 8 First Module to OpenERP Open Object Developer Book Release 1 0 You will want to change whichever settings you feel right and get something like this name Travel agency module version 2 1 0 author 3 Tiny category Generic Modules Others website http www tinyerp com description A module to manage hotel bookings and a few other useful features depends base Mine ml s DT update xml custom_view xml active True installable True Note the active field becomes true Changing the main module file Now you need to update the custom py script to suit the needs of your module We suggest you follow the Flash tutorial for this or download the travel agency module from the 20 minutes tutorial page The documentation below is overlapp
183. t Name lt td gt lt tr gt lt tr gt lt td gt pnk00 lt td gt lt td gt lt para gt Tiny sprl lt para gt lt td gt lt tr gt lt tr gt td td lt td gt lt para gt ASUS lt para gt lt td gt Kye lt tr gt lt td gt lt td gt lt td gt lt para gt Agrolait lt para gt lt td gt ftr tr td td lt td gt lt para gt Banque Plein Aux As lt para gt lt td gt tr tr td td td para China Export lt para gt lt td gt tr tr td td td para Ditrib PC lt para gt lt td gt tr tr td td lt td gt lt para gt Ecole de Commerce de Liege lt para gt lt td gt lt tr gt 148 Chapter 14 Reports Open Object Developer Book Release 1 0 lt tr gt lt td gt lt td gt lt td gt lt para gt Elec Import lt para gt lt td gt lt tr gt lt tr gt lt td gt lt td gt lt td gt lt para gt Maxtor lt para gt lt td gt lt tr gt lt tr gt lt td gt lt td gt lt td gt lt para gt Mediapole SPRL lt para gt lt td gt lt tr gt lt tr gt lt td gt os lt td gt lt td gt lt para gt Opensides sprl para td tr tr td td lt td gt lt para gt Tecsas sarl lt para gt lt td gt lt tr gt lt blockTable gt lt story gt lt document gt Fore more information on the formats used e RML http reportlab com docs RML_Us
184. t by default A user can modify his own preferences while he is working with Tiny ERP To do that he clicks on this menu User gt Preferences The Open ERP administrator can also modify some preferences of each and every user The groups The groups determine the access rights to the different resources There are three types of right The writing access recording amp creation The reading access reading of a file The execution access the buttons of workflows or wizards A user can belong to several groups If he belongs to several groups we always use the group with the highest rights for a selected resource The roles The roles define a hierarchical structure in tree They represent the different jobs roles inside the company The biggest role has automatically the rights of all the inferior roles Example CEO Technical manager Chief of projects Developers Testers Commercial manager Salesmen If we want to validate the test of a program role Testers it may be done by a user having one of the following roles Testers Chief of the project Technical manager CEO The roles are used for the transition of Workflow actions into confirmation choice or validation actions Their impli cations will be detailed in the Workflow section 11 3 1 Menu Access It s easy but risky to grant grained access to menu based on the user s groups First of all you should know that if a menu is not gr
185. t id gt lt name gt ASUS lt name gt lt ref gt lt ref gt lt id gt lt id gt lt name gt Agrolait lt name gt lt ref gt lt ref gt lt id gt lt id gt lt name gt Banque Plein Aux As lt name gt lt ref gt lt ref gt 14 2 XSL RML reports 145 Open Object Developer Book Release 1 0 lt id gt lt id gt lt name gt China Export lt name gt lt ref gt lt ref gt lt id gt lt id gt lt name gt Ditrib PC lt name gt lt ref gt lt ref gt lt id gt lt id gt lt name gt Ecole de Commerce de Liege lt name gt lt ref gt lt ref gt lt id gt lt id gt lt name gt Elec Import lt name gt lt ref gt lt ref gt lt id gt lt id gt lt name gt Maxtor lt name gt lt ref gt lt ref gt lt id gt lt id gt lt name gt Mediapole SPRL lt name gt lt ref gt lt ref gt lt id gt lt id gt lt name gt Opensides sprl lt name gt lt ref gt os lt ref gt lt id gt lt id gt lt name gt Tecsas sarl lt name gt lt ref gt lt ref gt lt id gt lt ids gt XSL stylesheet lt xml version 1 0 encoding utf 8 gt xsl stylesheet version 1 0 xmlns xsl http www w3 org 19 lt xsl template match gt lt xsl apply templates select ids gt lt xsl template gt lt xsl template match ids gt lt document gt 146 Chapter 14 Reports Open Object Developer Book Release 1 0
186. t values of the form field value Example self pool get hr analytic timesheet default get cr uid product id product uom id default set Description Change the default value for one or several fields Signature def default set self cr uid field value for user False Parameters field the name of the field that we want to change the value by default value the value by default for user optional boolean that determines if the new default value must be available only for the current user or for all users Returns True Example TODO 9 8 ORM methods 83 Open Object Developer Book Release 1 0 9 8 2 Methods to manipulate the permissions perm_read Description Signature def perm_read self cr uid ids Parameters ids an integer list Returns a list of dictionaries with the following keys level access level uid user id gid group id create uid user who created the resource create date date when the resource was created write uid last user who changed the resource write date date of the last change to the resource perm write Description Signature def perm write self cr uid ids fields Parameters Returns Example self pool get res partner perm read cr uid ids context 9 8 3 Methods to generate the fields and the views fields get Description Signature def fields get self cr fields None context Pa
187. ta which holds parent fields and behaviour as well as additional fielda and behaviour but they differ in heavy programatical consequences While Example 1 creates a new subclass custom_material that may be seen or used by any view or tree which handles network material this will not be the case for Example 2 This is due to the table other material the new subclass is operating on which will never be recognized by previous network material views or trees Example 1 class custom material osv osv name network material _inherit network material _columns manuf warranty fields boolean Manufacturer warranty defaults manuf warranty lambda False custom_material Tip Notice _name _inherit In this example the custom_material will add a new field manuf warranty to the object network material New instances of this class will be visible by views or trees operating on the superclasses table network material This inheritancy is usually called class inheritance in Object oriented design The child inherits data fields and behavior functions of his parent Example 2 class other material osv osv name other material inherit network material columns manuf warranty fields boolean Manufacturer warranty _defaults manuf warranty lambda False other material 70 Chapter 9 Obje
188. template pageSize 21cm 29 7cm lt pageTemplate gt frame id col1 x1 2cm 1 2 4 width 8cm height 26cm gt frame 12 x1 1l1cm yl 2 4cm width 8cm height 26cm gt lt pageTemplate gt lt template gt lt stylesheet gt lt blockTableStyle id ids gt lt blockFont name Helvetica Boldoblique lt lineStyle kind BOX colorName black lt lineStyle kind BOX colorName black lt blockTableStyle gt lt stylesheet gt lt story gt lt blockTable colWidths 2cm 6cm lt tr gt lt td t 1 gt Ref lt td gt lt td t 1 gt Name lt td gt lt tr gt xsl apply templates select id lt blockTable gt lt story gt lt document gt lt xsl template gt match id gt lt xsl templat lt I gt lt td gt lt xsl value of select ref gt lt td gt lt td gt lt para gt lt xsl valu lt tr gt lt xsl template gt lt xsl stylesheet gt Resulting RML file generated repeatRows 1 size 12 0 0 stop 1 0 gt start 0 0 stop 1 0 gt start 0 0 stop 1 1 gt style ids gt of select name gt lt para gt lt td gt 14 2 XSL RML reports 147 Open Object Developer Book Release 1 0 lt xml version 1 0 gt lt document gt lt story gt lt blockTable colWidths 2cm 6cm repeatRows 1 style ids gt lt tr gt lt td t 1 gt Ref lt td gt lt td t 1 g
189. the Open ERP server Our engine support most commonly distributed patterns request reply publish subscribe monitoring triggers callback Different business objects can be in different computers or the same objects can be on multiple computers to perform load balancing on multiple computers Server Object Relational Mapping ORM This layer provides additional object functionality on top of postgresql Consistency powerful validity checks Work with objects methods references Row level security per user group role Complex actions on a group of resources nheritance Server Web Services The web service module offer a common interface for all web services SOAP XML RPC NET RPC Business objects can also be accessed via the distributed object mechanism They can all be modified via the client interface with contextual views Server Workflow Engine Workflows are graphs represented by business objects that describe the dynamics of the company Workflows are also used to track processes that evolve over time 36 Chapter 6 Moulder Development Approach Open Object Developer Book Release 1 0 An example of workflow used in Open ERP A sales order generates an invoice and a shipping order Server Report Engine Reports in Open ERP can be rendered in different ways Custom reports those reports can be directly created via the client interface no programming required Those reports are re
190. this writing there is no exception handling in workflows Workflows being made of several actions executed in batch they can t trigger exceptions In order to improve the execution efficiency and to release a maximum of locks workflows commit at the end of each activity This approach is reasonable because an activity is only started if the conditions of the transactions are satisfied The only problem comes from exceptions due to programming errors in that case only transactions belonging to the entirely terminated activities are executed Other transactions are rolled back 12 9 Creating a Workflow Steps for creating a simple state changing workflow for a custom module called mymod 12 9 1 Define the States of your object The first step is to define the States your object can be in We do this by adding a state field to our object in the columns collection columns state fields selection assigned Assigned negotiation Negotiation won Won lost Lost Stage readonly True 122 Chapter 12 Workflow Business Process Open Object Developer Book Release 1 0 12 9 2 Define the State change Handling Methods Add the following additional methods to your object These will be called by our workflow buttons def mymod_new self cr uid ids self write cr uid ids state new return True def mymod_assigned self cr uid id
191. uid contact id 50 to recover the two fields that interest us you have to write name addr obj name account num addr obj partner id bank Note This method is only useful locally on the server itself and not with the other interfaces write Description Writes values in one or several fields of one or several resources Signature def write self cr uid ids vals context Parameters ids the resources identifiers list to modify e vals a dictionary with values to write This dictionary must be with the form of the field value context optional the actual context dictionary Returns True Example self pool get sale order write cr uid ids state cancel unlink Description Delete one or several resources Signature def unlink self cr uid ids Parameters ids the identifiers resources list to delete Returns True Example 82 Chapter 9 Objects Fields and Methods Open Object Developer Book Release 1 0 self pool get sale order unlink cr uid ids 9 8 1 Methods to manipulate the default values default get Description Get back the value by default for one or several fields Signature def default get self cr uid fields form None reference None Parameters fields the fields list which we want to recover the value by default form optional TODO reference optional TODO Returns dictionary of the defaul
192. ult context str fiscalyear data form fiscalyear return result result type action action _account_chart_open_window state end 13 3 Specification 13 3 1 Form _form xml version 1 0 gt lt form string Your String gt lt field name Field 1 gt lt newline gt lt field name Field 2 gt lt form gt 13 3 Specification 133 Open Object Developer Book Release 1 0 13 3 2 Fields Standard Field type char integer boolean float date datetime fields str field string product name type char readonly True string Field label required type required readonly optional Relational Field type one2one many20one oneZ2many many2many _fields field id string Write Off account type many2one relation account account string Field label required type required relation name of the relation object 13 4 Add A New Wizard To create a new wizard you must create the wizard definition in a py file wizards are usually defined in the wizard subdirectory of their module as in server bin addons module name wizard your wizard name py e add your wizard to the list of import statements in the init py file of your module s wizard subdirectory declare your wizard in the database The declaration is needed to map the wizard with
193. unt field field name view_type gt tree lt field gt field name view_mode gt form tree lt field gt field name view id ref v field name domain code 0 field field name context project active lt 1 gt record view type tree tree with shortcuts at the left form switchaable view form list view mode tree form sequences of the views when switching 10 7 2 Getting Defaults Description Get back the value by default for one or several fields Signature def default get self cr uid fields form None reference None Parameters fields the fields list which we want to recover the value by default form optional TODO reference optional TODO Returns dictionary of the default values of the form value Example self pool get hr analytic timesheet default get cr uid product id product uom id default set Description Change the default value for one or several fields Signature def default set self cr uid field value for user False Parameters field the name of the field that we want to change the value by default value the value by default for user optional boolean that determines if the new default value must be available only for the current user or for all users 98 Chapter 10 Views and Events Open Object Developer Book Release 1 0 Returns
194. ust be def fnct self cr uid ids field name field value arg context otherwise if it is a global function it should be def fnct cr table ids field name field value arg context fnct search allows you to define the searching behaviour on that field If method is true the signature of the method must be def fnct self cr uid obj name args otherwise if it is a global function it should be def fnct cr uid obj name args The return value is a list countaining 3 part tuplets which are used in search funtion return id in 1 3 5 Example Of Functional Field Suppose we create a contract object which is class hr contract osv osv name hr contract description Contract columns 1 name fields char Contract Name size 30 required True employee id fields many2one hr employee Employee required True function fields many2one res partner function Function hr_contract If we want to add a field that retrieves the function of an employee by looking its current contract we use a functional field The object hr_employee is inherited this way class hr employee osv osv name hr employee _description Employee _inherit hr employee _columns 76 Chapter 9 Objects Fields and Methods Open Object Developer Book Release 1 0 contract ids fields one2many hr contract employee id Cont
195. ween various predefined values Syntax fields selection n Unconfirmed c Confirmed Field Name Optional Parameters Note Format of the selection parameter tuple of tuples of strings of the form key or value string to display ese Example Using relation fields many2one with selection In fields definitions add my field fields many2one mymodule relation model Title selection _sel_func or And then define the _sel_func like this but before the fields definitions def sel func self cr uid context obj self pool get mymodule relation model ids obj search cr uid res obj read cr uid ids name id context res r id r name for in res return res 9 7 Type of Fields 73 Open Object Developer Book Release 1 0 9 7 2 Relational Types 2 one2one field expresses a one to one relation between two objects It is deprecated Use many2one instead syntax fields one2one other object name Field Name many2one Associates this object to a parent object via this Field For example Department an Employee belongs to would Many to one i e Many employees will belong to a Department syntax fields many2one other object name Field Name optional parameter Optional parameters ondelete What should happen when the resource this field points to is deleted Pred
196. workflow workflow py The first three classes defined in this file are workflow wkf activity and wkf transition They correspond to the three types of resources that are necessary to describe a workflow workflow the workflow wkf activity the activities nodes wkf transition the transitions between the activities 12 3 General structure of a workflow XML file The general structure of a workflow XML file is as follows lt xml version 1 0 gt lt terp gt lt data gt lt record model workflow id workflow_id gt lt field name name gt workflow name lt field gt lt field name osv gt resource model lt field gt field name on create True False lt field gt record data terp Where id here workflow id is a workflow identifier Each workflow must have an unique identifier e name here workflow name is the name of the workflow The name of the workflow must respect the Open ERP syntax of dotted names osv here resource model is the name of the Tiny object we use as a model Remember a Open object inherits from osv osv hence the lt field name osv gt on create is True if workflow name must be instantiated automatically when resource model is created and False otherwise 12 2 Defining Workflow 117 Open Object Developer Book Release 1 0 Example The workflow sale order basic defined in addons sale sale_work
197. your code to better fits guidelines problem for futur migrations The extra addons branch that stores all extra modules is directly accessible to all commiters If you are a commiter you can work directly on this branch and commit your own work This branch do not require a validation of the quality team You should put there your special modules for your own customers If you want to propose or develop new modules we suggest you to create your own branch in the openobject addons project and develop within your branch You can fill in a bug to request that your modules are integrated in one of the two branches extra addons branch if your module touches a few companies addons if your module will be usefull for most of the companies We invite all our partners and contributors to work in that way so that we can easily integrate and share the work done between the different projects 5 1 3 Answer Tracker and Bugs Management We use launchpad on the openobject project to track all bugs and features request related to openerp and openobject the bug tracker is available here Bug Tracker https bugs launchpad net openobject 20 Chapter 5 Development Environment Open Object Developer Book Release 1 0 Ideas Tracker https blueprints launchpad net openobject FAQ Manager https answers launchpad net openobject Every contributor can report bug and propose bugfixes for the bugs The status of the bug i
Download Pdf Manuals
Related Search
Related Contents
Tarjeta de Control EPI Manual de usuario HP LaserJet Enterprise M806x+ BW 1800 enrubanneuse de balles rondes Audífonos Retroauriculares instalación - Lincoln Electric Sony STR Copyright © All rights reserved.
Failed to retrieve file