|
import gradio as gr |
|
|
|
VAT_RATE = 0.07 |
|
WITHHOLD_RATE = 0.03 |
|
|
|
def calculate_price(calculation_type, wht_type, input_amount): |
|
""" |
|
calculation_type: เลือก "Forward" (Base -> Net) หรือ "Reverse" (Net -> Base) |
|
wht_type: เลือก "WHT from Base" หรือ "WHT from Total" |
|
input_amount: จำนวนเงินที่ใส่เข้ามา |
|
""" |
|
|
|
|
|
result = { |
|
"ราคาเริ่มต้น (Base)": 0.0, |
|
"VAT 7%": 0.0, |
|
"ยอดรวม (รวม VAT)": 0.0, |
|
"หัก ณ ที่จ่าย": 0.0, |
|
"ยอดสุทธิที่ได้รับ (Net)": 0.0 |
|
} |
|
|
|
|
|
|
|
|
|
if wht_type == "WHT จากฐาน (Base)": |
|
if calculation_type == "Forward (รู้ Base -> หา Net)": |
|
base = input_amount |
|
vat_amount = base * VAT_RATE |
|
total_with_vat = base + vat_amount |
|
wht_amount = base * WITHHOLD_RATE |
|
net_amount = total_with_vat - wht_amount |
|
|
|
result["ราคาเริ่มต้น (Base)"] = base |
|
result["VAT 7%"] = vat_amount |
|
result["ยอดรวม (รวม VAT)"] = total_with_vat |
|
result["หัก ณ ที่จ่าย"] = wht_amount |
|
result["ยอดสุทธิที่ได้รับ (Net)"] = net_amount |
|
|
|
elif calculation_type == "Reverse (รู้ Net -> หา Base)": |
|
|
|
|
|
net = input_amount |
|
base = net / (1 + VAT_RATE - WITHHOLD_RATE) |
|
vat_amount = base * VAT_RATE |
|
total_with_vat = base + vat_amount |
|
wht_amount = base * WITHHOLD_RATE |
|
|
|
result["ราคาเริ่มต้น (Base)"] = base |
|
result["VAT 7%"] = vat_amount |
|
result["ยอดรวม (รวม VAT)"] = total_with_vat |
|
result["หัก ณ ที่จ่าย"] = wht_amount |
|
result["ยอดสุทธิที่ได้รับ (Net)"] = net |
|
|
|
|
|
|
|
|
|
elif wht_type == "WHT จากยอดรวม (Total)": |
|
if calculation_type == "Forward (รู้ Base -> หา Net)": |
|
base = input_amount |
|
vat_amount = base * VAT_RATE |
|
total_with_vat = base + vat_amount |
|
wht_amount = total_with_vat * WITHHOLD_RATE |
|
net_amount = total_with_vat - wht_amount |
|
|
|
result["ราคาเริ่มต้น (Base)"] = base |
|
result["VAT 7%"] = vat_amount |
|
result["ยอดรวม (รวม VAT)"] = total_with_vat |
|
result["หัก ณ ที่จ่าย"] = wht_amount |
|
result["ยอดสุทธิที่ได้รับ (Net)"] = net_amount |
|
|
|
elif calculation_type == "Reverse (รู้ Net -> หา Base)": |
|
|
|
|
|
|
|
net = input_amount |
|
base = net / ((1 + VAT_RATE) * (1 - WITHHOLD_RATE)) |
|
vat_amount = base * VAT_RATE |
|
total_with_vat = base + vat_amount |
|
wht_amount = total_with_vat * WITHHOLD_RATE |
|
|
|
result["ราคาเริ่มต้น (Base)"] = base |
|
result["VAT 7%"] = vat_amount |
|
result["ยอดรวม (รวม VAT)"] = total_with_vat |
|
result["หัก ณ ที่จ่าย"] = wht_amount |
|
result["ยอดสุทธิที่ได้รับ (Net)"] = net |
|
|
|
|
|
for k, v in result.items(): |
|
result[k] = f"{v:,.2f}" |
|
|
|
|
|
output_text = ( |
|
f"ราคาเริ่มต้น (Base): {result['ราคาเริ่มต้น (Base)']} บาท\n" |
|
f"VAT 7%: {result['VAT 7%']} บาท\n" |
|
f"ยอดรวม (รวม VAT): {result['ยอดรวม (รวม VAT)']} บาท\n" |
|
f"หัก ณ ที่จ่าย: {result['หัก ณ ที่จ่าย']} บาท\n" |
|
f"ยอดสุทธิที่ได้รับ (Net): {result['ยอดสุทธิที่ได้รับ (Net)']} บาท\n" |
|
) |
|
|
|
return output_text |
|
|
|
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown( |
|
""" |
|
# โปรแกรมคำนวณราคา (VAT 7% และ หัก ณ ที่จ่าย 3%) |
|
เลือกเงื่อนไขและกรอกตัวเลขเพื่อดูผลการคำนวณได้ทั้งแบบ "เดินหน้า" (รู้ Base -> หา Net) |
|
หรือ "ถอยหลัง" (รู้ Net -> หา Base) และยังเลือกวิธีการคำนวณหัก ณ ที่จ่ายได้ |
|
ว่าจะหักจาก "Base" หรือจาก "Total (Base+VAT)" |
|
""" |
|
) |
|
|
|
with gr.Box(): |
|
calculation_type = gr.Radio( |
|
label="ประเภทการคำนวณ", |
|
choices=["Forward (รู้ Base -> หา Net)", "Reverse (รู้ Net -> หา Base)"], |
|
value="Forward (รู้ Base -> หา Net)" |
|
) |
|
|
|
wht_type = gr.Radio( |
|
label="วิธีการหัก ณ ที่จ่าย", |
|
choices=["WHT จากฐาน (Base)", "WHT จากยอดรวม (Total)"], |
|
value="WHT จากฐาน (Base)" |
|
) |
|
|
|
input_amount = gr.Number( |
|
label="กรอกจำนวนเงิน (บาท)", |
|
value=6990.00, |
|
precision=2 |
|
) |
|
|
|
calc_button = gr.Button("คำนวณ") |
|
|
|
output_area = gr.Textbox( |
|
label="ผลลัพธ์การคำนวณ", |
|
lines=6 |
|
) |
|
|
|
calc_button.click( |
|
fn=calculate_price, |
|
inputs=[calculation_type, wht_type, input_amount], |
|
outputs=output_area |
|
) |
|
|
|
demo.launch() |
|
|