Dining Charges Fix for free time
This commit is contained in:
@@ -3,19 +3,22 @@ class DiningCharge < ApplicationRecord
|
|||||||
belongs_to :room
|
belongs_to :room
|
||||||
|
|
||||||
def self.amount_calculate(dining_charges_obj, checkin , checkout)
|
def self.amount_calculate(dining_charges_obj, checkin , checkout)
|
||||||
|
# note :: the first Charge Block will cost all, the Time rounding block will included in 2nd Charge Block
|
||||||
if !checkin.nil? && !checkout.nil? && !dining_charges_obj.nil?
|
if !checkin.nil? && !checkout.nil? && !dining_charges_obj.nil?
|
||||||
price = 0
|
price = 0
|
||||||
minutes = DiningCharge.time_diff(checkout, checkin)
|
minutes = DiningCharge.time_diff(checkout, checkin)
|
||||||
free_time = DiningCharge.convert_to_minutes(dining_charges_obj.minimum_free_time.strftime('%H:%M'))
|
free_time = DiningCharge.convert_to_minutes(dining_charges_obj.minimum_free_time.utc.localtime.strftime('%H:%M'))
|
||||||
dining_minutes = minutes - free_time # stayminutes - free minutes
|
dining_minutes = minutes - free_time # stayminutes - free minutes
|
||||||
charge_type = dining_charges_obj.charge_type
|
if dining_minutes <= 0
|
||||||
if charge_type == 'hr'
|
price = 0
|
||||||
price = DiningCharge.charges(dining_charges_obj, dining_minutes, 'hr')
|
else
|
||||||
elsif charge_type == 'day'
|
charge_type = dining_charges_obj.charge_type
|
||||||
price = charges(dining_charges_obj, dining_minutes, 'day')
|
if charge_type == 'hr'
|
||||||
|
price = DiningCharge.charges(dining_charges_obj, dining_minutes, 'hr')
|
||||||
|
elsif charge_type == 'day'
|
||||||
|
price = charges(dining_charges_obj, dining_minutes, 'day')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return price
|
return price
|
||||||
else
|
else
|
||||||
puts "<<<<<<<< NO"
|
puts "<<<<<<<< NO"
|
||||||
@@ -25,14 +28,15 @@ class DiningCharge < ApplicationRecord
|
|||||||
|
|
||||||
def self.charges(chargesObj, dining_minutes, type)
|
def self.charges(chargesObj, dining_minutes, type)
|
||||||
solid_price = 0
|
solid_price = 0
|
||||||
block = DiningCharge.convert_to_minutes(chargesObj.charge_block.strftime('%H:%M'))
|
block = DiningCharge.convert_to_minutes(chargesObj.charge_block.utc.localtime.strftime('%H:%M'))
|
||||||
|
|
||||||
result = dining_minutes / block
|
result = dining_minutes / block
|
||||||
if result.to_i < 1
|
if result.to_i < 1
|
||||||
return chargesObj.unit_price
|
return chargesObj.unit_price
|
||||||
elsif result.to_i >= 1
|
elsif result.to_i >= 1
|
||||||
solid_price = result * chargesObj.unit_price
|
solid_price = result * chargesObj.unit_price
|
||||||
remain_value = dining_minutes % block
|
remain_value = dining_minutes % block
|
||||||
rounding_block = DiningCharge.convert_to_minutes(chargesObj.time_rounding_block.strftime('%H:%M'))
|
rounding_block = DiningCharge.convert_to_minutes(chargesObj.time_rounding_block.utc.localtime.strftime('%H:%M'))
|
||||||
roundingblock = remain_value / rounding_block
|
roundingblock = remain_value / rounding_block
|
||||||
if roundingblock.to_i < 1
|
if roundingblock.to_i < 1
|
||||||
return DiningCharge.check_rounding(chargesObj, solid_price)
|
return DiningCharge.check_rounding(chargesObj, solid_price)
|
||||||
@@ -48,7 +52,7 @@ class DiningCharge < ApplicationRecord
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.check_rounding(chargesObj)
|
def self.check_rounding(chargesObj,solid_price)
|
||||||
if chargesObj.time_rounding == "down"
|
if chargesObj.time_rounding == "down"
|
||||||
return solid_price
|
return solid_price
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user