一/确定四张表egolds一金表,ins五险表,wages工资表,users用户表。
二/确定一对一的关系
class Wage < ActiveRecord::Base
# attr_accessible :title, :body
has_one :ins
has_one :egold
end
class Egold < ActiveRecord::Base
# attr_accessible :title, :body
belongs_to :wage
end
三/添加外键指定一对一的关系
class AddWageIdToIns < ActiveRecord::Migration
def change
add_column :ins, :wage_id, :integer
end
end
四/工资分段计算算法,注意params数据只接收一次,之后的赋值使用变量赋值。
def create
ins = Ins.new
ins.enum = params[:enum]
ins.ename = params[:ename]
ins.ewage = params[:ewage]
ins.wage_date = params[:wage_date]
ins.epension = params[:epension]
ins.ehealth = params[:ehealth]
#
ins.com_pension = ins.epension * 0.20
ins.per_pension = ins.epension * 0.08
ins.sum_pension = ins.com_pension + ins.per_pension
ins.com_injury = ins.ehealth * 0.005
ins.com_basic = ins.ehealth * 0.08
ins.per_basic = ins.ehealth * 0.02
ins.sum_basic = ins.com_basic + ins.per_basic
ins.per_large = 7.00
ins.com_maternity = ins.ehealth * 0.007
ins.com_unemploy = ins.ehealth * 0.015
ins.per_unemploy = ins.ehealth * 0.005
ins.sum_unemploy = ins.com_unemploy + ins.per_unemploy
ins.com_sum = ins.com_pension + ins.com_injury + ins.com_basic+ ins.com_maternity + ins.com_unemploy
ins.com_per = ins.per_pension + ins.per_basic + ins.per_large + ins.per_unemploy
ins.sum_insur = ins.com_sum + ins.com_per
egold = Egold.new
egold.enum = params[:enum]
egold.com_egold = params[:egold] #首次接收params参数
egold.com_egold = egold.com_egold * 0.08 #使用params参数时调用之前已赋值变量
egold.per_egold = params[:egold]
egold.per_egold = egold.per_egold * 0.08
egold.sum_egold = egold.com_egold + egold.per_egold
wage = Wage.new
wage.wage_date = ins.wage_date
wage.ecompany = "xjgreat_wuhan"
wage.edepart = params[:edepart]
wage.enum = params[:enum]
wage.ename = params[:ename]
wage.ewage = params[:ewage]
wage.other_subsidy = params[:other_subsidy]
wage.overtime_subsidy = params[:overtime_subsidy]
wage.debit = params[:debit]
wage.other_debit = params[:other_debit]
wage.einsurance = ins.com_per
wage.egold1 = egold.per_egold
wage.should_wage = wage.ewage + wage.other_subsidy + wage.overtime_subsidy - wage.debit
wage.taxable_wage = wage.should_wage - wage.other_debit - ins.com_per - egold.per_egold
gz = wage.taxable_wage
if gz <= 3500
wage.income_tax = 0
else
gz = gz - 3500
if gz <= 1500
wage.income_tax = gz * 0.03
elsif 1500 < gz && gz <= 4500
wage.income_tax = gz * 0.1 - 105
elsif 4500 < gz && gz <= 9000
wage.income_tax = gz * 0.2 - 555
elsif 9000 < gz && gz <= 35000
wage.income_tax = gz * 0.25 - 1005
elsif 35000 < gz && gz <= 55000
wage.income_tax = gz * 0.3 - 2755
elsif 55000 < gz && gz <= 80000
wage.income_tax = gz * 0.35 - 5505
elsif gz > 80000
wage.income_tax = gz * 0.45 - 13505
end
end
wage.real_wages = wage.taxable_wage - wage.income_tax
wage.save
egold.wage_id = wage.id
ins.wage_id = wage.id
egold.save
ins.save
redirect_to '/xjwage/wage_index'
end
五/登录权限设置
skip_before_filter :authorize #过滤器
def login #session跟踪用户
name = params[:name]
password = params[:password]
@users = User.where(:password => password, :ename => name)
if !@users.blank?
session[:user_id] = @users.first.id
redirect_to "/xjwage/wage_index"
else
redirect_to "/user/index"
end
end
六/更改字段名,不要手残打错单词!
class RrrenameToEgolds < ActiveRecord::Migration
def change
rename_column :egolds, :com_eglod, :com_egold
rename_column :egolds, :per_eglod, :per_egold
rename_column :egolds, :sum_eglod, :sum_egold
end
end
修改于第五周周五