customize formal letters

This commit is contained in:
MohamedGad100 2025-12-29 09:00:55 +02:00
parent 4b708c1f54
commit 3f62f17699
12 changed files with 478 additions and 155 deletions

View File

@ -4,67 +4,110 @@
<template id="custom_external_formal_layout_standard">
<style type="text/css">
@font-face {
font-family: 'Al-Mohanad';
src: url("/exp_transation_letters/static/src/fonts/Al-Mohanad.ttf") format("truetype");
font-weight: normal;
font-family: 'bukra';
font-style: normal;
font-weight: 400;
src: url("/exp_transation_letters/static/src/fonts/bukraregular.otf") format("opentype"),
url("/exp_transation_letters/static/src/fonts/bukralight.ttf") format("truetype");
}
@font-face {
font-family: 'Al-Mohanad';
src: url("/exp_transation_letters/static/src/fonts/Al-Mohanad.ttf") format("truetype");
font-weight: bold;
font-family: 'bukra';
font-style: normal;
font-weight: 700;
src: url("/exp_transation_letters/static/src/fonts/bukrabold.otf") format("opentype"),
url("/exp_transation_letters/static/src/fonts/bukrabold.ttf") format("truetype");
}
* {
font-family: 'Al-Mohanad', sans-serif !important;
font-family: 'bukra', serif !important;
font-size: 14px;
}
.header {
min-height: 120px !important;
padding-bottom: 40px !important;
box-sizing: border-box !important;
}
.header img {
max-width: 100% !important;
height: 80px !important;
max-height: 80px !important;
width: auto !important;
display: block !important;
object-fit: contain !important;
}
</style>
<div class="header">
<div class="header" style="min-height: 120px; padding-bottom: 40px; box-sizing: border-box;">
<t t-set="transaction_id" t-value="o.incoming_transaction_id or o.internal_transaction_id or o.outgoing_transaction_id"/>
<div class="row" style="direction:ltr;">
<div class="col-6">
<div class="w-100 font-weight-bold" style="line-height:120%;direction:rtl;padding-right:90px;font-family:'Al-Mohanad' !important">
<div>
<span>Transaction Number:</span> <span t-esc="transaction_id.name" />
</div>
<div t-if="o.incoming_transaction_id">
<span>Reference:</span> <span
t-field="transaction_id.transaction_date"
t-field-options="{&quot;format&quot;: &quot;yyyy/MM/dd&quot;}"/>
</div>
<div t-if="o.incoming_transaction_id">
<span>Attachment:</span> <span t-esc="transaction_id.attachment_num"/>
</div>
<div t-if="o.outgoing_transaction_id or o.internal_transaction_id">
<span>Subject:</span> <span t-esc="transaction_id.subject" />
</div>
<div t-if="o.outgoing_transaction_id or o.internal_transaction_id">
<span>Transaction Date:</span> <span
t-field="transaction_id.transaction_date"
t-field-options="{&quot;format&quot;: &quot;yyyy/MM/dd&quot;}"/>
</div>
<div style="margin-right:-25px">
<img
t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', transaction_id.name, 600, 100)"
style="width:250px;height:40px;margin-top:5px;"/>
</div>
</div>
</div>
</div>
<table style="width: 100%; direction: ltr; border-collapse: collapse;">
<tr>
<td style="width: 50%; vertical-align: top; text-align: left;">
<table style="width: 100%; direction: rtl; border-collapse: collapse;">
<tr>
<td style="font-weight: bold; line-height: 120%; padding-right: 0; font-family: 'bukra', serif !important; font-size: 14px;">
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td style="font-size: 14px;">
<span>Transaction Number:</span> <span t-esc="transaction_id.name" />
</td>
</tr>
<tr t-if="o.incoming_transaction_id">
<td style="font-size: 14px;">
<span>Reference:</span> <span
t-field="transaction_id.transaction_date"
t-field-options="{&quot;format&quot;: &quot;yyyy/MM/dd&quot;}"/>
</td>
</tr>
<tr t-if="o.incoming_transaction_id">
<td style="font-size: 14px;">
<span>Attachment:</span> <span t-esc="transaction_id.attachment_num"/>
</td>
</tr>
<tr t-if="o.outgoing_transaction_id or o.internal_transaction_id">
<td style="font-size: 14px;">
<span>Subject:</span> <span t-esc="transaction_id.subject" />
</td>
</tr>
<tr t-if="o.outgoing_transaction_id or o.internal_transaction_id">
<td style="font-size: 14px;">
<span>Transaction Date:</span> <span
t-field="transaction_id.transaction_date"
t-field-options="{&quot;format&quot;: &quot;yyyy/MM/dd&quot;}"/>
</td>
</tr>
<tr>
<td style="margin-right: -25px; font-size: 14px;">
<img
t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', transaction_id.name, 600, 100)"
style="width:250px;height:40px;margin-top:5px;"/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td style="width: 50%; vertical-align: top; text-align: right;">
<!-- Right side for logo/company info -->
</td>
</tr>
</table>
</div>
<t t-if="o.outgoing_transaction_id =='' and o.internal_transaction_id=='' and o.incoming_transaction_id ==''">
<div class="header mohanad-font">
<div class="row">
<div class="col-6 text-right">
<div class="header" style="font-family: 'bukra', serif !important; font-size: 14px; min-height: 120px; padding-bottom: 40px; box-sizing: border-box;">
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td style="width: 50%; text-align: right;">
</div>
</div>
</td>
</tr>
</table>
</div>
</t>
<div class="article o_report_layout_standard mohanad-font">
<div class="article o_report_layout_standard" style="font-family: 'bukra', serif !important; font-size: 14px; padding-top: 30px;">
<t t-raw="0"/>
</div>
</template>
@ -85,63 +128,184 @@
<t t-raw="0"/>
</t>
</template>
</template>
<template id="transaction_letter_formal_report_temp">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="exp_transation_letters.formal_letter_external_layout">
<style type="text/css">
@font-face {
font-family: 'Al-Mohanad';
src: url("/exp_transation_letters/static/src/fonts/Al-Mohanad.ttf") format("truetype");
font-weight: normal;
font-family: 'bukra';
font-style: normal;
font-weight: 400;
src: url("/exp_transation_letters/static/src/fonts/bukraregular.otf") format("opentype"),
url("/exp_transation_letters/static/src/fonts/bukralight.ttf") format("truetype");
}
@font-face {
font-family: 'Al-Mohanad';
src: url("/exp_transation_letters/static/src/fonts/Al-Mohanad.ttf") format("truetype");
font-weight: bold;
font-family: 'bukra';
font-style: normal;
font-weight: 700;
src: url("/exp_transation_letters/static/src/fonts/bukrabold.otf") format("opentype"),
url("/exp_transation_letters/static/src/fonts/bukrabold.ttf") format("truetype");
}
* {
font-family: 'Al-Mohanad', sans-serif !important;
font-family: 'bukra', serif !important;
font-size: 14px;
}
@media print {
* {
font-family: 'bukra', serif !important;
font-size: 14px;
}
table {
max-width: 100% !important;
width: 100% !important;
table-layout: fixed !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
}
td, th {
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
max-width: 0 !important;
box-sizing: border-box !important;
}
p, div, span {
max-width: 100% !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
}
.page {
width: 100% !important;
max-width: 100% !important;
}
}
.page {
width: 100%;
max-width: 100%;
}
.page table {
max-width: 100% !important;
width: 100% !important;
table-layout: fixed !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
border-collapse: collapse !important;
margin: 0 auto !important;
}
.page table td,
.page table th {
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
max-width: 0 !important;
padding: 5px !important;
box-sizing: border-box !important;
}
/* Target all elements inside content to prevent overflow */
.page td > div > div p,
.page td > div > div div,
.page td > div > div span,
.page td > div > div * {
max-width: 100% !important;
width: 100% !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
box-sizing: border-box !important;
}
/* Specifically target paragraphs which are likely causing the overflow */
.page td > div > div p {
max-width: 100% !important;
width: auto !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
box-sizing: border-box !important;
margin: 0 !important;
padding: 0 !important;
}
@media print {
.page td > div > div * {
max-width: 100% !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
}
.page td > div > div p {
max-width: 100% !important;
width: auto !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
}
}
</style>
<div class="page mohanad-font">
<br/>
<br/>
<div style="margin-bottom: 0px">
<p class="mohanad-font" style="line-height: 16 !important" t-raw="o.content">
</p>
</div>
<br/>
<br/>
<table style="float: left; page-break-inside: avoid;">
<tr>
<td style="font-size: 18px; text-align: center; padding-bottom: 5px;">
<span t-esc="o.signed_user_id.name"/>
</td>
</tr>
<tr>
<td style="font-size: 18px; text-align: center; padding-bottom: 10px;">
<span t-esc="o.job_name"/>
</td>
</tr>
<tr>
<td style="text-align: center;">
<img
t-if="o.new_signature"
t-attf-src="data:image/*;base64,{{o.new_signature}}"
style="max-width: 200px; height: auto; border: 0;"
/>
</td>
</tr>
</table>
</div>
<table class="page" style="width: 100%; border-collapse: collapse; font-family: 'bukra', serif !important; font-size: 14px;">
<tr>
<td style="height: 20px;"></td>
</tr>
<tr>
<td style="height: 20px;"></td>
</tr>
<tr>
<td style="width: 100%; padding: 0 10px; box-sizing: border-box;">
<div style="width: 100%; max-width: 100%; padding: 0; box-sizing: border-box; word-wrap: break-word; overflow-wrap: break-word; word-break: break-word; direction: rtl; text-align: right;">
<div style="width: 100%; max-width: 100%; word-wrap: break-word; overflow-wrap: break-word; word-break: break-word; box-sizing: border-box;" t-raw="o.content"/>
</div>
</td>
</tr>
<tr>
<td style="height: 20px;"></td>
</tr>
<tr>
<td style="height: 20px;"></td>
</tr>
<tr>
<td>
<table style="width: auto; border-collapse: collapse; page-break-inside: avoid; margin-left: 0;">
<tr>
<td style="font-size: 14px; text-align: center; padding-bottom: 5px;">
<span t-esc="o.signed_user_id.name"/>
</td>
</tr>
<tr>
<td style="font-size: 14px; text-align: center; padding-bottom: 10px;">
<span t-esc="o.job_name"/>
</td>
</tr>
<tr>
<td style="text-align: center;">
<img
t-if="o.new_signature"
t-attf-src="data:image/*;base64,{{o.new_signature}}"
style="max-width: 200px; height: auto; border: 0;"
/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</t>
</t>
@ -159,7 +323,7 @@
<field name="margin_bottom">30</field>
<field name="margin_left">20</field>
<field name="header_line" eval="False"/>
<field name="header_spacing">50</field>
<field name="header_spacing">80</field>
<field name="dpi">90</field>
</record>
<report id="report_letter_formal_action_report"

View File

@ -2,41 +2,80 @@
<odoo>
<data>
<template id="custom_external_layout_standard">
<div class="header">
<style type="text/css">
.header {
min-height: 120px !important;
padding-bottom: 40px !important;
box-sizing: border-box !important;
}
.header img {
max-width: 100% !important;
height: 80px !important;
max-height: 80px !important;
width: auto !important;
display: block !important;
object-fit: contain !important;
}
</style>
<div class="header" style="min-height: 120px; padding-bottom: 40px; box-sizing: border-box;">
<t t-set="transaction_id" t-value="o.incoming_transaction_id or o.internal_transaction_id or o.outgoing_transaction_id"/>
<div class="row" style="direction:ltr;">
<div class="col-6">
<div class="w-100 font-weight-bold" style="line-height:120%;direction:rtl;padding-right:90px;font-family:'Al-Mohanad' !important">
<div>
<span>Transaction Number:</span> <span dir="rtl" t-esc="transaction_id.name" />
</div>
<div t-if="o.incoming_transaction_id">
<span>Reference:</span> <span
t-field="transaction_id.transaction_date"
t-field-options="{&quot;format&quot;: &quot;yyyy/MM/dd&quot;}"/>
</div>
<div t-if="o.incoming_transaction_id">
<span>Attachment:</span> <span t-esc="transaction_id.attachment_num"/>
</div>
<div t-if="o.outgoing_transaction_id or o.internal_transaction_id">
<span>Subject:</span> <span t-esc="transaction_id.subject" />
</div>
<div t-if="o.outgoing_transaction_id or o.internal_transaction_id">
<span>Transaction Date:</span> <span
t-field="transaction_id.transaction_date"
t-field-options="{&quot;format&quot;: &quot;yyyy/MM/dd&quot;}"/>
</div>
<div style="margin-right:-25px">
<img
t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', transaction_id.name, 600, 100)"
style="width:250px;height:40px;margin-top:5px;"/>
</div>
</div>
</div>
</div>
<table style="width: 100%; direction: ltr; border-collapse: collapse;">
<tr>
<td style="width: 50%; vertical-align: top; text-align: left;">
<table style="width: 100%; direction: rtl; border-collapse: collapse;">
<tr>
<td style="font-weight: bold; line-height: 120%; padding-right: 0; font-family: 'bukra', serif !important; font-size: 14px;">
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td style="font-size: 14px;">
<span>Transaction Number:</span> <span dir="rtl" t-esc="transaction_id.name" />
</td>
</tr>
<tr t-if="o.incoming_transaction_id">
<td style="font-size: 14px;">
<span>Reference:</span> <span
t-field="transaction_id.transaction_date"
t-field-options="{&quot;format&quot;: &quot;yyyy/MM/dd&quot;}"/>
</td>
</tr>
<tr t-if="o.incoming_transaction_id">
<td style="font-size: 14px;">
<span>Attachment:</span> <span t-esc="transaction_id.attachment_num"/>
</td>
</tr>
<tr t-if="o.outgoing_transaction_id or o.internal_transaction_id">
<td style="font-size: 14px;">
<span>Subject:</span> <span t-esc="transaction_id.subject" />
</td>
</tr>
<tr t-if="o.outgoing_transaction_id or o.internal_transaction_id">
<td style="font-size: 14px;">
<span>Transaction Date:</span> <span
t-field="transaction_id.transaction_date"
t-field-options="{&quot;format&quot;: &quot;yyyy/MM/dd&quot;}"/>
</td>
</tr>
<tr>
<td style="margin-right: -25px; font-size: 14px;">
<img
t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', transaction_id.name, 600, 100)"
style="width:250px;height:40px;margin-top:5px;"/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td style="width: 50%; vertical-align: top; text-align: right;">
<!-- Right side for logo/company info -->
</td>
</tr>
</table>
</div>
<div class="article o_report_layout_standard">
<div class="article o_report_layout_standard" style="padding-top: 30px;">
<t t-raw="0"/>
</div>
</template>
@ -57,63 +96,183 @@
<t t-raw="0"/>
</t>
</template>
<template id="transaction_letter_report_temp">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="exp_transation_letters.letter_external_layout">
<style type="text/css">
@font-face {
font-family: 'Al-Mohanad';
src: url("/exp_transation_letters/static/src/fonts/Al-Mohanad.ttf") format("truetype");
font-weight: normal;
font-family: 'bukra';
font-style: normal;
font-weight: 400;
src: url("/exp_transation_letters/static/src/fonts/bukraregular.otf") format("opentype"),
url("/exp_transation_letters/static/src/fonts/bukralight.ttf") format("truetype");
}
@font-face {
font-family: 'Al-Mohanad';
src: url("/exp_transation_letters/static/src/fonts/Al-Mohanad.ttf") format("truetype");
font-weight: bold;
font-family: 'bukra';
font-style: normal;
font-weight: 700;
src: url("/exp_transation_letters/static/src/fonts/bukrabold.otf") format("opentype"),
url("/exp_transation_letters/static/src/fonts/bukrabold.ttf") format("truetype");
}
* {
font-family: 'Al-Mohanad', sans-serif !important;
font-family: 'bukra', serif !important;
font-size: 14px;
}
@media print {
* {
font-family: 'bukra', serif !important;
font-size: 14px;
}
table {
max-width: 100% !important;
width: 100% !important;
table-layout: fixed !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
}
td, th {
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
max-width: 0 !important;
box-sizing: border-box !important;
}
p, div, span {
max-width: 100% !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
}
.page {
width: 100% !important;
max-width: 100% !important;
}
}
.page {
width: 100%;
max-width: 100%;
}
.page table {
max-width: 100% !important;
width: 100% !important;
table-layout: fixed !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
border-collapse: collapse !important;
margin: 0 auto !important;
}
.page table td,
.page table th {
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
max-width: 0 !important;
padding: 5px !important;
box-sizing: border-box !important;
}
/* Target all elements inside content to prevent overflow */
.page td > div > div p,
.page td > div > div div,
.page td > div > div span,
.page td > div > div * {
max-width: 100% !important;
width: 100% !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
box-sizing: border-box !important;
}
/* Specifically target paragraphs which are likely causing the overflow */
.page td > div > div p {
max-width: 100% !important;
width: auto !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
box-sizing: border-box !important;
margin: 0 !important;
padding: 0 !important;
}
@media print {
.page td > div > div * {
max-width: 100% !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
}
.page td > div > div p {
max-width: 100% !important;
width: auto !important;
word-wrap: break-word !important;
overflow-wrap: break-word !important;
word-break: break-word !important;
}
}
</style>
<div class="page mohanad-font">
<div style="margin-bottom: 0px">
<p style="line-height: 16 !important" t-raw="o.content">
</p>
</div>
<br/>
<br/>
<table style="float: left; page-break-inside: avoid;">
<tr>
<td style="font-size: 18px; text-align: center; padding-bottom: 5px;">
<span t-esc="o.signed_user_id.name"/>
</td>
</tr>
<tr>
<td style="font-size: 18px; text-align: center; padding-bottom: 10px;">
<span t-esc="o.job_name"/>
</td>
</tr>
<tr>
<td style="text-align: center;">
<img
t-if="o.new_signature"
t-attf-src="data:image/*;base64,{{o.new_signature}}"
style="max-width: 200px; height: auto; border: 0;"
/>
</td>
</tr>
</table>
</div>
<table class="page" style="width: 100%; border-collapse: collapse; font-family: 'bukra', serif !important; font-size: 14px;">
<tr>
<td style="width: 100%; padding: 0 10px; box-sizing: border-box;">
<div style="width: 100%; max-width: 100%; padding: 0; box-sizing: border-box; word-wrap: break-word; overflow-wrap: break-word; word-break: break-word; direction: rtl; text-align: right;">
<div style="width: 100%; max-width: 100%; word-wrap: break-word; overflow-wrap: break-word; word-break: break-word; box-sizing: border-box;" t-raw="o.content"/>
</div>
</td>
</tr>
<tr>
<td style="height: 20px;"></td>
</tr>
<tr>
<td style="height: 20px;"></td>
</tr>
<tr>
<td>
<table style="width: auto; border-collapse: collapse; page-break-inside: avoid; margin-left: 0;">
<tr>
<td style="font-size: 14px; text-align: center; padding-bottom: 5px;">
<span t-esc="o.signed_user_id.name"/>
</td>
</tr>
<tr>
<td style="font-size: 14px; text-align: center; padding-bottom: 10px;">
<span t-esc="o.job_name"/>
</td>
</tr>
<tr>
<td style="text-align: center;">
<img
t-if="o.new_signature"
t-attf-src="data:image/*;base64,{{o.new_signature}}"
style="max-width: 200px; height: auto; border: 0;"
/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</t>
</t>
</t>
</template>
<record model="report.paperformat" id="paperformat_letters_report">
<field name="name">paperformat.letters.report</field>
<field name="default" eval="True"/>
@ -124,7 +283,7 @@
<field name="margin_bottom">30</field>
<field name="margin_left">20</field>
<field name="header_line" eval="False"/>
<field name="header_spacing">50</field>
<field name="header_spacing">80</field>
<field name="dpi">90</field>
</record>
<report id="report_letter_action_report"