Commit Graph
124 Commits
Author SHA1 Message Date
Christophe Matthieu d159aec83d [IMP] qweb: remove decode('utf-8') in report because qweb return unicode 2016-06-14 09:46:26 +02:00
Christophe Matthieu 7ede9bcb2d [IMP] base ir.qweb: compile template (and use ast) to improve rendering speed
* The compiled templates are cached per user, lang, inherit context values
* ir.ui.fields: attributes method return an dict, and record_to_html return only the content value of the field
* all rendered text use build_text and all attributes use build_attribute
* t-esc-options is removed and replace by format_value method
* AssetsBundle receive the list files and remains
2016-06-14 09:46:25 +02:00
Mohammed Shekha da3d2fb1dc [IMP] report: Printed Report names customization
PURPOSE
=======

I've seen this new improvement regarding the naming of the printed reports:
https://www.odoo.com/web?#id=10870&view_type=form&model=project.task&menu_id=3942&action=327

This makes the report have the pdf name being the name instead of the report_name of
the ir.actions.report.xml, which is already an improvement.

But why don't we allow the users to have their own naming conventions?
I mean, we could allow our client to create and name their pdf the way they want, as
they do regarding the attachment.

Not only when it's about saving it as an attachment on the record, but also when downloading
directly the pdf, such that the modification in the previous screenshot, would give the following
result when downloaded:

People need to have their pdf named automatically according to a convention. When you print 10 sales
order during an hour, you don't want to get lost in having the following:
Devis / Commande.pdf
Devis / Commande(1).pdf
Devis / Commande(2).pdf
Devis / Commande(3).pdf
Devis / Commande(4).pdf
Devis / Commande(5).pdf
Devis / Commande(6).pdf
Devis / Commande(7).pdf

especially when those are for different partners.
2016-05-27 09:44:01 +02:00
Christophe Simonis e4500d06fc [MERGE] forward port of branch saas-10 up to 57944db 2016-05-26 16:55:37 +02:00
Christophe Simonis 44fd6a55f3 [MERGE] forward port of branch saas-9 up to 413ba94 2016-05-26 14:10:55 +02:00
Christophe Simonis 413ba9445c [MERGE] forward port of branch 9.0 up to 24eebbd 2016-05-26 14:06:36 +02:00
Christophe Matthieu fe348e280d [FIX] report: some Wkhtmltopdf installation can return an empty version 2016-05-26 08:02:14 +02:00
xmo-odoo 6d73087d96 [FIX] report: don't hide errors in custom reports
If a custom report's render_html raises a KeyError for some
reason, Report.get_html would swallow the exception and fallback
on generic HTML rendering, usually blowing up with unfathomable
errors of missing rendering context data.

Check if a custom report object exists instead of waiting for a
KeyError.
2016-05-13 17:28:19 +02:00
Christophe Simonis 6c8141a1df [MERGE] forward port of branch saas-10 up to 2483327 2016-04-01 16:15:35 +02:00
Christophe Simonis ddb0fb2739 [MERGE] forward port of branch saas-9 up to 59d3f63 2016-03-24 16:53:45 +01:00
Raphael Collet 4ddc323139 [FIX] base: fix and complete migration of base/ir
- add or fix decorators on methods
- fix most compute methods (wrong dependencies)
- revert changes in `eval_context` of `ir.actions`
- various code simplifications and improvements
- migrate methods that were not
- ir_qweb: modify `QWebContext` to take an environment instead of `cr`, `uid`, `context`
- ir_qweb: convert `AssetsBundle` to use new API `env`
- ir_ui_view: use decorator `multi` on method `read_combined`
- ir_ui_view: ensure that method `render` is never called with an xml_id
- ir_ui_view: factor out part of the `ormcache` key of method `_read_template`
2016-03-21 13:46:44 +01:00
Denis Ledoux 6e09293b7d [MERGE] forward port of branch 9.0 up to 8e69043 2016-03-11 11:42:43 +01:00
Christophe Simonis e46f65ab26 [MERGE] forward port of branch saas-6 up to 62fc257 2016-03-04 15:03:39 +01:00
Christophe Simonis 62fc2571c0 [MERGE] forward port of branch 8.0 up to 40fdb84 2016-03-04 14:33:37 +01:00
Denis Ledoux 14282f1659 [FIX] report, website_report: barcode widget
Up to this revision, barcodes set in reports are generated
using the controller `/report/barcode`,
using a `img` HTML tag, e.g. (from `report_location_barcode`)
```
<img t-if="not o.loc_barcode"
     t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s'
     % ('Code128', o.name, 600, 100)" style="width:300px;height:50px"/>
``

This `/report/barcode` route is set as `auth='user'`, meaning
the route can only be accessed by signed in users.

When wkhtmltopdf prints a report containing such a barcode,
it calls this `report/barcode` route, making sure to pass
the request session in the cookies, so wkhtmltopdf
uses the same session than the one of the user. This is
needed, as only users can access this `report/barcode/` route.

This session is passed in `report.py`, in the method
`_run_wkhtmltopdf`, thanks to the --cookie wkhtmltopdf
parameter.

Nevertheless, if a report is printed through the website
front-end, as public (without a signed in user), the request
session is not associated to a signed in user, and therefore
the route `/report/barcode` refuses the access / redirects
to the login, making it impossible to print a report
containing a barcode without being signed in. This even
if the report is printed as `sudo` through a controller
(as this is the session of the not signed in user which is passed,
not a session associated to `sudo).

Fixes #10621
opw-667797
2016-03-03 13:51:44 +01:00
Christophe Simonis 9a805c90ed [MERGE] forward port of branch saas-9 up to d70fde0 2016-02-10 18:40:56 +01:00
Christophe Simonis cab5c480e2 [MERGE] forward port of branch 9.0 up to f7432ef 2016-02-10 18:33:01 +01:00
Christophe Simonis f7432efb95 [MERGE] forward port of branch saas-6 up to 07d7147 2016-02-10 18:17:21 +01:00
Christophe Simonis 07d7147846 [MERGE] forward port of branch 8.0 up to cdf21eb 2016-02-10 18:03:42 +01:00
Raphael Collet 5763c32a6d [FIX] addons: fix usage of decorators api.v7/api.v8
Specifically, when one API implementation calls the other one, it has to call
the method *from the same class*.  Otherwise, overriding the method may result
in an infinite recursion.  Consider:

    class A(Model):
        _name = 'stuff'

        @api.v8
        def foo(self):
            return 42

        @api.v7
        def foo(self, cr, uid, context=None):
            return self.browse(cr, uid, [], context).foo()

    class B(Model):
        _inherit = 'stuff'

        def foo(self, cr, uid, context=None):
            return super(B, self).foo(cr, uid, context=context) + 1

and now call: `env['stuff'].foo()`.  This invokes `B.foo` (new-API), which
calls `B.foo` (old-API), which calls `A.foo` (old-API), which calls `B.foo`
(new-API) instead of `A.foo`!

This issue would not be present if old-API `A.foo` was defined as:

        @api.v7
        def foo(self, cr, uid, context=None):
            return A.foo(self.browse(cr, uid, [], context))
2016-02-09 10:01:43 +01:00
Christophe Simonis c5a22592df [MERGE] forward port of branch saas-9 up to 4852d60 2016-01-07 18:26:42 +01:00
Lionel Sausin 66e6a7ce22 [FIX] report: translate report name
As the report are downloaded from a controller, the context of the
webclient is lost. We chose to use `context_get` to get back one
instead of serializing the context trough the url.
2016-01-07 13:39:07 +01:00
Christophe Simonis 31ce19bd7c [MERGE] forward port of branch 9.0 up to 97e87a4 2016-01-05 15:51:49 +01:00
app ae9cd5a221 [FIX] report: fetch user with context
When rendering QWeb reports, the user is being browsed without the
context, which means that any translatable field being accessed
through it will be in English.
2015-12-29 11:22:12 +01:00
Yenthe 9b5311e0c9 [FIX] report: typo in warning 2015-12-24 15:59:21 +01:00
Simon Lejeune 58ae39945a [FIX] ir_qweb: assetsbundle: commit the writes in ir.attachment
rev 6327cda0a tried to workaround the fact that the assets bundle were
unreadable when they are created in the same request by opening multiple
cursors and commiting the writes in ir.attachment. Sadly, this strategy
introduces sometimes hard to reproduce and hard to understand deadlocks
when regenerating the assets. This commit tries a ~safer strategy by not
opening multiple cursors but commiting the writes in ir.attachment when
a magic key is in the context.
2015-10-14 17:42:19 +02:00
Simon Lejeune 2fa34fcfef [REF] report: remove css parsing from get_pdf
Useless now that rev f26988c allows the use of asset.
Also, it was partly used to retrieve the content of the
`report.style` template that was removed by rev c9492f8.

The preferred way to add local style and stylesheets is to add them
directly in the assets.
2015-09-28 18:17:16 +02:00
Simon Lejeune 2e16296099 [REF] base, report: preview internal/external qweb reports
Added two dummy reports to print an empty internal and external report
and added direct link to edit header/footers template in the form view
(in technical features) for convenience.

Also moved the 'preview rml report' under the rml configuration and
tried to make the company form as clean as possible but i think it's
failed.
2015-09-28 14:35:22 +02:00
Simon Lejeune 0e304bf77e [HACK] report: return html when a pdf is requested with a test cursor 2015-09-28 14:32:31 +02:00
pvy b4ba44316d [FIX] report: save_in_attachment needs to be converted to an empty dictionnary if it's equal to none
As _run_wkhtmltopdf() is also called in the account_reports module
2015-08-31 13:37:09 +02:00
Christophe Simonis edeceba7df [MERGE] forward port of branch saas-6 up to 7a768a4
Due to `sale` rewrite (94716a3f14),
the commit 503820acb6 has been partially
ignored (in sale.order.line) and will be rewritten later using new-api.
2015-08-28 15:07:16 +02:00
Christophe Simonis ebedb92c73 [FIX] report: only set --viewport-size for some reports
viewport-size was add by 2254a97 (and changed by 0ea94b4) to force
wkhtmltopdf to use `col-md-*` bootstrap css classes. As this argument
change the `window` size and not the screen size, this lead to smaller
fonts and overflow issues in reports.
Only change it for reports that need it.

Closes #7882
2015-08-26 12:08:18 +02:00
Christophe Simonis 73e652818b [MERGE] forward port of branch saas-6 up to 8d95f6d 2015-08-15 16:57:35 +02:00
Jeremy Kersten 0ea94b4b5a [FIX] report: manage landscape view port for wkhtml
Bug introduced by commit 2254a97

Fix #7960
2015-08-11 13:58:04 +02:00
Christophe Simonis 2cf91d16a5 [MERGE] forward port of branch saas-6 up to 63e92cb 2015-07-22 16:17:54 +02:00
Yannick Tivisse 09affe7cdf [IMP] Replace translate_doc method by t-lang attribute as this method is deprecated
now that we have a cleaner system to switch translation when calling a qweb template.
      Update the docstring too.

  Replace :
    <t t-foreach="doc_ids" t-as="doc_id">
    <t t-raw="translate_doc(doc_id, doc_model, 'partner_id.lang', account.report_invoice_document')"/>
    </t>
  By :
    <t t-foreach="doc_ids" t-as="doc_id">
    <t t-call="'account.report_invoice_document" t-lang="doc_id.partner_id.lang"/>µ
    </t>

  Impacted modules : acccount, purchase, report_intrastat.
2015-07-17 14:48:41 +02:00
Christophe Matthieu c9492f8904 [IMP] report: adapt report to use web_editor and remove website_report 2015-07-10 17:00:11 +02:00
Jeremy Kersten 2254a970d4 [FIX] report: use hardcoded viewport in wkhtmltopdf to use col-md-* Bootstrap
Without this, wkhtmltopdf, don't use media query from bootstrap and so respect
only col-xs-* class (xs by default because no media query).

Viewport from wkhtmltopdf is not really respected, so 1024x768 or 1920x768 will
not change the real view port, but only use the right media query.
2015-07-10 16:09:32 +02:00
Olivier Dony 0bd4545348 [LEGAL] Use global LICENSE/COPYRIGHT files, remove boilerplate text
- Preserved explicit 3rd-party copyright notices
- Explicit boilerplate should not be necessary - copyright law applies
  automatically in all countries thanks to Berne Convention + WTO rules,
  and a reference to the applicable license is clear enough.
2015-06-02 03:16:04 +02:00
Christophe Simonis fe2b5f35a4 [MERGE] forward port of branch saas-6 up to bf1e999 2015-05-28 14:27:38 +02:00
Christophe Simonis 14a7d52307 [MERGE] forward port of branch 8.0 up to 327e471 2015-05-21 14:50:39 +02:00
Denis Ledoux 453b373a68 [FIX] report: datetime already imported, differently
This rev. is related to 439cdb6871.

The module datetime was already available in the reports,
and it was the entire datetime module that was imported,
not just the class.

This rev. is not recompatible with 439cdb6871,
but there is no other choice, since other existing
reports might already expected the datetime module
and not the class

opw-640299
2015-05-20 12:19:29 +02:00
Christophe Simonis 4a0241d6f6 [MERGE] forward port of branch 8.0 up to f722254 2015-05-18 17:35:24 +02:00
Denis Ledoux 439cdb6871 [FIX] report: print time in user timezone
In reports calling the internal headers layout,
e.g. the general ledger,
the print time was displayed in UTC,
while it should be in user tz.

closes #3341
opw-612043
2015-05-18 12:44:36 +02:00
qdp-odoo c04065abd8 [IMP] accounting v9. Yeeeeaah 2015-05-05 17:28:04 +02:00
Christophe Simonis 109dae2efa [MERGE] forward port of branch 8.0 up to d4f41a1 2015-02-26 18:56:26 +01:00
Denis Ledoux 22606c8905 [FIX] report: abstract reports default lang
In ir_ui_view.py, in method render (line 132 atm),
the values passed to the rendering engine is a merge of the context
and the values.

Therefore, if at this place, the language is rightly set in the context,
the report lang will be as well in the values.

In abstract_report.py, the values passed to the render method is the
wrapped report localcontext in which are added some key/values
(docs, doc_ids, doc_model).
By default, the lang in the localcontext is False
See __init__ method of rml_parse class in report_sxw.py.
If setLang method is not called, the lang in the localcontext remains False.

In this rev., we avoid to overwrite the lang from the context by the lang
of the localcontext if this one is False, so the lang of the report is set
with the current context lang.

Forcing the lang of the report to False had as side-effect to prevent the
editing of report using the website editor(e.g. playslip_report)

opw-628720
2015-02-24 17:42:25 +01:00
Christophe Simonis 61483e1a25 [MERGE] forward port of branch 8.0 up to 9333c62 2015-02-19 17:32:31 +01:00
Denis Ledoux 0167acbb52 [FIX] report : translation of report using website editor
In the website editor, the translations are loaded using
the route 'get_view_translations', which returns the translations
of the templates loaded by the website (t-call calls)

The thing is, report templates use the 'translate_doc' method
to actually load the report, translated in the partner language,
and the templates loaded by this method are not seen by the website,
therefore, when calling 'get_view_translations', those report
templates were just ignored, thus their translations are not loaded.

This rev. injects the templates loaded with translate_doc
when rendering the report into the method 'customize_template_get'
(which is used by 'get_view_translations' to retrieve the loaded templates).

The translations of the reports are therefore now loaded corretly when
hitting the "translate" button in the website editor for reports.

Besides, this rev. has as (good) side-effect to add the template,
in the template selection input when editing using the HTML editor.

opw-620713
2015-02-18 16:21:42 +01:00
Goffin Simon 0fd773a486 [IMP] Cleanup and refactoring of exception handling
Unify and refactor exception handling in framework and addons.

The generic `except_osv` is now deprecated, and replaced by more specialized exception subtypes:
 - `UserError` (renamed from Warning, as it conflicts with the built-in `Warning`) raised when a non-technical error occurs during a business operation. It could be a missing information in the data provided by the user, or a misconfiguration.
 - `AccessError`: raised when any operation is denied because the user conducting it does not have the required access rights.
 - `AccessDenied`: raised when an operation that requires authenticated access is attempted via an unauthenticated request.
 - `MissingError`: raised when an operation is attempted on a record that does not exist.
 - `ValidationError`: raised when an operation violates a SQL or Python constraint.
 - All other exceptions are internal errors due to a system problem or bug, and raised untouched to the client-side, which should display a traceback.

All exceptions take a single message argument.

The `test_exceptions` module has been updated to showcase both new and old (deprecated) exceptions.

A great many old `except_osv` had a useless title with "Error!" or "Warning", those have been removed, as this is handled by the client-side widget that displays the messages.

This commit introduces a more consistent policy for logging errors and warnings:
 - All messages that do not require administrator attention should be logged at INFO level or lower. This includes all errors that are notified to the user in a friendly manner, even for access right problems or validation errors during business operations.
 - All messages that indicate a likely misconfiguration or malicious use by the users should be logged at WARNING level, as they typically require administrator attention.
 - All other unhandled internal errors cannot typically be handled by the user and should be logged at ERROR or higher level, as they require immediate administrator attention.
2015-01-16 17:15:18 +01:00