diff --git a/HRM.BO/Bonus/ProdBonusAttn.cs b/HRM.BO/Bonus/ProdBonusAttn.cs index d1a3394..5a1d54a 100644 --- a/HRM.BO/Bonus/ProdBonusAttn.cs +++ b/HRM.BO/Bonus/ProdBonusAttn.cs @@ -283,12 +283,13 @@ namespace HRM.BO List Get(int setupID, int ScheduleID); List Get(int setupID, DateTime dateTime); - + List GetBySetupLineDate(int setupID, int lineID, DateTime dateTime); List GetBySetupID(int iD); List GetBySetupIDs(string iDs); List GetByLineID(int lineID); List GetbySetupAndLineID(int setupID, int lineID); + DateTime? GetMaxDate(int setupID, int lineID, DateTime date); } #endregion diff --git a/HRM.DA/DA/Bonus/ProdBonusAttnDA.cs b/HRM.DA/DA/Bonus/ProdBonusAttnDA.cs index 275ab7f..79f765d 100644 --- a/HRM.DA/DA/Bonus/ProdBonusAttnDA.cs +++ b/HRM.DA/DA/Bonus/ProdBonusAttnDA.cs @@ -90,7 +90,24 @@ namespace HRM.DA return tc.ExecuteReader(sql); //return tc.ExecuteReader("SELECT * FROM ProdBonusAttn WHERE ProdBonusSetupID=%n AND CAST(InTime AS date)=%d", setupID, dateTime); } + internal static IDataReader GetBySetupLineDate(TransactionContext tc, int setupID, int lineID, DateTime dateTime) + { + string sql = SQLParser.MakeSQL("SELECT PBA.*, E.EMPLOYEENO FROM ProdBonusAttn PBA Left Join EMPLOYEE E on E.EMPLOYEEID = PBA.EmployeeID WHERE PBA.ProdBonusSetupID=%n AND PBA.ProdBonusLineID=%n AND year(PBA.InTime)= %n AND month(PBA.InTime)= %n AND day(PBA.InTime)= %n ORDER BY TRY_CAST(E.EMPLOYEENO AS INT) ASC", + setupID, lineID, dateTime.Year, dateTime.Month,dateTime.Day); + return tc.ExecuteReader(sql); + } + internal static DateTime? GetMaxDate(TransactionContext tc, int setupID, int lineID, DateTime date) + { + DateTime? value = null; + object obj = tc.ExecuteScalar("SELECT max(intime) FROM ProdBonusAttn WHERE ProdBonusSetupID=%n AND ProdBonusLineID = %n AND OutTime < %d", setupID, lineID, date); + + if (obj is not DBNull) + { + value = Convert.ToDateTime(obj); + } + return value; + } #endregion #region Delete function diff --git a/HRM.DA/Service/Bonus/ProdBonusAttnService.cs b/HRM.DA/Service/Bonus/ProdBonusAttnService.cs index dd85054..9bb54b3 100644 --- a/HRM.DA/Service/Bonus/ProdBonusAttnService.cs +++ b/HRM.DA/Service/Bonus/ProdBonusAttnService.cs @@ -159,6 +159,32 @@ namespace HRM.DA return ProdBonusAttns; } + public List GetBySetupLineDate(int setupID, int lineID, DateTime dateTime) + { + + List ProdBonusAttns = new List(); + + TransactionContext tc = null; + try + { + tc = TransactionContext.Begin(); + DataReader dr = new DataReader(ProdBonusAttnDA.GetBySetupLineDate(tc, setupID, lineID, dateTime)); + ProdBonusAttns = this.CreateObjects(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 ProdBonusAttns; + } public List GetBySetupID(int setupID) { @@ -295,6 +321,31 @@ namespace HRM.DA return ProdBonusAttns; } + public DateTime? GetMaxDate(int setupID, int lineID, DateTime date) + { + TransactionContext tc = null; + try + { + DateTime? dateValue = null; + + tc = TransactionContext.Begin(); + dateValue = ProdBonusAttnDA.GetMaxDate(tc, setupID, lineID, date); + tc.End(); + + return dateValue; + } + catch (Exception e) + { + #region Handle Exception + + if (tc != null) + tc.HandleError(); + ExceptionLog.Write(e); + throw new ServiceException(e.Message, e); + + #endregion + } + } public int Save(ProdBonusAttn oProdBonusAttn) { TransactionContext tc = null; diff --git a/HRM.Report/Class/rptDigitalServiceBook.cs b/HRM.Report/Class/rptDigitalServiceBook.cs index 498eac0..09c4df4 100644 --- a/HRM.Report/Class/rptDigitalServiceBook.cs +++ b/HRM.Report/Class/rptDigitalServiceBook.cs @@ -40,8 +40,8 @@ namespace HRM.Report oDR["PARMANENTADDRESS"] = oDRow["PARMANENTADDRESS"]; oDR["PRESENTADDRESS"] = oDRow["PRESENTADDRESS"]; oDR["BIRTHDATE"] = Convert.ToDateTime(oDRow["BIRTHDATE"]).ToString("dd/MM/yyyy"); - if (oDRow["PHOTO"] is not DBNull) - oDR["PHOTO"] = Convert.ToBase64String((byte[])oDRow["PHOTO"]); + //if (oDRow["PHOTO"] is not DBNull) + // oDR["PHOTO"] = Convert.ToBase64String((byte[])oDRow["PHOTO"]); oDR["NIDNO"] = oDRow["NIDNO"]; oDR["HEIGHT"] = oDRow["HEIGHT"]; oDR["BLOODGROUP"] = GlobalExtensions.BloodGroupToFriendlyName((EnumBloodGroup)Enum.Parse(typeof(EnumBloodGroup), diff --git a/HRM.Report/HRM.Report.csproj b/HRM.Report/HRM.Report.csproj index ebe72d2..b3b32b4 100644 --- a/HRM.Report/HRM.Report.csproj +++ b/HRM.Report/HRM.Report.csproj @@ -42,6 +42,7 @@ + @@ -310,6 +311,7 @@ + diff --git a/HRM.UI/ClientApp/src/app/_services/payroll/bonus.service.ts b/HRM.UI/ClientApp/src/app/_services/payroll/bonus.service.ts index 6199c35..c063df2 100644 --- a/HRM.UI/ClientApp/src/app/_services/payroll/bonus.service.ts +++ b/HRM.UI/ClientApp/src/app/_services/payroll/bonus.service.ts @@ -124,6 +124,9 @@ export class BonusService { getProdBonusAttnEmployeeList(item: any) { return this.apiService.httpPost('/Bonus/getProdBonusAttnEmployeeList', item); } + getProdBonusAttnEmployeeListSwingAndPrinting(item: any) { + return this.apiService.httpPost('/Bonus/getProdBonusAttnEmployeeListSwingAndPrinting', item); + } saveAllProdBonusAttn(item: any) { return this.apiService.httpPost('/Bonus/saveAllProdBonusAttn', item); } diff --git a/HRM.UI/ClientApp/src/app/core-hr/employee-profile/general/general.component.html b/HRM.UI/ClientApp/src/app/core-hr/employee-profile/general/general.component.html index 123a050..320c1af 100644 --- a/HRM.UI/ClientApp/src/app/core-hr/employee-profile/general/general.component.html +++ b/HRM.UI/ClientApp/src/app/core-hr/employee-profile/general/general.component.html @@ -247,10 +247,12 @@
+ id="txtNationalId" pInputText style="width:84%" type="text"> + +
diff --git a/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-attendance/production-bonus-attendance.component.html b/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-attendance/production-bonus-attendance.component.html index b9f9fb4..43822cd 100644 --- a/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-attendance/production-bonus-attendance.component.html +++ b/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-attendance/production-bonus-attendance.component.html @@ -84,7 +84,7 @@
-
@@ -94,6 +94,7 @@ Remove All + diff --git a/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-attendance/production-bonus-attendance.component.ts b/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-attendance/production-bonus-attendance.component.ts index 41bd1f4..f2f3539 100644 --- a/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-attendance/production-bonus-attendance.component.ts +++ b/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-attendance/production-bonus-attendance.component.ts @@ -187,7 +187,7 @@ export class ProductionBonusAttendanceComponent implements OnInit { ) } - onClickRefresh() { + onClickLoad() { // debugger; const fromDate = new Date(this.productionBonusSetup.fromDate.setHours(0, 0, 0, 0)); const toDate = new Date(this.productionBonusSetup.toDate.setHours(0, 0, 0, 0)); @@ -195,6 +195,7 @@ export class ProductionBonusAttendanceComponent implements OnInit { if (selectedDate >= fromDate && selectedDate <= toDate) { var dataForAttn = { setupId: this.productionBonusSetup.id, + lineId: this.selectedLine.id, date: this.selectedDate } // console.log(dataForAttn); @@ -225,7 +226,6 @@ export class ProductionBonusAttendanceComponent implements OnInit { debugger this.employeeList = resp; this.employeeList.forEach(x => this.AddEmployeeGridData(x.id, false)); - // console.log('employee List', this.employeeList); }, (err) => { this.notificationService.showError(err.error); @@ -246,6 +246,31 @@ export class ProductionBonusAttendanceComponent implements OnInit { // } // } } + + //New For Swing And Printig + if (this.prodBonusAttn.length <= 0 && (this.productionBonusSetup.productionBonusType == EnumProductionBonusType.Sewing || + this.productionBonusSetup.productionBonusType == EnumProductionBonusType.Printing)) { + let data = { + prodLine: this.selectedLine, + date: this.selectedDate + } + this.loadingPanelService.ShowLoadingPanel = true; + this.bonusService.getProdBonusAttnEmployeeListSwingAndPrinting(data).subscribe( + (resp) => { + debugger + this.employeeList = resp; + this.employeeList.forEach(x => this.AddEmployeeGridData(x.id, false)); + }, + (err) => { + this.notificationService.showError(err.error); + this.loadingPanelService.ShowLoadingPanel = false; + }, + () => { + this.loadingPanelService.ShowLoadingPanel = false; + } + ); + } + if (this.prodBonusAttn.length > 0) { debugger; for (let i = 0; i < this.prodBonusAttn.length; i++) { @@ -260,7 +285,7 @@ export class ProductionBonusAttendanceComponent implements OnInit { ); } else { - this.notificationService.showWarning('Date did not match with Work Schedule! Schedule not match'); + this.notificationService.showWarning('Date did not match with Work Schedule','Schedule not matched!'); } } onClickAdd() { diff --git a/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-setup/production-bonus-setup.component.html b/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-setup/production-bonus-setup.component.html index 58b3af5..2cc62d8 100644 --- a/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-setup/production-bonus-setup.component.html +++ b/HRM.UI/ClientApp/src/app/payroll-ot/production-bonus-setup/production-bonus-setup.component.html @@ -141,7 +141,7 @@
- +
sv.employeeID == this._employee.id); - if (index !== -1) { - this.prodBonusLine.prodBonusSupervisors.splice(index, 1); - } - //Supervisor - newlineSupervisor.employeeID = this._employee.id; - newlineSupervisor.employeeNo = this._employee.employeeNo; - newlineSupervisor.empName = this._employee.name; - newlineSupervisor.bonusPercent = this.bonusPercent; - newlineSupervisor.prodBonusSetupID = this.productionBonusSetup.id; + const index = this.prodBonusLine.prodBonusSupervisors.findIndex(sv => sv.employeeID == this._employee.id); + if (index !== -1) { + this.prodBonusLine.prodBonusSupervisors.splice(index, 1); + } + //Supervisor + newlineSupervisor.employeeID = this._employee.id; + newlineSupervisor.employeeNo = this._employee.employeeNo; + newlineSupervisor.empName = this._employee.name; + newlineSupervisor.bonusPercent = this.bonusPercent; + newlineSupervisor.prodBonusSetupID = this.productionBonusSetup.id; if (this.isNewLine) { newlineParameter.itemID = this._departmentPicker.selectedID; newlineParameter.itemType = 0; newlineParameter.prodBonusSetupID = this.productionBonusSetup.id; - // var department; - this.basicService.getDepartmentByID(this._departmentPicker.selectedID).subscribe( - (resp) => { - this.department = resp; - }, - (err) => { - this.notificationService.showError(err.error); - }, - () => { - //newlineItem.amount - this.prodBonusLine.prodBonusSupervisors.push(newlineSupervisor); - this.prodBonusLine.prodBonusParameters.push(newlineParameter); + // var department; + this.basicService.getDepartmentByID(this._departmentPicker.selectedID).subscribe( + (resp) => { + this.department = resp; + }, + (err) => { + this.notificationService.showError(err.error); + }, + () => { + //newlineItem.amount + this.prodBonusLine.prodBonusSupervisors.push(newlineSupervisor); - this.prodBonusLine.scheduledHour = this.scheduledHours; - this.prodBonusLine.lineName = this.department.name; - // console.log(this.prodBonusLine); - this.clearProdbonusLine(); - // this.notificationService.showSuccess('Supervisor added to the line'); - } - ); + //Commented For Test + // this.prodBonusLine.prodBonusParameters.push(newlineParameter); - debugger; - //WorkSchedules - // newLayoutWork.prodBonusSetupID = this.productionBonusSetup.id; - // newLayoutWork.prodBonusLineID = this.selectedRow.id; - const currentDate = new Date(this.productionBonusSetup.fromDate); - // while (currentDate <= this.productionBonusSetup.toDate) { - // newLayoutWork.startDateTime = new Date(currentDate.setHours(0, 0, 0, 0)); - // newLayoutWork.endDateTime = new Date(currentDate.setHours(23, 59, 59, 999)); - // debugger; - // this.prodBonusLine.prodBonusWorkSchedules.push(newLayoutWork); - // currentDate.setDate(currentDate.getDate() + 1); - // } - for (let i = 0; currentDate <= this.productionBonusSetup.toDate; i++) { - let newLayoutWork: ProdBonusWorkSchedule = { - prodBonusSetupID: 0, - prodBonusLineID: 0, - id: 0, - startDateTime: new Date(currentDate.setHours(0, 0, 0, 0)), - endDateTime: new Date(currentDate.setHours(23, 59, 59, 999)) - }; - this.prodBonusLine.prodBonusWorkSchedules.push(newLayoutWork); - currentDate.setDate(currentDate.getDate() + 1); - } + this.prodBonusLine.scheduledHour = this.scheduledHours; + this.prodBonusLine.lineName = this.department.name; + this.clearProdbonusLine(); + // this.notificationService.showSuccess('Supervisor added to the line'); } - else { - debugger; - newlineSupervisor.prodBonusLineID = this.selectedRow.id; - this.prodBonusLine.id = this.selectedRow.id; - this.prodBonusLine.lineName = this.selectedRow.lineName; - this.prodBonusLine.scheduledHour = this.selectedRow.scheduledHours; - this.prodBonusLine.prodBonusSupervisors.push(newlineSupervisor); - // this.prodBonusLine.prodBonusParameters.push(newlineParameter); + ); + + debugger; + //WorkSchedules + // newLayoutWork.prodBonusSetupID = this.productionBonusSetup.id; + // newLayoutWork.prodBonusLineID = this.selectedRow.id; + const currentDate = new Date(this.productionBonusSetup.fromDate); + // while (currentDate <= this.productionBonusSetup.toDate) { + // newLayoutWork.startDateTime = new Date(currentDate.setHours(0, 0, 0, 0)); + // newLayoutWork.endDateTime = new Date(currentDate.setHours(23, 59, 59, 999)); + // debugger; + // this.prodBonusLine.prodBonusWorkSchedules.push(newLayoutWork); + // currentDate.setDate(currentDate.getDate() + 1); + // } + + // //Commented For Test + // for (let i = 0; currentDate <= this.productionBonusSetup.toDate; i++) { + // let newLayoutWork: ProdBonusWorkSchedule = { + // prodBonusSetupID: 0, + // prodBonusLineID: 0, + // id: 0, + // startDateTime: new Date(currentDate.setHours(0, 0, 0, 0)), + // endDateTime: new Date(currentDate.setHours(23, 59, 59, 999)) + // }; + // this.prodBonusLine.prodBonusWorkSchedules.push(newLayoutWork); + // currentDate.setDate(currentDate.getDate() + 1); + // } + } + else { + debugger; + newlineSupervisor.prodBonusLineID = this.selectedRow.id; + this.prodBonusLine.id = this.selectedRow.id; + this.prodBonusLine.lineName = this.selectedRow.lineName; + this.prodBonusLine.scheduledHour = this.selectedRow.scheduledHours; + this.prodBonusLine.prodBonusSupervisors.push(newlineSupervisor); + // this.prodBonusLine.prodBonusParameters.push(newlineParameter); // console.log(this.prodBonusLine); @@ -525,7 +528,7 @@ export class ProductionBonusSetupComponent implements OnInit { onClickOk() { debugger; if (this.isNewLine) { - if(this._departmentPicker.selectedID == undefined){ + if (this._departmentPicker.selectedID == undefined) { this.notificationService.showWarning('Please Select a Line'); return; } this.prodBonusLine.lineName = this._departmentPicker.selectedObjects[0]['name']; @@ -606,10 +609,38 @@ export class ProductionBonusSetupComponent implements OnInit { this.editDetails = false; this.prodBSdata = undefined; } - onScheduledHoursChange(value: number){ + onScheduledHoursChange(value: number) { debugger; this.prodBonusLine.scheduledHour = value; this.scheduledHours; this.productionBonusSetup.productionBonusLines } + + + createWorkSchedule(data: any) { + debugger; + var newlineParameter: ProdBonusParameter = new ProdBonusParameter(); + if (this.isNewLine){ + newlineParameter.itemID = this._departmentPicker.selectedID; + newlineParameter.itemType = 0; + newlineParameter.prodBonusSetupID = this.productionBonusSetup.id; + this.prodBonusLine.prodBonusParameters.push(newlineParameter); + + const currentDate = new Date(this.productionBonusSetup.fromDate); + const maxDate = new Date(this.productionBonusSetup.toDate); + maxDate.setDate(this.productionBonusSetup.toDate.getDate() + 1); + + for (let i = 0; currentDate <= maxDate; i++) { + let newLayoutWork: ProdBonusWorkSchedule = { + prodBonusSetupID: 0, + prodBonusLineID: 0, + id: 0, + startDateTime: new Date(currentDate.setHours(0, 0, 0, 0)), + endDateTime: new Date(currentDate.setHours(23, 59, 59, 999)) + }; + this.prodBonusLine.prodBonusWorkSchedules.push(newLayoutWork); + currentDate.setDate(currentDate.getDate() + 1); + } + } + } } diff --git a/HRM.UI/Controllers/Payroll/BonusController.cs b/HRM.UI/Controllers/Payroll/BonusController.cs index ce5c1e8..beb1dd8 100644 --- a/HRM.UI/Controllers/Payroll/BonusController.cs +++ b/HRM.UI/Controllers/Payroll/BonusController.cs @@ -569,6 +569,7 @@ namespace HRM.UI.Controllers.Payroll { var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems)); int setupID = (int)item["setupId"].ToObject(); + int lineID = (int)item["lineId"].ToObject(); DateTime date = (DateTime)item["date"].ToObject(); CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); @@ -576,7 +577,7 @@ namespace HRM.UI.Controllers.Payroll List AttnItems = new List(); try { - AttnItems = _prodBonusAttnService.Get(setupID, date); + AttnItems = _prodBonusAttnService.GetBySetupLineDate(setupID, lineID, date); } catch (Exception e) @@ -656,6 +657,52 @@ namespace HRM.UI.Controllers.Payroll return Ok(_oFinalEmployees); } + [HttpPost] + [Route("getProdBonusAttnEmployeeListSwingAndPrinting")] + public ActionResult getProdBonusAttnEmployeeListSwingAndPrinting(dynamic pItem) + { + var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(pItem)); + DateTime date = (DateTime)item["date"].ToObject(); + ProdBonusLine _oProdBonusLine = (ProdBonusLine)item["prodLine"].ToObject(); + + CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); + List _oEmployees = new EmployeeService().Get(EnumEmployeeStatus.Live, (int)currentUser.PayrollTypeID); + List _oFinalEmployees = new List(); + List _oProdBonusParameters = new List(); + List _oProdBonusSupervisors = new List(); + List _oDailyAttnProsess = new List(); + List _oProdBonusAttns = null; + try + { + DateTime? maxDate = _prodBonusAttnService.GetMaxDate(_oProdBonusLine.ProdBonusSetupID, _oProdBonusLine.ID, date); + + if(maxDate != null) + _oProdBonusAttns = _prodBonusAttnService.GetBySetupLineDate(_oProdBonusLine.ProdBonusSetupID, _oProdBonusLine.ID, (DateTime)maxDate); + + List desigparam = _oProdBonusParameters.Where(o => o.ItemType == EnumBonusItemType.Designation).ToList(); + if(_oProdBonusAttns != null && _oProdBonusAttns.Count > 0) + { + foreach (var pda in _oProdBonusAttns) + { + Employee emp = _oEmployees.Find(o => o.ID == pda.EmployeeID); + + if (emp != null) _oFinalEmployees.Add(emp); + } + } + string emIds = _oFinalEmployees.Aggregate(new StringBuilder(), (sb, x) => sb.Append(x.ID + ","), sb => sb.ToString().Trim(',')); + if (emIds != "") + { + _oDailyAttnProsess = new DailyAttnProcessService().Get(emIds, date.Date, date.Date.AddHours(23.9)); + } + + } + catch (Exception e) + { + return StatusCode(StatusCodes.Status500InternalServerError, e.Message); + } + + return Ok(_oFinalEmployees); + } [HttpGet("getByLineID/{lineID}")] public ActionResult getByLineID(int lineID) {