1、假设数据库保存的流程如下:
decimal 每月工作日 = 30M; /*定义每个月的工作天数*/
decimal 病假计薪天数 = 7M; /*定义病假最高的薪天数*/
decimal 超出计薪天数 = 请假天数 - 病假计薪天数; /*计算超出计薪天数*/
decimal 应扣工资 = 0.00M; /*定义应扣工资*/
if (基本工资 > 0 && 岗位工资 > 0 && 请假天数 > 0 && 扣款率 > 0) /*如果传入的参数都不为0 */
{
if (超出计薪天数 > 0)
{
应扣工资 = (((基本工资 + 岗位工资) / 每月工作日) * 超出计薪天数) + ((((基本工资 * 扣款率) / 每月工作日) * 病假计薪天数) + ((岗位工资/每月工作日)* 请假天数));
}
else
{
应扣工资 = (((基本工资 * 扣款率) / 每月工作日) * 请假天数) + ((岗位工资 / 每月工作日)*请假天数);
}
}
return 应扣工资.ToString("0.00");
/// <summary>
/// 计算病假扣款
/// </summary>
/// <param name="BasePay">基本工资</param>
/// <param name="days">请假天数</param>
/// <returns>病假应扣工资</returns>
private string ReckonSickLeaveDeduct(decimal BasePay, decimal PostPay, decimal Days, decimal rateOfDeduct)
{
MethodResults stringChanger = null;
StringBuilder source = new StringBuilder();
source.Append("public string RSickLeaveDeduct(decimal 基本工资, decimal 岗位工资, decimal 请假天数, decimal 扣款率)");
source.Append(Environment.NewLine);
source.Append("{");
source.Append(Environment.NewLine);
source.Append(comdao.GetConstDefine("病假扣款公式").Value);
source.Append(Environment.NewLine);
source.Append("}");
try
{
stringChanger = Evaluator.Eval.CreateVirtualMethod(
new CSharpCodeProvider().CreateCompiler(),
source.ToString(),
"RSickLeaveDeduct",
new CSharpLanguage(),
false);
}
catch (CompilationException ce)
{
Logger.Instance("Exception").Error(ce.Message);
return "0.00";
}
try
{
string s = (string)stringChanger.Invoke(new object[] { BasePay, PostPay, Days, rateOfDeduct });
return s;
}
catch (System.Reflection.TargetInvocationException tie)
{
Logger.Instance("Exception").Error("Method-Thrown Exception: " + Environment.NewLine + tie.InnerException.ToString());
return "0.00";
}
}