Merge pull request '20260806-2930 Need to change title "Bonus & Other Allowance" to "Bonus" at fIncometaxCertificate' (#8) from dev_shahadat into devqc
Reviewed-on: http://103.197.204.162:3025/CelHRTeam/CEL_Payroll/pulls/8
This commit is contained in:
commit
4b4e5f272c
57
CLAUDE.md
Normal file
57
CLAUDE.md
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
CEL Payroll is a .NET Framework 4.5 WinForms desktop payroll/HR application (C#) backed by SQL Server. Solution: `CEL Payroll.sln` (VS 2019 format; folder name refers to the original VS2015 port). There are no test projects and no linter.
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
Build from Visual Studio, or with MSBuild from a Developer Command Prompt:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
msbuild "CEL Payroll.sln" /p:Configuration=Debug
|
||||||
|
```
|
||||||
|
|
||||||
|
Startup project is `Payroll.UI` (WinExe, entry `Payroll.UI/Payroll.UI/Program.cs` → `frmMain`). Third-party and in-house framework assemblies (`Ease.CoreV35`, `Ease.Controls`, `Ease.Report`, ReportViewer, NPOI, ClosedXML, iTextSharp, etc.) are checked in as binaries under `Library/` and referenced by HintPath, not NuGet. Crystal Reports 10.5 runtime must be installed for `Payroll.Report` to build.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
Layered, with project dependencies flowing downward:
|
||||||
|
|
||||||
|
- **Payroll.UI** — WinForms screens, grouped by module folder (Salary, Tax, Bonus, Leave, PF, Gratuity, FinalSettlement, …).
|
||||||
|
- **Payroll.Report** — report classes (`Class/rpt*.cs`), the report viewer (`UI/fReportViewer.cs`), typed datasets (`PayrollDataSet`), and `.rdlc` files under `RDLC/` (plus some Crystal reports).
|
||||||
|
- **Ease.UICreator** — generic, config-driven master/detail form generator used for simple setup screens.
|
||||||
|
- **Payroll.Controls** — shared custom WinForms controls.
|
||||||
|
- **Payroll.Service** — service implementations + data access (SQL).
|
||||||
|
- **Payroll.BO** — business objects and the service interfaces.
|
||||||
|
- **Ease.SvcHost** — Windows service exposing `Payroll.Service` over .NET Remoting (TCP) for a 3-tier deployment.
|
||||||
|
- **Payroll.NotifProcessInterface** — console exe that runs notification/mail processing.
|
||||||
|
|
||||||
|
### BO / Service / DA pattern
|
||||||
|
|
||||||
|
Each entity spans three files that share a module folder name across projects, e.g. Bonus:
|
||||||
|
|
||||||
|
1. `Payroll.BO/Bonus/Bonus.cs` — class deriving from `BasicBaseObject` (or similar Ease.CoreV35 base), properties call `OnPropertyChange`, static `Get(...)`/instance `Save()`/`Delete()` methods that use a per-type `Cache` and delegate to `Service`. The **service interface (`IBonusService`) is declared at the bottom of the same BO file**. `Service` is resolved via `Services.Factory.CreateService<IBonusService>(...)`.
|
||||||
|
2. `Payroll.Service/Bonus/Service/BonusService.cs` — `ServiceTemplate` subclass implementing the interface. Every method wraps work in `TransactionContext.Begin()` / `tc.End()`, with `tc.HandleError()` + `ExceptionLog.Write(e)` + `throw new ServiceException(...)` in the catch. `MapObject` maps `DataReader` columns to BO properties and sets `ObjectState.Saved`.
|
||||||
|
3. `Payroll.Service/Bonus/DA/BonusDA.cs` — `internal static` class of raw SQL. Queries use Ease's placeholder formatting, not SqlParameters: `%n` number, `%s` string, `%d` date (e.g. `tc.ExecuteNonQuery("UPDATE Bonus SET code=%s WHERE BonusID=%n", ...)`).
|
||||||
|
|
||||||
|
Adding a method to an entity means touching all three: interface + BO wrapper, service implementation, DA query. IDs use the Ease `ID` type (`.Integer` for the int value). Many queries are scoped by `SystemInformation.CurrentSysInfo.PayrollTypeID`.
|
||||||
|
|
||||||
|
Service location is controlled by `serviceHandler` in `Payroll.UI/Payroll.UI/App.config`: `Payroll.Service.dll/conn` loads the services in-process using the `conn` entry in `<dbSettings>`; a `host:port/Payroll.Service` value goes through `Ease.SvcHost` remoting instead.
|
||||||
|
|
||||||
|
### Menus and forms
|
||||||
|
|
||||||
|
The main menu is driven by `Payroll.UI/Payroll.UI/Menu.xml`. Each `<permissioninfo>` names a `<formname>` and `<showfunction>`; `frmMain` resolves the form type by reflection (`Payroll.UI.<formname>` unless the name is assembly-qualified) and invokes the parameterless show method. Simple setup screens use `BasicUIForms` (`CreateUI.cs`), whose `show*` methods build forms through `Ease.UICreator`. Adding a screen to the menu means adding a Menu.xml entry whose names match exactly.
|
||||||
|
|
||||||
|
### Reports
|
||||||
|
|
||||||
|
RDLC files are compiled as **EmbeddedResource** in `Payroll.Report.csproj` and loaded by manifest name, e.g. `"Payroll.Report.RDLC.BankAdvice.rdlc"` (see `Class/rptBankAdvice.cs`, `UI/fReportViewer.cs`). A new `.rdlc` must be added to the csproj as an EmbeddedResource, and its dataset fields must match the `DataTable` passed in (typed datasets live in `PayrollDataSet`).
|
||||||
|
|
||||||
|
## Repository conventions
|
||||||
|
|
||||||
|
- Branching: work on `dev_shahadat`, PRs into `devqc` (Gitea-hosted).
|
||||||
|
- Commit messages are prefixed with the ticket ID in the form `YYYYMMDD-NNNN <description>`, e.g. `20260929-3216 Bank advice Salary Report Modification`.
|
||||||
|
- Release commits typically bump `AssemblyVersion`/`AssemblyFileVersion` in `Payroll.UI/Payroll.UI/Properties/AssemblyInfo.cs` to a date-based `YY.M.DD.0` value.
|
||||||
|
- `App.config` contains live DB connection strings and is frequently changed per environment; don't commit connection-string changes unless intended.
|
||||||
|
|
@ -1248,6 +1248,7 @@ namespace Payroll.BO
|
||||||
Memorandum = 52,
|
Memorandum = 52,
|
||||||
SalarySMS = 53,
|
SalarySMS = 53,
|
||||||
SalarySheetSummary = 54,
|
SalarySheetSummary = 54,
|
||||||
|
SalarySheetSummaryWithLWP = 541,
|
||||||
SalarySheetArrear = 57,
|
SalarySheetArrear = 57,
|
||||||
SalaryBankSummary = 55,
|
SalaryBankSummary = 55,
|
||||||
SalaryByMonthAndYear = 111111,
|
SalaryByMonthAndYear = 111111,
|
||||||
|
|
|
||||||
|
|
@ -1437,6 +1437,11 @@ namespace Payroll.BO
|
||||||
item.BasicCurrentDeduct = nTotalUnAuthorizedLeave - item.BasicPaidDays;
|
item.BasicCurrentDeduct = nTotalUnAuthorizedLeave - item.BasicPaidDays;
|
||||||
item.BasicPaidDays += item.BasicCurrentDeduct;
|
item.BasicPaidDays += item.BasicCurrentDeduct;
|
||||||
item.BasicUnpaidDays = 0;
|
item.BasicUnpaidDays = 0;
|
||||||
|
|
||||||
|
// Allowances set in the parameter are cut for the same days as Basic
|
||||||
|
item.OtherCurrentDeduct = nTotalUnAuthorizedLeave - item.OtherPaidDays;
|
||||||
|
item.OtherPaidDays += item.OtherCurrentDeduct;
|
||||||
|
item.OtherUnpaidDays = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (UnAuthorizeLeaveParamDetail detail in Param.Details)
|
foreach (UnAuthorizeLeaveParamDetail detail in Param.Details)
|
||||||
|
|
@ -1497,13 +1502,16 @@ namespace Payroll.BO
|
||||||
detail.Type == EnumSalaryComponent.Basic ? (int)EnumSalaryItemCode.Basic_Salary : detail.AllowanceID.Integer,
|
detail.Type == EnumSalaryComponent.Basic ? (int)EnumSalaryItemCode.Basic_Salary : detail.AllowanceID.Integer,
|
||||||
salaryDetail.SupportID.Integer, salaryDetail.Description, GlobalFunctions.Round(nAmount));
|
salaryDetail.SupportID.Integer, salaryDetail.Description, GlobalFunctions.Round(nAmount));
|
||||||
|
|
||||||
this.AddDetail(salary, EnumSalaryGroup.Miscellaneous, EnumSalaryItemCode.Tot_UnauthLeave_Days, Param.UnAhuthorizeLeaveID.Integer, 0, "UnAuthorized Leave Days", nThisMonthUnAuthorizedLeave);
|
|
||||||
//if(nUnpaidDays>0)
|
//if(nUnpaidDays>0)
|
||||||
//{
|
//{
|
||||||
|
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Days deducted this month, added once (not per parameter item); used by salary sheet, payslip and arrear
|
||||||
|
if (Param.Details.Count > 0)
|
||||||
|
this.AddDetail(salary, EnumSalaryGroup.Miscellaneous, EnumSalaryItemCode.Tot_UnauthLeave_Days, Param.UnAhuthorizeLeaveID.Integer, 0, "UnAuthorized Leave Days", item.BasicCurrentDeduct);
|
||||||
|
|
||||||
//}
|
//}
|
||||||
|
|
||||||
//item.currentDeduct = nUnpaidDays;
|
//item.currentDeduct = nUnpaidDays;
|
||||||
|
|
|
||||||
|
|
@ -931,14 +931,53 @@ namespace Payroll.Report
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public void ShowReport()
|
public void ShowReport()
|
||||||
|
{
|
||||||
|
ShowSalarySheet(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Salary Sheet with LWP (ReportID 541): items are shown at full amount and the
|
||||||
|
/// unauthorized leave (LWP) deduction is shown as a separate deduction column.
|
||||||
|
/// </summary>
|
||||||
|
public void ShowReportWithLWP()
|
||||||
|
{
|
||||||
|
ShowSalarySheet(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShowSalarySheet(bool withLWP)
|
||||||
{
|
{
|
||||||
fReportViewer form = new fReportViewer();
|
fReportViewer form = new fReportViewer();
|
||||||
_SalaryMonth = _selectedParameter.FromDate.Value;
|
_SalaryMonth = _selectedParameter.FromDate.Value;
|
||||||
ID nReportID = _selectedParameter.ReportItem.ReportID;
|
// Signatures/authorization are shared with the normal Salary Sheet (54)
|
||||||
|
ID nReportID = withLWP ? ID.FromInteger((int)EnumReportType.SalarySheetSummary) : _selectedParameter.ReportItem.ReportID;
|
||||||
string sEmpID = _selectedParameter.ReportItem.INSQL;
|
string sEmpID = _selectedParameter.ReportItem.INSQL;
|
||||||
DataRow oDR = null;
|
DataRow oDR = null;
|
||||||
DataSet oSalarySheets = null;
|
DataSet oSalarySheets = null;
|
||||||
oSalarySheets = SalaryMonthly.GetEmpSalarySheet(GlobalFunctions.LastDateOfMonth(_SalaryMonth), sEmpID);
|
oSalarySheets = SalaryMonthly.GetEmpSalarySheet(GlobalFunctions.LastDateOfMonth(_SalaryMonth), sEmpID);
|
||||||
|
|
||||||
|
// One "LWP" row per employee = sum of all unauthorized leave deductions
|
||||||
|
DataTable dtLWP = oSalarySheets.Tables["UnAuthorizedLeave"].Clone();
|
||||||
|
dtLWP.Columns["Description"].ReadOnly = false;
|
||||||
|
if (withLWP)
|
||||||
|
{
|
||||||
|
foreach (DataRow src in oSalarySheets.Tables["UnAuthorizedLeave"].Rows)
|
||||||
|
{
|
||||||
|
DataRow lwp = GetItem3(dtLWP, src["EMPLOYEENO"].ToString());
|
||||||
|
if (lwp == null)
|
||||||
|
{
|
||||||
|
lwp = dtLWP.NewRow();
|
||||||
|
lwp.ItemArray = src.ItemArray;
|
||||||
|
lwp["ITEMCODE"] = 0;
|
||||||
|
lwp["ITEMID"] = 0;
|
||||||
|
lwp["Description"] = "LWP";
|
||||||
|
dtLWP.Rows.Add(lwp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lwp["Amount"] = Convert.ToDouble(lwp["Amount"]) + Convert.ToDouble(src["Amount"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
PayrollDataSet.PayrollDataSet.SalarySheetDataTable dTSalarySheet = new Payroll.Report.PayrollDataSet.PayrollDataSet.SalarySheetDataTable();
|
PayrollDataSet.PayrollDataSet.SalarySheetDataTable dTSalarySheet = new Payroll.Report.PayrollDataSet.PayrollDataSet.SalarySheetDataTable();
|
||||||
|
|
||||||
List<string> components = new List<string>() { "Basic", "Allowance", "OT", "Deduction", "Loan" };
|
List<string> components = new List<string>() { "Basic", "Allowance", "OT", "Deduction", "Loan" };
|
||||||
|
|
@ -1056,6 +1095,12 @@ namespace Payroll.Report
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
seq++;
|
||||||
|
foreach (DataRow dr in dtLWP.Rows)
|
||||||
|
{
|
||||||
|
dr["SequenceNo"] = seq;
|
||||||
|
}
|
||||||
|
|
||||||
seq++;
|
seq++;
|
||||||
foreach (DataRow dr in oSalarySheets.Tables["TotalDeduction"].Rows)
|
foreach (DataRow dr in oSalarySheets.Tables["TotalDeduction"].Rows)
|
||||||
{
|
{
|
||||||
|
|
@ -1083,7 +1128,8 @@ namespace Payroll.Report
|
||||||
oDR = dTSalarySheet.NewRow();
|
oDR = dTSalarySheet.NewRow();
|
||||||
this.CopyNonMngtForGross(oDR, source);
|
this.CopyNonMngtForGross(oDR, source);
|
||||||
|
|
||||||
if (source["ITEMGROUP"].ToString() == "1")
|
// With LWP the items stay at full amount; LWP is shown as a separate deduction
|
||||||
|
if (!withLWP && source["ITEMGROUP"].ToString() == "1")
|
||||||
{
|
{
|
||||||
DataRow dr = this.GetItem2(oSalarySheets.Tables["UnAuthorizedLeave"], source["EMPLOYEENO"].ToString(), EnumSalaryGroup.UnauthLeave, (EnumSalaryItemCode)Convert.ToInt16(source["ITEMCODE"]), Convert.ToInt16(source["ITEMID"]));
|
DataRow dr = this.GetItem2(oSalarySheets.Tables["UnAuthorizedLeave"], source["EMPLOYEENO"].ToString(), EnumSalaryGroup.UnauthLeave, (EnumSalaryItemCode)Convert.ToInt16(source["ITEMCODE"]), Convert.ToInt16(source["ITEMID"]));
|
||||||
if (dr != null)
|
if (dr != null)
|
||||||
|
|
@ -1106,6 +1152,15 @@ namespace Payroll.Report
|
||||||
{
|
{
|
||||||
oDR["Amount"] = Convert.ToDouble(dr2["Amount"]) + Convert.ToDouble(dr["Amount"]);
|
oDR["Amount"] = Convert.ToDouble(dr2["Amount"]) + Convert.ToDouble(dr["Amount"]);
|
||||||
}
|
}
|
||||||
|
if (withLWP && dr2 != null)
|
||||||
|
{
|
||||||
|
// Gross before LWP = Net Pay + Total Deduction + LWP
|
||||||
|
DataRow drLWP = this.GetItem3(dtLWP, source["EMPLOYEENO"].ToString());
|
||||||
|
double nGross = Convert.ToDouble(dr2["Amount"]);
|
||||||
|
if (dr != null) nGross += Convert.ToDouble(dr["Amount"]);
|
||||||
|
if (drLWP != null) nGross += Convert.ToDouble(drLWP["Amount"]);
|
||||||
|
oDR["Amount"] = nGross;
|
||||||
|
}
|
||||||
dTSalarySheet.Rows.Add(oDR);
|
dTSalarySheet.Rows.Add(oDR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1116,10 +1171,35 @@ namespace Payroll.Report
|
||||||
dTSalarySheet.Rows.Add(oDR);
|
dTSalarySheet.Rows.Add(oDR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (DataRow source in dtLWP.Rows)
|
||||||
|
{
|
||||||
|
oDR = dTSalarySheet.NewRow();
|
||||||
|
this.CopyNonMngtForDeduct(oDR, source);
|
||||||
|
dTSalarySheet.Rows.Add(oDR);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (DataRow source in oSalarySheets.Tables["TotalDeduction"].Rows)
|
foreach (DataRow source in oSalarySheets.Tables["TotalDeduction"].Rows)
|
||||||
{
|
{
|
||||||
oDR = dTSalarySheet.NewRow();
|
oDR = dTSalarySheet.NewRow();
|
||||||
this.CopyNonManagement(oDR, source);
|
this.CopyNonManagement(oDR, source);
|
||||||
|
if (withLWP)
|
||||||
|
{
|
||||||
|
DataRow drLWP = this.GetItem3(dtLWP, source["EMPLOYEENO"].ToString());
|
||||||
|
if (drLWP != null)
|
||||||
|
oDR["Amount"] = Convert.ToDouble(oDR["Amount"]) + Convert.ToDouble(drLWP["Amount"]);
|
||||||
|
}
|
||||||
|
dTSalarySheet.Rows.Add(oDR);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Employee with LWP but no regular deduction has no Total Deduction row
|
||||||
|
foreach (DataRow source in dtLWP.Rows)
|
||||||
|
{
|
||||||
|
if (this.GetItem3(oSalarySheets.Tables["TotalDeduction"], source["EMPLOYEENO"].ToString()) != null) continue;
|
||||||
|
oDR = dTSalarySheet.NewRow();
|
||||||
|
this.CopyNonManagement(oDR, source);
|
||||||
|
oDR["Description"] = "Total Deduction";
|
||||||
|
oDR["SequenceNo"] = oSalarySheets.Tables["TotalDeduction"].Rows.Count > 0
|
||||||
|
? oSalarySheets.Tables["TotalDeduction"].Rows[0]["SequenceNo"] : Convert.ToInt32(source["SequenceNo"]) + 1;
|
||||||
dTSalarySheet.Rows.Add(oDR);
|
dTSalarySheet.Rows.Add(oDR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1130,7 +1210,7 @@ namespace Payroll.Report
|
||||||
dTSalarySheet.Rows.Add(oDR);
|
dTSalarySheet.Rows.Add(oDR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
//return dTSalarySheet;
|
//return dTSalarySheet;
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -385,6 +385,27 @@ namespace Payroll.Service
|
||||||
|
|
||||||
internal static DataSet GetTaxCertificate(TransactionContext tc, string empNo, int taxParamId)
|
internal static DataSet GetTaxCertificate(TransactionContext tc, string empNo, int taxParamId)
|
||||||
{
|
{
|
||||||
|
//string sql = SQLParser.MakeSQL(@"SELECT * FROM(
|
||||||
|
// SELECT CASE it.DESCRIPTION
|
||||||
|
// WHEN 'Basic Salary' THEN 'Basic'
|
||||||
|
// WHEN 'House Rent Allowance' THEN 'House'
|
||||||
|
// WHEN 'Conveyance Allowance' THEN 'Conveyance'
|
||||||
|
// WHEN 'Medical Allowance' THEN 'Medical'
|
||||||
|
// END Description,it.TOTALAMOUNT Amount, position FROM INCOMETAXYEARLY it,employee e
|
||||||
|
// WHERE it.EMPLOYEEID=e.EMPLOYEEID
|
||||||
|
// AND e.EMPLOYEENO=%s
|
||||||
|
// AND it.TAXPARAMID=%n
|
||||||
|
// AND it.ItemCode IN(-201,-203,-205,-222)
|
||||||
|
// UNION
|
||||||
|
// SELECT 'Bonus & other allowance',SUM(it.TOTALAMOUNT) Amount, 200 position FROM INCOMETAXYEARLY it,employee e
|
||||||
|
// WHERE it.EMPLOYEEID=e.EMPLOYEEID
|
||||||
|
// AND e.EMPLOYEENO=%s
|
||||||
|
// AND it.TAXPARAMID=%n
|
||||||
|
// AND it.ItemCode IN(-213, -224)
|
||||||
|
// ) tab1
|
||||||
|
// ORDER BY position
|
||||||
|
// ", empNo, taxParamId, empNo, taxParamId);
|
||||||
|
//return tc.ExecuteDataSet(sql);
|
||||||
string sql = SQLParser.MakeSQL(@"SELECT * FROM(
|
string sql = SQLParser.MakeSQL(@"SELECT * FROM(
|
||||||
SELECT CASE it.DESCRIPTION
|
SELECT CASE it.DESCRIPTION
|
||||||
WHEN 'Basic Salary' THEN 'Basic'
|
WHEN 'Basic Salary' THEN 'Basic'
|
||||||
|
|
@ -397,7 +418,7 @@ namespace Payroll.Service
|
||||||
AND it.TAXPARAMID=%n
|
AND it.TAXPARAMID=%n
|
||||||
AND it.ItemCode IN(-201,-203,-205,-222)
|
AND it.ItemCode IN(-201,-203,-205,-222)
|
||||||
UNION
|
UNION
|
||||||
SELECT 'Bonus & other allowance',SUM(it.TOTALAMOUNT) Amount, 200 position FROM INCOMETAXYEARLY it,employee e
|
SELECT 'Bonus',SUM(it.TOTALAMOUNT) Amount, 200 position FROM INCOMETAXYEARLY it,employee e
|
||||||
WHERE it.EMPLOYEEID=e.EMPLOYEEID
|
WHERE it.EMPLOYEEID=e.EMPLOYEEID
|
||||||
AND e.EMPLOYEENO=%s
|
AND e.EMPLOYEENO=%s
|
||||||
AND it.TAXPARAMID=%n
|
AND it.TAXPARAMID=%n
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,8 @@
|
||||||
<section name="InformationForReportTool" type="Ease.SearchTools.Objects.InformationForReportToolConfigHandler, Ease.SearchTools.Objects"/>
|
<section name="InformationForReportTool" type="Ease.SearchTools.Objects.InformationForReportToolConfigHandler, Ease.SearchTools.Objects"/>
|
||||||
</configSections>
|
</configSections>
|
||||||
<dbSettings>
|
<dbSettings>
|
||||||
<connection name="conn" provider="sql" connectionString="server=cel80;Database=CELPayroll;User ID=CELPayroll;password=4B06094270245E4D5B63" sqlSyntax="SQL"/>
|
<!--<connection name="conn" provider="sql" connectionString="server=cel80;Database=CELPayroll;User ID=CELPayroll;password=4B06094270245E4D5B63" sqlSyntax="SQL"/>-->
|
||||||
<!--<connection name="conn" provider="sql" connectionString="server=103.197.204.164,1718;Database=CELPayrol;User ID=Easeuser;Password=EaSeuSeR2025" sqlSyntax="SQL"/>-->
|
<connection name="conn" provider="sql" connectionString="server=103.197.204.164,1718;Database=CELPayrol;User ID=DBuser;Password=ceLEa&e2025" sqlSyntax="SQL"/>
|
||||||
|
|
||||||
<!--<connection name="conn" provider="sql" connectionString="server=WIN-D48IJC70V70;Database=GPPayroll;integrated security=yes;" sqlSyntax="SQL"/>-->
|
|
||||||
</dbSettings>
|
</dbSettings>
|
||||||
<appSettings>
|
<appSettings>
|
||||||
<add key="serviceHandler" value="Payroll.Service.dll/conn"/>
|
<add key="serviceHandler" value="Payroll.Service.dll/conn"/>
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,9 @@ namespace Payroll.UI
|
||||||
}
|
}
|
||||||
// dt.Rows.Add("", "", "", "Total", nDebit.ToString(), nCredit.ToString());
|
// dt.Rows.Add("", "", "", "Total", nDebit.ToString(), nCredit.ToString());
|
||||||
// GlobalFunctions.ExportToExcel(dt, savefile.FileName, "Sheet1");
|
// GlobalFunctions.ExportToExcel(dt, savefile.FileName, "Sheet1");
|
||||||
|
// ToCSV walks dt.Rows, so the sorted view has to be materialized into a table.
|
||||||
|
dt.DefaultView.Sort = "[GL Name] ASC";
|
||||||
|
dt = dt.DefaultView.ToTable();
|
||||||
GlobalFunctions.ToCSV(dt, savefile.FileName);
|
GlobalFunctions.ToCSV(dt, savefile.FileName);
|
||||||
MessageBox.Show("Excel created at " + savefile.FileName,"Exported",MessageBoxButtons.OK,MessageBoxIcon.Information);
|
MessageBox.Show("Excel created at " + savefile.FileName,"Exported",MessageBoxButtons.OK,MessageBoxIcon.Information);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1101,6 +1101,14 @@
|
||||||
</argument>
|
</argument>
|
||||||
</arguments>
|
</arguments>
|
||||||
</permissioninfo>
|
</permissioninfo>
|
||||||
|
<permissioninfo key="12.2.24" name="Salary Sheet with LWP" isvisible="true" parentkey="12.2" menufor="User">
|
||||||
|
<formname>Payroll.Report.fReportSearch</formname>
|
||||||
|
<showfunction>ShowDlg</showfunction>
|
||||||
|
<arguments>
|
||||||
|
<argument name="ReportID" value="541">
|
||||||
|
</argument>
|
||||||
|
</arguments>
|
||||||
|
</permissioninfo>
|
||||||
|
|
||||||
<PermissionInfo Key = "12.2.5" Name= "Payroll Register For All" IsVisible="true" ParentKey="12.2" MenuFor="User">
|
<PermissionInfo Key = "12.2.5" Name= "Payroll Register For All" IsVisible="true" ParentKey="12.2" MenuFor="User">
|
||||||
<FormName>frmPayRollRegisterForAll</FormName>
|
<FormName>frmPayRollRegisterForAll</FormName>
|
||||||
|
|
|
||||||
|
|
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("21.6.26.0")]
|
[assembly: AssemblyVersion("26.10.26.0")]
|
||||||
[assembly: AssemblyFileVersion("21.6.26.0")]
|
[assembly: AssemblyFileVersion("26.10.26.0")]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user