Compare commits
No commits in common. "devqc" and "dev_chapal" have entirely different histories.
devqc
...
dev_chapal
|
@ -441,21 +441,20 @@ namespace HRM.BO
|
|||
}
|
||||
}
|
||||
|
||||
//public bool OnlyManualInTime
|
||||
//{
|
||||
// get {
|
||||
// return (this.IsManualEntry == true && this.ActualInTime != null) ? true : false;}
|
||||
public bool OnlyManualInTime
|
||||
{
|
||||
get {
|
||||
return (this.IsManualEntry == true && this.ActualInTime != null) ? true : false;}
|
||||
|
||||
//}
|
||||
//public bool OnlyManualOutTime
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return (this.IsManualEntry == true && this.ActualOutTime != null) ? true : false;
|
||||
// }
|
||||
//}
|
||||
public bool OnlyManualInTime { get; set; }
|
||||
public bool OnlyManualOutTime { get; set; }
|
||||
}
|
||||
public bool OnlyManualOutTime
|
||||
{
|
||||
get
|
||||
{
|
||||
return (this.IsManualEntry == true && this.ActualOutTime != null) ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -3383,7 +3382,6 @@ namespace HRM.BO
|
|||
DataTable getTopEmpAbsentData(Employee oEmp, EnumAttendanceType type);
|
||||
DataTable getcorehrAbsentData(Employee oEmp, EnumAttendanceType type);
|
||||
DataSet AttnDaysSummaryForSalaryProcess(DateTime FromDate, DateTime ToDate);
|
||||
List<DailyAttnProcess> GetByEmployees(DateTime attnDate, string employeeIDs);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -370,8 +370,7 @@ namespace HRM.BO
|
|||
List<SearchEmployee> FindCordinator(int? id, int? payrollTypeID);
|
||||
List<SearchEmployee> FindEmpCodeName(int payrolltypeid, string code, string name);
|
||||
List<SearchEmployee> FindEmpCodeNameForEmployeePicker(int userid, int payrolltypeid, string code, string name);
|
||||
List<SearchEmployee> FindEmpCodeNameForEmployeePickerNew(int userid, int payrolltypeid, string code, string name, bool isForLifeCycle);
|
||||
SearchEmployee get(int empid);
|
||||
SearchEmployee get(int empid);
|
||||
List<SearchEmployee> GetEmployeeNotYetUser(int payrollTypeID);
|
||||
List<SearchEmployee> GetTeam(int employeeid);
|
||||
List<SearchEmployee> GetTeam(int employeeid, EnumStatus enumStatus);
|
||||
|
|
|
@ -24,37 +24,19 @@ namespace HRM.DA
|
|||
|
||||
#region Insert function
|
||||
|
||||
internal static void Insert(TransactionContext tc, DailyAttnProcess item)
|
||||
{
|
||||
//tc.ExecuteNonQuery(
|
||||
// "INSERT INTO DailyAttnProcess(DailyAttnProcessID, EmployeeID, AttnDate, ShiftID, InTime, OutTime,WorkDayType, AttenType, Comments,Reason, IsManualEntry,IsLate, LateHour, EarlyHour, OTHour, ReferenceID, CreatedBy, CreatedDate, OtRemarks, BenefitRemarks, TempShiftID, WFStatus, ApprovedOTHOUR, LMRemarks, DHRemarks, SalaryMonth, ActualInTime, ActualOutTime, CLAIMWFSTATUS)" +
|
||||
// " VALUES(%n, %n, %d, %n, %D, %D, %n, %n, %s,%s,%b, %b, %n, %n, %n, %n, %n, %d, %s, %s, %n,%n,%n, %s, %s, %d,%D,%D, %n)",
|
||||
// item.ID, item.EmployeeID, item.AttnDate, DataReader.GetNullValue(item.ShiftID),
|
||||
// DataReader.GetNullValue(item.EmpInTime), DataReader.GetNullValue(item.EmpOutTime), item.WorkDayType,
|
||||
// item.AttenType, item.Comments, item.Reason, item.IsManualEntry, item.IsLate, item.LateHour,
|
||||
// item.EarlyHour, item.OTHour, DataReader.GetNullValue(item.ReferenceID, 0), item.CreatedBy,
|
||||
// item.CreatedDate, item.OtRemarks, item.BenefitRemarks, item.TempShiftID,
|
||||
// item.WFStatus, item.ApprovedOTHour, item.LMRemarks, item.DHRemarks, item.SalaryMonth, item.ActualInTime,
|
||||
// item.ActualOutTime, (int)EnumClaimWFStatus.None);
|
||||
tc.ExecuteNonQuery(@"INSERT INTO DailyAttnProcess(DailyAttnProcessID, EmployeeID, AttnDate,
|
||||
ShiftID, InTime, OutTime,
|
||||
WorkDayType, ATTENTYPE, Comments,
|
||||
IsManualEntry,OnlyManualInTime,OnlyManualOutTime,
|
||||
LateHour, EarlyHour, OTHour,
|
||||
ReferenceID, CreatedBy, CreatedDate)
|
||||
VALUES(%n, %n, %d,
|
||||
%n, %D, %D,
|
||||
%n, %n, %s,
|
||||
%b, %b, %b,
|
||||
%n, %n, %n,
|
||||
%n, %n, %d)",
|
||||
item.ID, item.EmployeeID, item.AttnDate,
|
||||
DataReader.GetNullValue(item.ShiftID), DataReader.GetNullValue(item.InTime), DataReader.GetNullValue(item.OutTime),
|
||||
item.WorkDayType, item.AttenType, item.Comments,
|
||||
item.IsManualEntry, item.OnlyManualInTime, item.OnlyManualOutTime,
|
||||
item.LateHour, item.EarlyHour, item.OTHour,
|
||||
DataReader.GetNullValue(item.ReferenceID), item.CreatedBy, item.CreatedDate);
|
||||
}
|
||||
//internal static void Insert(TransactionContext tc, DailyAttnProcess item)
|
||||
//{
|
||||
// tc.ExecuteNonQuery(
|
||||
// "INSERT INTO DailyAttnProcess(DailyAttnProcessID, EmployeeID, AttnDate, ShiftID, InTime, OutTime,WorkDayType, AttenType, Comments,Reason, IsManualEntry,IsLate, LateHour, EarlyHour, OTHour, ReferenceID, CreatedBy, CreatedDate, OtRemarks, BenefitRemarks, TempShiftID, WFStatus, ApprovedOTHOUR, LMRemarks, DHRemarks, SalaryMonth, ActualInTime, ActualOutTime, CLAIMWFSTATUS)" +
|
||||
// " VALUES(%n, %n, %d, %n, %D, %D, %n, %n, %s,%s,%b, %b, %n, %n, %n, %n, %n, %d, %s, %s, %n,%n,%n, %s, %s, %d,%D,%D, %n)",
|
||||
// item.ID, item.EmployeeID, item.AttnDate, DataReader.GetNullValue(item.ShiftID),
|
||||
// DataReader.GetNullValue(item.EmpInTime), DataReader.GetNullValue(item.EmpOutTime), item.WorkDayType,
|
||||
// item.AttenType, item.Comments, item.Reason, item.IsManualEntry, item.IsLate, item.LateHour,
|
||||
// item.EarlyHour, item.OTHour, DataReader.GetNullValue(item.ReferenceID, 0), item.CreatedBy,
|
||||
// item.CreatedDate, item.OtRemarks, item.BenefitRemarks, item.TempShiftID,
|
||||
// item.WFStatus, item.ApprovedOTHour, item.LMRemarks, item.DHRemarks, item.SalaryMonth, item.ActualInTime,
|
||||
// item.ActualOutTime, (int)EnumClaimWFStatus.None);
|
||||
//}
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -4110,11 +4092,6 @@ namespace HRM.DA
|
|||
|
||||
return ds.Tables[0];
|
||||
}
|
||||
internal static IDataReader GetByEmployees(TransactionContext tc, DateTime attnDate, string employeeIDs)
|
||||
{
|
||||
return tc.ExecuteReader("SELECT * FROM DailyAttnProcess WHERE AttnDate=%d And employeeid in (%q)", attnDate, employeeIDs);
|
||||
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
|
|
@ -400,170 +400,8 @@ END;";
|
|||
return tc.ExecuteReader(finalSQl);
|
||||
}
|
||||
|
||||
internal static IDataReader SearchForEmployeePickerNew(TransactionContext tc, int userID, int payrollTypeID, string code, string name, bool isForLifeCycle)
|
||||
{
|
||||
string orderby = "name";
|
||||
string sqlClause = "";
|
||||
string top = "";
|
||||
#endregion
|
||||
}
|
||||
|
||||
string recurSqlClause = SQLParser.MakeSQL(@"
|
||||
DECLARE @userid INT = %n;
|
||||
DECLARE @payrolltypeid INT = %n;
|
||||
DECLARE @permissionstatus INT = %n;
|
||||
WITH RecursiveCategory AS
|
||||
(
|
||||
SELECT
|
||||
CATEGORYID
|
||||
FROM
|
||||
dbo.CATEGORY
|
||||
WHERE
|
||||
CATEGORYID IN (
|
||||
SELECT REFERENCEID
|
||||
FROM DATAPERMISSION
|
||||
WHERE USERID = @userid
|
||||
AND PAYROLLTYPEID = @payrolltypeid
|
||||
AND PERMISSIONSTATUS = @permissionstatus
|
||||
AND PERMISSIONTYPE = %n
|
||||
)
|
||||
),
|
||||
RecursiveGrade AS
|
||||
(
|
||||
SELECT
|
||||
GRADEID
|
||||
FROM
|
||||
dbo.GRADES
|
||||
WHERE
|
||||
GRADEID IN (
|
||||
SELECT REFERENCEID
|
||||
FROM DATAPERMISSION
|
||||
WHERE USERID = @userid
|
||||
AND PAYROLLTYPEID = @payrolltypeid
|
||||
AND PERMISSIONSTATUS = @permissionstatus
|
||||
AND PERMISSIONTYPE = %n
|
||||
)
|
||||
),
|
||||
RecursiveDepartment AS
|
||||
(
|
||||
SELECT
|
||||
DEPARTMENTID
|
||||
FROM
|
||||
dbo.DEPARTMENT
|
||||
WHERE
|
||||
DEPARTMENTID IN (
|
||||
SELECT REFERENCEID
|
||||
FROM DATAPERMISSION
|
||||
WHERE USERID = @userid
|
||||
AND PAYROLLTYPEID = @payrolltypeid
|
||||
AND PERMISSIONSTATUS = @permissionstatus
|
||||
AND PERMISSIONTYPE = %n
|
||||
)
|
||||
UNION ALL
|
||||
SELECT
|
||||
d.DEPARTMENTID
|
||||
FROM
|
||||
dbo.DEPARTMENT d
|
||||
INNER JOIN
|
||||
RecursiveDepartment rd
|
||||
ON
|
||||
d.PARENTID = rd.DEPARTMENTID
|
||||
),
|
||||
RecursiveLocation AS
|
||||
(
|
||||
SELECT
|
||||
LOCATIONID
|
||||
FROM
|
||||
dbo.LOCATION
|
||||
WHERE
|
||||
LOCATIONID IN (
|
||||
SELECT REFERENCEID
|
||||
FROM DATAPERMISSION
|
||||
WHERE USERID = @userid
|
||||
AND PAYROLLTYPEID = @payrolltypeid
|
||||
AND PERMISSIONSTATUS = @permissionstatus
|
||||
AND PERMISSIONTYPE = %n
|
||||
)
|
||||
UNION ALL
|
||||
SELECT
|
||||
l.LOCATIONID
|
||||
FROM
|
||||
dbo.LOCATION l
|
||||
INNER JOIN
|
||||
RecursiveLocation rl
|
||||
ON
|
||||
l.PARENTID = rl.LOCATIONID
|
||||
)", userID, payrollTypeID, EnumMenuPermissionStatus.Approved, EnumDataPermissionType.Cagtegory, EnumDataPermissionType.Grade, EnumDataPermissionType.Department, EnumDataPermissionType.Location);
|
||||
string recurWhereClause = SQLParser.MakeSQL(@"
|
||||
AND
|
||||
(
|
||||
(
|
||||
EXISTS (SELECT 1 FROM RecursiveCategory)
|
||||
AND CATEGORYID IN (SELECT CATEGORYID FROM RecursiveCategory)
|
||||
)
|
||||
OR
|
||||
(
|
||||
EXISTS (SELECT 1 FROM RecursiveGrade)
|
||||
AND GRADEID IN (SELECT GRADEID FROM RecursiveGrade)
|
||||
)
|
||||
OR
|
||||
(
|
||||
EXISTS (SELECT 1 FROM RecursiveDepartment)
|
||||
AND DEPARTMENTID IN (SELECT DEPARTMENTID FROM RecursiveDepartment)
|
||||
)
|
||||
OR
|
||||
(
|
||||
EXISTS (SELECT 1 FROM RecursiveLocation)
|
||||
AND LOCATIONID IN (SELECT LOCATIONID FROM RecursiveLocation)
|
||||
)
|
||||
)");
|
||||
|
||||
//Previous Code For only Live Employee
|
||||
//sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("PayrollTypeID =%n AND Status = %n", payrollTypeID, EnumStatus.Active);
|
||||
|
||||
//New Code For live And Waitiong for join Employee
|
||||
if (isForLifeCycle == true)
|
||||
{
|
||||
sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("PayrollTypeID =%n ", payrollTypeID);
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("PayrollTypeID =%n AND (Status = %n OR Status = %n)", payrollTypeID, EnumEmployeeStatus.Live, EnumEmployeeStatus.Waitingforjoin);
|
||||
}
|
||||
|
||||
if (code != string.Empty)
|
||||
{
|
||||
//Previous with suggestion
|
||||
//sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("EmployeeNo LIKE %s", ("%" + code + "%"));
|
||||
//orderby = "EmployeeNo";
|
||||
|
||||
//Using TOP
|
||||
//sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("EmployeeNo LIKE %s", ( code + "%")); // Using LIKE Operator
|
||||
sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("EmployeeNo = %s", (code)); // Without Using LIKE Operator
|
||||
orderby = "EmployeeNo";
|
||||
top = "TOP 5";
|
||||
|
||||
//Without suggestion
|
||||
//sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("EmployeeNo = %s", code );
|
||||
//orderby = "EmployeeNo";
|
||||
}
|
||||
|
||||
if (name != string.Empty)
|
||||
sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("Name LIKE %s", ("%" + name + "%"));
|
||||
//string finalSQl = SQLParser.MakeSQL(
|
||||
// "%q Select %q EmployeeID, EmployeeNo, Name, categoryID, GradeID, LocationID, designationid, DepartmentID From Employee %q %q Order by %s",
|
||||
// recurSqlClause, top, sqlClause, recurWhereClause, orderby);
|
||||
|
||||
|
||||
string finalSQl = SQLParser.MakeSQL(
|
||||
"%q Select %q EmployeeID, EmployeeNo, Name, categoryID, GradeID, LocationID, designationid, DepartmentID From Employee %q %q " +
|
||||
" UNION Select %q EmployeeID, EmployeeNo, Name, categoryID, GradeID, LocationID, designationid, DepartmentID From Employee %q " +
|
||||
" Order by %s",
|
||||
recurSqlClause, top, sqlClause, recurWhereClause, top, sqlClause, orderby);
|
||||
|
||||
return tc.ExecuteReader(finalSQl);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
}
|
|
@ -46,9 +46,7 @@ namespace HRM.DA
|
|||
oDailyAttnProcess.AttenType = (EnumAttendanceType)oReader.GetInt32("AttenType").Value;
|
||||
oDailyAttnProcess.Comments = oReader.GetString("Comments") == null ? "" : oReader.GetString("Comments");
|
||||
oDailyAttnProcess.Reason = oReader.GetString("Reason") == null ? "" : oReader.GetString("Reason");
|
||||
oDailyAttnProcess.IsManualEntry = oReader.GetBoolean("IsManualEntry", false);
|
||||
oDailyAttnProcess.OnlyManualInTime = oReader.GetBoolean("OnlyManualInTime", false);
|
||||
oDailyAttnProcess.OnlyManualOutTime = oReader.GetBoolean("OnlyManualOutTime", false);
|
||||
oDailyAttnProcess.IsManualEntry = oReader.GetBoolean("IsManualEntry").Value;
|
||||
oDailyAttnProcess.IsFromMobile = (EnumIsFromMobile)oReader.GetInt32("IsFromMobile").Value;
|
||||
oDailyAttnProcess.InTimeLatitude = oReader.GetString("InTimeLatitude") == null ? 0.0m : Convert.ToDecimal(oReader.GetString("InTimeLatitude"));
|
||||
oDailyAttnProcess.OutTimeLatitude = oReader.GetString("OutTimeLatitude") == null ? 0.0m : Convert.ToDecimal(oReader.GetString("OutTimeLatitude"));
|
||||
|
@ -1137,16 +1135,7 @@ namespace HRM.DA
|
|||
tc = TransactionContext.Begin(true);
|
||||
foreach (DailyAttnProcess item in oDAttnProcessess)
|
||||
{
|
||||
if (item.IsNew)
|
||||
{
|
||||
int id = tc.GenerateID("DailyAttnProcess", "DAILYATTNPROCESSID");
|
||||
base.SetObjectID(item, id);
|
||||
DailyAttnProcessDA.Insert(tc, item);
|
||||
}
|
||||
else
|
||||
{
|
||||
DailyAttnProcessDA.ManualEditUpdate(tc, item);
|
||||
}
|
||||
DailyAttnProcessDA.ManualEditUpdate(tc, item);
|
||||
}
|
||||
|
||||
//if (attnMonthlyBenefit.Count > 0)
|
||||
|
@ -4818,29 +4807,6 @@ namespace HRM.DA
|
|||
return dt;
|
||||
}
|
||||
|
||||
public List<DailyAttnProcess> GetByEmployees(DateTime attnDate, string employeeIDs)
|
||||
{
|
||||
List<DailyAttnProcess> dailyAttnProcesses = new List<DailyAttnProcess>();
|
||||
TransactionContext tc = null;
|
||||
try
|
||||
{
|
||||
tc = TransactionContext.Begin();
|
||||
DataReader dr = new DataReader(DailyAttnProcessDA.GetByEmployees(tc, attnDate, employeeIDs));
|
||||
dailyAttnProcesses = this.CreateObjects<DailyAttnProcess>(dr);
|
||||
dr.Close();
|
||||
tc.End();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
#region Handle Exception
|
||||
if (tc != null)
|
||||
tc.HandleError();
|
||||
ExceptionLog.Write(e);
|
||||
throw new ServiceException(e.Message, e);
|
||||
#endregion
|
||||
}
|
||||
return dailyAttnProcesses;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -326,45 +326,8 @@ namespace HRM.DA
|
|||
return searchEmployees;
|
||||
}
|
||||
|
||||
public List<SearchEmployee> FindEmpCodeNameForEmployeePickerNew(int userID, int payrollTypeID, string code, string name, bool isForLifeCycle)
|
||||
{
|
||||
List<SearchEmployee> searchEmployees = new List<SearchEmployee>();
|
||||
|
||||
TransactionContext tc = null;
|
||||
try
|
||||
{
|
||||
tc = TransactionContext.Begin();
|
||||
|
||||
DataReader dr = new DataReader(SearchEmployeeDA.SearchForEmployeePickerNew(tc, userID, payrollTypeID, code, name, isForLifeCycle));
|
||||
searchEmployees = this.CreateObjects<SearchEmployee>(dr);
|
||||
//while (dr.Read())
|
||||
//{
|
||||
// SearchEmployee item = new SearchEmployee();
|
||||
// item.Name = dr.GetString("name");
|
||||
// item.EmployeeNo = dr.GetString("employeeNo");
|
||||
|
||||
// searchEmployees.Add(item);
|
||||
//}
|
||||
dr.Close();
|
||||
tc.End();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
#region Handle Exception
|
||||
|
||||
if (tc != null)
|
||||
tc.HandleError();
|
||||
ExceptionLog.Write(e);
|
||||
|
||||
throw new ServiceException(e.Message, e);
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
return searchEmployees;
|
||||
}
|
||||
|
||||
public List<SearchEmployee> GetEmployeeNotYetUser(int payrollTypeID)
|
||||
public List<SearchEmployee> GetEmployeeNotYetUser(int payrollTypeID)
|
||||
{
|
||||
List<SearchEmployee> searchEmployees = new List<SearchEmployee>();
|
||||
|
||||
|
|
|
@ -48,8 +48,6 @@ export class DailyAttnProcess extends BaseObject {
|
|||
this.actualOutTime = new Date();
|
||||
this.actualShiftID = null;
|
||||
this.shift= null;
|
||||
this.onlyManualInTime = false;
|
||||
this.onlyManualOutTime = false;
|
||||
}
|
||||
attnDate: Date;
|
||||
inTime: Date;
|
||||
|
@ -92,9 +90,6 @@ export class DailyAttnProcess extends BaseObject {
|
|||
shift: Shift;
|
||||
remarksType: number;
|
||||
|
||||
onlyManualInTime: boolean;
|
||||
onlyManualOutTime: boolean;
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -276,9 +276,6 @@ export class AttendanceServices {
|
|||
getDailyAttnProcessByEmp(empList: any) {
|
||||
return this.apiService.httpPost<DailyAttnProcess[]>('/Attendance' + '/getDailyAttnProcessByEmp', empList);
|
||||
}
|
||||
getDailyAttnProcessByEmpForManualEntry(empList: any) {
|
||||
return this.apiService.httpPost<DailyAttnProcess[]>('/Attendance' + '/getDailyAttnProcessByEmpForManualEntry', empList);
|
||||
}
|
||||
|
||||
// DailyAttnProcess
|
||||
getDailyAttnProcessByEmployeeId(employeeId: number) {
|
||||
|
|
|
@ -105,12 +105,6 @@ export class EmployeeServices {
|
|||
|
||||
return this.apiService.httpGet<SearchEmployee[]>('/Employee/getEmpCodeNameForEmployeePickerInput' + '/' + ncode + '/' + nname);
|
||||
}
|
||||
getEmpCodeNameForEmployeePickerInputNew(code?: string, name?: string, isForLifeCycle? : boolean) {
|
||||
let nname = this.apiService.getApiDefaultData(name);
|
||||
let ncode = this.apiService.getApiDefaultData(code);
|
||||
let nIsForLifeCycle = this.apiService.getApiDefaultBoolData(isForLifeCycle);
|
||||
return this.apiService.httpGet<SearchEmployee[]>('/Employee/getEmpCodeNameForEmployeePickerInputNew' + '/' + ncode + '/' + nname + '/' + nIsForLifeCycle);
|
||||
}
|
||||
|
||||
getEmployees() {
|
||||
return this.apiService.httpGet(this.apiService.base_url + 'getemployees');
|
||||
|
|
|
@ -14,7 +14,7 @@ export class ApiService {
|
|||
public isSSO = false;
|
||||
public versionDeployement = false;
|
||||
// public versionNumber = `V-${GlobalfunctionExtension.generateVersionNumber(new Date(2025, 1, 25))}-`+"01";
|
||||
public versionNumber = `V-20250427-`+"01";
|
||||
public versionNumber = `V-20250421-`+"01";
|
||||
public static BASE_URL = '';
|
||||
public base_url = '';
|
||||
// public currentLink = '';
|
||||
|
@ -168,10 +168,6 @@ export class ApiService {
|
|||
return (str === undefined || str === null || str.trim() === '') ? undefined : str;
|
||||
}
|
||||
|
||||
getApiDefaultBoolData(value: boolean) {
|
||||
return (value === undefined || value === null) ? false : value;
|
||||
}
|
||||
|
||||
getApiDateString(dDate: Date) {
|
||||
if (dDate === undefined || dDate === null) {
|
||||
return dDate;
|
||||
|
|
|
@ -282,9 +282,6 @@
|
|||
set
|
||||
</button>
|
||||
<kendo-grid-spacer></kendo-grid-spacer>
|
||||
<label for="status" style="font-weight: bold;">Remarks</label>
|
||||
<kendo-textbox placeholder="Remarks" [(ngModel)]="_remarks" style="width: 30%;"></kendo-textbox>
|
||||
|
||||
</ng-template>
|
||||
<kendo-grid-column field="shiftID" title="Date" width="8%">
|
||||
<ng-template kendoGridCellTemplate let-dataItem>
|
||||
|
|
|
@ -39,7 +39,6 @@ export class AttendanceManualEditForSingleEmployeeComponent implements OnInit {
|
|||
selectedOutTime: Date;
|
||||
dailyAttenProcessList: DailyAttnProcess[];
|
||||
_overTime: number = 0;
|
||||
_remarks: string = "";
|
||||
statusList = [
|
||||
{ value: 1, name: 'Present' },
|
||||
{ value: 2, name: 'Absent' },
|
||||
|
@ -224,9 +223,6 @@ export class AttendanceManualEditForSingleEmployeeComponent implements OnInit {
|
|||
}
|
||||
|
||||
this.dailyAttenProcessList.forEach(x => {
|
||||
if(this._remarks){
|
||||
x.comments = this._remarks;
|
||||
}
|
||||
x.isManualEntry = true;
|
||||
if (x.wfStatus != EnumWFAttnStatus.None) {
|
||||
this.notificationService.showError(x.attnDate.toDateString() +" is in approval stage, so manual edit is not allowed");
|
||||
|
|
|
@ -329,7 +329,7 @@
|
|||
<div class="p-col-12" align="right">
|
||||
<button kendoButton icon="arrow-left" style="margin-right: 20px;" class="k-button k-primary" *ngIf="isVisibleCordinatorPicker" (click)="goBack()">
|
||||
Back </button>
|
||||
<button icon="save" kendoButton class="k-button k-primary" (click)="update()">
|
||||
<button icon="rotate" kendoButton class="k-button k-primary" (click)="update()">
|
||||
Update
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -34,7 +34,7 @@ export class AttendanceManualEditForMultipleEmployeeComponent implements OnInit
|
|||
approvalRole: string;
|
||||
isVisibleEmpPicker: boolean = false;
|
||||
isVisibleCordinatorPicker: boolean = false;
|
||||
isVisiblelmPicker: boolean = false;
|
||||
isVisiblelmPicker: boolean= false;
|
||||
selectedShiftID: number;
|
||||
selectedStatus: EnumAttendanceType;
|
||||
selectedAttnDate: Date;
|
||||
|
@ -85,7 +85,7 @@ export class AttendanceManualEditForMultipleEmployeeComponent implements OnInit
|
|||
this.selectInTime = new Date();
|
||||
this.selectedOutTime = new Date();
|
||||
this.loadDropDownLists();
|
||||
// this.selectedStatus = EnumAttendanceType.Present;
|
||||
// this.selectedStatus = EnumAttendanceType.Present;
|
||||
this.getPendindBillings();
|
||||
|
||||
}
|
||||
|
@ -143,7 +143,7 @@ export class AttendanceManualEditForMultipleEmployeeComponent implements OnInit
|
|||
},
|
||||
() => {
|
||||
if (this.shifts.length > 0) {
|
||||
// this.selectedShiftID = this.shifts[0].id;
|
||||
// this.selectedShiftID = this.shifts[0].id;
|
||||
this.shifts[0].inTime = new Date(this.shifts[0].inTime);
|
||||
this.shifts[0].outTime = new Date(this.shifts[0].outTime);
|
||||
this.dateChange();
|
||||
|
@ -207,6 +207,7 @@ export class AttendanceManualEditForMultipleEmployeeComponent implements OnInit
|
|||
}
|
||||
|
||||
updateobject(type: number) {
|
||||
debugger;
|
||||
if (this.selectedRemarks != undefined) {
|
||||
if (this.remarksList.find(y => y.value == this.selectedRemarks).name == "Other") {
|
||||
this.isOtherRemarks = true;
|
||||
|
@ -214,13 +215,6 @@ export class AttendanceManualEditForMultipleEmployeeComponent implements OnInit
|
|||
this.isOtherRemarks = false;
|
||||
}
|
||||
}
|
||||
else if (type == 3){
|
||||
let oShift : Shift = this.shifts.find(x => x.id === this.selectedShiftID);
|
||||
if(oShift && oShift.id > 0){
|
||||
this.selectInTime = new Date(oShift.inTime);
|
||||
this.selectedOutTime = new Date(oShift.outTime);
|
||||
}
|
||||
}
|
||||
this.dailyAttenProcessList.forEach(x => {
|
||||
if (type == 1) {
|
||||
x.actualInTime = x.inTime;
|
||||
|
@ -242,7 +236,7 @@ export class AttendanceManualEditForMultipleEmployeeComponent implements OnInit
|
|||
}
|
||||
else if (type == 6)
|
||||
if (this.remarksList.find(y => y.value == this.selectedRemarks).name == "Other") {
|
||||
|
||||
|
||||
x.empRemarks = this.otherRemarks;
|
||||
}
|
||||
else {
|
||||
|
@ -280,8 +274,7 @@ export class AttendanceManualEditForMultipleEmployeeComponent implements OnInit
|
|||
|
||||
if (attnRequest.length == 0) return;
|
||||
|
||||
// this.attendanceServices.getDailyAttnProcessByEmp(attnRequest).subscribe(
|
||||
this.attendanceServices.getDailyAttnProcessByEmpForManualEntry(attnRequest).subscribe(
|
||||
this.attendanceServices.getDailyAttnProcessByEmp(attnRequest).subscribe(
|
||||
(resp) => {
|
||||
|
||||
if (this.dailyAttenProcessList == undefined || this.dailyAttenProcessList.length == 0) {
|
||||
|
@ -372,29 +365,14 @@ export class AttendanceManualEditForMultipleEmployeeComponent implements OnInit
|
|||
}
|
||||
var msg: string = "";
|
||||
this.dailyAttenProcessList.forEach(x => {
|
||||
if(this.selectedRemarks){
|
||||
let remarks = this.remarksList.find(y => y.value == this.selectedRemarks);
|
||||
if(remarks){
|
||||
x.comments = remarks.name;
|
||||
}
|
||||
}
|
||||
x.isManualEntry = true;
|
||||
if (x.wfStatus != EnumWFAttnStatus.None) {
|
||||
msg = msg + "Employee: " + x.employee.employeeNo + ". Datais in approval stage, so manual edit is not allowed; ";
|
||||
}
|
||||
|
||||
|
||||
if ((x.inTime == null && x.outTime == null) && x.attenType == EnumAttendanceType.Present) {
|
||||
msg = msg + "Employee: " + x.employee.employeeNo + ", Status present is not allowed while In Time and Out Time is not entered.; ";
|
||||
|
||||
}
|
||||
else {
|
||||
if (x.inTime != null && x.outTime == null) {
|
||||
x.onlyManualInTime = true;
|
||||
}
|
||||
if (x.inTime == null && x.outTime != null) {
|
||||
x.onlyManualOutTime = true;
|
||||
}
|
||||
if ((x.inTime == null || x.outTime == null) && x.attenType == EnumAttendanceType.Present) {
|
||||
msg = msg + "Employee: " + x.employee.employeeNo + ", Status present is not allowed while inTime and outTime is not entered.; ";
|
||||
}
|
||||
var bvalid = false;
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
</label>
|
||||
</div>
|
||||
<div *ngIf="!newEmployee" class="p-col-12 p-lg-4">
|
||||
<app-employee-picker [isActive]="!newEmployee" [ForLifeCycleSearch]="true"
|
||||
<app-employee-picker [isActive]="!newEmployee"
|
||||
(ItemSelected)="GetSelectedEmployee($event)"></app-employee-picker>
|
||||
</div>
|
||||
<div *ngIf="newEmployee" class="p-col-12 p-lg-4">
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</div>
|
||||
<div class="p-col-12 p-md-12 p-lg-6" style="margin:auto;">
|
||||
<app-employee-picker for="chkIsnew" id="idself" [isActive]="!newEmployee"
|
||||
[setSelectedEmp]="selectedEmployee" [ForLifeCycleSearch]="true"
|
||||
[setSelectedEmp]="selectedEmployee"
|
||||
(ItemSelected)="GetSelectedEmployee($event)"></app-employee-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
(ItemSelected)="GetSelectedEmployee($event)"
|
||||
[setSelectedEmp]="_pickerSelecteEmp"
|
||||
[isActive]="empPickerActive"
|
||||
[ForLifeCycleSearch]="true"
|
||||
></app-employee-picker>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1,23 +1,21 @@
|
|||
<app-loading-panel></app-loading-panel>
|
||||
<form [formGroup]="_salaryDaysDeductEdit">
|
||||
<div class="card">
|
||||
<div class="p-col-12">
|
||||
<div class="p-grid">
|
||||
<div class="p-col-2">
|
||||
<label>Unauthorized Leave</label>
|
||||
</div>
|
||||
<div class="p-col-10">
|
||||
<kendo-dropdownlist [data]="_unAuthLeaves"
|
||||
[(ngModel)]="_uaLeaveParam.unAhuthorizeLeaveID"
|
||||
[defaultItem]="{ name: 'Select..', value: null }"
|
||||
[textField]="'name'"
|
||||
[valueField]="'id'"
|
||||
[valuePrimitive]="true"
|
||||
class="form-control form-control-sm input-sm"
|
||||
(selectionChange)="paramselectionChange($event)"
|
||||
formControlName="unauthorizedLeaveDropDown">
|
||||
</kendo-dropdownlist>
|
||||
</div>
|
||||
<div class="p-grid">
|
||||
<div class="p-col-2">
|
||||
<label>Unauthorized Leave</label>
|
||||
</div>
|
||||
<div class="p-col-10">
|
||||
<kendo-dropdownlist [data]="_unAuthLeaves"
|
||||
[(ngModel)]="_uaLeaveParam.unAhuthorizeLeaveID"
|
||||
[defaultItem]="{ name: 'Select..', value: null }"
|
||||
[textField]="'name'"
|
||||
[valueField]="'id'"
|
||||
[valuePrimitive]="true"
|
||||
class="form-control form-control-sm input-sm"
|
||||
(selectionChange)="paramselectionChange($event)"
|
||||
formControlName="unauthorizedLeaveDropDown">
|
||||
</kendo-dropdownlist>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-grid">
|
||||
|
@ -28,7 +26,7 @@
|
|||
[selectable]="{enabled: true, checkboxOnly: true, mode: 'multiple'}"
|
||||
[selectedKeys]="_selectedgrades"
|
||||
[kendoGridSelectBy]="'id'"
|
||||
[height]="500">
|
||||
[height]="200">
|
||||
<kendo-grid-checkbox-column [class]="{'text-center': true}"
|
||||
[columnMenu]="false"
|
||||
[headerClass]="{'text-center': true}"
|
||||
|
@ -45,10 +43,10 @@
|
|||
</div>
|
||||
|
||||
<div class="p-col-6">
|
||||
<h3>Salary components</h3>
|
||||
<h3>salary components</h3>
|
||||
<kendo-grid [data]="_uaLeaveParamDetail"
|
||||
[selectedKeys]="_selectedcomponent"
|
||||
[height]="500"
|
||||
[height]="200"
|
||||
[kendoGridSelectBy]="'allowanceID'">
|
||||
|
||||
<kendo-grid-column field="componenetName" title="Name">
|
||||
|
@ -72,14 +70,8 @@
|
|||
</div>
|
||||
<div class="card">
|
||||
<div class="p-col-12 p-md-12" align="right">
|
||||
<!-- <button pButton type="button" label="Go Back" style="margin-bottom: 10px; margin-right: 20px; width: 100px; background:red; color:white" (click)="cancel();" class="ui-button-danger"></button>
|
||||
<button pButton type="submit" label="Save" (click)="Save()" style="margin-bottom: 10px; width: 100px; background:#50AF47; color: white" class="ui-button-success"></button> -->
|
||||
<button icon="undo" kendoButton class="k-button k-primary" (click)="cancel()" style="margin-right: 5px;">
|
||||
Go Back
|
||||
</button>
|
||||
<button icon="save" kendoButton class="k-button k-primary" (click)="Save()">
|
||||
Save
|
||||
</button>
|
||||
<button pButton type="button" label="Go Back" style="margin-bottom: 10px; margin-right: 20px; width: 100px; background:red; color:white" (click)="cancel();" class="ui-button-danger"></button>
|
||||
<button pButton type="submit" label="Save" (click)="Save()" style="margin-bottom: 10px; width: 100px; background:#50AF47; color: white" class="ui-button-success"></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
@ -211,6 +211,6 @@ export class SalaryDaysDeductEditComponent implements OnInit {
|
|||
}
|
||||
|
||||
cancel() {
|
||||
this.router.navigateByUrl('/payroll/absent-deduction-Policy');
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
(edit)="editHandler($event)"
|
||||
(remove)="removeHandler($event)">
|
||||
<ng-template kendoGridToolbarTemplate>
|
||||
<button icon="plus" [primary]="true" kendoGridAddCommand (click)="new()">Add New</button>
|
||||
<button [primary]="true" kendoGridAddCommand (click)="new()">Add New</button>
|
||||
</ng-template>
|
||||
<kendo-grid-column field="unAuthLeaveName" title="Name" width="80%">
|
||||
</kendo-grid-column>
|
||||
|
|
|
@ -102,10 +102,10 @@ export class EmployeePickerComponent implements OnInit {
|
|||
isSpanArrowDown: boolean = true;
|
||||
isSpanArrowUp: boolean = false;
|
||||
gridHeight: number = 305;
|
||||
|
||||
@Input() public payrollTypeID: number;
|
||||
@Input() public isRecruitment: number;
|
||||
@Input() public set isClear(value) {
|
||||
debugger;
|
||||
if (value) {
|
||||
this.selectedItems = [];
|
||||
// this.count=0;
|
||||
|
@ -187,11 +187,6 @@ export class EmployeePickerComponent implements OnInit {
|
|||
/** role-permission-entry ctor */
|
||||
@Input() fixedGrades: number[] = undefined;
|
||||
|
||||
private _isForLifeCycle = false;
|
||||
@Input()
|
||||
public set ForLifeCycleSearch(value: boolean) {
|
||||
this._isForLifeCycle = value ?? false;
|
||||
}
|
||||
|
||||
public pageSize = 25;
|
||||
public skip = 0;
|
||||
|
@ -459,10 +454,10 @@ export class EmployeePickerComponent implements OnInit {
|
|||
} else {
|
||||
name = value;
|
||||
}
|
||||
debugger;
|
||||
if(this._isForLifeCycle === false){
|
||||
this.loadingEmployee = true;
|
||||
this.empSrvc.getEmpCodeNameForEmployeePickerInput(code, name).subscribe(
|
||||
this.loadingEmployee = true;
|
||||
// this.empSrvc.getEmpCodeName(code, name)
|
||||
this.empSrvc.getEmpCodeNameForEmployeePickerInput(code, name)
|
||||
.subscribe(
|
||||
(resp: any) => {
|
||||
this.searchEmployees = resp;
|
||||
},
|
||||
|
@ -475,36 +470,14 @@ export class EmployeePickerComponent implements OnInit {
|
|||
this.loadingEmployee = false;
|
||||
this.empCodeNameListSource = [];
|
||||
this.searchEmployees.forEach(x => {
|
||||
|
||||
this.empCodeNameListSource.push(x.employeeNo + ' ' + x.name);
|
||||
});
|
||||
this.empCodeNameList = this.empCodeNameListSource.filter((s) =>
|
||||
s.toLowerCase().indexOf(value.toLowerCase()) !== -1);
|
||||
s.toLowerCase().indexOf(value.toLowerCase()) !== -1);
|
||||
|
||||
}
|
||||
);
|
||||
}
|
||||
else{
|
||||
this.loadingEmployee = true;
|
||||
this.empSrvc.getEmpCodeNameForEmployeePickerInputNew(code, name, this._isForLifeCycle).subscribe(
|
||||
(resp: any) => {
|
||||
this.searchEmployees = resp;
|
||||
},
|
||||
(err: any) => {
|
||||
// ON ERROR
|
||||
this.loadingEmployee = false;
|
||||
},
|
||||
() => {
|
||||
// ON Success
|
||||
this.loadingEmployee = false;
|
||||
this.empCodeNameListSource = [];
|
||||
this.searchEmployees.forEach(x => {
|
||||
this.empCodeNameListSource.push(x.employeeNo + ' ' + x.name);
|
||||
});
|
||||
this.empCodeNameList = this.empCodeNameListSource.filter((s) =>
|
||||
s.toLowerCase().indexOf(value.toLowerCase()) !== -1);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/*} else {
|
||||
|
||||
this.empCodeNameList = this.empCodeNameListSource.filter((s) =>
|
||||
|
|
|
@ -1331,85 +1331,6 @@ namespace HRM.UI.Controllers.Attendance
|
|||
|
||||
return Ok(attnProcesses);
|
||||
}
|
||||
[HttpPost("getDailyAttnProcessByEmpForManualEntry")]
|
||||
public ActionResult getDailyAttnProcessByEmpForManualEntry(dynamic data)
|
||||
{
|
||||
List<DailyAttnProcess> _dAttnProcessess = new List<DailyAttnProcess>();
|
||||
DailyAttnProcess _dAttnProcess = null;
|
||||
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
|
||||
try
|
||||
{
|
||||
var items = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(data));
|
||||
string empids = "";
|
||||
DateTime attnDate = DateTime.Today;
|
||||
List<int> empIdList = new List<int>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
int empID = (int)item["employeeid"].ToObject<int>();
|
||||
empids = empids + empID.ToString() + ",";
|
||||
attnDate = (DateTime)item["attnDate"].ToObject<DateTime>();
|
||||
empIdList.Add(empID);
|
||||
}
|
||||
|
||||
if (empids.Length > 0) empids = empids.Substring(0, empids.Length - 1);
|
||||
|
||||
attnDate = new DateTime(attnDate.Year, attnDate.Month, attnDate.Day);
|
||||
List<DailyAttnProcess> dAttnProcessess = this._dailyAttnProcessService.GetByEmployees(attnDate, empids);
|
||||
|
||||
foreach (var empid in empIdList)
|
||||
{
|
||||
bool existInList = false;
|
||||
foreach (DailyAttnProcess dattnPs in _dAttnProcessess)
|
||||
{
|
||||
if (dattnPs.EmployeeID == empid)
|
||||
{
|
||||
existInList = true;
|
||||
}
|
||||
}
|
||||
if (!existInList)
|
||||
{
|
||||
bool ExistInSavedData = false;
|
||||
if (dAttnProcessess != null && dAttnProcessess.Count > 0)
|
||||
{
|
||||
foreach (DailyAttnProcess dAttnProcess in dAttnProcessess)
|
||||
{
|
||||
if (dAttnProcess.EmployeeID == empid)
|
||||
{
|
||||
ExistInSavedData = true;
|
||||
_dAttnProcessess.Add(dAttnProcess);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!ExistInSavedData)
|
||||
{
|
||||
_dAttnProcess = new DailyAttnProcess();
|
||||
_dAttnProcess.EmployeeID = empid;
|
||||
_dAttnProcess.AttnDate = attnDate;
|
||||
_dAttnProcessess.Add(_dAttnProcess);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//if (_dAttnProcessess != null && _dAttnProcessess.Count > 0)
|
||||
//{
|
||||
// int serial = 1;
|
||||
// foreach (DailyAttnProcess dAttnProcess in _dAttnProcessess)
|
||||
// {
|
||||
// if (dAttnProcess.IsNew)
|
||||
// {
|
||||
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
|
||||
}
|
||||
|
||||
return Ok(_dAttnProcessess);
|
||||
}
|
||||
|
||||
// DailyAttnProcess
|
||||
[HttpGet("getDailyAttnProcessByEmployeeId/{employeeId}")]
|
||||
|
|
|
@ -822,54 +822,7 @@ namespace HRM.UI.Controllers
|
|||
return Ok(olist);
|
||||
}
|
||||
|
||||
[HttpGet("getEmpCodeNameForEmployeePickerInputNew/{code}/{name}/{isForLifeCycle}")]
|
||||
public ActionResult getEmpCodeNameForEmployeePickerInputNew(string code, string name, bool isForLifeCycle)
|
||||
{
|
||||
code = GlobalFunctions.GetApiDefaultData(code);
|
||||
name = GlobalFunctions.GetApiDefaultData(name);
|
||||
|
||||
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
|
||||
List<SearchEmployee> olist = new List<SearchEmployee>();
|
||||
try
|
||||
{
|
||||
//olist = _serachManager.FindEmpCodeName((int) currentUser.PayrollTypeID, code, name);
|
||||
if (code != "")
|
||||
{
|
||||
List<SearchEmployee> unorderedList = _serachManager.FindEmpCodeNameForEmployeePickerNew((int)currentUser.UserID, (int)currentUser.PayrollTypeID, code, name, isForLifeCycle);
|
||||
|
||||
olist = unorderedList
|
||||
.OrderBy(item => item.EmployeeNo != code) // False (0) for priority value, True (1) for others
|
||||
.ThenBy(item => item.EmployeeNo).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
olist = _serachManager.FindEmpCodeNameForEmployeePickerNew((int)currentUser.UserID, (int)currentUser.PayrollTypeID, code, name, isForLifeCycle);
|
||||
}
|
||||
|
||||
//List<Grade> grades = new GradeService().Get(EnumStatus.Regardless, (int)currentUser.PayrollTypeID);
|
||||
//List<Designation> designations = new DesignationService().Get(EnumStatus.Regardless, (int)currentUser.PayrollTypeID);
|
||||
//List<Department> departments = new DepartmentService().Get(EnumStatus.Regardless, (int)currentUser.PayrollTypeID);
|
||||
//olist.ForEach(x=>
|
||||
//{
|
||||
// var grd = grades.FirstOrDefault(d => d.ID == x.GradeID);
|
||||
// if(grd != null) x.gradeName = grd.Name;
|
||||
|
||||
// var designation = designations.FirstOrDefault(d => d.ID == x.designationID);
|
||||
// if (designation != null) x.designationName = designation.Name;
|
||||
// var department = departments.FirstOrDefault(d => d.ID == x.DepartmentID);
|
||||
// if (department != null) x.departmentName = department.Name;
|
||||
//}); // Secondary ordering (alphabetical)
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
|
||||
}
|
||||
|
||||
return Ok(olist);
|
||||
}
|
||||
|
||||
[HttpGet("getEmployeeAttachments/{empId}")]
|
||||
[HttpGet("getEmployeeAttachments/{empId}")]
|
||||
public ActionResult GetEmployeeAttachments(int empId)
|
||||
{
|
||||
List<empFileupload> items = new List<empFileupload>();
|
||||
|
|
Loading…
Reference in New Issue
Block a user