Files
public/l10n_ru_contract/report/report_contract_simple.xml

344 lines
15 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="action_report_contract_simple" model="ir.actions.report">
<field name="name">Договор (WeasyPrint)</field>
<field name="model">partner.contract.customer</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">l10n_ru_contract.report_contract_customer_modern</field>
<field name="report_file">l10n_ru_contract.report_contract_customer_modern</field>
<field name="print_report_name">'Договор - %s' % (object.name or '')</field>
<field name="binding_model_id" ref="l10n_ru_contract.model_partner_contract_customer" />
<field name="use_weasyprint">True</field>
</record>
<template id="report_contract_customer_modern">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-if="o and 'company_id' in o">
<t t-set="company" t-value="o.company_id"/>
</t>
<t t-if="not o or not 'company_id' in o">
<t t-set="company" t-value="res_company"/>
</t>
<t t-call="web.external_layout">
<!-- Корневой блок, передаём номер договора в string-set -->
<div class="page contract-root" t-att-data-contract-number="o.name or ''">
<style type="text/css">
@page {
size: A4;
margin: 18mm 20mm 22mm 20mm;
@bottom-right {
content: "Страница " counter(page) " из " counter(pages);
font-size: 9pt;
font-family: "DejaVu Serif", "Times New Roman", serif;
}
}
body {
font-family: "DejaVu Serif", "Times New Roman", serif;
font-size: 11pt;
line-height: 1.45;
color: #000;
background: #ffffff;
margin: 0;
}
.contract-root {
string-set: contract_number attr(data-contract-number);
}
.contract-main-title {
text-align: center;
font-size: 15pt;
font-weight: bold;
margin-bottom: 4mm;
}
.contract-subtitle {
text-align: center;
font-size: 11pt;
color: #444;
margin-bottom: 6mm;
}
.meta-table {
width: 100%;
margin-bottom: 6mm;
font-size: 10.5pt;
}
.meta-city { text-align: left; }
.meta-date { text-align: right; }
.parties-block {
margin-bottom: 10mm;
text-align: justify;
}
.clauses-root {
counter-reset: clause;
}
.clauses-columns {
column-count: 2;
column-gap: 12mm;
column-rule: 0.2mm solid #999;
}
.clause {
counter-increment: clause;
margin-bottom: 4mm;
break-inside: avoid-column;
}
.clause-title::before {
content: counter(clause) ". ";
font-weight: bold;
}
.clause-title {
font-weight: bold;
margin-bottom: 1mm;
}
.clause-body {
text-align: justify;
}
.requisites-title {
margin-top: 12mm;
margin-bottom: 4mm;
text-align: center;
font-weight: bold;
font-size: 12pt;
}
.requisites-grid {
display: grid;
grid-template-columns: 48% 48%;
column-gap: 4%;
row-gap: 6mm;
font-size: 10pt;
}
.requisites-card {
border: 1px solid #000;
padding: 4mm;
break-inside: avoid;
}
.requisites-card-title {
font-weight: bold;
text-transform: uppercase;
margin-bottom: 3mm;
text-align: center;
}
.requisites-line {
margin-bottom: 2mm;
}
.signature-block {
margin-top: 12mm;
display: grid;
grid-template-columns: 1fr 1fr;
column-gap: 12mm;
}
.signature-side-title {
font-size: 10pt;
font-weight: bold;
margin-bottom: 3mm;
}
.signature-line {
border-bottom: 1px solid #000;
height: 6mm;
margin-bottom: 2mm;
width: 60mm;
}
.signature-name {
font-size: 10pt;
margin-bottom: 4mm;
}
.signature-stamp {
margin-top: 4mm;
height: 30mm;
position: relative;
}
.signature-stamp img {
position: absolute;
max-width: 120px;
max-height: 120px;
left: 0;
top: -5mm;
}
.debug-test {
background: yellow;
border: 3px solid red;
font-size: 20pt;
}
</style>
<div class="debug-test">
ТЕСТ CSS
</div>
<!-- Шапка договора -->
<div class="header-block">
<div class="contract-main-title">
ДОГОВОР ПОСТАВКИ ПРОДУКЦИИ № <t t-esc="o.name or ''"/>
</div>
<div class="contract-subtitle">
(пример шаблона, оптимизированного под WeasyPrint)
</div>
<table class="meta-table" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="meta-city">
<t t-esc="company.partner_id.city or ''"/>
</td>
<td class="meta-date">
<t t-esc="o.get_date_text(o.date_start) if o.date_start else ''"/>
</td>
</tr>
</tbody>
</table>
<div class="parties-block">
<t t-if="o.partner_type in ['company', 'company_ip']">
<t t-esc="company.name or ''"/>,
именуемое в дальнейшем «Поставщик», с одной стороны, и
<t t-esc="o.partner_id.name or ''"/>,
именуемое в дальнейшем «Покупатель», совместно именуемые «Стороны»,
заключили настоящий договор о нижеследующем:
</t>
<t t-else="">
<t t-esc="company.name or ''"/> (далее — «Поставщик») и
гражданин(ка) <t t-esc="o.partner_id.name or ''"/> (далее — «Покупатель»),
совместно именуемые «Стороны», заключили настоящий договор о нижеследующем:
</t>
</div>
</div>
<!-- Основная часть: пункты в две колонки -->
<div class="clauses-root clauses-columns">
<t t-foreach="o.lines_ids.sorted(key=lambda r: r.sequence, reverse=False)" t-as="line">
<div class="clause">
<div class="clause-title">
<t t-esc="line.name or ''"/>
</div>
<div class="clause-body">
<span>
<t t-raw="line.punct or ''"/>
</span>
</div>
</div>
</t>
</div>
<!-- Реквизиты и подписи с использованием CSS Grid -->
<div class="requisites-title">
Реквизиты и подписи сторон
</div>
<div class="requisites-grid">
<!-- Поставщик -->
<div class="requisites-card">
<div class="requisites-card-title">Поставщик</div>
<div class="requisites-line">
<strong>Наименование:</strong>
<t t-esc="company.name or ''"/>
</div>
<div class="requisites-line">
<strong>ИНН:</strong>
<t t-esc="company.inn or ''"/>
</div>
<div class="requisites-line">
<strong>ОГРН:</strong>
<t t-esc="company.company_registry or ''"/>
</div>
<div class="requisites-line">
<strong>КПП:</strong>
<t t-esc="company.kpp or ''"/>
</div>
<div class="requisites-line">
<strong>Юр. адрес:</strong><br/>
<t t-esc="o.address(o.company_id) or ''"/>
</div>
</div>
<!-- Покупатель -->
<div class="requisites-card">
<div class="requisites-card-title">Покупатель</div>
<div class="requisites-line">
<strong>Наименование / ФИО:</strong>
<t t-esc="o.partner_id.name or ''"/>
</div>
<div class="requisites-line">
<strong>ИНН:</strong>
<t t-esc="o.partner_id.inn or ''"/>
</div>
<t t-if="o.partner_type in ['company', 'company_ip']">
<div class="requisites-line">
<strong>ОГРН:</strong>
<t t-esc="o.partner_id.ogrn or ''"/>
</div>
<t t-if="o.partner_type == 'company'">
<div class="requisites-line">
<strong>КПП:</strong>
<t t-esc="o.partner_id.kpp or ''"/>
</div>
</t>
</t>
<t t-else="">
<div class="requisites-line">
<strong>Паспорт:</strong>
<t t-esc="o.partner_id.passport or ''"/>
</div>
</t>
<div class="requisites-line">
<strong>Юр. адрес / адрес регистрации:</strong><br/>
<t t-esc="o.address(o.partner_id) or ''"/>
</div>
</div>
</div>
<div class="signature-block">
<div>
<div class="signature-side-title">Поставщик</div>
<div class="signature-line"></div>
<div class="signature-name">
<t t-esc="o.director_name_company or ''"/>
</div>
<div class="signature-stamp">
<t t-if="o.stamp">
<t t-raw="o.img(o.company_id.stamp) or ''"/>
</t>
</div>
</div>
<div>
<div class="signature-side-title">Покупатель</div>
<div class="signature-line"></div>
<div class="signature-name">
<!-- тут можно вывести ФИО либо оставить пустым -->
<t t-esc="''"/>
</div>
</div>
</div>
</div>
</t>
</t>
</t>
</template>
</odoo>