您的位置:首页 > 其它

工资计算系统

2015-12-08 16:04 393 查看
一/确定四张表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

修改于第五周周五
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: