#!/usr/bin/env python3 """ Script to generate Agdar Centre Quotation in Word format """ from docx import Document from docx.shared import Inches, Pt, RGBColor from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.oxml.ns import qn from docx.oxml import OxmlElement def add_horizontal_line(paragraph): """Add a horizontal line to a paragraph""" p = paragraph._p pPr = p.get_or_add_pPr() pBdr = OxmlElement('w:pBdr') bottom = OxmlElement('w:bottom') bottom.set(qn('w:val'), 'single') bottom.set(qn('w:sz'), '12') bottom.set(qn('w:space'), '1') bottom.set(qn('w:color'), '0070C0') pBdr.append(bottom) pPr.append(pBdr) def create_quotation(): """Create the quotation document""" doc = Document() # Set document margins sections = doc.sections for section in sections: section.top_margin = Inches(0.75) section.bottom_margin = Inches(0.75) section.left_margin = Inches(1) section.right_margin = Inches(1) # Header Section header_table = doc.add_table(rows=1, cols=2) header_table.autofit = False header_table.allow_autofit = False # Left column - Company Info left_cell = header_table.rows[0].cells[0] company_name = left_cell.paragraphs[0] company_name.text = "AGDAR CENTRE" company_name.runs[0].font.size = Pt(24) company_name.runs[0].font.bold = True company_name.runs[0].font.color.rgb = RGBColor(0, 112, 192) company_details = left_cell.add_paragraph("Multidisciplinary Healthcare Services") company_details.runs[0].font.size = Pt(10) company_details.runs[0].font.color.rgb = RGBColor(102, 102, 102) company_details2 = left_cell.add_paragraph("Kingdom of Saudi Arabia") company_details2.runs[0].font.size = Pt(10) company_details2.runs[0].font.color.rgb = RGBColor(102, 102, 102) company_details3 = left_cell.add_paragraph("VAT No: 300000000000003") company_details3.runs[0].font.size = Pt(10) company_details3.runs[0].font.color.rgb = RGBColor(102, 102, 102) # Right column - Quotation Info right_cell = header_table.rows[0].cells[1] quote_title = right_cell.paragraphs[0] quote_title.text = "QUOTATION" quote_title.alignment = WD_ALIGN_PARAGRAPH.RIGHT quote_title.runs[0].font.size = Pt(28) quote_title.runs[0].font.bold = True quote_number = right_cell.add_paragraph("Quote #: QT-2025-001") quote_number.alignment = WD_ALIGN_PARAGRAPH.RIGHT quote_number.runs[0].font.size = Pt(11) quote_number.runs[0].font.color.rgb = RGBColor(102, 102, 102) quote_date = right_cell.add_paragraph("Date: November 30, 2025") quote_date.alignment = WD_ALIGN_PARAGRAPH.RIGHT quote_date.runs[0].font.size = Pt(10) quote_date.runs[0].font.color.rgb = RGBColor(102, 102, 102) # Add horizontal line line_para = doc.add_paragraph() add_horizontal_line(line_para) doc.add_paragraph() # Spacing # Client Section client_heading = doc.add_paragraph("QUOTATION FOR:") client_heading.runs[0].font.size = Pt(12) client_heading.runs[0].font.bold = True client_heading.runs[0].font.color.rgb = RGBColor(0, 112, 192) client_name = doc.add_paragraph("Agdar Centre - Solution Implementation") client_name.runs[0].font.size = Pt(14) client_name.runs[0].font.bold = True doc.add_paragraph() # Spacing # Validity Notice validity = doc.add_paragraph("⏰ This quotation is valid for 30 days from the date of issue") validity.runs[0].font.size = Pt(11) validity.runs[0].font.bold = True validity.runs[0].font.color.rgb = RGBColor(12, 84, 96) doc.add_paragraph() # Spacing # Items Table items_table = doc.add_table(rows=1, cols=4) items_table.style = 'Light Grid Accent 1' # Header row header_cells = items_table.rows[0].cells header_cells[0].text = "#" header_cells[1].text = "Description" header_cells[2].text = "Quantity" header_cells[3].text = "Amount (SAR)" # Format header for cell in header_cells: cell.paragraphs[0].runs[0].font.bold = True cell.paragraphs[0].runs[0].font.color.rgb = RGBColor(255, 255, 255) shading_elm = OxmlElement('w:shd') shading_elm.set(qn('w:fill'), '0070C0') cell._element.get_or_add_tcPr().append(shading_elm) header_cells[2].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER header_cells[3].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT # Data row row_cells = items_table.add_row().cells row_cells[0].text = "1" # Description with bullet points desc_para = row_cells[1].paragraphs[0] desc_para.add_run("Healthcare Management Solution\n").bold = True desc_para.add_run("\nComplete implementation of multidisciplinary healthcare management system including:\n").font.size = Pt(10) features = [ "Patient Management System", "Appointment Scheduling & Management", "Clinical Documentation (ABA, OT, SLP, Psychology, Medical, Nursing)", "Financial & Billing System with ZATCA E-Invoice Integration", "Package Management & Scheduling", "Multi-Disciplinary Team (MDT) Collaboration", "Notifications & Communication System", "Reporting & Analytics", "User Management & Access Control" ] for feature in features: feature_para = row_cells[1].add_paragraph(f"• {feature}", style='List Bullet') feature_para.runs[0].font.size = Pt(9) row_cells[2].text = "1" row_cells[2].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER row_cells[3].text = "50,000.00" row_cells[3].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT doc.add_paragraph() # Spacing # Totals Section totals_table = doc.add_table(rows=3, cols=2) totals_table.alignment = WD_ALIGN_PARAGRAPH.RIGHT # Subtotal totals_table.rows[0].cells[0].text = "Subtotal:" totals_table.rows[0].cells[1].text = "50,000.00 SAR" totals_table.rows[0].cells[1].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT # VAT totals_table.rows[1].cells[0].text = "VAT (15%):" totals_table.rows[1].cells[1].text = "7,500.00 SAR" totals_table.rows[1].cells[1].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT # Total totals_table.rows[2].cells[0].text = "TOTAL AMOUNT:" totals_table.rows[2].cells[0].paragraphs[0].runs[0].font.bold = True totals_table.rows[2].cells[0].paragraphs[0].runs[0].font.size = Pt(14) totals_table.rows[2].cells[0].paragraphs[0].runs[0].font.color.rgb = RGBColor(0, 112, 192) totals_table.rows[2].cells[1].text = "57,500.00 SAR" totals_table.rows[2].cells[1].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT totals_table.rows[2].cells[1].paragraphs[0].runs[0].font.bold = True totals_table.rows[2].cells[1].paragraphs[0].runs[0].font.size = Pt(14) totals_table.rows[2].cells[1].paragraphs[0].runs[0].font.color.rgb = RGBColor(0, 112, 192) doc.add_paragraph() # Spacing # Payment Terms Section payment_heading = doc.add_paragraph("💳 PAYMENT TERMS") payment_heading.runs[0].font.size = Pt(12) payment_heading.runs[0].font.bold = True payment_heading.runs[0].font.color.rgb = RGBColor(0, 112, 192) # Payment Schedule Table payment_table = doc.add_table(rows=5, cols=2) payment_table.style = 'Light List Accent 1' payments = [ ("Down Payment (30%):", "17,250.00 SAR"), ("Month 1 Payment:", "13,416.67 SAR"), ("Month 2 Payment:", "13,416.67 SAR"), ("Month 3 Payment (Final):", "13,416.66 SAR") ] for i, (label, amount) in enumerate(payments): payment_table.rows[i].cells[0].text = label payment_table.rows[i].cells[0].paragraphs[0].runs[0].font.bold = True payment_table.rows[i].cells[1].text = amount payment_table.rows[i].cells[1].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT payment_table.rows[i].cells[1].paragraphs[0].runs[0].font.bold = True payment_table.rows[i].cells[1].paragraphs[0].runs[0].font.color.rgb = RGBColor(0, 112, 192) doc.add_paragraph() # Payment Schedule Details schedule_para = doc.add_paragraph() schedule_para.add_run("Payment Schedule:\n").bold = True schedule_para.add_run("• 30% down payment due upon acceptance of quotation\n") schedule_para.add_run("• Remaining 70% (40,250.00 SAR) to be paid in 3 equal monthly installments\n") schedule_para.add_run("• Each installment approximately 13,416.67 SAR") for run in schedule_para.runs[1:]: run.font.size = Pt(10) doc.add_paragraph() # Spacing # Terms & Conditions terms_heading = doc.add_paragraph("📋 TERMS & CONDITIONS") terms_heading.runs[0].font.size = Pt(12) terms_heading.runs[0].font.bold = True terms_heading.runs[0].font.color.rgb = RGBColor(0, 112, 192) terms = [ "This quotation is valid for 30 days from the date of issue", "Prices are in Saudi Riyals (SAR) and include 15% VAT", "Down payment of 30% is required to commence work", "Monthly installments are due on the same date each month", "Late payment may incur additional charges as per agreement", "All payments should be made via bank transfer or approved payment methods", "Implementation timeline will be confirmed upon contract signing", "Training and support included as per service agreement", "Warranty and maintenance terms as per separate agreement" ] for term in terms: term_para = doc.add_paragraph(term, style='List Bullet') term_para.runs[0].font.size = Pt(10) doc.add_paragraph() # Spacing doc.add_paragraph() # Spacing # Signature Section sig_table = doc.add_table(rows=3, cols=2) # Prepared By sig_table.rows[0].cells[0].text = "" sig_table.rows[1].cells[0].text = "_" * 30 sig_table.rows[2].cells[0].text = "Prepared By\nAgdar Centre" sig_table.rows[2].cells[0].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER sig_table.rows[2].cells[0].paragraphs[0].runs[0].font.bold = True # Accepted By sig_table.rows[0].cells[1].text = "" sig_table.rows[1].cells[1].text = "_" * 30 sig_table.rows[1].cells[1].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER sig_table.rows[2].cells[1].text = "Accepted By\nClient Signature & Date" sig_table.rows[2].cells[1].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER sig_table.rows[2].cells[1].paragraphs[0].runs[0].font.bold = True doc.add_paragraph() # Spacing # Footer footer_line = doc.add_paragraph() add_horizontal_line(footer_line) footer = doc.add_paragraph() footer.alignment = WD_ALIGN_PARAGRAPH.CENTER footer.add_run("AGDAR CENTRE\n").bold = True footer.add_run("Kingdom of Saudi Arabia\n") footer.add_run("Email: info@agdarcentre.com | Phone: +966 XX XXX XXXX\n") footer.add_run("VAT Registration Number: 300000000000003\n\n") footer.add_run("Thank you for your business!").italic = True for run in footer.runs: run.font.size = Pt(9) run.font.color.rgb = RGBColor(102, 102, 102) # Save document doc.save('AGDAR_CENTRE_QUOTATION.docx') print("✅ Quotation document created successfully: AGDAR_CENTRE_QUOTATION.docx") if __name__ == "__main__": create_quotation()