Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MIG] report_py3o: Migration to 17.0 #9

Merged
merged 119 commits into from
Oct 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
82488b1
[IMP] report_qweb_parameter: Remove warning Found deprecated directiv…
victoralmau Oct 9, 2024
4973780
[IMP] report_qweb_parameter: pre-commit
victoralmau Oct 9, 2024
ff461e7
Merge PR #935 into 17.0
OCA-git-bot Oct 9, 2024
f2bf5ed
[BOT] post-merge updates
OCA-git-bot Oct 9, 2024
07c1b55
Move to report_py3o after import from HG
lmignon Oct 3, 2016
d455f83
Add setup
lmignon Oct 3, 2016
67c6490
[FIX] View inheritance may not use attribute 'string' as a selector.
lmignon Oct 3, 2016
191b761
[IMP] New API + Short Hearder
lmignon Oct 4, 2016
2037312
Remove unicode string
lmignon Oct 4, 2016
4cd5b76
[IMP] Add the possiblity to get the template from an absolute path on…
lmignon Oct 4, 2016
c37a51b
[IMP] Allow user to use local fusion
lmignon Oct 4, 2016
a988f5d
Add a simple way to extend the parser context
lmignon Oct 4, 2016
c619e39
Remove ACL on removed model
lmignon Oct 4, 2016
a73703c
Improve filetype selection name
lmignon Oct 4, 2016
42eed0e
Fix native flag
lmignon Oct 4, 2016
07b5423
fixed missing comma in model definition
faide Oct 4, 2016
397b1a5
Add simple tests and fix call to fusion server
lmignon Oct 4, 2016
5a73512
Fix skip fusion on server when the fusion is local
lmignon Oct 4, 2016
9c4c3d1
Improve tests
lmignon Oct 4, 2016
4689ef5
Replace openerp element by odoo
lmignon Oct 4, 2016
b769d41
Small usability improvements
alexis-via Oct 4, 2016
ed6f7d1
Take into accounts most remarks of @lasley
alexis-via Oct 5, 2016
ad3f459
Replace plain SQL by orm
lmignon Oct 6, 2016
6ae479f
rename module ir_report to ir_actions_report_xml
lmignon Oct 6, 2016
040b355
Add more tests and fixes issues found by tests
lmignon Oct 6, 2016
0981b0e
[FIX] Check constrains only if report_type == 'py3o'
lmignon Oct 12, 2016
d53473a
report_py3o: full installation procedure in README
alexis-via Oct 14, 2016
7202433
Port report_py3o to Odoo v10
alexis-via Oct 14, 2016
03426af
Update version numbers
alexis-via Oct 14, 2016
53ccc43
PEP8 fix
alexis-via Oct 14, 2016
72511dc
Update README
alexis-via Nov 4, 2016
fdfb2e4
FIX double dot in filename
alexis-via Dec 19, 2016
b20c5b7
Add access to report_xml object in report
alexis-via Dec 19, 2016
8e7df49
FIX Adapt test suite to my recent commit to avoid double dot on filen…
alexis-via Dec 20, 2016
85a3bba
[IMP] Escape 'False' when rendering value
lmignon Nov 16, 2016
f2b6137
[IMP] Replace old style parser by TransientModel
lmignon Dec 17, 2016
10e17cd
[FIX] imports
Dec 22, 2016
6dcb60a
[IMP] Minimizes memory consumption
lmignon Dec 23, 2016
1f7d06e
* travis.yml
Jan 9, 2017
4ab5fbb
Update and improve README instructions to setup py3o
alexis-via Jan 25, 2017
7730216
[IMP] Allow to override/extend the way we get the fallback template
lmignon Jan 25, 2017
0b64850
[FIX] report_py3o: fix exception when report must be saved as attache…
lmignon Feb 23, 2017
54fcad5
OCA Transbot updated translations from Transifex
oca-transbot Feb 25, 2017
494365a
[FIX] delete PDF invoice attachment on invoice back to draft (native …
alexis-via Mar 2, 2017
07f423b
[IMP] report_py3o: update authors and contributors
lmignon Mar 6, 2017
1d14dca
OCA Transbot updated translations from Transifex
oca-transbot Mar 11, 2017
9732154
[IMP] report_py3o: prevent injections when retrieving the template fr…
lmignon Mar 8, 2017
75ecaad
OCA Transbot updated translations from Transifex
oca-transbot Mar 18, 2017
5766e79
report_py3o: bump version following last merge
sbidoul Mar 22, 2017
8ca97ef
Fix py3o freeze when using server fusion
guewen Apr 3, 2017
9946701
Pass option for escaping False values to server
guewen Apr 5, 2017
5674a4a
Add option py3o_multi_in_one for Py3o reports
alexis-via Apr 12, 2017
53a534e
OCA Transbot updated translations from Transifex
oca-transbot May 1, 2017
f6ba463
[FIX] report_py3o: must return the path to the report
lmignon May 30, 2017
43241ed
[IMP] report_py3o: Take into account print_report_name
lmignon Feb 17, 2017
c52ffbb
OCA Transbot updated translations from Transifex
oca-transbot Jun 3, 2017
fb8e38e
[IMP] report_py3o: Allows to interpret \n and \t in texts, cleans htm…
omar7r Oct 31, 2017
d25302e
[FIX] Deletes an unnecessary function call
omar7r Nov 7, 2017
1db9a1b
[FIX] report_py3o: Removes api.one
omar7r Nov 9, 2017
6aceab5
[FIX] report_py3o: Import new dependencies in try...except
omar7r Nov 9, 2017
5eb7ba7
[UPD] report_py3o: Bump version
omar7r Nov 10, 2017
66a4883
OCA Transbot updated translations from Transifex
oca-transbot Nov 25, 2017
4a02ef7
[RFR] split off the fusion server to its own module
hbrunn Dec 17, 2017
acfdc2a
Improve README.rst for report_py3o* modules
alexis-via Jan 10, 2018
cdfd4a3
[ADD] migration script to install report_py3o_fusion_server on upgrades
hbrunn Jan 11, 2018
ae73e44
OCA Transbot updated translations from Transifex
oca-transbot Jan 16, 2018
f5e6bff
[FIX] fallback to libreoffice conversion when no server is configured
hbrunn Mar 21, 2018
9fd32f7
[FIX] report_py3o: Bump version number
pedrobaeza Mar 26, 2018
e348775
[FIX]report_py3o: Escape correctly html characters.
jesusVMayor Dec 19, 2017
e0df16a
[IMP] check for template data, not for the id
hbrunn Apr 16, 2018
b023e69
[FIX] If this is not a py3o report, do nothing at all. In some cases …
SimoRubi May 2, 2018
79225b4
report_py3o: mention formatLang in README
sbidoul May 16, 2018
ef391ad
report_py3o_fusion_server: Add support for PDF Export options of libr…
alexis-via Apr 24, 2018
f0ccf68
[UPD] Update report_py3o.pot
oca-travis Jun 23, 2018
ce7de05
Translated using Weblate (Français)
kryskool Jul 18, 2018
d06c112
[MIG] report_py3o, report_py3o_fusion_server: Migration to 12.0
lmignon Nov 26, 2018
b074f93
[IMP] report_py2o: cleanup js
lmignon Nov 27, 2018
c04e454
[12.0][MIG] improvement py3o_report_extender
Nov 29, 2018
53d93bf
Update i18n
sbejaoui Dec 4, 2018
7b6e346
[FIX] report_py3o: Use the right naming convention for the render method
lmignon Jan 8, 2019
8e6b5ba
[IMP] report_py3o: remove obsolete methods
lmignon Jan 8, 2019
74677a9
[IMP] report_py3o: Document new methods available into the parser con…
lmignon Jan 31, 2019
35932b1
[FIX] report_py3o: Add missing method _merge_pdf.
lmignon Jan 31, 2019
a3f6430
[IMP][FIX] py3o_report, py3o_report_fusion_server: Compute the availa…
lmignon Feb 1, 2019
e4ee9bf
[FIX] report_py3o: Add missing 'user' and 'lang' into the parser context
lmignon Feb 1, 2019
6f71742
[IMP] py3o_report: Allow to specify the lang when calling o_format_lang
lmignon Feb 1, 2019
8a34da9
[FIX] report_py3o: Access to ir.config_parameter with sudo
lmignon Feb 5, 2019
f6e26c2
[UPD] Update report_py3o.pot
oca-travis Mar 12, 2019
6a15385
Update translation files
oca-transbot Mar 17, 2019
46b24be
[UPD] Update report_py3o.pot
oca-travis Jun 12, 2019
0151dee
Update translation files
oca-transbot Jun 16, 2019
9666e84
Update README for report_py3o and report_py3o_fusion_server (#306)
alexis-via Jul 18, 2019
410c3cf
[FIX] report_py3o readme structure
sbidoul Jul 31, 2019
db76e15
[UPD] README.rst
OCA-git-bot Jul 31, 2019
c2ab898
[IMP] report_py3o, report_py3o_fusion_server: black, isort
lmignon Nov 19, 2019
cd8c1b3
[MIG] report_py3o, report_py3o_fusion_server: Migration to 13.0
lmignon Nov 19, 2019
e9f3185
Make sure value is always set for computed fields
dupski Oct 28, 2019
f5f7f38
[12.0][FIX] - report_py3o: run libreoffice in an isolated user instal…
sbejaoui Jan 23, 2020
de8632c
[FIX] report_py3o: prettier xml after merge with master
lmignon May 12, 2020
e44729d
[FIX] make prettier happy
sbidoul May 13, 2020
2eaa84a
[UPD] Update report_py3o.pot
oca-travis Jun 17, 2020
c3f6f02
[UPD] README.rst
OCA-git-bot Jun 18, 2020
488ccd5
Update translation files
oca-transbot Jun 18, 2020
ec8613b
Update translation files
oca-transbot Aug 16, 2020
a1f76b4
[14.0][MIG] report_py3o: Migration to 14.0
elmeriniemela Oct 21, 2020
bed1f57
Update report_py3o/models/ir_actions_report.py
elmeriniemela Nov 7, 2020
3ac5974
[MIG] Use safe_eval wrapped time module. Fix deprecation warnings.
elmeriniemela Feb 2, 2021
b3f6895
[IMP] Add ability to include properly formatted datetime field in a r…
elmeriniemela Nov 5, 2021
22c778d
[IMP] Workaround for genshi DeprecationWarning that makes runbot buil…
elmeriniemela Nov 7, 2021
aa83207
[IMP] Cleanup unnecessary imports
elmeriniemela Nov 7, 2021
4a47c74
[IMP] Remove except of IOError as its an alias to OSError in python3
elmeriniemela Nov 7, 2021
1e5e1b9
run pre-commit
leemannd Nov 23, 2021
f97e77f
[UPD] Update report_py3o.pot
oca-travis Dec 9, 2021
58ee8bc
[UPD] README.rst
OCA-git-bot Dec 9, 2021
d60fc26
[MIG] report_py3o: Migration to 15.0
phuctranfxvn May 15, 2022
079b020
[MIG] report_py3o to v16
alexis-via Dec 12, 2022
9f31b51
[UPD] Update report_py3o.pot
Aug 23, 2023
265ceb3
[UPD] README.rst
OCA-git-bot Aug 23, 2023
35d2b72
[MIG] report_py3o: Migration to 17.0
psugne Oct 31, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ addon | version | maintainers | summary
[report_async](report_async/) | 17.0.1.0.0 | [![kittiu](https://github.com/kittiu.png?size=30px)](https://github.com/kittiu) | Central place to run reports live or async
[report_layout_config](report_layout_config/) | 17.0.1.0.0 | | Add possibility to easily modify the global report layout
[report_qweb_element_page_visibility](report_qweb_element_page_visibility/) | 17.0.1.0.0 | | Report Qweb Element Page Visibility
[report_qweb_parameter](report_qweb_parameter/) | 17.0.1.0.0 | | Add new parameters for qweb templates in order to reduce field length and check minimal length
[report_qweb_parameter](report_qweb_parameter/) | 17.0.1.0.1 | | Add new parameters for qweb templates in order to reduce field length and check minimal length
[report_substitute](report_substitute/) | 17.0.1.0.0 | [![sbejaoui](https://github.com/sbejaoui.png?size=30px)](https://github.com/sbejaoui) | This module allows to create substitution rules for report actions.
[report_wkhtmltopdf_param](report_wkhtmltopdf_param/) | 17.0.1.0.0 | | Add new parameters for a paper format to be used by wkhtmltopdf command as arguments.
[report_xlsx](report_xlsx/) | 17.0.1.0.1 | | Base module to create xlsx report
Expand Down
661 changes: 661 additions & 0 deletions report_py3o/LICENSE

Large diffs are not rendered by default.

304 changes: 304 additions & 0 deletions report_py3o/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,304 @@
==================
Py3o Report Engine
==================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:6475c7e18340a01f1070b14e0c403646da2a1e1381b73969ba16b91c163d4db7
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github
:target: https://github.com/OCA/reporting-engine/tree/17.0/report_py3o
:alt: OCA/reporting-engine
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/reporting-engine-17-0/reporting-engine-17-0-report_py3o
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=17.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

The py3o reporting engine is a reporting engine for Odoo based on
`Libreoffice <http://www.libreoffice.org/>`__:

- the report is created with Libreoffice (ODT or ODS),
- the report is stored on the server in OpenDocument format (.odt or
.ods file)
- the report is sent to the user in OpenDocument format or in any output
format supported by Libreoffice (PDF, HTML, DOC, DOCX, Docbook, XLS,
etc.)

The key advantages of a Libreoffice based reporting engine are:

- no need to be a developer to create or modify a report: the report is
created and modified with Libreoffice. So this reporting engine has a
full WYSIWYG report development tool!
- For a PDF report in A4/Letter format, it's easier to develop it with a
tool such as Libreoffice that is designed to create A4/Letter
documents than to develop it in HTML/CSS, also some print
peculiarities (backgrounds, margin boxes) are not very well supported
by the HTML/CSS based solutions.
- If you want your users to be able to modify the document after its
generation by Odoo, just configure the document with ODT output (or
DOC or DOCX) and the user will be able to modify the document with
Libreoffice (or Word) after its generation by Odoo.
- Easy development of spreadsheet reports in ODS format (XLS output
possible).

This module *report_py3o* is the base module for the Py3o reporting
engine. If used alone, it will spawn a libreoffice process for each ODT
to PDF (or ODT to DOCX, ..) document conversion. This is slow and can
become a problem if you have a lot of reports to convert from ODT to
another format. In this case, you should consider the additionnal module
*report_py3o_fusion_server* which is designed to work with a libreoffice
daemon. With *report_py3o_fusion_server*, the technical environnement is
more complex to setup because you have to install additionnal software
components and run 2 daemons, but you have much better performances and
you can configure the libreoffice PDF export options in Odoo (allows to
generate PDF forms, PDF/A documents, password-protected PDFs,
watermarked PDFs, etc.).

This reporting engine is an alternative to
`Aeroo <https://github.com/aeroo-community/aeroo_reports>`__: these two
reporting engines have similar features but their implementation is
entirely different. You cannot use aeroo templates as drop in
replacement though, you'll have to change a few details.

**Table of contents**

.. contents::
:local:

Installation
============

Install the required python libs:

::

pip install py3o.template
pip install py3o.formats

To allow the conversion of ODT or ODS reports to other formats (PDF,
DOC, DOCX, etc.), install libreoffice:

::

apt-get --no-install-recommends install libreoffice

Configuration
=============

For example, to replace the native invoice report by a custom py3o
report, add the following XML file in your custom module:

::

<?xml version="1.0" encoding="utf-8"?>
<odoo>

<record id="account.account_invoices" model="ir.actions.report">
<field name="report_type">py3o</field>
<field name="py3o_filetype">odt</field>
<field name="module">my_custom_module_base</field>
<field name="py3o_template_fallback">report/account_invoice.odt</field>
</record>

</odoo>

where *my_custom_module_base* is the name of the custom Odoo module. In
this example, the invoice ODT file is located in
*my_custom_module_base/report/account_invoice.odt*.

It's also possible to reference a template located in a trusted path of
your Odoo server. In this case you must let the *module* entry empty and
specify the path to the template as *py3o_template_fallback*.

::

<?xml version="1.0" encoding="utf-8"?>
<odoo>

<record id="account.account_invoices" model="ir.actions.report">
<field name="report_type">py3o</field>
<field name="py3o_filetype">odt</field>
<field name="py3o_template_fallback">/odoo/templates/py3o/report/account_invoice.odt</field>
</record>

</odoo>

Moreover, you must also modify the Odoo server configuration file to
declare the allowed root directory for your py3o templates. Only
templates located into this directory can be loaded by py3o report.

::

[options]
...

[report_py3o]
root_tmpl_path=/odoo/templates/py3o

If you want an invoice in PDF format instead of ODT format, the XML file
should look like:

::

<?xml version="1.0" encoding="utf-8"?>
<odoo>

<record id="account.account_invoices" model="ir.actions.report">
<field name="report_type">py3o</field>
<field name="py3o_filetype">pdf</field>
<field name="module">my_custom_module_base</field>
<field name="py3o_template_fallback">report/account_invoice.odt</field>
</record>

</odoo>

If you want to add a new py3o PDF report (and not replace a native
report), the XML file should look like this:

::

<?xml version="1.0" encoding="utf-8"?>
<odoo>

<record id="partner_summary_report" model="ir.actions.report">
<field name="name">Partner Summary</field>
<field name="model">res.partner</field>
<field name="report_name">res.partner.summary</field>
<field name="report_type">py3o</field>
<field name="py3o_filetype">pdf</field>
<field name="module">my_custom_module_base</field>
<field name="py3o_template_fallback">report/partner_summary.odt</field>
<!-- Add entry in "Print" drop-down list -->
<field name="binding_type">report</field>
<field name="binding_model_id" ref="base.model_res_partner"/>
</record>

</odoo>

Configuration parameters
------------------------

| py3o.conversion_command
| The command to be used to run the conversion, ``libreoffice`` by
default. If you change this, whatever you set here must accept the
parameters ``--headless --convert-to $ext $file`` and put the
resulting file into ``$file``'s directory with extension ``$ext``. The
command will be started in ``$file``'s directory.

Usage
=====

The templating language is `extensively
documented <http://py3otemplate.readthedocs.io/en/latest/templating.html>`__,
the records are exposed in libreoffice as ``objects``, on which you can
also call functions.

Available functions and objects
-------------------------------

| user
| Browse record of current user

| lang
| The user's company's language as string (ISO code)

| b64decode
| ``base64.b64decode``

| format_multiline_value(string)
| Generate the ODF equivalent of ``<br/>`` and ``&nbsp;`` for multiline
fields (ODF is XML internally, so those would be skipped otherwise)

| html_sanitize(string)
| Sanitize HTML string

| time
| Python's ``time`` module

| display_address(partner)
| Return a formatted string of the partner's address

| o_format_lang(value, lang_code=False, digits=None, grouping=True,
monetary=False, dp=False, currency_obj=False, no_break_space=True)
| Return a formatted numeric or monetary value according to the context
language and timezone

| o_format_date(value, lang_code=False, date_format=False)
| Return a formatted date or time value according to the context
language and timezone

Sample report templates
-----------------------

Sample py3o report templates for the main Odoo native reports (invoice,
sale order, purchase order, picking, etc.) are available on the Github
project
`odoo-py3o-report-templates <https://github.com/akretion/odoo-py3o-report-templates>`__.

Known issues / Roadmap
======================

- generate barcode ?
- add more detailed example in demo file to showcase features
- add migration guide aeroo -> py3o

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/reporting-engine/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/reporting-engine/issues/new?body=module:%20report_py3o%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* XCG Consulting
* ACSONE SA/NV

Contributors
------------

- Florent Aide (`XCG Consulting <http://odoo.consulting/>`__)
- Laurent Mignon <laurent.mignon@acsone.eu>,
- Alexis de Lattre <alexis.delattre@akretion.com>,
- Guewen Baconnier <guewen.baconnier@camptocamp.com>
- Omar Castiñeira <omar@comunitea.com>
- Holger Brunn <hbrunn@therp.nl>
- Phuc Tran Thanh <phuc@trobz.com>

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/reporting-engine <https://github.com/OCA/reporting-engine/tree/17.0/report_py3o>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 2 additions & 0 deletions report_py3o/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from . import controllers
29 changes: 29 additions & 0 deletions report_py3o/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Copyright 2013 XCG Consulting (http://odoo.consulting)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Py3o Report Engine",
"summary": "Reporting engine based on Libreoffice (ODT -> ODT, "
"ODT -> PDF, ODT -> DOC, ODT -> DOCX, ODS -> ODS, etc.)",
"version": "17.0.1.0.0",
"category": "Reporting",
"license": "AGPL-3",
"author": "XCG Consulting, ACSONE SA/NV, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/reporting-engine",
"depends": ["web"],
"external_dependencies": {
"python": ["py3o.template", "py3o.formats"],
"bin": ["libreoffice"],
},
"assets": {
"web.assets_backend": [
"report_py3o/static/src/js/py3oactionservice.esm.js",
],
},
"data": [
"security/ir.model.access.csv",
"views/py3o_template.xml",
"views/ir_actions_report.xml",
],
"demo": ["demo/report_py3o.xml"],
"installable": True,
}
1 change: 1 addition & 0 deletions report_py3o/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import main
Loading
Loading