diff --git a/app/models/dining_charge.rb b/app/models/dining_charge.rb index 22c6efde..902f2db1 100755 --- a/app/models/dining_charge.rb +++ b/app/models/dining_charge.rb @@ -5,10 +5,10 @@ class DiningCharge < ApplicationRecord 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? - block_count = 0 - price = 0 - minutes = DiningCharge.time_diff(checkout, checkin) - free_time = DiningCharge.convert_to_minutes(dining_charges_obj.minimum_free_time.utc.strftime('%H:%M')) + block_count = 0 + price = 0 + minutes = DiningCharge.time_diff(checkout, checkin) + free_time = DiningCharge.convert_to_minutes(dining_charges_obj.minimum_free_time.utc.strftime('%H:%M')) dining_minutes = minutes #- free_time # stayminutes - free minutes if dining_minutes <= free_time price = 0 @@ -30,31 +30,43 @@ class DiningCharge < ApplicationRecord # dining charges calculate def self.charges(chargesObj, dining_minutes, type) solid_price = 0 + charge_block = DiningCharge.convert_to_minutes(chargesObj.charge_block.utc.strftime('%H:%M')) result = dining_minutes / charge_block + if result.to_i < 1 # for dining minute is under charge_block return 1, result.to_i,chargesObj.unit_price elsif result.to_i >= 1 + solid_price = result * chargesObj.unit_price remain_value = dining_minutes % charge_block + rounding_time = DiningCharge.convert_to_minutes(chargesObj.time_rounding_block.utc.strftime('%H:%M')) + roundingblock = remain_value / rounding_time + + extra_minutes = remain_value % rounding_time + if roundingblock.to_i < 1 # no time rounding block - return result.to_i, DiningCharge.check_rounding(chargesObj, solid_price, roundingblock) + return result.to_i, DiningCharge.check_rounding(chargesObj, solid_price, extra_minutes) else solid_price += (roundingblock * chargesObj.time_rounding_block_price) - return result.to_i, DiningCharge.check_rounding(chargesObj, solid_price, roundingblock) + + return result.to_i, DiningCharge.check_rounding(chargesObj, solid_price, extra_minutes) end end end # check for rounding and calculate with rounding price - def self.check_rounding(chargesObj,solid_price, roundingblock) - rounding_block_remain = roundingblock % 1 + def self.check_rounding(chargesObj,solid_price, extra_minutes) + # rounding_block_remain = roundingblock / 1 + free_time = DiningCharge.convert_to_minutes(chargesObj.minimum_free_time.utc.strftime('%H:%M')) + rounding_block_remain = extra_minutes - free_time + if chargesObj.time_rounding == "down" return solid_price else