Exemple #1
0
        //获取所有工资项
        public static List <SalResultItem> GetList(string calRunId, string payGroup)
        {
            List <SalResultItem> list = new List <SalResultItem>();

            CalRunInfo calRun = CalRunInfo.Get(calRunId);

            if (calRun == null)
            {
                return(list);
            }

            OleDbConnection conn = new OleDbConnection(MyHelper.GetPsConnectionString());

            using (conn)
            {
                OleDbDataReader rs = null;
                try
                {
                    conn.Open();
                    using (OleDbCommand cmd = conn.CreateCommand())
                    {
                        string condition = "";
                        if (string.IsNullOrEmpty(payGroup) == false)
                        {
                            condition = " AND gp_paygroup='" + payGroup + "'";
                        }

                        cmd.CommandText = String.Format("SELECT A.EMPLID, A.cal_run_id,a.gp_paygroup, cal_id, A.PIN_NUM, P.PIN_NM, P.DESCR, A.CALC_RSLT_VAL FROM SYSADM.PS_GP_RSLT_ERN_DED A LEFT JOIN SYSADM.PS_GP_PIN P ON A.PIN_NUM = P.PIN_NUM WHERE A.cal_run_id = '{0}' {1} ORDER BY A.EMPLID", calRunId, condition);
                        rs = cmd.ExecuteReader();
                        while (rs.Read())
                        {
                            SalResultItem item = new SalResultItem();

                            item.年度   = calRun.年度;
                            item.月份   = calRun.月份;
                            item.日历组  = (string)rs["cal_run_id"];
                            item.日历   = (string)rs["cal_id"];
                            item.薪资组  = ((string)rs["gp_paygroup"]).Trim();
                            item.员工编号 = (string)rs["EMPLID"];
                            item.元素编号 = Convert.ToDecimal(rs["PIN_NUM"]);
                            item.英文名称 = (string)rs["PIN_NM"];
                            item.中文名称 = (string)rs["DESCR"];
                            item.金额   = Convert.ToDecimal(rs["CALC_RSLT_VAL"]);

                            list.Add(item);
                        }
                    }
                }
                finally
                {
                    if (rs != null)
                    {
                        rs.Close();
                    }
                    conn.Close();
                }
            }
            return(list);
        }
        public static StringBuilder SychSalaryResultItem(string calRunId, string payGroup)
        {
            StringBuilder sb = new StringBuilder();

            CalRunInfo calRun = CalRunInfo.Get(calRunId);

            if (calRun == null)
            {
                return(sb);
            }

            if (DeleteAll(calRunId, payGroup))
            {
                List <SalResultItem> list = SalResultItem.GetList(calRunId, payGroup);
                foreach (SalResultItem sri in list)
                {
                    try
                    {
                        SalaryResultItem item = new SalaryResultItem();

                        item.年度    = calRun.年度;
                        item.月份    = calRun.月份;
                        item.日历组   = sri.日历组;
                        item.日历    = sri.日历;
                        item.薪资组   = sri.薪资组;
                        item.员工编号  = sri.员工编号;
                        item.元素编号  = sri.元素编号;
                        item.英文名称  = sri.英文名称;
                        item.中文名称  = sri.中文名称;
                        item.金额    = sri.金额;
                        item.类别    = item.GetCategory();
                        item.次同步时间 = DateTime.Now;

                        item.Save();
                    }
                    catch
                    {
                        sb.Append("同步工资明细失败:" + sri);
                    }
                }
            }
            else
            {
                sb.Append("删除上次同步的数据失败");
            }
            return(sb);
        }
        //获取指定的日历组
        public static CalRunInfo Get(string cal_run_id)
        {
            List <CalRunInfo> list = new List <CalRunInfo>();
            OleDbConnection   conn = new OleDbConnection(MyHelper.GetPsConnectionString());

            using (conn)
            {
                OleDbDataReader rs = null;
                try
                {
                    conn.Open();
                    using (OleDbCommand cmd = conn.CreateCommand())
                    {
                        string sql = String.Format("SELECT DISTINCT A.CAL_RUN_ID,A.DESCR, RUN_FINALIZED_IND, B.CAL_PRD_ID, C.PRD_BGN_DT, C.PRD_END_DT FROM SYSADM.PS_GP_CAL_RUN A LEFT JOIN SYSADM.PS_GP_CAL_RUN_DTL B ON A.CAL_RUN_ID = B.CAL_RUN_ID  LEFT JOIN SYSADM.PS_GP_CAL_PRD C ON C.CAL_PRD_ID = B.CAL_PRD_ID WHERE A.CAL_RUN_ID='{0}'", cal_run_id);
                        cmd.CommandText = sql;
                        rs = cmd.ExecuteReader();
                        if (rs.Read())
                        {
                            CalRunInfo item = new CalRunInfo();

                            item.日历组编号 = (string)rs["CAL_RUN_ID"];
                            item.日历组名称 = (string)rs["DESCR"];
                            item.期间    = (string)rs["CAL_PRD_ID"];
                            item.开始日期  = Convert.ToDateTime(rs["PRD_BGN_DT"]);
                            item.结束日期  = Convert.ToDateTime(rs["PRD_END_DT"]);

                            item.年度 = item.开始日期.Year;
                            item.月份 = item.开始日期.Month;

                            return(item);
                        }
                    }
                }
                finally
                {
                    if (rs != null)
                    {
                        rs.Close();
                    }
                    conn.Close();
                }
            }
            return(null);
        }
        //获取指定年份的日历组
        public static List <CalRunInfo> GetList(DateTime start, DateTime end)
        {
            List <CalRunInfo> list = new List <CalRunInfo>();
            OleDbConnection   conn = new OleDbConnection(MyHelper.GetPsConnectionString());

            using (conn)
            {
                OleDbDataReader rs = null;
                try
                {
                    conn.Open();
                    using (OleDbCommand cmd = conn.CreateCommand())
                    {
                        string sql = String.Format("SELECT DISTINCT A.CAL_RUN_ID,A.DESCR, RUN_FINALIZED_IND, B.CAL_PRD_ID, C.PRD_BGN_DT, C.PRD_END_DT FROM SYSADM.PS_GP_CAL_RUN A LEFT JOIN SYSADM.PS_GP_CAL_RUN_DTL B ON A.CAL_RUN_ID = B.CAL_RUN_ID  LEFT JOIN SYSADM.PS_GP_CAL_PRD C ON C.CAL_PRD_ID = B.CAL_PRD_ID WHERE C.PRD_BGN_DT >= date'{0:yyyy-M-d}' AND C.PRD_END_DT < date'{1:yyyy-M-d}' order by C.PRD_BGN_DT desc", start, end);
                        cmd.CommandText = sql;
                        rs = cmd.ExecuteReader();
                        while (rs.Read())
                        {
                            CalRunInfo item = new CalRunInfo();

                            item.日历组编号 = (string)rs["CAL_RUN_ID"];
                            item.日历组名称 = (string)rs["DESCR"];
                            item.期间    = (string)rs["CAL_PRD_ID"];
                            item.开始日期  = Convert.ToDateTime(rs["PRD_BGN_DT"]);
                            item.结束日期  = Convert.ToDateTime(rs["PRD_END_DT"]);

                            item.年度 = item.开始日期.Year;
                            item.月份 = item.开始日期.Month;

                            list.Add(item);
                        }
                    }
                }
                finally
                {
                    if (rs != null)
                    {
                        rs.Close();
                    }
                    conn.Close();
                }
            }
            return(list);
        }
        public PersonalTax(SalaryResult salary)
        {
            表工资  = salary;
            封闭工资 = PrivateSalary.GetPrivateSalary(salary.员工编号, salary.年度, salary.月份);

            CalRunInfo cal = CalRunInfo.Get(salary.日历组);

            年     = cal.年度;
            月     = cal.月份;
            期间_开始 = cal.开始日期;
            期间_结束 = cal.结束日期;
            期间    = String.Format("{0}年{1}", 年, 月) + "月";
            发放单位  = salary.财务公司;

            员工编号        = salary.员工编号;
            姓名          = salary.姓名;
            身份证号        = salary.身份证号;
            养老保险个人缴纳金额  = salary.养老保险个人缴纳;
            医疗保险个人缴纳金额  = salary.基本医疗个人缴纳 + salary.大病医疗个人缴纳金额;
            失业保险个人缴纳金额  = salary.失业保险个人缴纳;
            住房公积金个人缴纳金额 = salary.住房公积金个人缴纳;

            应税工资额  = 表工资.应税工资额;
            个人所得税  = 封闭工资 == null ?  表工资.个人所得税金额 : 封闭工资.个人所得税;
            工资发放总额 = 表工资.表工资总额 + 表工资.未休年休假工资;
            //如果有封闭工资
            if (封闭工资 != null)
            {
                应税工资额  = 封闭工资.总应税工资;
                工资发放总额 = 封闭工资.工资发放总额;
            }
            个税起征点 = PsHelper.GetPersonTaxPoint(期间_开始);


            decimal taxIncome = 应税工资额 - 个税起征点;

            if (taxIncome > 0)
            {
                TaxInfo tax = TaxInfo.Get(taxIncome);
                税率    = tax.税率;
                速算扣除数 = tax.速算扣除数;
            }
        }
Exemple #6
0
        public static SalaryAuditingResult AddSalaryAuditingResult(string payGroup, string calRunId)
        {
            SalaryAuditingResult result = GetSalaryAuditingResult(payGroup, calRunId);

            if (result == null)
            {
                CalRunInfo cal = CalRunInfo.Get(calRunId);
                result = new SalaryAuditingResult();

                result.标识   = Guid.NewGuid();
                result.薪资组  = payGroup;
                result.日历组  = calRunId;
                result.年    = cal.年度;
                result.月    = cal.月份;
                result.创建时间 = DateTime.Now;

                result.Save();
            }

            return(result);
        }
Exemple #7
0
        public static StringBuilder SychSalaryResult(string calRunId, string payGroup)
        {
            StringBuilder sb = new StringBuilder();

            CalRunInfo calRun = CalRunInfo.Get(calRunId);

            if (calRun == null)
            {
                sb.Append(String.Format("指定的日历组({0})不存在,无法同步。", calRunId));
                return(sb);
            }

            if (CheckCalRunFinalized(calRunId) == false)
            {
                sb.Append(String.Format("日历组({0})的上表工资计算未完成,不能同步。", calRunId));
                return(sb);
            }

            List <SalResult> list = SalResult.GetList(calRunId, payGroup);

            //删除历史数据
            SalaryAuditingResult.ClearAuditingResult(calRunId, payGroup);

            #region 保存PS系统的上表工资数据

            foreach (SalResult sr in list)
            {
                if (!SychSalaryResult(sr))
                {
                    //删除历史数据
                    SalaryAuditingResult.ClearAuditingResult(calRunId, payGroup);
                    sb.Append("同步工资结果失败:" + sr.ToString <SalResult>());
                    break;
                }
            }
            #endregion

            return(sb);
        }
Exemple #8
0
        //根据日历组获取所有工资项
        public static List <SalResult> GetList(string calRunId, string payGroup)
        {
            List <SalResult> list = new List <SalResult>();

            CalRunInfo calRun = CalRunInfo.Get(calRunId);

            if (calRun == null)
            {
                return(list);
            }

            OleDbConnection conn = new OleDbConnection(MyHelper.GetPsConnectionString());

            using (conn)
            {
                OleDbDataReader rs = null;
                try
                {
                    conn.Open();
                    using (OleDbCommand cmd = conn.CreateCommand())
                    {
                        string payGroupCondition = "";
                        if (string.IsNullOrEmpty(payGroup) == false)
                        {
                            payGroupCondition = String.Format(" AND GP_PAYGROUP = '{0}'", payGroup);
                        }
                        cmd.CommandText = String.Format("SELECT B.NAME,A.* FROM SYSADM.PS_C_WA_PAY_RSLT A LEFT JOIN PS_PERSONAL_DATA B ON A.EMPLID=B.EMPLID WHERE CAL_RUN_ID='{0}' {1} ORDER BY A.EMPLID", calRunId, payGroupCondition);
                        rs = cmd.ExecuteReader();
                        while (rs.Read())
                        {
                            SalResult item = new SalResult();

                            #region 日历信息

                            item.日历组 = calRunId;
                            item.期间  = calRun.期间;
                            item.年度  = calRun.年度;
                            item.月份  = calRun.月份;

                            #endregion

                            #region 员工信息

                            item.姓名   = MyHelper.RemoveNumber((string)rs["NAME"]);
                            item.员工编号 = (string)rs["EMPLID"];
                            item.员工类型 = (string)rs["C_CHR027"];

                            EmpInfo empInfo = EmpInfo.员工表.Find(a => a.员工编号 == item.员工编号);
                            if (empInfo != null)
                            {
                                item.身份证号 = empInfo.身份证号;

                                item.财务公司   = empInfo.财务公司;
                                item.财务部门   = empInfo.财务部门;
                                item.财务部门序号 = empInfo.财务部门序号;
                                item.员工序号   = empInfo.员工序号;

                                item.银行账号 = empInfo.银行账号;
                                item.帐户名称 = empInfo.帐户名称;
                            }

                            #endregion

                            #region 所属机构

                            item.公司编号 = (string)rs["COMPANY"];
                            item.机构编号 = (string)rs["DEPTID"];

                            CompanyInfo company = CompanyInfo.Get(item.公司编号);
                            if (company != null)
                            {
                                item.公司名称 = company.公司名称;
                            }

                            DeptInfo dept = DeptInfo.Get(item.机构编号);
                            if (dept != null && dept.所在部门 != null)
                            {
                                item.部门编号 = dept.所在部门.部门编号;
                                item.部门名称 = dept.所在部门.部门名称;
                            }

                            #endregion

                            #region 薪酬体系

                            item.薪资组    = (string)rs["GP_PAYGROUP"];
                            item.薪资集合   = (string)rs["SETID_SALARY"];
                            item.薪酬体系编号 = (string)rs["SAL_ADMIN_PLAN"];
                            item.薪等编号   = (string)rs["GRADE"];
                            item.薪级编号   = Convert.ToString(rs["STEP"]);

                            #endregion

                            #region 职务数据

                            item.职务代码 = (string)rs["JOBCODE"];
                            //2018-9-10 职务等级以15号为界
                            //item.职务等级 = (string)rs["SUPV_LVL_ID"];
                            item.职务等级 = GetSupvLvlId(item.员工编号, item.年度, item.月份);

                            item.职位编号 = (string)rs["POSITION_NBR"];
                            item.班别   = (string)rs["SHIFT"];

                            #endregion

                            #region 出勤情况

                            item.企业排班天数     = Convert.ToDecimal(rs["C_AMT202"]);
                            item.法定工作日天数    = Convert.ToDecimal(rs["C_AMT243"]);
                            item.实际出勤天数     = Convert.ToDecimal(rs["C_AMT198"]);
                            item.法定工作日出勤天数  = Convert.ToDecimal(rs["C_AMT199"]);
                            item.法定节假日出勤天数  = Convert.ToDecimal(rs["C_AMT201"]);
                            item.休息日出勤天数    = Convert.ToDecimal(rs["C_AMT203"]);
                            item.月综合出勤天数    = Convert.ToDecimal(rs["C_AMT204"]);
                            item.工作日延长出勤小时数 = Convert.ToDecimal(rs["C_AMT205"]);

                            #endregion

                            #region 出勤工资

                            item.法定工作日出勤工资   = Convert.ToDecimal(rs["C_AMT005"]);
                            item.法定节假日出勤工资   = Convert.ToDecimal(rs["C_AMT006"]);
                            item.休息日出勤工资     = Convert.ToDecimal(rs["C_AMT007"]);
                            item.月综合出勤工资     = Convert.ToDecimal(rs["C_AMT009"]);
                            item.工作日延长工作出勤工资 = Convert.ToDecimal(rs["C_AMT010"]);

                            #endregion

                            item.未休年休假工资 = Convert.ToDecimal(rs["C_AMT134"]);

                            #region 社保缴纳

                            item.养老保险个人缴纳金额  = Convert.ToDecimal(rs["C_AMT170"]);
                            item.医疗保险个人缴纳金额  = Convert.ToDecimal(rs["C_AMT171"]);
                            item.失业保险个人缴纳金额  = Convert.ToDecimal(rs["C_AMT172"]);
                            item.住房公积金个人缴纳金额 = Convert.ToDecimal(rs["C_AMT173"]);
                            item.大病医疗个人缴纳金额  = Convert.ToDecimal(rs["C_AMT292"]);
                            //社保合计
                            item.社保个人缴纳金额 = Convert.ToDecimal(rs["C_AMT258"]);
                            item.社保公司缴纳金额 = Convert.ToDecimal(rs["C_AMT259"]);
                            //补缴 2015.9.14
                            item.养老保险个人补缴金额  = Convert.ToDecimal(rs["C_AMT174"]);
                            item.医疗保险个人补缴金额  = Convert.ToDecimal(rs["C_AMT175"]);
                            item.失业保险个人补缴金额  = Convert.ToDecimal(rs["C_AMT176"]);
                            item.住房公积金个人补缴金额 = Convert.ToDecimal(rs["C_AMT177"]);

                            #endregion

                            item.个人所得税金额 = Convert.ToDecimal(rs["C_AMT178"]); //C_AMT265 总的个税(含封闭工资)
                            item.代垫费用    = Convert.ToDecimal(rs["C_AMT262"]);

                            item.挂钩效益工资      = Convert.ToDecimal(rs["C_AMT136"]);
                            item.其他所得        = Convert.ToDecimal(rs["C_AMT138"]);
                            item.其他扣款        = Convert.ToDecimal(rs["C_AMT196"]);
                            item.预留风险金       = Convert.ToDecimal(rs["C_AMT241"]);
                            item.出勤工资        = Convert.ToDecimal(rs["C_AMT252"]);
                            item.实得满勤奖       = Convert.ToDecimal(rs["C_AMT017"]);
                            item.应得满勤奖       = Convert.ToDecimal(rs["C_AMT232"]);
                            item.表工资         = Convert.ToDecimal(rs["C_AMT002"]);
                            item.设定工资        = Convert.ToDecimal(rs["C_AMT003"]);
                            item.基准工资        = Convert.ToDecimal(rs["C_AMT004"]);
                            item.特殊社保的基准工资   = Convert.ToDecimal(rs["C_AMT278"]);
                            item.基数等级与基准工资差额 = Convert.ToDecimal(rs["C_AMT011"]);
                            //item.工资降级 = Convert.ToDecimal(rs["C_AMT008"]) - item.上表工资; //2015.5.20 封闭上表工资 - 上表工资
                            //2017.7.10 直接读取工资降级数据
                            item.工资降级 = PsHelper.GetPayDegrade(item.员工编号, calRun.开始日期);
                            if (item.工资降级 < 0)
                            {
                                item.工资降级 = 0;                //2015.9.24
                            }
                            #region 累加器

                            item.出勤工资   = Convert.ToDecimal(rs["C_AMT252"]);
                            item.津贴补助   = Convert.ToDecimal(rs["C_AMT253"]);
                            item.综合考核工资 = Convert.ToDecimal(rs["C_AMT254"]);
                            item.奖项     = Convert.ToDecimal(rs["C_AMT255"]);
                            item.扣项     = Convert.ToDecimal(rs["C_AMT256"]);

                            #endregion

                            item.交通餐饮补助 = Convert.ToDecimal(rs["C_AMT248"]);

                            item.应税工资额 = Convert.ToDecimal(rs["C_AMT260"]);
                            //含年休假工资(260是不含年休假的工资总额)
                            //即:合计应税工资额 = 应税工资额 + 年休假工资
                            item.合计应税工资额 = Convert.ToDecimal(rs["C_AMT261"]);
                            item.表工资总额   = Convert.ToDecimal(rs["C_AMT257"]);
                            item.实发工资总额  = Convert.ToDecimal(rs["C_AMT263"]);
                            list.Add(item);
                        }
                    }
                }
                finally
                {
                    if (rs != null)
                    {
                        rs.Close();
                    }
                    conn.Close();
                }
            }
            return(list);
        }
Exemple #9
0
        /// <summary>
        /// 同步上月工资明细
        /// </summary>
        /// <returns></returns>
        public static StringBuilder SychSalaryResult()
        {
            List <CalRunInfo> cals = new List <CalRunInfo>();
            StringBuilder     sb   = new StringBuilder();

            DateTime        prevMonth = DateTime.Now.AddMonths(-1);
            DateTime        prd_begin = new DateTime(prevMonth.Year, prevMonth.Month, 1);
            OleDbConnection conn      = new OleDbConnection(MyHelper.GetPsConnectionString());

            using (conn)
            {
                OleDbDataReader rs = null;
                try
                {
                    conn.Open();
                    using (OleDbCommand cmd = conn.CreateCommand())
                    {
                        string sql = String.Format("select distinct A.CAL_RUN_ID,A.DESCR, RUN_FINALIZED_IND, B.CAL_PRD_ID, C.PRD_BGN_DT, C.PRD_END_DT from SYSADM.ps_GP_CAL_RUN A left join SYSADM.ps_GP_CAL_RUN_DTL B ON A.cal_run_id = B.cal_run_id  left join SYSADM.ps_GP_CAL_PRD C ON C.cal_prd_id = B.CAL_PRD_ID where C.PRD_BGN_DT = date'{0:yyyy-M-d}'", prd_begin);
                        cmd.CommandText = sql;
                        rs = cmd.ExecuteReader();
                        while (rs.Read())
                        {
                            bool finalized = (string)rs["RUN_FINALIZED_IND"] == "Y";
                            if (finalized)
                            {
                                string cal_run_id = (string)rs["CAL_RUN_ID"];

                                CalRunInfo cal = CalRunInfo.Get(cal_run_id);
                                if (cal != null)
                                {
                                    cals.Add(cal);
                                    WageLoan.AutoGenerateMonthlyWageLoanItems(cal.年度, cal.月份);
                                }
                            }
                        }

                        rs.Close();

                        foreach (CalRunInfo cal in cals)
                        {
                            string cal_run_id = cal.日历组编号;

                            foreach (string groupId in cal.薪资组列表)
                            {
#if (DEBUG)
                                StringBuilder msgBuilder = SychSalaryResult(cal_run_id, groupId);
                                sb.Append(msgBuilder.ToString());

                                StringBuilder msgBuilderItem = SalaryResultItem.SychSalaryResultItem(cal_run_id, groupId);
                                sb.Append(msgBuilderItem.ToString());
#else
                                SalaryAuditingResult sar = SalaryAuditingResult.AddSalaryAuditingResult(groupId, cal_run_id);

                                if (sar.表工资已审核)
                                {
                                    continue;
                                }

                                if (sar.已审核 || sar.已冻结)
                                {
                                    sb.Append(String.Format("薪资组{0}, 日历组({0})的工资已审核或者已冻结,不能重新同步。", groupId, cal_run_id));
                                    return(sb);
                                }
                                else
                                {
                                    StringBuilder msgBuilder = SychSalaryResult(cal_run_id, groupId);
                                    sb.Append(msgBuilder.ToString());

                                    StringBuilder msgBuilderItem = SalaryResultItem.SychSalaryResultItem(cal_run_id, groupId);
                                    sb.Append(msgBuilderItem.ToString());
                                }
#endif
                            }
                        }
                    }
                }
                finally
                {
                    if (rs != null)
                    {
                        rs.Close();
                    }
                    conn.Close();
                }
            }
            return(sb);
        }