import openpyxl from openpyxl.worksheet.datavalidation import DataValidation from openpyxl.styles import Font, Alignment, PatternFill wb = openpyxl.Workbook() # Sheet 1: Calculator with Dropdowns ws_calc = wb.active ws_calc.title = "מחשבון" ws_calc.sheet_view.rightToLeft
= True ws_calc['A1'] = "הזנת נתוני פרויקט" ws_calc['A1'].font = Font(bold=True) labels = ["סוג פרויקט", "שטח במ\"ר", "בקשה עם הקלות?", "מבנה לשימור?", "טופוגרפיה מורכבת?"] for i, label in enumerate(labels, 2): ws_calc.cell(row=i, column=1, value=label)
ws_calc['A8'] = "שירותים נלווים" ws_calc['A8'].font = Font(bold=True) labels_services = ["תיק מידע תכנוני", "תיאום יועצים מורחב", "הדמיות תלת-ממד", "תכניות עבודה"] for i, label in enumerate(labels_services, 9): ws_calc.cell(row=i, column=1, value=label)
# Default values ws_calc['B2'] = "בנייה חדשה" ws_calc['B3'] = 150 for i in [4, 5, 6, 9, 10, 11, 12]: ws_calc.cell(row=i, column=2, value="לא") ws_calc['B4'] = "כן" ws_calc['B9'] = "כן" ws_calc['B10'] = "כן" # Dropdowns (Data Validation) dv_yn = DataValidation(type="list",
formula1='"כן,לא"', allow_blank=True) dv_type = DataValidation(type="list", formula1='"בנייה חדשה,תוספת בנייה,לגליזציה"', allow_blank=True) ws_calc.add_data_validation(dv_yn) ws_calc.add_data_validation(dv_type) dv_type.add(ws_calc['B2']) for i in
[4, 5, 6, 9, 10, 11, 12]: dv_yn.add(ws_calc[f'B{i}']) # Hidden calculations ws_calc['B20'] = '=IF(B2="בנייה חדשה", 20000, IF(B2="תוספת בנייה", 15000, IF(B2="לגליזציה", 25000, 0)))' ws_calc['B21'] = '=IF(B2="בנייה חדשה", B3*150, IF(B2="תוספת בנייה",
B3*100, IF(B2="לגליזציה", B3*200, 0)))' ws_calc['B22'] = '=IF(B4="כן", 1.2, 1)' ws_calc['B23'] = '=IF(B5="כן", 1.3, 1)' ws_calc['B24'] = '=IF(B6="כן", 1.1, 1)' ws_calc['B25'] = '=IF(B9="כן", 2500, 0) + IF(B10="כן", 3000, 0) + IF(B11="כן", 3500, 0)
+ IF(B12="כן", 15000, 0)' ws_calc['B27'] = '=ROUND(((B20+B21)*B22*B23*B24)+B25, 0)' ws_calc.column_dimensions['A'].width = 25 ws_calc.column_dimensions['B'].width = 20 # Sheet 2: Quote Form ws_quote = wb.create_sheet(title="הצעת מחיר") ws_quote.sheet_view.rightToLeft
= True ws_quote['A1'] = "הצעת מחיר להיתר בנייה - אילנה גדג' אדריכלית" ws_quote['A1'].font = Font(bold=True, size=16) ws_quote['A3'] = "סה\"כ לתשלום (לפני מע\"מ)" ws_quote['B3'] = "='מחשבון'!B27" ws_quote['A4'] = "מע\"מ (17%)" ws_quote['B4'] = "=B3*0.17"
ws_quote['A5'] = "סה\"כ לתשלום (כולל מע\"מ)" ws_quote['B5'] = "=B3+B4" for cell in ['A3', 'A5', 'B3', 'B5']: ws_quote[cell].font = Font(bold=True) for cell in ['B3', 'B4', 'B5']: ws_quote[cell].number_format = '#,##0.00 ₪' ws_quote['A7'] = "פירוט
תשלומים לפי אבני דרך" ws_quote['A7'].font = Font(bold=True, size=14) headers = ["אבן דרך", "אחוז", "סכום (לפני מע\"מ)", "סכום (כולל מע\"מ)"] for col, h in enumerate(headers, start=1): cell = ws_quote.cell(row=8, column=col) cell.value = h cell.font
= Font(bold=True) cell.fill = PatternFill(start_color="DDDDDD", end_color="DDDDDD", fill_type="solid") milestones = [ ("מקדמה ותיק מידע", 0.15), ("אישור סקיצות ע\"י הלקוח", 0.20), ("קליטה ב\"רישוי זמין\"", 0.25), ("החלטת ועדה (בתנאים)", 0.20), ("השלמת
תנאים והפקת ההיתר", 0.20) ] for i, (name, pct) in enumerate(milestones, start=9): ws_quote.cell(row=i, column=1, value=name) pct_cell = ws_quote.cell(row=i, column=2, value=pct) pct_cell.number_format = '0%' val1 = ws_quote.cell(row=i, column=3, value=f"=$B$3*B{i}")
val1.number_format = '#,##0.00 ₪' val2 = ws_quote.cell(row=i, column=4, value=f"=C{i}*1.17") val2.number_format = '#,##0.00 ₪' ws_quote['A16'] = "הערות:" ws_quote['A16'].font = Font(bold=True) ws_quote['A17'] = "1. המחירים אינם כוללים אגרות, היטלי
השבחה ותשלומים לרשויות." ws_quote['A18'] = "2. " ws_quote.column_dimensions['A'].width = 35 ws_quote.column_dimensions['B'].width = 12 ws_quote.column_dimensions['C'].width = 20 ws_quote.column_dimensions['D'].width = 20 wb.save('מחשבון_הצעת_מחיר_אילנה_גדג.xlsx')
print("Excel file generated.")