From b742c44f098c5eb9703b5b7dfdcfc1e420c11f01 Mon Sep 17 00:00:00 2001 From: "Tiffany Chang (tic)" Date: Thu, 23 Mar 2023 15:50:04 +0000 Subject: [PATCH] [REM] developer: remove references to web_dashboard view Since odoo/enterprise#31641 the dashboard view no longer exists since it is now replaced with spreadsheet_dashboard, therefore we remove it from the backend Views documentation. Task: 3226581 X-original-commit: e2c880aafeb55067e91bebb46e156e97367c7467 Part-of: odoo/documentation#4034 --- content/developer/reference/backend/views.rst | 209 +--------- content/developer/tutorials.rst | 7 - content/developer/tutorials/dashboards.rst | 370 ------------------ .../tutorials/dashboards/report_dashboard.png | Bin 22292 -> 0 bytes .../dashboards/report_list_detail.png | Bin 21006 -> 0 bytes .../tutorials/dashboards/simple_dashboard.png | Bin 45862 -> 0 bytes content/developer/tutorials/pdf_reports.rst | 5 - 7 files changed, 1 insertion(+), 590 deletions(-) delete mode 100644 content/developer/tutorials/dashboards.rst delete mode 100644 content/developer/tutorials/dashboards/report_dashboard.png delete mode 100644 content/developer/tutorials/dashboards/report_list_detail.png delete mode 100644 content/developer/tutorials/dashboards/simple_dashboard.png diff --git a/content/developer/reference/backend/views.rst b/content/developer/reference/backend/views.rst index 78f416b54..18ef37dc4 100644 --- a/content/developer/reference/backend/views.rst +++ b/content/developer/reference/backend/views.rst @@ -124,7 +124,7 @@ an impact on all view types. ``info``, ``warning``, ``danger`` and ``secondary`` displays. The list view supports ``bf``, ``it``, ``success``, ``info``, ``warning``, ``danger``, ``muted`` and ``primary`` displays. -* ``sample`` (``kanban`` & ``list`` & ``gantt`` & ``graph`` & ``pivot`` & ``cohort`` & ``dashboard``) +* ``sample`` (``kanban`` & ``list`` & ``gantt`` & ``graph`` & ``pivot`` & ``cohort``) Populate the view with a set of sample records if none are found for the current model. This attribute is false by default. @@ -577,213 +577,6 @@ attributes: measures (useful for fields that do not make sense aggregated, such as fields in different units, e.g. € and $). -.. _reference/views/dashboard: - -Dashboard ---------- - -.. raw:: html - - Enterprise feature - -Like pivot and graph view, The dashboard view is used to display aggregate data. -However, the dashboard can embed sub views, which makes it possible to have a -more complete and interesting look on a given dataset. - -The dashboard view can display sub views, aggregates for some fields (over a -domain), or even *formulas* (expressions which involves one or more aggregates). -For example, here is a very simple dashboard: - -.. code-block:: xml - - - - - - - - - - - -The root element of the Dashboard view is , it does not accept any -attributes. - -There are 5 possible type of tags in a dashboard view: - -.. rst-class:: o-definition-list - -``view`` - declares a sub view. - - Admissible attributes are: - - .. rst-class:: o-definition-list - - ``type`` (mandatory) - The type of the sub view. For example, *graph* or *pivot*. - - ``ref`` (optional) - An xml id for a view. If not given, the default view for the model will - be used. - - ``name`` (optional) - A string which identifies this element. It is mostly - useful to be used as a target for an xpath. - -``group`` - defines a column layout. This is actually very similar to the group element - in a form view. - - Admissible attributes are: - - .. rst-class:: o-definition-list - - ``string`` (optional) - A description which will be displayed as a group title. - - ``colspan`` (optional) - The number of subcolumns in this group tag. By default, 6. - - ``col`` (optional) - The number of columns spanned by this group tag (only makes sense inside - another group). By default, 6. - - -``aggregate`` - declares an aggregate. This is the value of an aggregate for a given field - over the current domain. - - Note that aggregates are supposed to be used inside a group tag (otherwise - the style will not be properly applied). - - Admissible attributes are: - - .. rst-class:: o-definition-list - - ``field`` (mandatory) - The field name to use for computing the aggregate. Possible field types - are: - - - ``integer`` (default group operator is sum) - - ``float`` (default group operator is sum) - - ``many2one`` (default group operator is count distinct) - - ``name`` (mandatory) - A string to identify this aggregate (useful for formulas) - - ``string`` (optional) - A short description that will be displayed above the value. If not - given, it will fall back to the field string. - - ``domain`` (optional) - An additional restriction on the set of records that we want to aggregate. - This domain will be combined with the current domain. - - ``domain_label`` (optional) - When the user clicks on an aggregate with a domain, it will be added to - the search view as a facet. The string displayed for this facet can - be customized with this attribute. - - ``group_operator`` (optional) - A valid postgreSQL aggregate function identifier to use when aggregating - values (see https://www.postgresql.org/docs/12/static/functions-aggregate.html). - If not provided, By default, the group_operator from the field definition is used. - Note that no aggregation of field values is achieved if the group_operator value is "". - - .. note:: The special aggregate function ``count_distinct`` (defined in odoo) can also be used here - - .. code-block:: xml - - - - - - ``col`` (optional) - The number of columns spanned by this tag (only makes sense inside a - group). By default, 1. - - ``widget`` (optional) - A widget to format the value (like the widget attribute for fields). - For example, monetary. - - ``help`` (optional) - A help message to dipslay in a tooltip (equivalent of help for a field in python) - - ``measure`` (optional) - This attribute is the name of a field describing the measure that has to be used - in the graph and pivot views when clicking on the aggregate. - The special value __count__ can be used to use the count measure. - - .. code-block:: xml - - - - ``clickable`` (optional) - A boolean indicating if this aggregate should be clickable or not (default to true). - Clicking on a clickable aggregate will change the measures used by the subviews - and add the value of the domain attribute (if any) to the search view. - - ``value_label`` (optional) - A string put on the right of the aggregate value. - For example, it can be useful to indicate the unit of measure - of the aggregate value. - -``formula`` - declares a derived value. Formulas are values computed from aggregates. - - Note that like aggregates, formulas are supposed to be used inside a group - tag (otherwise the style will not be properly applied). - - Admissible attributes are: - - .. rst-class:: o-definition-list - - ``value`` (mandatory) - A string expression that will be evaluated, with the builtin python - evaluator (in the web client). Every aggregate can be used in the - context, in the ``record`` variable. For example, - ``record.price_total / record.order_id``. - - ``name`` (optional) - A string to identify this formula - - ``string`` (optional) - A short description that will be displayed above the formula. - - ``col`` (optional) - The number of columns spanned by this tag (only makes sense inside a - group). By default, 1. - - ``widget`` (optional) - A widget to format the value (like the widget attribute for fields). - For example, monetary. By default, it is 'float'. - - ``help`` (optional) - A help message to dipslay in a tooltip (equivalent of help for a field in python) - - ``value_label`` (optional) - A string put on the right of the formula value. - For example, it can be useful to indicate the unit of measure - of the formula value. - -``widget`` - Declares a specialized widget to be used to display the information. This is - a mechanism similar to the widgets in the form view. - - Admissible attributes are: - - .. rst-class:: o-definition-list - - ``name`` (mandatory) - A string to identify which widget should be instantiated. The view will - look into the ``widget_registry`` to get the proper class. - - ``col`` (optional) - The number of columns spanned by this tag (only makes sense inside a - group). By default, 1. - .. _reference/views/form: Form diff --git a/content/developer/tutorials.rst b/content/developer/tutorials.rst index 1a2d3088d..3aea79e78 100644 --- a/content/developer/tutorials.rst +++ b/content/developer/tutorials.rst @@ -15,7 +15,6 @@ Tutorials tutorials/unit_tests tutorials/mixins tutorials/pdf_reports - tutorials/dashboards .. cards:: @@ -66,9 +65,3 @@ Tutorials :target: tutorials/pdf_reports Use QWeb, Odoo's powerful templating engine, to create custom PDF reports for your documents. - - .. card:: Visualize data in dashboards - :target: tutorials/dashboards - - Create data visualization dashboards using the enterprise edition "Dashboard" view and - so-called "SQL views". diff --git a/content/developer/tutorials/dashboards.rst b/content/developer/tutorials/dashboards.rst deleted file mode 100644 index 861585f5c..000000000 --- a/content/developer/tutorials/dashboards.rst +++ /dev/null @@ -1,370 +0,0 @@ -============================ -Visualize data in dashboards -============================ - -.. important:: - This tutorial is an extension of the :doc:`getting_started` tutorial. Make sure you have - completed it and use the `estate` module you have built as a base for the exercises in this - tutorial. Fetch the branch `{BRANCH}-core` from the `technical-training-solutions - `_ repository if you - want to start from a clean base. - -The term "Dashboard" is used in Odoo for objects that display data, but involves different -implementations. This tutorial will only focus on the Enterprise view that is used to provide -aggregated data visualization. They can be added as a ``view_mode`` to an existing model (i.e. a -view you can switch to via the view buttons in the top right of a view), but they are also often -used as a view for to a special model customized for data visualization. You may hear these -special views referred to as SQL views. - -It is useful to note there is a "Dashboard" app in Odoo Community. This app allows users to create -their own customized view of data, but the customization is only visible to each user and can -only be viewed within the "Dashboard" app. Technically it is possible to make global dashboards -using this ``board`` module, but it is much easier to do as an Enterprise view. Plus it looks nicer -and has extra features not available in ``board``. Some other dashboards within Odoo also exist, -but they are custom made and are beyond the scope of this tutorial. - -The documentation related to this topic can be found in :ref:`reference/views/dashboard`. - -File Structure -============== - -You probably have already guessed that since dashboard views are an Enterprise view, they must have -a dependency on an Enterprise module. The Enterprise module is ``web_dashboard``. Don't forget to -add it to your manifest file! It is standard to add dashboards intended to be used as a -``view_mode`` for one of your module's models (in the ``model`` folder) to the views directory -(i.e. the same file that contains the other views for the same model). - -It is standard to create a separate Enterprise module to add extra Enterprise views and features to -a Community module. This is done in a similar manner as the module link technique covered within -:ref:`tutorials/getting_started/14_other_module`. The difference is that instead of linking 2 -different modules, we are extending our `estate` module. We do this by creating a new module and -adding both the Community module and its necessary Enterprise module dependencies to its manifest. -You will commonly see "enterprise" in the module's directory name. To keep this tutorial simple, we -will add dashboards to our existing ``estate`` module. - -SQL Views have 2 parts: their xml file (don't forget to add it to your manifest file) and their -Python file (don't forget to add it to the appropriate ``__init.py__`` files). The former is the -same format as the ``view_mode`` xml while the latter contains a custom model and SQL code to -populate its fields. It is standard to add SQL view files to the ``report/`` directory. It -is also common to include "report" in the name of the SQL view's files. You may be -wondering why do we put the files in a report directory? We saw earlier that the dashboard is -for data visualization, therefore it is not editable. You can think of dashboards as interactive -reports where you can click on statistics, graphs, and charts to see the specific data contributing -to them. Note it is also standard to store the xml code for :doc:`PDF report templates -` in the report directory. - -It is expected that your work tree will look something like: - -.. code-block:: bash - - estate - ├── models - │ ├── *.py - │ └── __init__.py - ├── report - │ ├── __init__.py - │ ├── estate_report.py - │ └── estate_report_views.xml - ├── security - │ └── ir.model.access.csv - ├── views - │ ├── *.xml - │ └── estate_property_views.xml - ├── __init__.py - └── __manifest__.py - -Dashboard View -============== - -.. note:: - - **Goal**: at the end of this section, we will have a new dashboard view that displays - different property statistics. - - .. image:: dashboards/simple_dashboard.png - :align: center - :alt: Basic Dashboard view - -Dashboards can display data in different ways, including: - -* showing an ``aggregate`` of a field -* using aggregated fields in a ``formula`` -* using a ``widget`` -* using another ``view`` as a subview - -There are many useful statistics and visuals we can provide for our real estate example using -these options. A full example to reference while doing the exercises in this section is -`viewable here `__ -(restricted github repository link). - -Data ----- - -To fully enjoy our dashboard view, we will need good test data to populate it. Test data will -allow us to check that the resulting look and statistics are correct. It is a good idea to test -with data that will cover most or all of your expected use cases, but is also easy to verify with -that your statistics are correct. In our goal's case we are looking at count, sum, average, -minimum, and maximum statistics, therefore a good representation set for our dashboard is: - -* At least 3 properties with different property types, expected prices, and average living area. -* At least 1 sold property and at least 1 canceled property - -If you don't have a set of data like this already, you can either: - -* Complete :doc:`define_module_data` (if you haven't done so already) and add the extra cases to - your demo data (you may need to create a new database to load in the demo data). -* Manually create the data in your database. -* Copy this `data file - `_ - into a new directory called ``data`` in your estate module and copy `these lines - `_ - into your __manifest__.py file (you may need to create a new database to load in the demo data). - -Click through your database data and make sure it is what you expect. Of course you can add the -data after you write your dashboard code and then test that your view is working as expected. - -Aggregations ------------- - -Building a dashboard view is very similar to what you have previously done in -:ref:`tutorials/getting_started/07_basicviews`. For the dashboard view, we use the `dashboard` root -element and choose from its possible tags (see all the possibilities and their attributes in the -:ref:`reference/views/dashboard` documentation). So a simple dashboard example is: - -.. code-block:: xml - - - - - - - -In this example, ```` adds styling and ```` declares an aggregation. We -indicate which ``field`` we want to aggregate, what ``string`` to display with the value, and -how to aggregate it with the `group_operator` attribute. The `group_operator` can use any valid -PostgreSQL aggregate function plus the special Odoo defined ``count_distinct``. - -Hopefully you remember how to add views to a window action `view_mode` (hint, it was -covered in :ref:`tutorials/getting_started/06_firstui`). Now let's make some dashboards! - -.. exercise:: Make a dashboard view. - - - Create a dashboard of aggregated values for the ``estate.property`` model. You can - look at the **Goal** of this section for some inspiration. Remember to check that your - statistics are calculating as you expect and note that the calculated values take into - consideration any applied view filters! - - - Bonus: Add in some aggregations that need a `domain` to make sense (remember domains were - also covered in :ref:`tutorials/getting_started/07_basicviews`). - -Pie Charts ----------- - -Adding pie charts to dashboards is a piece of cake using the `` element. An example is: - -.. code-block:: xml - - - - - - - -In this example, we indicate that we're using the `pie_chart` widget with the `name` attribute and -the ``title`` for the pie chart, and that we're grouping it by property type. - -.. exercise:: Add some pie charts. - - - Add the pie charts from the **Goal** of this section to your dashboard. Hint: you will need - to add `'measure': selling_price` to your pie chart `attrs` if you want to show selling - prices grouped by property type. - - - Hover over and click on the pie charts to check your charts counts values and don't forget - that filters will also apply to the charts. - - - Bonus: Add a domain to your selling price pie chart to only include "sold" properties (i.e. - not "offer_accepted" ones). Note that the `'` will need to be escaped since it is declared - as part of the `attrs`. - -Subviews --------- - -Similar to how we can use the list view within the form view (we saw this automatically happen for -One2many relationships in :ref:`tutorials/getting_started/08_relations`), we can add other views -within our dashboard view. The most commonly added are the pivot and graph views, but the cohort -view is also an option. A dashboard with only subviews is: - -.. code-block:: xml - - - - - - -The `ref` attribute can be added to `` elements to use a specific XML id for that view. If -no XML id is provided for a graph or pivot view, then the default view will be used. -The cohort view will not work in the dashboard without a specific XML id. If you have already -created some of these views, then you are welcome to add them to your dashboard! Sample graph and -pivot views are included in the `solution code -`_ -that you are welcome to use as well. - -.. exercise:: Add subviews. - - - Add in a graph and a pivot view to your dashboard. Try playing around with the layout of - your subviews in relation to your pie charts and aggregated values and refer to the **Goal** - of this section for an often used layout. Remember to check that your subviews are - displaying your data as expected (and yes, they are also affected by the filters!). - -SQL Views -========= - -.. warning:: - - This section expects you to have a basic knowledge of SQL. If you have little to no SQL - knowledge then `this is a good tutorial to start with `__ - and these `exercises `__ are good for those who need - a refresher or extra practice. - -.. note:: - - **Goal**: at the end of this section, we will have a new SQL view that displays different - property statistics. - - .. image:: dashboards/report_dashboard.png - :align: center - :alt: SQL view - - -Occasionally we want to show data that goes beyond what our model already has in it. We could add -a lot of stored computed or related fields (non-stored fields cannot be aggregated -or displayed in pie charts), but it would be impractical to store a bunch of fields only for this -purpose. We can instead add a custom SQL view to minimize the computational load and keep our -model clean of unnecessary fields. - -Model ------ - -We will start with the more difficult part: our special report model. This file starts the same as -any other model, except that we add 2 attributes ``_auto`` and ``_rec_name``:: - - from odoo import fields, models, tools - - - class EstateReport(models.Model): - _name = 'estate.report' - _description = "Stock Report" - _rec_name = 'id' - _auto = False - -``_auto = False`` indicates that we do not want to store the model in the database, and we will -create a custom table by overriding the ``BaseModel.init()`` method. ``_rec_name`` indicates -which of the model's fields represents a record's name (i.e. the name that will be used in the -navigation breadcrumb when opening a record's form view). In this case, I left it as 'id' because -our property offers don't have a name. We will need the `tools` import later (i.e. -``odoo/odoo/tools``, which is full of all sorts of useful helper methods you will probably use in -the future). Note that it is standard to include ``report`` in the model's name. - -Remember, your new model will need to be added to your security file, as you learned in -:ref:`tutorials/getting_started/05_securityintro`! - -Then we define the fields we need for our dashboard the same way as any other model (like you -learned in :ref:`tutorials/getting_started/04_basicmodel`), except that every field is -``readonly=True``. After all, our model is for read-only purposes only. - -Now we override the ``BaseModel.init()`` method mentioned earlier:: - - def init(self): - tools.drop_view_if_exists(self.env.cr, self._table) - self.env.cr.execute("""CREATE or REPLACE VIEW %s as ( - SELECT - %s - FROM - %s - )""" % (self._table, self._select(), self._from())) - -We use ``tools.drop_view_if_exists`` to ensure that we don't create a conflicting view and then -execute the SQL query. It is standard to separate the different parts of the query to -allow for easier model extension. Exactly how the query is split up across methods is not -standardized, but you will often see at minimum ``_select`` and ``_from`` methods [or something -similar], and of course all these methods will return strings. The columns from the SELECT -will populate our model's fields, so ensure that your column names match your field names -or use alias names that match. - -.. exercise:: Create report model. - - - Create a report model with the following fields: - - ========================= ========================= ========================= - Field Type Note - ========================= ========================= ========================= - id Integer Corresponds to ``id`` of ``estate.property.offer`` - offer_state Selection Equals ``state`` choices of ``estate.property.offer`` - property_id Many2one ``estate.property`` - property_state Selection Equals ``state`` choices of ``estate.property`` - property_type_id Many2one ``estate.property.type`` - ========================= ========================= ========================= - - and write the SQL query necessary to populate the fields (hint, you will need 2 JOINs). - - You won't be able to check if your model is correct until we create a view for it, but you are - welcome to check your query directly in your database to see if the results are as you expect. - If you struggle with this exercise, then - `here is an example `__ - to reference. - -View ----- - -Now that we have our model, we can make its dashboard view. There is no difference in how it's made, -except that its file is in the ``report`` folder. Since it is a new model not linked to -any other model, we will also have to add a new menuitem to view our dashboard. Typically, SQL views -are added under a first-level menu called *Reporting* (because it's a report, surprise!). Do you -remember how to add a ``menuitem``? If not, revisit :ref:`tutorials/getting_started/06_firstui`) again. - -.. exercise:: Create report view. - - - Recreate the dashboard in the **Goal** of this section. Hint: it uses the ``formula`` element, - which we did not need for our previous dashboard. - - - Bonus: Create ``list`` and ``form`` views for your new report model so we don't have to see the ugly - defaults when you click on your pie charts. - -Extra Tips ----------- - -**Tip 1** A common mistake in SQL views is not considering the duplication of certain data -due to table JOINs. For example, in our **Goal**, we have a pie chart of the offers' property types. -We may be tempted to add a similar pie chart with a domain to only include canceled properties, -so we think we are only counting the number of canceled properties by property type. In reality, we -are still looking at all the offers per property, so any property with more than 1 offer will be -counted per offer. This example is easily double-checked by clicking on the pie chart to see its -list view: - - .. image:: dashboards/report_list_detail.png - :align: center - :alt: Pie chart list view - -But for cases such as average aggregations or using a subview such as the pivot view, it is easy to -miss this mistake. It is also easy to miss this mistake when you have insufficient test data. -To add a number of properties canceled by property type pie chart to this -report, we would either have to do a hack (too advanced for this tutorial) or simply exclude it -from this report. - -**Tip 2** If you have a field that you do not want as a measure (i.e., in your pivot or -graph views), then you can add ``store=False`` to it, and it will not show. - -**Tip 3** If you have a SQL View that depends on context, then instead of overriding -``BaseModel.init()`` set the ``_table_query`` property:: - - @property - def _table_query(self): - return 'SELECT %s FROM %s' % (self._select(), self._from()) - -The *select* and *from* methods remain the same. - -`Here is an example <{GITHUB_PATH}/addons/account/report/account_invoice_report.py>`__ -of a report that depends on the currently selected companies (in a multi-company environment) context to -determine the currency exchange rates to use for accurately displaying amounts when the selected companies -have different currencies. diff --git a/content/developer/tutorials/dashboards/report_dashboard.png b/content/developer/tutorials/dashboards/report_dashboard.png deleted file mode 100644 index a950286239ad84fea058e423905faed5d8773cdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22292 zcmbTd1yqz>`!`A`Sb#;Bg3_Qg45c80v~-7bBQSJ}h;(-eLk~H0qsY+U(2evkbT^zE zeSFVzzW4mU^_?@zHQclBomc;^Ya94ZP6F=^*&PfF3_QuVZxk^wu#Pb>FfVRl0WH6b z)02Qd*bbtS%C~Oanw*pW1^gt1h^s@CY)v4}@9m8-Ol@qfjaeNG?Tw9X9L#JXTiDIQ z7#OO#l5busyG(2}hO23u)vmYKIpgiKZ;UxhCN^pd&xeE zqeWzQ?3L#3AMvTB`M7t@QJ9{d=ty^(I{j$Hb#_I#e>hzR8`y85(&Z;5;4cOV<@I+6 z{`EH)_xc-p{r=^PZ=E|kJDtBClBedkywOKLNXNin5pgc&ug7htvZuiqp^O%DvNXy;95z97Mz(WoaqsLLmg9^T39CI zz64?H?R^-U_8jMgMY;0|`L#O7FuU^E4Gucj*4IzYMahR0aAxBXkfrnEHW>PrhOau* z>x6AKy+2v}wy}o3qE%J8d(WjLU%tLB)y8lQqcn%KQssww(ycQ?{^dKuVMtP?!@0cS z&AXpOlA?0zL3Jn8$qTrMxU2YP56B z53J7brxt2P4=R12S9L@#$J^h=2-$^rsXt6$j_|xzll2|f*5>6~AqZnS5i`H|X-JYv zUNu46#s5PvpG>JgTdqPUIy_gf*G;19UgcpVe|pdHr`ze}OCfGpP8D^BGRb?05ZB#F zV+Yf9&#KQ87Iw^tFKOG~;rpGRtD4AtZ=T5-g%>2_(tB9biwf{)G2tc;v1=z^>_*ET zT1G-Y(|Lr&eU7HzFDVcjoKJCdEC;s}gB~IE_|F2JHZqap*=d{Hejfsr- z1UC32LVODHIdsMKb-3R>`+O&PZ7c{fiCp-2#x@$90vzy55vwH%LcER_W$E%xs!6@e za76n{(C3W6Jq#(^MR_#7$#?JG!O=|ZSLK5XwaespdoJFT2&Kh6LMN(qi<_no&Oj6$ zAM=N3W|32xpIDMluytJ|dhlg~t0?lT(0BE$l!V?&^z*e7aTyJ>rsa2B1#^HTU@%x{ z@1$0tg(V&*b{6*NgpnFdo@X-E(^F2XHL#;32!&)9Ouqmtr>k_VkWBK~<@9ER6={Ti zE4Cp^NU(&2;B&Bx!c)YWq%T^%{LIZU-c#Xh9yeZub^AdHa<+7w9mSDCd<7tTa0%XF zZOR=9=TU7a)Rj%3cq(jslLETXhQcUxL~O(sNarHBNe_1NF3YlWuGpz`bS(43)&ZGj)dk8z%CVBd`om}H@ACJ!RH*Z9MykJ(Qw~!hvZuprAEJ zq>9sdzOEZ7BFN6|9UgWJwQ;VIFh!?1(Qn@eY!TJ%!%@Pu=t8uqNsK(c<48 zuG(Ev%7rpzvDv8rF!+V!-Y-M)R7>mO0%Bt;nx2I6_XtK5xE(!YpelkKS|Jcb*mc=} z!+MYsYg|2jW}`=ybxWFWyoXY@f(tV}O-<6@iiaY1m~$V&8R0|7@vZ%Fxek!E--Pmc zUk)jh6FK@}|E;6n0@!E$#+S!CW3k;~mzIV{IaExh9B4bo`XOjGu2=QK?l0LT3o0BN z0`~xM!-8fLeV6%fLw@enB?NqRr=PdlNGQ1jx{)i57y6n9m)dr^s^L)!|uy5ph1ja}KGmA+<&5qaR!u8w*0%pZX1%jEvux%_uzr$tDN_rYFQ5!c1 z;f21slb65#fYynwczhU}-SDt+dNuH+nL>DR4q$98hmVv;)66aE`F;($Sl!e=4nbNX z+#z*!FY0j`phx#|*|Vo#ny5SKZIU-+^rznmaXmBsW)sluxiRq-ww1&qWP0eLzdqqJ zm{H=m1a=u2)`oIEjq5;h4m8LGAo2EpE&H^#-JP&)E9<)L`)gh+v1#=7o63Z59R)Ye zggl9@4T^@|5AzU&L}mk?HMp~;dmEHJ^6i&WZyg6B?h|g6-~b9GA5W7`FFu*04&~&| z2o06(ISi6P`FSq%k&njsgT{G&1seUd5h6Q$f0vxnb5S;nAn^)09I_{1-b`{(DC6V| z{5zyDw>U?J3nXUnMU|1<|yRlipOw4oC8y{ZrLX*QNz4!D>U_!4h~;VN*Ul zKRpbph%NivA^TebZd`RD64aT7jeJB7`=61(%82`^%iDRVh$~C7A1Gj97Q*l&lf_3P z%RKedHkSN`4W#1_PD~ctUEhC2_GaX$3Y?y%oIcxvjs)}O%mb{Tm+loG&5b|ee}U%w zP8%u@(R-Jo=lN4e93?AqmyFUAF%k)-@2ePlF)^96&pXw_R@^31IyUos8lQ?E`I9by zhtt{1q^Lte4Z*b!&B$L5tK#fZ67S;yf*PMCZqVRq{nPNCKv0?XZehc%u9=HE`Hi3?($UJB(4@#?;7*B^Mplfiu#>5 z3|c#*GiI&6?3oy`&R_69sGp}U<<^i_?r(y8Ks5dcK_=EL-)h8Fko(BJ+xroqMJWv! zm*yQJdjtWq1%AE+t%dnq_EDYT_1yq|f=wye=ad}2%cG;)j~VTK+U9Rzv?zW=x@w=} zuOXqsm3YJ@>`o-WIjH{MV>TeX0jBw{Q0`B2%QZ7F^dZ;ZzazZ=ZU%xF;PX2m{CDsF zH2XMq=3S_#8m8=FTt`x&Z$EgLeb8+XlmB)9V;EC;ZH1SaBc-mlY}vSWRoCI2>t#v> zL&liy^z6OQuLuXTOlVT=9Z8)X?|-cvQnaAF2PRAHeC=)sHDsunm*6D>fx6311g>2R zdw|Le2%d1JUjpw*>3E=K2`x&$e15$t7V>DngQcB@uMI({%h3hHW-=KHG!twDY!U+2*WHnM-1-L+@DeWlr0!>REJg!p5thR#}X1J++{It z*TjvzNL+vHprEOtqO1LN;^J3CV~!}%OXA0{=V{sPw0vXg3KogY(Ndn`vDOSDs2)4& z=$R42B?OzwkYm`5T)zv)HWTSkW)jWZ7VVL|BVAW(?$eKPiW={>+Jc1Z6tw)uwcnFd zhNA9Ad&@D0tLtgdooT+))-~ikZT?7$4_j~cD9WyY&u~lGU;$yfep#cOVEiKC9wY zBJN0!$qGJSD6Sju50P`d__eqX7*jq{JMHK&LpXJ8(Z$T`dNiRT;*B$?&GF(i9VRMl zI#i6GpV>6H1Rsv+wCfY91H6|IKgbBC7|aI-)93olxbaJ7w_CBPC6fPwe;Q zzSdGHtNjX(Zr8pRKy?b7wGdpP?1P>3q90*M_Rq(C?4UtpcyUZHyV_VN&ZL$elW>km zo)#ul;teZJI#G-k?m%MfdDvQ{BO{v8TH5noCZMl~4MOzz3~GTSwX?5ate9>%l90l2NG(>QCqu$S?3m)W$mb$m_eoL{s3?a6 zmEMh`DQ|O9xz%tQ-uwui`SvYR^1^$_FY}|+S-D6laznf@HqX9?mxSLWBn+KgrabYP zPAs?WC8%pGCP|u^Dace#tbr=EuN}}5yst|Mo(vwE;C8=LZEx;uy~}n5wW_hbX239E zltwCS?9Y=>F5K>6PnPDM5DT@qA*BL^dY3krHx*>|aZ_1C_A%MpRH`mBp4ytquFi+Z zD9C>nJv4DLv!6Oz{lN)3b;!1dL7SV)%L;}B1*{k#Vc$*PD?3sUs__&&AAU>T&8`*_ z8q5VkI5DFs{h;5za>(8^=H}5DHm+7x9U_oJ6ST7shO%u%5JRy6qvX?O+%Q}4xk|7e znMmb46eAg}OOfO_Jgcr^(xcB*Vy@z6WI(0UD`%$|UQ7}EvR=!X_+}fSYQ3`uh;PCc z##oKg0Y!%!Lvkc^R6WTOvI`63_)`;KgWYgdh9uu9b$u@{UKg9=H?|9v`#Gt}*saMl zEHZo#Cgu4#p{zg{bK1qoB<%d&Z=>d-o11A*384+CvpT#qYkf=+*^fhCi}-IW{U6f_ z*wz27UH%vH{vYh}e>cYsqO@^rH@AUteSG-T?$nT9prL=5rL~xW>4E zJi&|k8G`kG*^X+VZ+C>XPS}*dBO?~o6S=;F;yH!u_oRctG(Vpd-P`ozH?Qv(S?bbs z4s~^K0{01@MM;J=&u-{IWQd(y&`T({e6-M!xqD z9+WiQdf8&I>FIHRGlggDI=`KfK;Do-5%8-i`6J)R`-yiz#NPI^RUHtHc`eq#zgXst$6hVQB~A7d&k_?HEWRf z;GiL5=pn(VjpWP--=OE9ZcfOnsqSJWeuw{?wqNbUA}wN8)MZQ;Xb~v?Vw}Z zk#Q^#vXN`U#xfI23ez3+4T)*^Jf2+X)A)>&aW+RX7|zf7dUNIBU{ux6ehRCUtW2Cv zl)$sbbMwBsOzq*@G3HF>yD0HDsxs5MHJr@+@71DtHma$+y5%I}hRdBPH+Q4?rN^IC zN)VyeKk2YyPTx=1y}R@<0sVQ&&2g9zJu0n(UvJ0nkt-8OSMKH!ofs2UzvmLpqeqng z+`(D%*{pqc|4723d~#a6Y+}|@uoeA$cKX(OleLEVZKjJL3mt`i!TK%^&Mvo5ib@;# zKKx4P47%6cq_b>uU})b{XHaN~KSNMvdU#Q-J+`4}eOvD2B|EF(Xnq1tkHb_mSbyiTQ5gjq;-Ls3#po z@g14cZxj#*JlL*W?~|I$Kh@!?f375CKCoz$H@{WXlMGWR zDY3Eq9;Xy3RPS5ve_I1Lg;NM5K1EMTn!awn$*q>xWTG(jj8R|!1NonDFY_q zZfy7Y^kSafJvPQHQE~d3<=3v${qu=Am1E#R_fx!qJ%pp0+Q~kCEd?HxHRz>PJh^u3 zojen|K@Zi?ceh>8&YvIB=@NBDCGWG~-7wf{Fr5r^VLnZEqFdfvRqb3AtWeptc)~IG zOfp1hhd1!~#{Rss?ucj~uZ^^@K|n8lqAQXK3h-KO_sBmSxq`@jiF%KY5>@M5SW2N9GZ!xBo@) zwhz)ZlO5DA5}&44MBsn>i~B8=y)W+LK=Q}Jmo;F6YDp9;Ne?d*nMAWzQ_dn#StxP! zp~}$7#=CIErFaJOk?%zIK(T*F*yUTx9N*i#YKKwVcy*xSq5X!5&G(J5+h-TYDcP10 zqS(!g!rYA06%O9PGjr4@UnF*!zTdxLRj&l^)&cufKwl?w-^hP1v{TOD)_IJlc)o8r zo*30wU#8Z4$s`NiePzj>n46I*4>Q!9sx(cntYEDl&H9)lFlE`!_nvGvw-EnkCuuaw&m@U=W ziU~T+^q0C8v)gWv{Y;IqLQ8qeDfTt5eYnBnFbOis>_sv0NqdfHcvTX?YIw0AcdbIQ zo9-vFciGQgXiF^@9Ob(~+>VUIJ&_J>evi!|`?@gfW!7;?#&NoCMk*cF{#571Y0Ec$ zS#gXu>3g{-6R?IZ`;9#lB$O7k)2~?VmoUZ>iXj=Su$7cfo)$uo6Trl z7rZ)^D())jUhXazcm-H!e#^B-|LZ|q{~D--=Hd52h2-?qij!?0BWW*Xn@?z!<6tV4 zYo8&%kCGz2wO|*H#_!}8d}+E0B$dMRmN~)nzm94=5ws?H?P(MjBR^&2Bf-oo86chT$xgXkWcCoYv>SOjko12bw_+e6Kp&TA&TqPl~bsoHm)F@TP z(ubs(y@aEO*gr3rWp2oLhJ=ynSxtM_Soe`odU`Bj<`UgHcE`7ocb6ljJmBMp{>TAE zb02+U?W}dwT_AM;dqtyj@s8`!hbl1BF?8!X9N+K^zBr|!HnL%!KWVv6#rpLmHB@|@ zF~_fXTtm&S9p!?qqRXG-v)~HbI-e8D9p)+mD7aqkwXn9uq$J;t8q}!8k))Q6RGP>c zXtSLyK`7q)l$6+$nmdgy%Y`9gI0W*Td4dhdvu1=eIOTZVzKE>{S>&CCSsdV5+|sm= zQV2mJXEnAxI@EFB-0c@3P8%nF4_VX|gceG;--B{)sBzlJoLN(Ge`%lAHj(OLsw8(8 z-Xck@`5t(hc@W>f#$WO*|2shymY1nc8dDWIimFeRJr>4}tyn2luH>Y?67rXBRwF8J za>MHLU4qHb=@B*@)LT3Kt4M`%oGMd#D>q?AONp|!$8M0NExsCNUTy_hKaSWT0us=u zo8|ChoP+npOEH6aPY}u<_t!&uUF)5V+Z9TdZ5Srm_oz}c(c?#`9!to+B!mB)+7=gT zusD-Sr!&-c9G_c3lxU19X%~Ze_(}fqNsU*dBFFGLiQcgnXjD5>FQ;Ri-JzVJ>h&GI zaNF3B-q;&qDHRXtFR-w4rDado6SlLyn+@%^CQ=N}PClku5wL{hR32j2!lNhGJj1y_ z78q92u9rPFZ<@r6b$^SH{I9z1m4j5ZBv_M6eT)Qx03_L4n&^1G!}6z^e#+I14)Z-Dn0 z|L+sVb@%IF(5K-~?Dxv=#(zbJz+fL_#s?ry{QY#BlYdCVyRczMQJ*LIZcsOqh31)r zUy8B|0w=KHV>Tz~8}eJ5L(l zu!C9M7%V}Wf=CK7h?NVH0^)J7>9_9>)=L=UM)ET47(8H<`y=uBboq$3Y2FC6(t;2< zZ$P$_KMn*X)pZ$M_g{(h7kfcoX5C-YD0=6u`Ne&DB4AosuxW?xEP5Lq{z`(Z8;FNV zQY8q(e!VkotZb?jsZ+i|siOF*i_AR2r{SZDF@y#PngGSD`Os4#acUSaU-z1d9SDj6 zDyr*&>G_7#b@ka8Y$@j|u>LfvflV8li-%Zx6@ENX#Mr$9EKrIcBKIM$GSi2#rL+U@ z;h%mt!KM}E1?tVKhxUVb!J|(i)qsfKCzcnKA#vB(@j@9-y#XK^7I2Qj2IOtGVLk*c%3Xz!VyEwN2CIgV?=Mzj<@qZA&pB8^?Gk^})@BZ=_^GV5n zI{#)mCfPIKm;g8c1Z0u$pPbcy!Hj=bEB`#9gtfgKt-I!o8&#y=0dR&_JeQGcK<-2^oSo(3l z!_sAb>u@rhcsZxrDJt6D>2bP~B}r;%nwotCcWq$Ku2YHLUBR7rv(3+N%JC?LK=b_M zyRiEB;ygo$zBNf|#q$5`Y2$r)Fckh-fMaeq0DoWI&hbT=&4KxpnTb*cOp4Xwh zLuc4}VNX`fRBF4ssPU6uHVorQkx?lTX_m!<_3A@WwF0a;LqDc=%em=J26I-7mFVo0 zeTf_lZ1N;bH-q5lanDJB7Z0PAc!`JWDiY>xt zr*~jGm6XIF&|EnNCxk-#tlZ5Jhi>7Qv+u5S40Q*VlYRys@ovZ(O{0ueg#Roe z%~aFYx+!aZ?>6K3`3_w`*W;$Wv>phg4}3jbq_Nw31k+0Dj)> z(c*ZdD7Asqdds?&D7%0dn0B=A!<6r)TEI}THD=(Z-F+uC@y?Y&PeC!E{(VRvxPy7a zDzflkicW)l@PpyyVXJ@x$AOeOpVDo^g8h5bXNpR@Nv6Ts&F|GT&FB}_`#t=Twj#<2 zMQXKE=Sp(cO%Ex}A@hV_?*Kavp)@$BSEryOCnzvzRsI+!_0=b#scjVupL7Q{5{l_shd8tvQ3CZU{` zkoh78Zf168`Rbf!5Hm~B5nta9PiM-Gw;@9gi#jEY=H2g~%N3c*%jJc4=|&xDyJZZs zI`g;Uog_*UC9li2IPwV?uf2}f^K9Fpl;p=U8<}$OEVCqy>0{x#*JNYq z%yeU$3f(u9qb0&&#$~Z0v)=eNuqHo~k1;^`0j}j5nj{>slwqU~R0(@_q+Jg|D6MQ5ivQ*0o}lzrT4A0L`{qqkvV?1tjDxb z>C$SfjWZFCvkUGpRR0nvynI*Au2l#~X@&!H=sOFy3}gU3A-~(LZL3P1n%7DAE|d6# z*4>>lT@x0kW74;Hg$1UcddN>skf6xX zYkF}xC_uB--MaQUG;BJG=L|@|qpT7df;d2Et;7Df{6s~fSyay~5ZnSJ0_UG3wy|%B zo$sU0NQwoeF#a zy>QIQ^AE1)f9@df{6ut40LTh<<2h=1X@UcLNfua~srJYzFPgHRO#!zf>ZUJ!yvUt- z4kO28upb?jL^|GwLRb2ir*>_w?&+=-%Usy`Y1`GF=Io03=hufM_o4bqZ<0SVd=J%8 zs1D%|z+Hy)wR63#Hzd#UnO)#XyMNPz(%n8pz))qRHx!YTT5}}^{QkxCRMWvL zXSK#X?IKW%R8EM?iT?lZQX^#1y_dP?0Yhv`G~xq<3(h@6~xG6%lbnHM+M^ofxk zhcjB~J-1pYBNv;xP)u)!E!oeQh-*;jZ0QgZ=5j?U*%O8gtj=6}1@5{AYG_y2f*H*> zRqTCYwQ$4UQ!FpFMh#gtQl2}$9H69S2kv~_R-#D{08@h^C{OR~DEj9sYG5JuRtHSD zlh}RE+j1Hkdv^YdF`dt-+r z3yb^gph@)p;vrY!LMSqFs1j``91G%U0m7#kHFiS?{z^_l*KjL$K7Tg4?kr~os5#F} zuqsNgrFyZCPPAxf%#fr~0@6tg<}Neb^JP2mZ|#j+R}Pj9*2<&>vf!XgP`BuEUb0b=mHR>a*#*X82HDq8i|TPO)oJsDWK+F=yj(E) zx>K@ay4KsoRbFYakeRi>)XvRhL`Bm=wYXC;AsN0I+V{B&W(K7d-#_%A)U^u_z}a7pEt)%ylq+7z* zEp;_}X`a=(Ih`E2*wh`&0C+i8kXLX0UyB|8-?8w&fb<@Ruo*0$g_(^3C^A2eR~Z?@ zY3I+~F2oyHd}n%5wyP-ZJ8l)%P>^T7L5(MDkoqeRwxjOfB85qE5MfeurVovgj)-0Ggilu9l~{@0q{ zNLo`VVz!dO*YoTH-9BbPW8Ir)mOsiKEBEBY+9<>@=G)y|(aD!n zg)8^DWpuuVam*1`CCY=X37L4;a9VjhhIAQqb8B+abtwUqrw^Gwr7-urQ$P`U!5baM zG`)Jy&R}kJx1brpF*+DB$=q{yG4`0EQc)+y_<`x8IY{Oep>g;J5CE}TP(R+om0Xi{ zM;IjqzZP08z*c^ zO+$iNdHXAuUXQX5W1251FarqnCCGuqoaHVr?SrF^)Vnio*mwhvc;6y^mV8u?fB5Yy z()p1g8}w24eK2lZ#%r?C+(Yp&*Kk7!8Ysmwy#)P+ zr)gOqfMTHZ%#)h|n#0=p5;Cmqs218?i=p8O5?{klk8pgD?*T!sL9)+;D!rRQdH$%# z^GBeR#Y2#cmLUS*fYGOgM-3bl)(QOiSitFANXm;1&TRI*(y&Z)zLk@u{-lM$>nfp+RuFO0Op*LU0w)Z~e% z9R$;G1CQ3b5*&mV4CaOE=Q|01(_%2(9<=;rbUk23Ukh=DHK#$ArQjaxcBPkXZ8U>> z?^`Dlx$`C6`Dd!!YjI1LAMl;MXEz_%f~#Oi;WqB#Qg&+OY^=6+`xzEH2*@4<_8T>G zpKGZd%+1yntgX}%3Of2d=JKllrmbmgo#I!dcf=Z9Y)G_ZK=YX)Tp%oewvOptv!jYg zzpc({&`9tXeU)ku+6_L>7R*&~KxSNc%e zRQUBPSEe)AlW$^Hlk;qCDR#%J(IanAlN)$$KR&SkJqN~rB|WZlF8^H;4f;>k`x$8aVkHL|?FkMyQ`yxH%BM;d+J1MJ*j8I5t$I3n50rT-*H9GEcm2}vn? zUF#rPs+yt(_7;6%LZLR+%LJE*hEG5R>8MoX$rYNlAHXGBJ13Pb(Jt9Q=3<3M$o7q> zR8^;aS3c_rrhDHAR}Iwx_h#!jrvMK*WA+%Ix-KY4={qR{Sj+`I@*Hg-WWlq+(|Wb;~)0tdnQFp_dQ_-cEyLI~I927_TLSgpZ(WX(R6HL z1+25Vq8--6byRa?7w-gsNEWNR5%i^sV0!DL6Q7I-Uqohz|EFbYl+#%{jqZZRUf5&|ulj%p}+5RHui>q1?Ze>j}e(~D#$ z#=mD>mlFqdjP0>=ZP?pzG|te~+0WK=ILt|ng-$7F=2H31uS?sLN0qC*!M^3Lw>4as zSrcz7q|!Wva-O|*H;-z%uBtk^&-E29e$tWEH1kU=P&0RUZ=J`9@O(+{keuBS6P=nA zm1vnyearPhuZCJoa#~760#IV*uwkREQms{UlCcSUw6qM*uePxi?VI!cKrAA)vi|bMN&AME$>MY~6$sOM1Y!gE6 zGb}}hKZR8Jb}Lr6gaoDB=4;O%J}WhnO`yK%4_U}Wd`PS@-O?I1e$3sTnL+EvD49Kt zVI<-9(3VU;i%t9%ay?FFSfNDLGR>`gC!^Wi)L=8sMz*$0OzROG|6YXW_6@MapgW{$ zB} zMHfH8P=5#=Y<$7}d!Xo7v<^GZdw%{!)5g~^wwgn=M50xOl88P=bKrMoVHe0OsLY0^WXG&ehc=$( z(e+*#EhOrjlxB@ljEoE-gao$Us<_8D;)1e5rIAI;+G`6mc7)6u4VGeD@Gl zp%Dee*+!?o(1!r^pWgfCvJ<<}#aH|%$>kMt8>Gc>Xu~ibv4QBkAws4({#*~+}*?+ZsV;W{&d@58glh2qqK6#`8 z2asiLT()3ebf&vX|>sqlm!yX;npNdZs2w|g%u0uKa@WavPr+Z!n`iqLLU)h=p#eJ zk{peJ!eE6HfhA_|sHaqKUBO+APbVRAEsjqFjA3qhFR0x$yN-BI(t1%c^#s>wP9@y4 z#kq+~pe^AQGkE0$xQ8U)gqT%m;vd5Jr{0O_IoIkgSC8!wBA4u8KHd{CXI}I^o{Xcm z$S!T1$swe#;_TJusn4Htqfv&CkPLz(pwwv)g52R0p8O2E`T^>TA&gf6LQ(30y1@oaAowdtW>qtY${H03yhFm`vuiHUdTaxwaXZ=tr zDQGgojHXndK;dbgS8PS{a$nsw`z>qco%8@b|N2q5@>kPuvY_L#!BM$k9365%N{tL9m2^}d9Xj=1=E?-hYr#*vdv=jM9bS>gEZgJX%Ikr5~KP<{fz z)oS{sxxM}F4)5-AvTfb;=1G;w_D(ys_tn`fy*~zC=4)Wa2?qGpyt`>U>t(a|h=yHC=Y$_4W0ThO4!$t#}%S z^ybUcwK*CA=ezLpz(@36r-SL2CYWc94;3MJ#(i^lz^sdt~N>FSjg6w17> zF1I|l+*kTip&eM)v?8GlT2~?(xAk1pA_~qfEqxa>y|d6BYQe|FwZGf_Vz%B{{_+Yv z49m{WR&>>K->9sf_0kfqbzD=mwzjV6kdnOUb8gz}q)+dlCw`&JmE5~4ImOzs>wdHu zyZ3}TP0)2Wly~M!Lo!ztUFBtqFE$hkMG#ANdTsy0{KJzL)H|c}OB=-?O%09282$x^ z+5l!ICZ_b)HtZr-=MDfvrnkJ*Y;Y$hC%0xA$=QPKnHj4?5J8HPckkTE>Of3?WO-3J ztgd)DYf;(93f~nu+M2yupuQR#7}(uQztWaE{PE+)zn03M)V9Ih+uH;FXB5qq_u;z6 zf)`TX%Blw?-R!U;=j`mPqoZSIS2i^MAu@L36LH+65+mHM`aWCX-Nzb?`Sxq$KYu>q z){(jrxm*zGBL2VGc&LFZdU-n99H)8MMy%)3IAiO5Hpy!{6GO0s*mR#gn*k&toLb~^ zvwn*VS5Z-sMtqzh_-J!Fx?V=3O??c-6JGCMBVGlE43%m7m#t051jW7`a{uV*FOAIu`i(*C&6T zPg&s3s$|7j*Soz&Z5Y>AUV+d5pv(WRRsZe{RK;2N37S)ygiczHPK1u|dbuH!cGl}r zE2?J_mm(g=8k4xRtQWMlb)U&+$q$dWq&luTM3%%(qFJ5zGhHk;ahs3#4=;q%nF<|KN4>`8**q?U zYWJkiGB$Q#i=0H`2@xf6lo8VrsgXKSl+n}CsWCcBZkT@*+l7mE!gJ+dk{HKEiks!? zqGjZf&ebw5aatVJC|CtAKCk05?R(p`*~`UgVzSxz)OfK7?8w%+q(7TZ4eh)5MNIAO zGzwp6n^z@I5{C<-ay6g3pW{J;H#K4j$Sk)Pf@j{@!^uTz7;v#XQ# zjc)B#)zS{KrvWUuYymImeVZV^1sq!LRpTHswnFaR%6~4pa5f&W!K}ET+Hl?T1^sI| z|CIYPUO3m@2bh(on%=K(t(yFjPkDE;sky+z^d@YQi4hL&$d7nLlPfNV?;!TqR~Vk_ zmad@364Tb&npZC-!d06ZiVJ8gKcx`y^VP~RsgFl_3qQT3*T^&iPO7HfDJMk3n)t0T>)dI7(x=N+hFp&oBBBWC?T8W-Mf(47~ z3l4Cz4;Hr5sb76G0;^)4JzlMcl?D~$W-YE{3)%`Ggj@0t=-m_@8VAHkC2IxYsB$uC}&fmC5@(*iB zPdyeC%X^v|&SQ!Di!Qq=KL-`=L<`v)7~3vAi#Gp<=Nf>hRd_GXdXHSBGi_LAniSPu zZ%UWH)4srU826vK=!(PSxU>&F0YxP%P_?W8*2~qDt4VRPC-}1~mZyNxaMEqoIb6mi zEoo?6mKvU5g+H|azEsiOc@@R-1~6OK%!>PntS7Ld_NszbnX(e)SLzytj-4clv3)BF z#5JM?^yXTJ%M(1#$EQDcHw~YAg@wK|dVYC%{Ji$QJ%5KJK+0>=XljQ#n7&M$-m4Vb zDqP*I5DqGQW24gkf=xFzSkxr*^&g7&OZ5+z1vyY(E_JVrx>;-TimTEz&J(CqG25GW z$p16d%4+TLj#;PeS(G3Dc&17%>n!iuGqT7o64$ZTNSzoU#neTUhev!$g2g{Tp| zNN$5I@(cUK4wb)?bn+cthBk|MnF|d=9W{)eH#tr)5(kHf|8s1rcwU`W?+e2-5HonK zvV&~!)nZhJ*5AR%^W|`{E2k^}1GT^ryU5rM!Q(1zzN}#2sMj24dDCc!>esW@`4U2kFyXZHa3Glb6aUc2iM3;tjMRH zh?_zQH3H+kj(oKZ_CtOjYwQbnj=Wq~qnj`7&Jg*0A{6>}>NBfO|{ZjB=eD*W`!CkykA#BTuMU4Z z+@7A%dcoDy{4MydI1feCy{LyMir?oVNj+!*j8k)s3-?93F1Pb0wljQyF=JAvO!e+jZA+|b<~ z^`__&Jm$Ii_w6&u`+|SpN7-x@T`8@6O?qdva#xZ7{N|57Ld)q$n>@GPO+In_L{tCa zZPZJehyQG|vi;^!FW?LVX+$G+_?}6UJP7<}gJi91>3klS&=p;?j4$tui18&KN)k$v z7={1yexf#(qNcVeC-{zNq-RQma^$DihkuWNCtS;IxA;9)#5+<;GHBho~W4B#w5f7=ac`NRp}^O+`N0Yy{bV}OTKN4<>Vi4y!m{m*t) zWPw=d>L8e^07v{#QfvSmg}d{2tXpmV^i}61HT}AEwh<6nb3LAyx+emJ@u3UqoQLj5*U zCnn;}scXB6B-5Si5XbC3;M6{Tixi0CWGlcHcPh&~=535pethlkkWcg>sy6|**nDY$ zo9#U03{xTCGKRmuvH-NyfW|RUpjqAuT>7cX5M24crf{G zcdaFDq{Cm4m*U{FHwCP>@{OQ%#UI_x)cP~H{~U(7vn^cWs<;UBz zuzD_Dh>#XMzLBn7z3Llsek{RculoIc|FR|%P0bTJcIXe0wX03Fn)Eiwz@Qs`*Cn`> za3?*!h-Tz~E5kSMQ(2TqFA+=i#SHA`D|a$w@jv4+BT%XeSx-xSl1|q}vd6y-of#N; z*Fl^_^q0_#?7krwzBzp7j;_o@oH#Dm(^n z`r9%XLhIH>@_Pa6UUb&K?8N(!?Bo@z*y-St`y+}uYXg}pz21o-9jm_?6a5=*QnOtJ4*|(h=rY&B3+xlXS)S^~j?nP}q&O53v!7@ewD% ztMv*}6t}`>ZU%2kYSzEF3Dt>WqBt8BU@`;^;#{#0-+887o9G?6 zJKF}v6>O@S&+Jne4Cb~RPbRw*01cimG!pY><$LLVC3Yb~Cg6Vug5A{@x-#kJ{CZ$6 zSBkz5TdJV+wOK*~YE->sNG`C&p;=xu2zK>$hQJ~@tjKLR2pB^oWcrU!7r5Ld`3%?` zhPgGXnBAXVfwnKTt2z57?J~( z{HDR)?c+tuSATL~$+ia0dw|;?GDJOKEIP0l-7@1fAX23C+UZ?1MLqvwk3eF_g5QWx ze*aSM;oVAO5$W;2O7xNXl36na;lJ{G3Lj7BRBaJ>^nGTAs75P#Z?OA#o+-W{*y}q@Jv$TzI+^CWJSN4CFK$d#ChI zWO`Y@O<5}pcCMSElm{wO5M+x$Yy> z(~aO;Ua?i-iMa2l;PRZRss=sX(vE6gN#O#OxD`49`d>0ulfC&y`qt(9UA zG%qm%U&@M?Gsyw+r&$AshDu?yc^JU;#{e@DG^tP>%wt0i4xzSgwuuWhoU)Npqvb6R!dgLFM<0? z!ld*pqrE;$-g$P*;r^`__LfRk;uK756~}}B==)fH*{E5D^NZFkZP|n|c+n9yIO@ov zWU?wsV|_L%dvo>=G!2Pn{YMhpVtL4Op4XFC%O{~yisUZukr>j3L$lL07RM8m*LZ&* zp|bXy^I(yqL!*N@Ej#L^w1&0t@qO?fdaqb3;slM?K-KSHlU%8l^3|wQNbk#opnavR z>>Y^n#zkEXhb293^j8pXHW@6%LkC~KDI;C^r&l`*i>j> z*{8?E*%IYvo3)f?5G2?s?19F{=?}F0x{lt$p@2V0X-2sk$Hm-GP88~dMg?-_%M{kS z*@ZS)?s*5{xa|5JIuVw4iKYXqZ_h0|II)r9C12ee#Wan}P`}B7I$CK5H45dO}F~QIoOj&(-G8SsqIOHJk^;QO+bOmc?S4?c`%>5@27lO|nI_Po;&SI7%@4Sh1LRjea4`mZq?s2SJT9gT;%rh;1`ZI8s zju0Ged{jiEiYNoRBC9_NPbq5yeZ-oA>2eS3w!NBXg}Frdt;qmN6@kRAs^nGS(LpuGs_UZ73br%eG|8TS{Y&dn&rlRumMn#MVp$(ddN`u)g{d>p~Js%eI(fr^PCz<4c(oZE4U;-Ca zsVZZY+rw`RMsb3osM9*ctNOMyzpNac5}fV%JR^cM%@7%KVjm0( zMErs245x!k67vaDJXsS7v%VcQ+wd$ikbZm|*|~5et~F~K`+f=25#fMvLL5N2Bgo$` zQbhI+=6KNEKx<+OG@{{VGo_?%a}v+wUig^V0A-ln{73UsLWAU*t~GIh$WF_|R{M)+ z=(p3+8538|g#~s!OpGfV1f^rkoe|Ozi(|LN?QDjmwJGzaha~*KX%}XBhR1T-Cd}S( zA6k39@2+w>=3hr|rwW>?LDvMm1D&KPQ)dc8vMfaP6^lC4Gzfx0E&W6de`Xm7ZGtOE zcknT%WB3?2Ugn8BnX=nu&&s;Xc<$yBB$s7=q$i+3V|K%eio3inMYo=__oy?ynPE2s zFU##69cx{~cZFMoTZK1mq?F~9-F8RA>+JCCG;~mU@90#9=gSG>Z?7s`>X4IJpKmCf zTM)EBS}V;c#6yBO!q6;&C4;Sr4GLzQ8|Zq6G~ttv0S^k--Rf7ns?cKinc-XNZFds rHx{h5OJ9O6?&m*y{qow`R9%Fv^V5hgJzSLxU0vZVZGXMH+bjOR55sJ~ diff --git a/content/developer/tutorials/dashboards/report_list_detail.png b/content/developer/tutorials/dashboards/report_list_detail.png deleted file mode 100644 index 62d44e92c2c94e711539639e3a5282cb02dfb22d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21006 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 T-wxm2oa^E_OVg6Gt~dS-sSA`+ diff --git a/content/developer/tutorials/dashboards/simple_dashboard.png b/content/developer/tutorials/dashboards/simple_dashboard.png deleted file mode 100644 index 9a25d81a9354058498adf1475e9fc9d62c946a50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45862 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 B2gv{c diff --git a/content/developer/tutorials/pdf_reports.rst b/content/developer/tutorials/pdf_reports.rst index acdeea0d6..391ed847e 100644 --- a/content/developer/tutorials/pdf_reports.rst +++ b/content/developer/tutorials/pdf_reports.rst @@ -50,11 +50,6 @@ Therefore, it is expected that your work tree will look something like this: ├── __init__.py └── __manifest__.py -Note that you will often see other non-QWeb and non-XML files containing "report" in their name also within -the report folder. These are unrelated to the reports covered in this tutorial and are covered in -the :doc:`dashboards` tutorial. For now you can think of them as customized views that use direct -SQL queries (sometimes referred to as SQL Views). - Don't forget to add whatever files your template and action view will be into to your ``__manifest__.py``. In this case, you will want to add the files to the ``data`` list and remember that the files listed in a manifest are loaded sequentially!