write generate pdf api

This commit is contained in:
xoliqberdiyev
2026-05-05 16:23:08 +05:00
24 changed files with 983 additions and 439 deletions

View File

@@ -4,9 +4,49 @@
<meta charset="UTF-8" />
<title>Baholash hisoboti № {{ report.number }}</title>
<style>
/* ============ PAGE SETUP ============ */
@page {
size: A4;
margin: 15mm 14mm 15mm 14mm;
margin: 15mm 14mm 22mm 14mm;
@bottom-center {
content: "Sahifa " counter(page) " / " counter(pages);
font-family: "Times New Roman", Times, serif;
font-size: 9pt;
color: #000000;
padding-top: 4px;
}
@bottom-left {
content: '"SIFAT BAHOLASH" MCHJ';
font-family: "Times New Roman", Times, serif;
font-size: 8.5pt;
font-style: italic;
color: #000000;
padding-top: 4px;
}
@bottom-right {
content: "Hisobot № " string(report-num);
font-family: "Times New Roman", Times, serif;
font-size: 8.5pt;
font-style: italic;
color: #000000;
padding-top: 4px;
}
}
/* Cover page (muqova) — raqamsiz */
@page :first {
@bottom-center {
content: none;
}
@bottom-left {
content: none;
}
@bottom-right {
content: none;
}
}
* {
@@ -24,21 +64,60 @@
background: #ffffff;
}
/* String-set uchun yashirin span */
.report-num-setter {
string-set: report-num content();
display: none;
}
/* ============ COLOR SYSTEM ============ */
/* Asosiy: #000000 (qora) */
/* Qo'shimcha: #c8102e (qizil) */
/* Fon: #ffffff (oq) */
/* Yumshoq fon: #f5f5f5 (och kulrang — strukturaviy ajratish uchun) */
/* Yumshoq fon: #f5f5f5 (och kulrang) */
/* ============ PAGE WRAPPER ============ */
.page {
page-break-after: always;
padding: 0;
}
.page:last-child {
/* Faqat ayrim sahifalar majburan alohida bo'ladi */
.page.force-break {
page-break-after: always;
}
.page.force-break:last-child {
page-break-after: auto;
}
/* ============ PAGE BREAK CONTROL ============ */
table {
page-break-inside: avoid;
break-inside: avoid;
}
table thead {
display: table-header-group;
}
table tr {
page-break-inside: avoid;
break-inside: avoid;
}
h2.section-title,
h3.subsection-title,
h4.minor-title {
page-break-after: avoid;
break-after: avoid;
}
.result-block,
.formula-box,
.formula-explain,
.specs-box,
.big-amount,
.definition-block {
page-break-inside: avoid;
break-inside: avoid;
}
/* ============ HEADER ============ */
.header {
display: table;
@@ -76,23 +155,6 @@
font-weight: bold;
}
/* ============ PAGE NUMBER FOOTER ============ */
.page-footer {
position: relative;
margin-top: 12px;
padding-top: 6px;
border-top: 1px solid #000000;
font-size: 8.5pt;
text-align: center;
color: #000000;
}
.page-footer .footer-company {
font-style: italic;
}
.page-footer .footer-page {
font-weight: bold;
}
/* ============ COVER PAGE ============ */
.cover-logo-block {
text-align: center;
@@ -259,13 +321,13 @@
background: #ffffff;
}
.big-amount .amount {
font-size: 24pt;
font-size: 16pt;
font-weight: bold;
color: #c8102e;
letter-spacing: 2px;
letter-spacing: 1px;
}
.big-amount .words {
font-size: 12pt;
font-size: 10pt;
font-weight: bold;
color: #000000;
margin-top: 4px;
@@ -582,10 +644,10 @@
margin-bottom: 6px;
}
.result-block .result-amount {
font-size: 22pt;
font-size: 15pt;
font-weight: bold;
color: #c8102e;
letter-spacing: 1.5px;
letter-spacing: 1px;
margin: 4px 0;
}
.result-block .result-words {
@@ -614,7 +676,7 @@
margin-bottom: 10px;
}
/* ============ STATE TABLE (износ) ============ */
/* ============ STATE TABLE ============ */
table.state-table {
width: 100%;
border-collapse: collapse;
@@ -650,6 +712,7 @@
margin-top: 30px;
display: table;
width: 100%;
page-break-inside: avoid;
}
.signature-block .sig-left {
display: table-cell;
@@ -689,7 +752,7 @@
color: #000000;
}
/* Two-column for definitions */
/* ============ DEFINITION BLOCK ============ */
.definition-block {
margin: 6px 0;
padding: 6px 10px;
@@ -702,10 +765,13 @@
</style>
</head>
<body>
<!-- Hisobot raqamini har sahifa pastida ko'rsatish uchun string-set -->
<span class="report-num-setter">{{ report.number }}</span>
<!-- ============================================== -->
<!-- =========== PAGE 1: COVER PAGE =============== -->
<!-- ============================================== -->
<div class="page">
<div class="page force-break">
<div class="cover-logo-block">
<img src="{{ logo_url }}" alt="SIFAT BAHOLASH" />
</div>
@@ -787,7 +853,7 @@
<!-- ============================================== -->
<!-- =========== PAGE 2: COVER LETTER ============= -->
<!-- ============================================== -->
<div class="page">
<div class="page force-break">
<div class="letter-header">
<div class="left-block">
<strong>"SIFAT BAHOLASH" MCHJ</strong><br />
@@ -910,7 +976,7 @@
</div>
<!-- ============================================== -->
<!-- =========== PAGE 3: TASK INFORMATION ========= -->
<!-- =========== MAIN CONTENT (sahifalar tabiiy oqadi) === -->
<!-- ============================================== -->
<div class="page">
<div class="header">
@@ -1031,22 +1097,26 @@
Valyuta kurslari ({{ report.valuation_date }} sanasi holatiga)
</h3>
<table class="currency-table">
<tr>
<th>Valyuta</th>
<th>Kurs (so'm)</th>
</tr>
<tr>
<td>RUR</td>
<td>{{ rates.rur }}</td>
</tr>
<tr>
<td>USD</td>
<td>{{ rates.usd }}</td>
</tr>
<tr>
<td>EURO</td>
<td>{{ rates.eur }}</td>
</tr>
<thead>
<tr>
<th>Valyuta</th>
<th>Kurs (so'm)</th>
</tr>
</thead>
<tbody>
<tr>
<td>RUR</td>
<td>{{ rates.rur }}</td>
</tr>
<tr>
<td>USD</td>
<td>{{ rates.usd }}</td>
</tr>
<tr>
<td>EURO</td>
<td>{{ rates.eur }}</td>
</tr>
</tbody>
</table>
<h3 class="subsection-title">
@@ -1083,33 +1153,6 @@
</tr>
</table>
<div class="page-footer">
<span class="footer-company"
>"SIFAT BAHOLASH" MCHJ — Hisobot № {{ report.number }} {{
report.date }} y.</span
>
</div>
</div>
<!-- ============================================== -->
<!-- =========== PAGE 4: EXECUTOR INFO ============ -->
<!-- ============================================== -->
<div class="page">
<div class="header">
<div class="header-logo">
<img src="{{ logo_url }}" alt="SIFAT BAHOLASH" />
</div>
<div class="header-info">
<div class="company-name">"SIFAT BAHOLASH" MCHJ</div>
<div class="cert-line">
A'zolik sertifikati № 122, 01.06.2023 y.
</div>
<div class="phone-line">
Hisobot № {{ report.number }}, {{ report.date }}
</div>
</div>
</div>
<h3 class="subsection-title">
1.4. Bajaruvchi to'g'risida ma'lumotlar
</h3>
@@ -1273,33 +1316,6 @@
<li>Hisobotni tuzish va Buyurtmachiga topshirish</li>
</ul>
<div class="page-footer">
<span class="footer-company"
>"SIFAT BAHOLASH" MCHJ — Hisobot № {{ report.number }} {{
report.date }} y.</span
>
</div>
</div>
<!-- ============================================== -->
<!-- =========== PAGE 5: ASSUMPTIONS ============== -->
<!-- ============================================== -->
<div class="page">
<div class="header">
<div class="header-logo">
<img src="{{ logo_url }}" alt="SIFAT BAHOLASH" />
</div>
<div class="header-info">
<div class="company-name">"SIFAT BAHOLASH" MCHJ</div>
<div class="cert-line">
A'zolik sertifikati № 122, 01.06.2023 y.
</div>
<div class="phone-line">
Hisobot № {{ report.number }}, {{ report.date }}
</div>
</div>
</div>
<h3 class="subsection-title">1.6. Baholash sifati sertifikati</h3>
<p>
Ushbu hisobotni imzolaganlar (keyingi o'rinlarda — Baholovchi)
@@ -1422,33 +1438,6 @@
qiymati.
</div>
<div class="page-footer">
<span class="footer-company"
>"SIFAT BAHOLASH" MCHJ — Hisobot № {{ report.number }} {{
report.date }} y.</span
>
</div>
</div>
<!-- ============================================== -->
<!-- =========== PAGE 6: APPROACHES OVERVIEW ====== -->
<!-- ============================================== -->
<div class="page">
<div class="header">
<div class="header-logo">
<img src="{{ logo_url }}" alt="SIFAT BAHOLASH" />
</div>
<div class="header-info">
<div class="company-name">"SIFAT BAHOLASH" MCHJ</div>
<div class="cert-line">
A'zolik sertifikati № 122, 01.06.2023 y.
</div>
<div class="phone-line">
Hisobot № {{ report.number }}, {{ report.date }}
</div>
</div>
</div>
<h3 class="subsection-title">1.8.1. Baholash jarayoni</h3>
<p>Baholash jarayoni quyidagilarni o'z ichiga oladi:</p>
<ol class="process-list">
@@ -1576,33 +1565,6 @@
<li>Ishlab chiqaruvchi zavodning prays-listi</li>
</ul>
<div class="page-footer">
<span class="footer-company"
>"SIFAT BAHOLASH" MCHJ — Hisobot № {{ report.number }} {{
report.date }} y.</span
>
</div>
</div>
<!-- ============================================== -->
<!-- =========== PAGE 7: VEHICLE DESCRIPTION ====== -->
<!-- ============================================== -->
<div class="page">
<div class="header">
<div class="header-logo">
<img src="{{ logo_url }}" alt="SIFAT BAHOLASH" />
</div>
<div class="header-info">
<div class="company-name">"SIFAT BAHOLASH" MCHJ</div>
<div class="cert-line">
A'zolik sertifikati № 122, 01.06.2023 y.
</div>
<div class="phone-line">
Hisobot № {{ report.number }}, {{ report.date }}
</div>
</div>
</div>
<h2 class="section-title">
2. Baholanayotgan transport vositasining tavsifi
</h2>
@@ -1756,33 +1718,6 @@
</li>
</ul>
<div class="page-footer">
<span class="footer-company"
>"SIFAT BAHOLASH" MCHJ — Hisobot № {{ report.number }} {{
report.date }} y.</span
>
</div>
</div>
<!-- ============================================== -->
<!-- =========== PAGE 8: COST APPROACH ============ -->
<!-- ============================================== -->
<div class="page">
<div class="header">
<div class="header-logo">
<img src="{{ logo_url }}" alt="SIFAT BAHOLASH" />
</div>
<div class="header-info">
<div class="company-name">"SIFAT BAHOLASH" MCHJ</div>
<div class="cert-line">
A'zolik sertifikati № 122, 01.06.2023 y.
</div>
<div class="phone-line">
Hisobot № {{ report.number }}, {{ report.date }}
</div>
</div>
</div>
<h2 class="section-title">3. Xarajat yondashuvi</h2>
<p>
@@ -2005,33 +1940,6 @@
<div class="result-words">({{ cost.final_value_words }})</div>
</div>
<div class="page-footer">
<span class="footer-company"
>"SIFAT BAHOLASH" MCHJ — Hisobot № {{ report.number }} {{
report.date }} y.</span
>
</div>
</div>
<!-- ============================================== -->
<!-- =========== PAGE 9: COMPARATIVE APPROACH ===== -->
<!-- ============================================== -->
<div class="page">
<div class="header">
<div class="header-logo">
<img src="{{ logo_url }}" alt="SIFAT BAHOLASH" />
</div>
<div class="header-info">
<div class="company-name">"SIFAT BAHOLASH" MCHJ</div>
<div class="cert-line">
A'zolik sertifikati № 122, 01.06.2023 y.
</div>
<div class="phone-line">
Hisobot № {{ report.number }}, {{ report.date }}
</div>
</div>
</div>
<h2 class="section-title">4. Solishtirma yondashuv</h2>
<p>
@@ -2140,30 +2048,6 @@
qurilmalar narxi.
</div>
<div class="page-footer">
<span class="footer-company"
>"SIFAT BAHOLASH" MCHJ — Hisobot № {{ report.number }} {{
report.date }} y.</span
>
</div>
</div>
<div class="page">
<div class="header">
<div class="header-logo">
<img src="{{ logo_url }}" alt="SIFAT BAHOLASH" />
</div>
<div class="header-info">
<div class="company-name">"SIFAT BAHOLASH" MCHJ</div>
<div class="cert-line">
A'zolik sertifikati № 122, 01.06.2023 y.
</div>
<div class="phone-line">
Hisobot № {{ report.number }}, {{ report.date }}
</div>
</div>
</div>
<h3 class="subsection-title">Solishtirma tahlil jadvali</h3>
<table class="compare-table">
@@ -2319,33 +2203,6 @@
</div>
</div>
<div class="page-footer">
<span class="footer-company"
>"SIFAT BAHOLASH" MCHJ — Hisobot № {{ report.number }} {{
report.date }} y.</span
>
</div>
</div>
<!-- ============================================== -->
<!-- =========== PAGE 11: INCOME APPROACH & FINAL = -->
<!-- ============================================== -->
<div class="page">
<div class="header">
<div class="header-logo">
<img src="{{ logo_url }}" alt="SIFAT BAHOLASH" />
</div>
<div class="header-info">
<div class="company-name">"SIFAT BAHOLASH" MCHJ</div>
<div class="cert-line">
A'zolik sertifikati № 122, 01.06.2023 y.
</div>
<div class="phone-line">
Hisobot № {{ report.number }}, {{ report.date }}
</div>
</div>
</div>
<h2 class="section-title">5. Daromad yondashuvi</h2>
<p>
@@ -2555,13 +2412,6 @@
<div class="name-line">{{ company.director }}</div>
</div>
</div>
<div class="page-footer">
<span class="footer-company"
>"SIFAT BAHOLASH" MCHJ — Hisobot № {{ report.number }} {{
report.date }} y.</span
>
</div>
</div>
</body>
</html>