fix: bill of payment generation refactoring
This commit is contained in:
		@@ -1,16 +1,15 @@
 | 
			
		||||
from io import BytesIO
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
from typing import List
 | 
			
		||||
 | 
			
		||||
from fastapi import HTTPException
 | 
			
		||||
from jinja2 import Environment, FileSystemLoader
 | 
			
		||||
from number_to_string import get_string_by_number
 | 
			
		||||
from sqlalchemy import select
 | 
			
		||||
from sqlalchemy.orm import selectinload
 | 
			
		||||
from starlette import status
 | 
			
		||||
from weasyprint import HTML
 | 
			
		||||
from weasyprint import HTML, CSS
 | 
			
		||||
 | 
			
		||||
import backend.config
 | 
			
		||||
import constants
 | 
			
		||||
from constants import MONTHS, ENV
 | 
			
		||||
from external.billing import BillingClient, CreateBillingRequestValue, CreateBillRequestSchema, CreateBillRequestItems, \
 | 
			
		||||
    BillStatusUpdateRequest, NotificationChannel, NotifyReceivedBillRequestSchema, DeleteBillRequestSchema
 | 
			
		||||
@@ -195,6 +194,6 @@ class BillingService(BaseService):
 | 
			
		||||
    async def create_billing_document_pdf(self, deal_id) -> BytesIO:
 | 
			
		||||
        doc = await self._create_billing_document_html(deal_id)
 | 
			
		||||
        pdf_file = BytesIO()
 | 
			
		||||
        HTML(string=doc).write_pdf(pdf_file)
 | 
			
		||||
        HTML(string=doc).write_pdf(pdf_file, stylesheets=[CSS(constants.APP_PATH + '/static/css/bill-of-payment.css')])
 | 
			
		||||
 | 
			
		||||
        return pdf_file
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										122
									
								
								static/css/bill-of-payment.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								static/css/bill-of-payment.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
			
		||||
@media print {
 | 
			
		||||
    #header,
 | 
			
		||||
    #footer,
 | 
			
		||||
    #nav {
 | 
			
		||||
        display: none !important;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.doc-container {
 | 
			
		||||
    padding: 10px 15px;
 | 
			
		||||
    font-size: 13px;
 | 
			
		||||
    font-family: sans-serif;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.info-line {
 | 
			
		||||
    padding-bottom: 6px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.title {
 | 
			
		||||
    font-size: 16px;
 | 
			
		||||
    margin-top: 20px;
 | 
			
		||||
    margin-bottom: 2px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.footer {
 | 
			
		||||
    margin-top: 8px;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.footer-block {
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.footer-line {
 | 
			
		||||
    font-size: medium;
 | 
			
		||||
    font-weight: bolder;
 | 
			
		||||
    margin: 2px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    border-collapse: separate;
 | 
			
		||||
    border-spacing: 0;
 | 
			
		||||
    border: solid black 2px;
 | 
			
		||||
    border-radius: 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
thead {
 | 
			
		||||
    display: table-header-group;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tfoot {
 | 
			
		||||
    display: table-footer-group;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
td:nth-child(5) {
 | 
			
		||||
    border-right: 1px solid white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table tbody tr:nth-child(odd) {
 | 
			
		||||
    background-color: #dbdbdb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tr {
 | 
			
		||||
    page-break-inside: avoid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
td, th {
 | 
			
		||||
    padding: 16px 13px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
td:first-child, th:first-child {
 | 
			
		||||
    padding-left: 50px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
td:last-child, th:last-child {
 | 
			
		||||
    padding-right: 50px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
td:first-child, th:first-child {
 | 
			
		||||
    text-align: left;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
td:first-child {
 | 
			
		||||
    white-space: normal;
 | 
			
		||||
    word-wrap: break-word;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
td:not(:first-child), th:not(:first-child) {
 | 
			
		||||
    text-align: right;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
td:not(:first-child) {
 | 
			
		||||
    white-space: nowrap;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    text-overflow: ellipsis;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
img {
 | 
			
		||||
    width: 170px;
 | 
			
		||||
    margin-bottom: 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table tfoot {
 | 
			
		||||
    border-top: 2px solid black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.footer-line-right {
 | 
			
		||||
    font-size: medium;
 | 
			
		||||
    font-weight: bolder;
 | 
			
		||||
    margin: 2px 0;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    text-align: right;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.footer-words {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    flex-direction: column-reverse;
 | 
			
		||||
    justify-content: flex-end;
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Reference in New Issue
	
	Block a user