venue_management/app/models/venue_management_bill.rb

132 lines
5.3 KiB
Ruby

require 'orbit_form_helper'
class VenueManagementBill
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Enum
BILLTYPE = {'venue_fee'=>["usage_fee", "royalties", "admin_fee", "land_rent"],'utility_bill'=>['electricity','water'],'tax'=>['house_tax','land_tax'],'prejudgment_interest'=>["usage_fee", "royalties", "admin_fee", "land_rent",'electricity','water','house_tax','land_tax','other'],'other'=>['penalty','other']}
CACULATIONBASISTYPE = {'revenue'=>{'revenue'=>{},'level_0'=>{'fields'=>['field_value','percent']},'level_1'=>{'fields'=>['field_value','percent']},'level_2'=>{'fields'=>['field_value','percent']},'level_3'=>{'fields'=>['field_value','percent']},'level_4'=>{'fields'=>['field_value','percent']},'level_5'=>{'fields'=>['field_value','percent']}},
'degree'=>{'current_degree'=>{'float'=>'left'},'consumption'=>{'float'=>'left','clear'=>true,'no_margin'=>true},'level_0'=>{'fields'=>['field_value','dollar/degree']},'level_1'=>{'fields'=>['field_value','dollar/degree']},'level_2'=>{'fields'=>['field_value','dollar/degree']},'level_3'=>{'fields'=>['field_value','dollar/degree']}},
'actual_bill'=>{'bill_amount'=>{}},
'fixed'=>{'amount'=>{}},
'taxable_present_value'=>{'present_value'=>{},'taxable_area'=>{'unit'=>'㎡'},'taxable_tax'=>{}},
'announced_land_values'=>{'land_values'=>{},'taxable_area'=>{'unit'=>'㎡'},'taxable_tax'=>{}},
'other'=>{'amount'=>{}}}
CACILATYIONFORMULA = {'revenue'=>"
field_values.push(revenue)
percents.push(0)
result = -inner_product(field_values,percents)
f=field_values.shift(1)
field_values.push(f[0])
result += inner_product(field_values,percents)
result = result / 100
if(result < 0)
result = 0",
"degree"=>"
field_values.push(consumption)
dollardegrees.push(0)
result = -inner_product(field_values,dollardegrees)
f=field_values.shift(1)
field_values.push(f[0])
result += inner_product(field_values,dollardegrees)
if(result < 0)
result = 0",
"actual_bill"=>"
result = bill_amount
if(result < 0)
result = 0",
"fixed"=>"
result = amount
if(result < 0)
result = 0",
"taxable_present_value"=>"
result = taxable_tax
if(result < 0)
result = 0",
"announced_land_values"=>"
result = taxable_tax
if(result < 0)
result = 0",
"other"=>"
result = amount
if(result < 0)
result = 0"
}
CACULATIONBASIS = {'revenue'=>"revenue",
"degree"=>"consumption",
"fixed"=>"amount",
"taxable_present_value"=>"present_value",
"announced_land_values"=>"land_values",
"other"=>"amount"
}
field :accounting_month, type: Date, default: Time.now
field :bill_typeA, type: String, default: ""
field :bill_typeB, type: String, default: ""
field :bill_other, type: String, default: "", localize: true
field :caculation_basis_type, type: String, default: ""
field :caculation_basis, type: String, default: ""
field :reason, type: String, default: "", localize: true
field :amount, type: Integer, default: 0
field :deadline, type: Date, default: Time.now
field :received_date, type: Date, default: Time.now
field :pay_method, type: String, default: "", localize: true
field :note, type: String, default: "", localize: true
field :revenue
field :bill_amount
field :level_0
field :level_1
field :level_2
field :level_3
field :level_4
field :level_5
field :current_degree
field :consumption
field :tax_excluded, type: Boolean, default: false
field :total_amount
field :actual_amount
field :tax
field :present_value
field :taxable_area
field :land_values
field :taxable_tax
belongs_to :venue_management_main
include VenueLinkFile
# after_initialize do |record|
# if record.caculation_basis_type == "degree"
# if record.caculation_basis != "" && record.consumption.blank?
# record.update(:consumption => record.caculation_basis)
# end
# elsif record.caculation_basis_type == "revenue"
# if record.caculation_basis != "" && record.revenue.blank?
# record.update(:revenue => record.caculation_basis)
# end
# end
# end
# after_save do |record|
# venue_management_main = record.venue_management_main
# if !venue_management_main.venue_management_bill_ids.include?(record.id)
# venue_management_main.update(venue_management_main.venue_management_bill_ids.push(record.id))
# end
# end
def display_caculation_basis
caculation_basis_val = eval("#{self.class::CACULATIONBASIS[self.caculation_basis_type]}")
return "#{I18n.t("vm_bill.#{self.class::CACULATIONBASIS[self.caculation_basis_type]}")}: #{caculation_basis_val}"
end
def display_accounting_month
return (self.accounting_month.strftime("%Y-%m") rescue "")
end
def case_no
return (self.contractor.case_no rescue "")
end
def contractor
return self.venue_management_main.venue_management_contracts.where(:contract_start_date.lte=>self.accounting_month,:contract_end_date.gte=>self.accounting_month).first
end
def pay_date
return "#{self.deadline}/#{self.received_date}"
end
def inner_product(a,b)
result = 0
a.each.with_index{|v,i| result += v*b[i] if b[i].present?}
return result
end
end