Skip to main content

Pricing & Add-on Rules

หน้านี้สกัดจาก BookingPriceCalculator.cs, BookingValidator.cs, Catalog quote และ unit tests ใน BookingService.Tests/Services/*

Price validation กับ Catalog

ก่อนสร้างหรือแก้ไข booking ระบบตรวจราคาที่ frontend ส่งมาเทียบกับ Catalog quote:

FieldValidation
Car totalcar.TotalPrice ต้องเท่ากับ catalogQuote.Car.TotalPrice หลัง round 2 ตำแหน่ง
Add-on priceแต่ละ add-on ที่มี Code ต้องตรงกับ Catalog add-on price
OWR pricepriceSummary.OwrPrice ต้องตรงกับ catalogQuote.Addon.OneWayRentalPrice
Additional pricecar/addon/vat/refund/additional amount ต้องตรงกับค่าที่ Booking Service คำนวณเอง

VAT และ total

รายการสูตร
Car VATtotalPriceCarIncludeVat - (totalPriceCarIncludeVat / 1.07)
Add-on VATtotalAddonPrice * 0.07
Total VATcarVat + addonVat
Grand totaltotalPriceCarIncludeVat + totalAddonPrice + addonVat
Roundingใช้ Math.Round(..., 2, MidpointRounding.AwayFromZero)

Add-on pricing

PriceRateTypeวิธีคิด
PerCarใช้ราคาต่อรถ 1 รายการ
PerDriverUnder21YearsOldราคา x จำนวน driver อายุไม่ถึง 21 ปี
PerDriverMoreThanOrEqual3ถ้า driver ตั้งแต่ 3 คนขึ้นไป คิดเพิ่มเฉพาะคนที่ 3 เป็นต้นไป; ถ้าน้อยกว่า 3 ยังคิด 1 unit ตาม code ปัจจุบัน
PriceRateCalculateวิธีคิด
OneTimeRateคิดครั้งเดียว
DayRateคูณจำนวนวันเช่า (daysRental)

Bundle / tree add-on rule

Add-on เป็น tree ได้ด้วย ParentId

กรณีวิธีคิด
Root selected และลูกทุกตัว selectedคิดราคา root อย่างเดียว เพราะ root cover bundle แล้ว
Root selected แต่ลูกบางตัวไม่ selectedคิด root + ลูกหลานที่ selected
Root ไม่ selectedคิดเฉพาะลูกหลานที่ selected
Insurance/Extra ที่ IsSpecifyQuantity = trueไม่คิดราคาใน calculator นี้
Mandatory ที่ IsIncludedItem = trueไม่คิดราคา
Catalog add-on มี IsMaximumRateถ้าคำนวณเกิน MaximumRate ให้ cap ที่ maximum

Price difference ตอน edit

Fieldสูตร
AdditionalCarPrice(newCarTotal / 1.07) - (oldCarTotal / 1.07)
AdditionalAddonPricenew selected addon/fuel total - old selected addon/fuel total
AdditionalVatnew VAT - old VAT
priceDifferenceoldPrice - newGrandTotal
priceDifference เป็นค่าบวกrefund
priceDifference เป็นค่าลบadditional payment