工资计算系统

一/确定四张表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

修改于第五周周五



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值