希望能给大家带来帮助,请只做参考用,主要是请看11个计算的步骤注释说明。
1
///
<summary>
2 /// 计算工资算法
3 /// </summary>
4 /// <param name="departmentID"> 部门主键 </param>
5 /// <param name="targetYearMonth"> 目标年月 </param>
6 /// <returns> 影响的行数 </returns>
7 public int Calculate(String departmentID, String targetYearMonth)
8 {
9 int returnValue = 0 ;
10 BaseParameterDao parameterDao = new BaseParameterDao( this .DbHelper, this .UserInfo);
11 String qiZhengE = parameterDao.GetParameter( " System " , " SalaryPersonalIncomeTax " , " QiZhengE " );
12 String year = targetYearMonth.Substring( 0 , 4 );
13 String month = targetYearMonth.Substring( 5 );
14 DataTable dataTable = this .SearchByDepartment(departmentID, year, month, false );
15 // 01 检查个人所得税起征额是否为空的?
16 this .CheckPersonalIncomeTax(dataTable, qiZhengE);
17 // 02 税前应加项合计
18 this .GetSum(dataTable, " 税前应加项目 " , BaseSalaryTable.FieldShuiQianYingJiaXiang);
19 // 03 税前应扣项合计
20 this .GetSum(dataTable, " 税前应扣项目 " , BaseSalaryTable.FieldShuiQianYingKouXiang);
21 // 04 基金补贴保险类合计,例如三金
22 this .GetSum(dataTable, " 基金保险补贴类 " , BaseSalaryTable.FieldJiJinBaoXianBuTieLei);
23 // 05 纳税项合计[记税工资,是否纳税项目来计算]
24 this .GetSalaryTax(dataTable);
25 // 06 计算个人所得税相关数据
26 this .GetPersonalIncomeTax(dataTable);
27 // 07 计算应发工资
28 this .GetSalary(dataTable);
29 // 08 计算税后应扣项目
30 this .GetSum(dataTable, " 税后代加项目 " , BaseSalaryTable.FieldShuiHouDaiJiaXiang);
31 // 09 计算税后应加项目
32 this .GetSum(dataTable, " 税后代扣项目 " , BaseSalaryTable.FieldShuiHouDaiKouXiang);
33 // 10 计算实发工资
34 this .GetRealSalary(dataTable);
35 // 11 将计算结果保存到数据库
36 BaseSalaryEntity salaryEntity = null ;
37 BaseSalaryDao salaryDao = new BaseSalaryDao( this .DbHelper, this .UserInfo);
38 foreach (DataRow dataRow in dataTable.Rows)
39 {
40 if (dataRow.RowState == DataRowState.Modified)
41 {
42 salaryEntity = new BaseSalaryEntity(dataRow);
43 returnValue += salaryDao.UpdateEntity(salaryEntity);
44 }
45 }
46 return returnValue;
47 }
48
2 /// 计算工资算法
3 /// </summary>
4 /// <param name="departmentID"> 部门主键 </param>
5 /// <param name="targetYearMonth"> 目标年月 </param>
6 /// <returns> 影响的行数 </returns>
7 public int Calculate(String departmentID, String targetYearMonth)
8 {
9 int returnValue = 0 ;
10 BaseParameterDao parameterDao = new BaseParameterDao( this .DbHelper, this .UserInfo);
11 String qiZhengE = parameterDao.GetParameter( " System " , " SalaryPersonalIncomeTax " , " QiZhengE " );
12 String year = targetYearMonth.Substring( 0 , 4 );
13 String month = targetYearMonth.Substring( 5 );
14 DataTable dataTable = this .SearchByDepartment(departmentID, year, month, false );
15 // 01 检查个人所得税起征额是否为空的?
16 this .CheckPersonalIncomeTax(dataTable, qiZhengE);
17 // 02 税前应加项合计
18 this .GetSum(dataTable, " 税前应加项目 " , BaseSalaryTable.FieldShuiQianYingJiaXiang);
19 // 03 税前应扣项合计
20 this .GetSum(dataTable, " 税前应扣项目 " , BaseSalaryTable.FieldShuiQianYingKouXiang);
21 // 04 基金补贴保险类合计,例如三金
22 this .GetSum(dataTable, " 基金保险补贴类 " , BaseSalaryTable.FieldJiJinBaoXianBuTieLei);
23 // 05 纳税项合计[记税工资,是否纳税项目来计算]
24 this .GetSalaryTax(dataTable);
25 // 06 计算个人所得税相关数据
26 this .GetPersonalIncomeTax(dataTable);
27 // 07 计算应发工资
28 this .GetSalary(dataTable);
29 // 08 计算税后应扣项目
30 this .GetSum(dataTable, " 税后代加项目 " , BaseSalaryTable.FieldShuiHouDaiJiaXiang);
31 // 09 计算税后应加项目
32 this .GetSum(dataTable, " 税后代扣项目 " , BaseSalaryTable.FieldShuiHouDaiKouXiang);
33 // 10 计算实发工资
34 this .GetRealSalary(dataTable);
35 // 11 将计算结果保存到数据库
36 BaseSalaryEntity salaryEntity = null ;
37 BaseSalaryDao salaryDao = new BaseSalaryDao( this .DbHelper, this .UserInfo);
38 foreach (DataRow dataRow in dataTable.Rows)
39 {
40 if (dataRow.RowState == DataRowState.Modified)
41 {
42 salaryEntity = new BaseSalaryEntity(dataRow);
43 returnValue += salaryDao.UpdateEntity(salaryEntity);
44 }
45 }
46 return returnValue;
47 }
48
将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。
posted on 2009-05-03 11:34 不仅仅是通用权限设计 阅读(1679) 评论(15) 编辑 收藏
评论
1518848你今天把首页承包了得了。
反正近期发的人也少,就承包给你吧。
我觉得你应该把各步的公式都写出来,那个才是有用的……
#2楼[楼主] 回复 引用 查看
休息在家里也没事情干,所以多写了几个帖子,大家见谅,平时忙项目也没心情写blog,大家也消消气。
我看到,如何计算应缴个人所得税? 使用SQL,理解SQL
http://www.cnblogs.com/Chinese-xu/archive/2009/05/03/1448036.html
大家都对这个很有兴趣嘛,反映也积极,所以写了以上的帖子,
其实,现在不流行,用一个超级复杂的sql语句把非常复杂的预算都搞定了,
因为这个超级复杂的sql语句实在是不好维护,甚至过了一段时间,写这个
SQL语句的人自己也不懂当时是怎么写的,后期也不好维护这个超级变态的
东西。
现在流行的是,面向对象变成,可以把这复杂的步骤分解成N个方法,
然后都用一个个简单的方法,就把一个复杂的过程搞定了,
例如,你的个人所得税征收表,没有存在数据库里,存在xml文件里了,
你还能写sql语句吗?数据库里根本就没这个表,以上是面向对象编程的
一个思想之一,分解成若干个易于理解的步骤,别人都好调试好理解,
摆脱了对数据库的过于依赖。都是很清晰的一个个处理步骤,菜鸟也容
易修改维护系统了。
我们不能指望新手能写出超级复杂的sql语句,但是能指望他有条有理的分步骤
把一个复杂的任务分解成N个简单的任务,然后顺利完成每个简单的小步骤。
这也是这几年我的深刻体会,对软件项目认识的明显提高之处。
#3楼 回复 引用
自从微软的.net2。0出来泛幸list,就很少用datatablse dataset,习惯datatable的应该还是用1.1的时候用习惯了吧,也说明这些年你没有与时俱进呀.哦,在批量更新的时候还得用一下table,不过不是你的循环方式,个人认为,循环批量更新是很糟糕的写法
面向对象的3个特点 封装 继承 多态
跟数据是存放到数据库或者xml来说没什么影响
ps:我今年大3
#4楼 回复 引用
对你来说,我就是新人,可是看了lz的博客,我变自信了,多开发5年又如何#5楼 回复 引用 查看
不过也不能啥东西都不放到数据库啊?面向对象不是用来摆脱对数据库的依赖的
吧一个大问题分解成若干个易于理解的步骤才是面向对象希望大家都去做的。
并且,这些步骤要正确封装到合适的对象里
#6楼 回复 引用 查看
@matz自从泛型啥的出来以后
程序里的if和for是越用越少了
#7楼[楼主] 回复 引用 查看
承认,应该用泛型,狡辩一下,此贴不是为了表明技术,是为了
表达计算 计算工资的步骤。
但是我还是虚心学习,多谢 徐少侠的指点, 我听进去了。
#8楼[楼主] 回复 引用 查看
我也的确是从.NET1.1开始的,你说得很有道理。#9楼 回复 引用 查看
这东西会计会给你算好的,不会少扣你的。话说我们的税都被拿去XXXX了
#10楼[楼主] 回复 引用 查看
犹豫我们的老会计总是算不好,被我们公司炒鱿鱼了,现在我们也在为客户做薪资管理模块,也需要我们程序自动计算,
不需要 会计自己算了,省事一些。
#11楼 回复 引用 查看
有个人类会计的话,很多帐会好算点如果每个公司都是电脑会计,税务局是高兴了。老总不一定都高兴的。
曾经听过这么一个故事:
外国财务软件公司到中国来投标项目,会后中方企业老总说老外的东西不行。
老外的销售那个急啊?一定要问哪里不好!
“你们的财务系统能做几套帐啊?我们这里至少要做5套的。”
“税务局、工商局、当地政府、媒体,最后自己还要有一套,最好是能有.....”
“唉,你怎么!”
老外的销售已经晕了
呵呵
#12楼 回复 引用 查看
凡是需要写注释的地方,都用一个方法调用来代替注释,方法体是原来需要注释的代码,方法名是原来的注释。这样你就不用写注释了,代码也就干净了。
#13楼 回复 引用
--引用--------------------------------------------------matz: 对你来说,我就是新人,可是看了lz的博客,我变自信了,多开发5年又如何
--------------------------------------------------------
谦虚是美德,你没开发过5年,很多东西就硬比不上。你说别人要一个经验5年上的,还是要你?做项目,就是靠做。光扛着一头跑,没用。
#14楼 回复 引用
--引用--------------------------------------------------matz: 对你来说,我就是新人,可是看了lz的博客,我变自信了,多开发5年又如何
--------------------------------------------------------
用不着发表这些东西,等你工作5年后是什么样子!
#15楼[楼主] 回复 引用 查看
估计他工作5年后:能买个顶级宝马车加别野,或者开发出中国第一套操作系统,或者数据库系统,
或者是全中国最牛B的管理软件,或者世界流行的开发语言。
我可怜的老爸当了40年教师,现在还是退休教师,若像我们搞IT的,
第一年是助理工程师,第二年是程序员,第三年是高级程序员
第四年系统架构师,第五年项目精力,第六年公司的老板,
我老板按这个发展,现在应该是接近国家主席才对。
我也是主席的儿子了,也牛了,不用这么辛苦写程序混饭吃了。