public virtual CrystalDecisions.CrystalReports.Engine.ReportDocument CreateReport()
        {
            Report_Payroll_MPFDetailList rpt = new Report_Payroll_MPFDetailList();

            rpt.Site = this.Site;
            return(rpt);
        }
        public override ReportDocument GenerateReport()
        {
            if (EmpList != null)
            {
                DataSet.Payroll_MPFDetailList dataSet = new DataSet.Payroll_MPFDetailList();
                long   lngPayPeriodFr = PayPeriodFr.Ticks;
                long   lngPayPeriodTo = PayPeriodTo.Ticks;
                string strPrintPeriod = string.Empty;
                if (lngPayPeriodFr != 0 && lngPayPeriodTo != 0)
                {
                    strPrintPeriod = PayPeriodFr.ToString("yyyy-MM-dd") + " - " + PayPeriodTo.ToString("yyyy-MM-dd");
                }

                DataSet.Payroll_MPFDetailList.EmpInfoDataTable   empInfoTable = dataSet.EmpInfo;   //new Payroll_MPFDetailList.EmpInfoDataTable();
                DataSet.Payroll_MPFDetailList.MPFDetailDataTable mpfTable     = dataSet.MPFDetail; //new Payroll_MPFDetailList.MPFDetailDataTable();

                foreach (EEmpPersonalInfo empInfo in EmpList)
                {
                    EEmpPersonalInfo.db.select(dbConn, empInfo);


                    DBFilter positionFilter = new DBFilter();
                    positionFilter.add(new Match("EmpID", empInfo.EmpID));
                    if (lngPayPeriodFr != 0 && lngPayPeriodTo != 0)
                    {
                        positionFilter.add(new Match("EmpPosEffFr", "<=", PayPeriodTo.CompareTo(AppUtils.ServerDateTime()) < 0 ? PayPeriodTo : AppUtils.ServerDateTime()));
                        OR orPosEffToTerms = new OR();
                        orPosEffToTerms.add(new Match("EmpPosEffTo", ">=", PayPeriodFr));
                        orPosEffToTerms.add(new NullTerm("EmpPosEffTo"));
                        positionFilter.add(orPosEffToTerms);
                    }
                    positionFilter.add("EmpPosEffFr", false);

                    ArrayList        empPositionInfos = EEmpPositionInfo.db.select(dbConn, positionFilter);
                    EEmpPositionInfo empPositionInfo;
                    if (empPositionInfos.Count > 0)
                    {
                        empPositionInfo = (EEmpPositionInfo)empPositionInfos[0];
                    }
                    else
                    {
                        empPositionInfo = new EEmpPositionInfo();
                    }

                    ECompany company = new ECompany();
                    company.CompanyID = empPositionInfo.CompanyID;
                    ECompany.db.select(dbConn, company);

                    EPosition position = new EPosition();
                    position.PositionID = empPositionInfo.PositionID;
                    EPosition.db.select(dbConn, position);

                    DataSet.Payroll_MPFDetailList.EmpInfoRow empInfoRow = empInfoTable.NewEmpInfoRow();
                    empInfoRow.EmpID       = empInfo.EmpID;
                    empInfoRow.EmpNo       = empInfo.EmpNo;
                    empInfoRow.EmpName     = empInfo.EmpEngFullName;
                    empInfoRow.CompanyName = company.CompanyCode + " - " + company.CompanyName;
                    empInfoRow.PrintPeriod = strPrintPeriod;
                    empInfoRow.Position    = position.PositionCode + " - " + position.PositionDesc;
                    empInfoRow.DateOfJoin  = empInfo.EmpDateOfJoin;

                    empInfoTable.Rows.Add(empInfoRow);

                    DBFilter payPeriodFilter = new DBFilter();
                    if (lngPayPeriodFr != 0 && lngPayPeriodTo != 0)
                    {
                        payPeriodFilter.add(new Match("pp.PayPeriodFr", "<=", PayPeriodTo));
                        payPeriodFilter.add(new Match("pp.PayPeriodTo", ">=", PayPeriodFr));
                    }
                    DBFilter empPayrollFilter = new DBFilter();
                    empPayrollFilter.add(new Match("EmpID", empInfo.EmpID));
                    empPayrollFilter.add(new IN("PayPeriodID", "Select PayPeriodID from PayrollPeriod pp", payPeriodFilter));


                    DBFilter mpfRecordFilter = new DBFilter();
                    mpfRecordFilter.add(new IN("EmpPayrollID", "Select EmpPayrollID from EmpPayroll", empPayrollFilter));
                    ArrayList mpfRecords = EMPFRecord.db.select(dbConn, mpfRecordFilter);


                    foreach (EMPFRecord mpfRecord in mpfRecords)
                    {
                        EEmpPayroll empPayroll = new EEmpPayroll();
                        empPayroll.EmpPayrollID = mpfRecord.EmpPayrollID;
                        EEmpPayroll.db.select(dbConn, empPayroll);
                        EPayrollPeriod payrollPeriod = new EPayrollPeriod();
                        payrollPeriod.PayPeriodID = empPayroll.PayPeriodID;
                        EPayrollPeriod.db.select(dbConn, payrollPeriod);


                        DataSet.Payroll_MPFDetailList.MPFDetailRow mpfRow = mpfTable.NewMPFDetailRow();
                        mpfRow.MPFRecordID    = mpfRecord.MPFRecordID;
                        mpfRow.EmpID          = empInfo.EmpID;
                        mpfRow.Period         = mpfRecord.MPFRecPeriodFr.ToString("yyyy-MM-dd") + " - " + mpfRecord.MPFRecPeriodTo.ToString("yyyy-MM-dd");
                        mpfRow.PeriodFr       = mpfRecord.MPFRecPeriodFr; //payrollPeriod.PayPeriodFr;
                        mpfRow.PeriodTo       = mpfRecord.MPFRecPeriodTo; //payrollPeriod.PayPeriodTo;
                        mpfRow.RelevantIncome = mpfRecord.MPFRecActMCRI;
                        mpfRow.MCEE           = mpfRecord.MPFRecActMCEE;
                        mpfRow.VCEE           = mpfRecord.MPFRecActVCEE;
                        mpfRow.MCER           = mpfRecord.MPFRecActMCER;
                        mpfRow.VCER           = mpfRecord.MPFRecActVCER;
                        mpfTable.Rows.Add(mpfRow);
                    }
                }
                if (reportDocument == null)
                {
                    reportDocument = new ReportTemplate.Report_Payroll_MPFDetailList();
                }
                else
                {
                }

                reportDocument.SetDataSource(dataSet);

                return(reportDocument);
            }
            else
            {
                return(null);
            }
        }