From 248b80763389ef8bfba19c0b027c873c1f17deed Mon Sep 17 00:00:00 2001 From: Phyo Date: Wed, 23 Aug 2017 13:59:27 +0630 Subject: [PATCH] Dining Charges Fix for free time --- app/models/dining_charge.rb | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/app/models/dining_charge.rb b/app/models/dining_charge.rb index 75cf7d7b..b7be007d 100644 --- a/app/models/dining_charge.rb +++ b/app/models/dining_charge.rb @@ -3,19 +3,22 @@ class DiningCharge < ApplicationRecord belongs_to :room 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? price = 0 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 - charge_type = dining_charges_obj.charge_type - 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') + if dining_minutes <= 0 + price = 0 + else + charge_type = dining_charges_obj.charge_type + 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 - return price else puts "<<<<<<<< NO" @@ -25,14 +28,15 @@ class DiningCharge < ApplicationRecord def self.charges(chargesObj, dining_minutes, type) 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 if result.to_i < 1 return chargesObj.unit_price elsif result.to_i >= 1 solid_price = result * chargesObj.unit_price 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 if roundingblock.to_i < 1 return DiningCharge.check_rounding(chargesObj, solid_price) @@ -48,7 +52,7 @@ class DiningCharge < ApplicationRecord end end - def self.check_rounding(chargesObj) + def self.check_rounding(chargesObj,solid_price) if chargesObj.time_rounding == "down" return solid_price else