QWeb Jelentések¶
A jelentések HTML/QWeb formátumban íródnak, hasonlóan az Odoo webhely nézeteihez. Használhatja a szokásos QWeb vezérlési eszközöket. Maga a PDF renderelés a wkhtmltopdf által történik.
A jelentéseket egy jelentés művelet használatával deklarálják, és egy Jelentés sablon a művelethez.
Ha hasznos vagy szükséges, megadható egy Papírformátum a jelentéshez.
Jelentés sablon¶
A jelentés sablonok mindig a következő változókat biztosítják:
timehivatkozás a
timemodulra a Python standard könyvtárbóluserres.userrekord a jelentést nyomtató felhasználóhozres_companyrekord az aktuális
usercégérőlwebsiteaz aktuális weboldal objektum, ha van (ez az elem jelen lehet, de
None)web_base_urla webszerver alap URL-je
context_timestampegy függvény, amely
datetime.datetimetípusú objektumot vesz át UTC-ben1 és átalakítja a jelentést nyomtató felhasználó időzónájába
Minimálisan életképes sablon¶
Egy minimális sablon így nézne ki:
<template id="report_invoice">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="web.external_layout">
<div class="page">
<h2>Report title</h2>
<p>This object's name is <span t-field="o.name"/></p>
</div>
</t>
</t>
</t>
</template>
Calling external_layout will add the default header and footer on your
report. The PDF body will be the content inside the <div
class="page">. The template’s id must be the name specified in the
report declaration; for example account.report_invoice for the above
report. Since this is a QWeb template, you can access all the fields of the
docs objects received by the template.
Alapértelmezés szerint a renderelési környezet a következő elemeket is elérhetővé teszi:
docsrekordok az aktuális jelentéshez
doc_idsaz
docsrekordok azonosítóinak listájadoc_modelmodell a
docsrekordokhoz
Ha más rekordokhoz/modellekhez szeretne hozzáférni a sablonban, szüksége lesz egy egyedi jelentésre, azonban ebben az esetben biztosítania kell a fenti elemeket, ha szüksége van rájuk.
Fordítható sablonok¶
Ha jelentéseket szeretne lefordítani (például egy partner nyelvére), két sablont kell meghatároznia:
A fő jelentéssablon
A fordítható dokumentum
Ezután a fordítható dokumentumot a fő sablonból hívhatja meg a t-lang attribútum beállításával egy nyelvi kódra (például fr vagy en_US) vagy egy rekord mezőre. Szükséges lesz a kapcsolódó rekordok újra böngészése a megfelelő kontextussal, ha fordítható mezőket használ (mint például országnevek, értékesítési feltételek stb.)
Figyelem
Ha a jelentéssablon nem használ fordítható rekordmezőket, a rekord más nyelven történő újra böngészése nem szükséges, és hatással lesz a teljesítményre.
Például nézzük meg az Értékesítési Rendelés jelentést az Értékesítési modulból:
<!-- Main template -->
<template id="report_saleorder">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="sale.report_saleorder_document" t-lang="doc.partner_id.lang"/>
</t>
</t>
</template>
<!-- Translatable template -->
<template id="report_saleorder_document">
<!-- Re-browse of the record with the partner lang -->
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)" />
<t t-call="web.external_layout">
<div class="page">
<div class="oe_structure"/>
<div class="row">
<div class="col-6">
<strong t-if="doc.partner_shipping_id == doc.partner_invoice_id">Invoice and shipping address:</strong>
<strong t-if="doc.partner_shipping_id != doc.partner_invoice_id">Invoice address:</strong>
<div t-field="doc.partner_invoice_id" t-options="{"no_marker": True}"/>
<...>
<div class="oe_structure"/>
</div>
</t>
</template>
A fő sablon a fordítható sablont a doc.partner_id.lang paraméterrel hívja meg t-lang paraméterként, így a partner nyelvén lesz megjelenítve. Ily módon minden Értékesítési Rendelés a megfelelő ügyfél nyelvén lesz kinyomtatva. Ha csak a dokumentum törzsét szeretné lefordítani, de a fejlécet és a láblécet alapértelmezett nyelven szeretné megtartani, a jelentés külső elrendezését így hívhatja meg:
<t t-call="web.external_layout" t-lang="en_US">
Javaslat
Kérjük, vegye figyelembe, hogy ez csak külső sablonok hívásakor működik, nem lesz képes egy dokumentum részét lefordítani azáltal, hogy egy t-lang attribútumot állít be egy xml csomóponton, amely nem t-call. Ha egy sablon részét szeretné lefordítani, létrehozhat egy külső sablont ezzel a részleges sablonnal, és a fő sablonból hívhatja meg a t-lang attribútummal.
Vonalkódok¶
A vonalkódok képek, amelyeket egy vezérlő ad vissza, és könnyen beágyazhatók a jelentésekbe a QWeb szintaxisnak köszönhetően (pl. lásd attribútumok):
<img t-att-src="'/report/barcode/QR/%s' % 'My text in qr code'"/>
További paraméterek adhatók át lekérdezési karakterláncként
<img t-att-src="'/report/barcode/?
barcode_type=%s&value=%s&width=%s&height=%s'%('QR', 'text', 200, 200)"/>
Hasznos Megjegyzések¶
A Twitter Bootstrap és a FontAwesome osztályok használhatók a jelentéssablonban
Helyi CSS közvetlenül a sablonba helyezhető
Globális CSS beilleszthető a fő jelentés elrendezésébe a sablon öröklésével és a CSS beillesztésével:
<template id="report_saleorder_style" inherit_id="report.style"> <xpath expr="."> <t> .example-css-class { background-color: red; } </t> </xpath> </template>
Ha úgy tűnik, hogy a PDF jelentéséből hiányoznak a stílusok, kérjük, ellenőrizze ezeket az utasításokat.
Papírformátum¶
A papírformátumok a report.paperformat rekordjai, és a következő attribútumokat tartalmazhatják:
name(kötelező)csak mnemonikus leírásként hasznos a jelentéshez, amikor egy lista valamelyik elemét keressük
leírása formátum rövid leírása
formátumvagy egy előre definiált formátum (A0-tól A9-ig, B0-tól B10-ig, Legal, Letter, Tabloid,…) vagy
custom; alapértelmezés szerint A4. Nem használhat nem egyedi formátumot, ha megadja az oldal méreteit.dpikimeneti DPI; alapértelmezés szerint 90
felső_margó,alsó_margó,bal_margó,jobb_margómargó méretek mm-ben
oldal_magasság,oldal_szélességoldal méretek mm-ben
tájolásFekvő vagy Álló
fejléc_vonallogikai érték a fejléc vonal megjelenítéséhez
header_spacingfejléc távolság mm-ben
Példa:
<record id="paperformat_frenchcheck" model="report.paperformat">
<field name="name">French Bank Check</field>
<field name="default" eval="True"/>
<field name="format">custom</field>
<field name="page_height">80</field>
<field name="page_width">175</field>
<field name="orientation">Portrait</field>
<field name="margin_top">3</field>
<field name="margin_bottom">3</field>
<field name="margin_left">3</field>
<field name="margin_right">3</field>
<field name="header_line" eval="False"/>
<field name="header_spacing">3</field>
<field name="dpi">80</field>
</record>
Egyedi jelentések¶
Alapértelmezés szerint a jelentési rendszer a megadott model mezőn keresztül meghatározott célmodell alapján építi fel a megjelenítési értékeket.
Azonban először megkeresi a report.module.report_name nevű modellt, és meghívja annak _get_report_values(doc_ids, data) metódusát, hogy előkészítse a sablon megjelenítési adatait.
Ez használható tetszőleges elemek bevonására a sablon megjelenítése során, például további modellek adataira:
from odoo import api, models
class ParticularReport(models.AbstractModel):
_name = 'report.module.report_name'
def _get_report_values(self, docids, data=None):
# get the report action back as we will need its data
report = self.env['ir.actions.report']._get_report_from_name('module.report_name')
# get the records selected for this rendering of the report
obj = self.env[report.model].browse(docids)
# return a custom rendering context
return {
'lines': docids.get_lines()
}
Figyelem
When using a custom report, the „default” document-related items
(doc_ids, doc_model and docs) will not be included. If you
want them, you will need to include them yourself.
In the example above, the rendering context will contain the „global” values
as well as the lines we put in there but nothing else.
Egyéni betűtípusok¶
Ha egyedi betűtípusokat szeretne használni, hozzá kell adnia az egyedi betűtípusát és a kapcsolódó less/CSS-t a web.reports_assets_common eszközköteghez. Az egyedi betűtípus(ok) hozzáadása a web.assets_common vagy web.assets_backend eszközkötegekhez nem teszi elérhetővé a betűtípust a QWeb jelentésekben.
Példa:
<template id="report_assets_common_custom_fonts" name="Custom QWeb fonts" inherit_id="web.report_assets_common">
<xpath expr="." position="inside">
<link href="/your_module/static/src/less/fonts.less" rel="stylesheet" type="text/less"/>
</xpath>
</template>
Meg kell határoznia a @font-face-t ebben a less fájlban, még akkor is, ha már használta egy másik eszközkötegben (a web.reports_assets_common kivételével).
Példa:
@font-face {
font-family: 'MonixBold';
src: local('MonixBold'), local('MonixBold'), url(/your_module/static/fonts/MonixBold-Regular.otf) format('opentype');
}
.h1-title-big {
font-family: MonixBold;
font-size: 60px;
color: #3399cc;
}
Miután hozzáadta a less fájlt az eszközkötegéhez, használhatja az osztályokat - ebben a példában a h1-title-big - az egyedi QWeb jelentésében.
A jelentések weboldalak¶
A jelentéseket a jelentés modul dinamikusan generálja, és közvetlenül elérhetők URL-en keresztül:
Például elérheti egy Értékesítési Rendelés jelentést html módban, ha ellátogat a http://<server-address>/report/html/sale.report_saleorder/38 címre
Vagy elérheti a pdf verziót a következő címen: http://<server-address>/report/pdf/sale.report_saleorder/38
- 1
nem számít, hogy a
python:datetimeobjektum valójában milyen időzónában van (beleértve az időzóna nélküli állapotot is), az időzónája feltétel nélkül UTC-re lesz állítva, mielőtt a felhasználóhoz igazítanák