Production Bonus attn Swing and Printing #12
|
@ -283,12 +283,13 @@ namespace HRM.BO
|
|||
|
||||
List<ProdBonusAttn> Get(int setupID, int ScheduleID);
|
||||
List<ProdBonusAttn> Get(int setupID, DateTime dateTime);
|
||||
|
||||
List<ProdBonusAttn> GetBySetupLineDate(int setupID, int lineID, DateTime dateTime);
|
||||
List<ProdBonusAttn> GetBySetupID(int iD);
|
||||
List<ProdBonusAttn> GetBySetupIDs(string iDs);
|
||||
|
||||
List<ProdBonusAttn> GetByLineID(int lineID);
|
||||
List<ProdBonusAttn> GetbySetupAndLineID(int setupID, int lineID);
|
||||
DateTime? GetMaxDate(int setupID, int lineID, DateTime date);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -159,6 +159,32 @@ namespace HRM.DA
|
|||
|
||||
return ProdBonusAttns;
|
||||
}
|
||||
public List<ProdBonusAttn> GetBySetupLineDate(int setupID, int lineID, DateTime dateTime)
|
||||
{
|
||||
|
||||
List<ProdBonusAttn> ProdBonusAttns = new List<ProdBonusAttn>();
|
||||
|
||||
TransactionContext tc = null;
|
||||
try
|
||||
{
|
||||
tc = TransactionContext.Begin();
|
||||
DataReader dr = new DataReader(ProdBonusAttnDA.GetBySetupLineDate(tc, setupID, lineID, dateTime));
|
||||
ProdBonusAttns = this.CreateObjects<ProdBonusAttn>(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<ProdBonusAttn> 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;
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<None Remove="Attendence\RDLC\rptMonthlyKPI.rdlc" />
|
||||
<None Remove="RDLC\ActiveEmployeeDetail.rdlc" />
|
||||
<None Remove="RDLC\Advice.rdlc" />
|
||||
<None Remove="RDLC\AllDigitalServiceBook.rdlc" />
|
||||
<None Remove="RDLC\AllEmpTaxInfo.rdlc" />
|
||||
<None Remove="RDLC\AllMedicalClaim.rdlc" />
|
||||
<None Remove="RDLC\ApointmentLetterForStuff.rdlc" />
|
||||
|
@ -310,6 +311,7 @@
|
|||
<EmbeddedResource Include="Attendence\RDLC\MultipleJobCardSub.rdlc" />
|
||||
<EmbeddedResource Include="Attendence\RDLC\rptMonthlyKPI.rdlc" />
|
||||
<EmbeddedResource Include="RDLC\ActiveEmployeeDetail.rdlc" />
|
||||
<EmbeddedResource Include="RDLC\AllDigitalServiceBook.rdlc" />
|
||||
<EmbeddedResource Include="RDLC\AllEmpTaxInfo.rdlc" />
|
||||
<EmbeddedResource Include="RDLC\AllMedicalClaim.rdlc" />
|
||||
<EmbeddedResource Include="RDLC\ApointmentLetterForStuff.rdlc" />
|
||||
|
|
|
@ -124,6 +124,9 @@ export class BonusService {
|
|||
getProdBonusAttnEmployeeList(item: any) {
|
||||
return this.apiService.httpPost<Employee[]>('/Bonus/getProdBonusAttnEmployeeList', item);
|
||||
}
|
||||
getProdBonusAttnEmployeeListSwingAndPrinting(item: any) {
|
||||
return this.apiService.httpPost<Employee[]>('/Bonus/getProdBonusAttnEmployeeListSwingAndPrinting', item);
|
||||
}
|
||||
saveAllProdBonusAttn(item: any) {
|
||||
return this.apiService.httpPost<any[]>('/Bonus/saveAllProdBonusAttn', item);
|
||||
}
|
||||
|
|
|
@ -247,10 +247,12 @@
|
|||
</div>
|
||||
<div class="p-col-12 p-md-12 p-lg-8">
|
||||
<input [(ngModel)]="hrEmployee.nationalID" formControlName="nationalId"
|
||||
id="txtNationalId" pInputText style="width:84%" type="text" [readonly]="!active">
|
||||
id="txtNationalId" pInputText style="width:84%" type="text">
|
||||
<!-- [readonly]="!active" -->
|
||||
<button class="k-button k-primary" kendoButton icon="k-i-attachment-45 k-i-clip-45"
|
||||
style="width: 15.5%; vertical-align: bottom; padding: 16px;" [disabled]="!active"
|
||||
style="width: 15.5%; vertical-align: bottom; padding: 16px;"
|
||||
(click)="popUpAttachment('NID')"></button>
|
||||
<!-- [disabled]="!active" -->
|
||||
</div>
|
||||
<div class="p-col-12 p-md-12 p-lg-4">
|
||||
<label for="txtPassportNo">Passport No</label>
|
||||
|
|
|
@ -84,7 +84,7 @@
|
|||
</div>
|
||||
|
||||
<div class="p-col-12" align="right">
|
||||
<button icon="refresh" kendoButton [primary]="true" style="width: fit-content" (click)="onClickRefresh()"
|
||||
<button icon="refresh" kendoButton [primary]="true" style="width: fit-content" (click)="onClickLoad()"
|
||||
[disabled]="selectedProdBSdata===undefined||selectedLine===undefined||selectedDate===undefined">Load</button>
|
||||
</div>
|
||||
<div class="p-col-12">
|
||||
|
@ -94,6 +94,7 @@
|
|||
Remove All
|
||||
</button>
|
||||
<kendo-grid-spacer></kendo-grid-spacer>
|
||||
<label>Attendance Count: {{employeeList.length}} </label>
|
||||
<!--<button kendoGridExcelCommand type="button" icon="file-excel">Export to
|
||||
Excel</button>class="customButton"-->
|
||||
</ng-template>
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -141,7 +141,7 @@
|
|||
<label>Line Name</label>
|
||||
</div>
|
||||
<div class="p-col-12 p-lg-5" *ngIf="isNewLine">
|
||||
<app-dynamic-picker [dynamicPickerView]="_departmentPicker"></app-dynamic-picker>
|
||||
<app-dynamic-picker [dynamicPickerView]="_departmentPicker" (onSelectCompleted)="createWorkSchedule($event)"></app-dynamic-picker>
|
||||
</div>
|
||||
<div class="p-col-12 p-lg-5" *ngIf="!isNewLine">
|
||||
<input [(ngModel)]="selectedRow.lineName" [readonly]="!isNewLine" type="text"
|
||||
|
|
|
@ -461,11 +461,12 @@ export class ProductionBonusSetupComponent implements OnInit {
|
|||
() => {
|
||||
//newlineItem.amount
|
||||
this.prodBonusLine.prodBonusSupervisors.push(newlineSupervisor);
|
||||
this.prodBonusLine.prodBonusParameters.push(newlineParameter);
|
||||
|
||||
//Commented For Test
|
||||
// this.prodBonusLine.prodBonusParameters.push(newlineParameter);
|
||||
|
||||
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');
|
||||
}
|
||||
|
@ -483,17 +484,19 @@ export class ProductionBonusSetupComponent implements OnInit {
|
|||
// 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);
|
||||
}
|
||||
|
||||
// //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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>();
|
||||
int lineID = (int)item["lineId"].ToObject<int>();
|
||||
DateTime date = (DateTime)item["date"].ToObject<DateTime>();
|
||||
|
||||
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
|
||||
|
@ -576,7 +577,7 @@ namespace HRM.UI.Controllers.Payroll
|
|||
List<ProdBonusAttn> AttnItems = new List<ProdBonusAttn>();
|
||||
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<DateTime>();
|
||||
ProdBonusLine _oProdBonusLine = (ProdBonusLine)item["prodLine"].ToObject<ProdBonusLine>();
|
||||
|
||||
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
|
||||
List<Employee> _oEmployees = new EmployeeService().Get(EnumEmployeeStatus.Live, (int)currentUser.PayrollTypeID);
|
||||
List<Employee> _oFinalEmployees = new List<Employee>();
|
||||
List<ProdBonusParameter> _oProdBonusParameters = new List<ProdBonusParameter>();
|
||||
List<ProdBonusSupervisor> _oProdBonusSupervisors = new List<ProdBonusSupervisor>();
|
||||
List<DailyAttnProcess> _oDailyAttnProsess = new List<DailyAttnProcess>();
|
||||
List<ProdBonusAttn> _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<ProdBonusParameter> 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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user