Compare commits

...

7 Commits

Author SHA1 Message Date
efbd3ca782 Profile related works 2025-02-23 16:13:19 +06:00
751ae428bb blood group 2025-02-23 09:07:30 +06:00
e9b6337030 EnumBloodgroup changed 2025-02-23 09:01:17 +06:00
057e27c226 multiple letter generation 2025-02-12 18:02:49 +06:00
083ae15e1e employee profile issues 2025-02-12 11:12:32 +06:00
6e8a28a477 roster assignment type addition 2025-02-05 15:02:49 +06:00
f418e7ab3d employee profile issues upon client requirement 2025-02-04 12:12:16 +06:00
31 changed files with 560 additions and 102 deletions

View File

@ -1477,16 +1477,16 @@ namespace HRM.BO
public enum EnumBloodGroup
{
None = 0,
APos = 1,
ANeg = 2,
BPos = 3,
BNeg = 4,
OPos = 5,
ONeg = 6,
ABPos = 7,
ABNeg = 8,
NA = 9
NA = 0,
None = 1,
APos = 2,
ANeg = 3,
BPos = 4,
BNeg = 5,
OPos = 6,
ONeg = 7,
ABPos = 8,
ABNeg = 9
}

View File

@ -259,7 +259,9 @@ namespace HRM.BO
public Relation ContactPersonRelation { get; set; }
public string PermanentAddressInBangla { get; set; }
public string PresentAddressInBangla { get; set; }
public string PresentPO { get; set; }
public string PresentPOInBangla { get; set; }
public string PermanentPO { get; set; }
public string ParmanentPOInBangla { get; set; }
//#region Property PermanentDistrict : District
@ -1309,8 +1311,8 @@ namespace HRM.BO
#endregion
//CGPA or Marks
#region GPAOrMarks
private double _gpa;
public double GPAOrMarks
private double? _gpa;
public double? GPAOrMarks
{
get { return _gpa; }
set { _gpa = value; }
@ -1319,8 +1321,8 @@ namespace HRM.BO
//OutOf
#region Property OutOf : double
private double _outOf;
public double OutOf
private double? _outOf;
public double? OutOf
{
get { return _outOf; }
set { _outOf = value; }

View File

@ -434,12 +434,12 @@ namespace HRM.DA
"EmployeeID, ContactID, PARMANENTADDRESS, PARMANENTDISTRICTID, PARMANENTTHANAID, PARMANENTTELEPHONE," +
" PresentAddress, PresentDistrictID, PresentThanaID, PresentTelephone, Mobile, PersonalEmail," +
" OfficialEMail, Fax, EmergencyContactAddress, EmergencyContactPerson, EmergencyTelephone, PARMANENTMOBILE, " +
" PRESENTMOBILE, PERSONALTELEPHONE, EMERGENCYMOBILE, CPRELATIONID,ProfileStatus,PermanentAddressInBangla,PresentAddressInBangla,PermanentPostCodeNo,PresentPostCodeNo, PresentPOInBangla, ParmanentPOInBangla)" +
" PRESENTMOBILE, PERSONALTELEPHONE, EMERGENCYMOBILE, CPRELATIONID,ProfileStatus,PermanentAddressInBangla,PresentAddressInBangla,PermanentPostCodeNo,PresentPostCodeNo, PresentPOInBangla, ParmanentPOInBangla, PresentPO, PermanentPO)" +
" VALUES(" +
" %n, %n, %s, %n, %n, %s, " +
" %s, %n, %n, %s, %s, %s," +
" %s, %s, %s, %s, %s, %s," +
" %s, %s, %s, %n,%n, %u, %u, %s, %s, %u, %u)",
" %s, %s, %s, %n,%n, %u, %u, %s, %s, %u, %u, %s, %s)",
item.EmployeeID, item.ID, item.PermanentAddress, DataReader.GetNullValue(item.PermanentDistrictID, 0),
DataReader.GetNullValue(item.PermanentThanaID, 0), item.PermanentTelephone,
item.PresentAddress, DataReader.GetNullValue(item.PresentDistrictID, 0),
@ -448,7 +448,7 @@ namespace HRM.DA
item.EmergencyTelephone, DataReader.GetNullValue(item.PermanentMobile),
DataReader.GetNullValue(item.PresentMobile), DataReader.GetNullValue(item.PersonalTelephone),
DataReader.GetNullValue(item.EmergencyMobile),
DataReader.GetNullValue(item.ContactPersonRelationId, 0), item.ProfileStatus, item.PermanentAddressInBangla, item.PresentAddressInBangla, item.PermanentPostCodeNo, item.PresentPostCodeNo, item.PresentPOInBangla, item.ParmanentPOInBangla);
DataReader.GetNullValue(item.ContactPersonRelationId, 0), item.ProfileStatus, item.PermanentAddressInBangla, item.PresentAddressInBangla, item.PermanentPostCodeNo, item.PresentPostCodeNo, item.PresentPOInBangla, item.ParmanentPOInBangla, item.PresentPO, item.PermanentPO);
tc.ExecuteNonQuery(sql);
}
@ -459,7 +459,7 @@ namespace HRM.DA
"PARMANENTADDRESS =%s , PARMANENTDISTRICTID =%n, PARMANENTTHANAID =%n, PARMANENTTELEPHONE=%s," +
" PresentAddress=%s, PresentDistrictID=%n, PresentThanaID=%n, PresentTelephone=%s, Mobile =%s, PersonalEmail=%s," +
" OfficialEMail=%s, Fax=%s, EmergencyContactAddress=%s, EmergencyContactPerson=%s, EmergencyTelephone=%s, PARMANENTMOBILE=%s, " +
" PRESENTMOBILE=%s, PERSONALTELEPHONE=%s, EMERGENCYMOBILE=%s, CPRELATIONID=%n,ProfileStatus=%n,PermanentAddressInBangla=%u,PresentAddressInBangla=%u,PermanentPostCodeNo=%s,PresentPostCodeNo=%s, PresentPOInBangla = %u, ParmanentPOInBangla = %u" +
" PRESENTMOBILE=%s, PERSONALTELEPHONE=%s, EMERGENCYMOBILE=%s, CPRELATIONID=%n,ProfileStatus=%n,PermanentAddressInBangla=%u,PresentAddressInBangla=%u,PermanentPostCodeNo=%s,PresentPostCodeNo=%s, PresentPOInBangla = %u, ParmanentPOInBangla = %u, PresentPO = %s, PermanentPO = %s" +
" where EmployeeID =%n and ContactID =%n ",
item.PermanentAddress, DataReader.GetNullValue(item.PermanentDistrictID, 0),
DataReader.GetNullValue(item.PermanentThanaID, 0), item.PermanentTelephone,
@ -469,7 +469,7 @@ namespace HRM.DA
item.EmergencyTelephone, DataReader.GetNullValue(item.PermanentMobile),
DataReader.GetNullValue(item.PresentMobile), DataReader.GetNullValue(item.PersonalTelephone),
DataReader.GetNullValue(item.EmergencyMobile),
DataReader.GetNullValue(item.ContactPersonRelationId, 0), item.ProfileStatus, item.PermanentAddressInBangla, item.PresentAddressInBangla, item.PermanentPostCodeNo, item.PresentPostCodeNo, item.PresentPOInBangla, item.ParmanentPOInBangla, item.EmployeeID, item.ID);
DataReader.GetNullValue(item.ContactPersonRelationId, 0), item.ProfileStatus, item.PermanentAddressInBangla, item.PresentAddressInBangla, item.PermanentPostCodeNo, item.PresentPostCodeNo, item.PresentPOInBangla, item.ParmanentPOInBangla, item.PresentPO, item.PermanentPO, item.EmployeeID, item.ID);
tc.ExecuteNonQuery(sql);
}
@ -588,8 +588,8 @@ namespace HRM.DA
academic.ID, academic.EmployeeID, academic.EducationLevelID,
DataReader.GetNullValue(academic.DisciplineID, 0), DataReader.GetNullValue(academic.InstitutionID, 0),
DataReader.GetNullValue(academic.PassingYear),
DataReader.GetNullValue(academic.ClassOrDivision), academic.GPAOrMarks, academic.LastLevel,
academic.OutOf, DataReader.GetNullValue(academic.ResultTypeID, 0),
DataReader.GetNullValue(academic.ClassOrDivision), DataReader.GetNullValue(academic.GPAOrMarks), academic.LastLevel,
DataReader.GetNullValue(academic.OutOf), DataReader.GetNullValue(academic.ResultTypeID),
DataReader.GetNullValue(academic.InstituteName), DataReader.GetNullValue(academic.EducationTypeID, 0),
academic.PhotoPath, academic.DocSubmissionDate, academic.ProfileStatus);
}
@ -602,8 +602,8 @@ namespace HRM.DA
" where AcademicID =%n and EmployeeID =%n ", academic.EducationLevelID,
DataReader.GetNullValue(academic.DisciplineID, 0), DataReader.GetNullValue(academic.InstitutionID, 0),
DataReader.GetNullValue(academic.PassingYear),
DataReader.GetNullValue(academic.ClassOrDivision), academic.GPAOrMarks, academic.LastLevel,
academic.OutOf, DataReader.GetNullValue(academic.ResultTypeID, 0),
DataReader.GetNullValue(academic.ClassOrDivision), DataReader.GetNullValue(academic.GPAOrMarks), academic.LastLevel,
DataReader.GetNullValue(academic.OutOf), DataReader.GetNullValue(academic.ResultTypeID),
DataReader.GetNullValue(academic.InstituteName), DataReader.GetNullValue(academic.EducationTypeID, 0),
academic.PhotoPath, academic.DocSubmissionDate, academic.ProfileStatus,
academic.ID, academic.EmployeeID);

View File

@ -385,9 +385,16 @@ END;";
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 Order by %s",
recurSqlClause, top, sqlClause, recurWhereClause, orderby);
"%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);
}

View File

@ -254,6 +254,8 @@ namespace HRM.DA
oEmpContact.ProfileStatus = (EnumProfileStatus)oReader.GetInt32("ProfileStatus").GetValueOrDefault();
oEmpContact.PresentPOInBangla = oReader.GetString("PresentPOInBangla", true, null);
oEmpContact.ParmanentPOInBangla = oReader.GetString("ParmanentPOInBangla", true, null);
oEmpContact.PresentPO = oReader.GetString("PresentPO", true, null);
oEmpContact.PermanentPO = oReader.GetString("PermanentPO", true, null);
this.SetObjectState(oEmpContact, ObjectState.Saved);
}
@ -596,8 +598,8 @@ namespace HRM.DA
oEmpAcademic.ProfileStatus = (EnumProfileStatus)oReader.GetInt32("ProfileStatus", 0);
oEmpAcademic.ResultTypeID = oReader.GetInt32("ResultTypeID", 0);
oEmpAcademic.GPAOrMarks = oReader.GetDouble("GPAOrMarks", 0);
oEmpAcademic.OutOf = oReader.GetDouble("OutOf", 0);
oEmpAcademic.GPAOrMarks = oReader.GetDouble("OutOf").HasValue ? oReader.GetDouble("GPAOrMarks") : null;
oEmpAcademic.OutOf = oReader.GetDouble("OutOf").HasValue ? oReader.GetDouble("OutOf") : null;
oEmpAcademic.LastLevel = oReader.GetBoolean("LastLevel", false);
oEmpAcademic.InstituteName = oReader.GetString("InstituteName");
oEmpAcademic.PhotoPath = oReader.GetString("PhotoPath");

View File

@ -36,7 +36,9 @@ export class EmpContact extends BaseObject {
presentAddressInBangla: string;
permanentPostCodeNo: string;
presentPostCodeNo: string;
presentPO: string;
presentPOInBangla: string;
permanentPO: string;
parmanentPOInBangla: string;
constructor() {
super();

View File

@ -998,6 +998,7 @@ export enum EnumTrainingCompletedFrom {
}
export enum EnumBloodGroup {
NA,
None,
APos,
ANeg,
@ -1006,7 +1007,7 @@ export enum EnumBloodGroup {
OPos,
ONeg,
ABPos,
ABNeg,
ABNeg
}
export enum EnumOGPositionType {
@ -3149,14 +3150,15 @@ export enum EnumSuccessorReadiness {
}
export let BloodGroupList = [
{ name: "A+", value: 1 },
{ name: "A-", value: 2 },
{ name: "B+", value: 3 },
{ name: "B-", value: 4 },
{ name: "O+", value: 5 },
{ name: "O-", value: 6 },
{ name: "AB+", value: 7 },
{ name: "AB-", value: 8 },
{ name: "N/A", value: 1 },
{ name: "A+", value: 2 },
{ name: "A-", value: 3 },
{ name: "B+", value: 4 },
{ name: "B-", value: 5 },
{ name: "O+", value: 6 },
{ name: "O-", value: 7 },
{ name: "AB+", value: 8 },
{ name: "AB-", value: 9 },
];
export class EnumExtension {

View File

@ -11,6 +11,7 @@ import { EnumLetterOrganizationType } from '../../_models/enums';
import { LetterRequest } from '../../_models/Letter-Request/Letter-Request';
import { AuthorizedPerson } from '../../adhoc-feature/authorized-persons/authorizedPerson';
import { WFMovementTran } from '../../_models/Work-Flow/wFMovementTran';
import { SearchEmployee } from 'src/app/_models/Employee/searchEmployee';
@Injectable({
providedIn: 'root'
@ -233,6 +234,10 @@ export class LetterRequestService {
getImage(id: number) {
return this.apiService.httpGet<any>('/LetterRequest/getImage' + '/' + id);
}
generatedExceptiinLetter(type: number, param: SearchEmployee[]) {
return this.apiService.httpPost('/LetterRequest/generatedExceptiinLetter/' + type , param);
// return this.apiService.httpDownloadFile('/LetterRequest/generatedExceptiinLetter/' + type , param);
}
}

View File

@ -19,6 +19,7 @@ import {LetterRequestByAdminApprovalComponent} from './letter-request-by-admin-a
import {ApproveFinancialDataComponent} from './approve-financial-data/approve-financial-data.component';
import {AuthorizedPersonsComponent} from './authorized-persons/authorized-persons.component';
import { LetterGenerateComponent } from './letter-generate/letter-generate.component';
import { ExceptionLetterGenerateComponent } from './exception-letter-generate/exception-letter-generate.component';
const routes: Routes = [
@ -31,6 +32,7 @@ const routes: Routes = [
{path: 'letter-generate', component: LetterGenerateComponent, canActivate: [AuthGuard]},
{path: 'workflow-delegation-by-employee', component: WorkflowDelegationByEmployeeComponent, canActivate: [AuthGuard]},
{path: 'delegation-from-admin-panel', component: DelegationFromAdminPanelComponent, canActivate: [AuthGuard]},
{path: 'exception-letter-generate', component: ExceptionLetterGenerateComponent, canActivate: [AuthGuard]},
//{path: 'letter-request-by-employee-and-approval', component: LetterRequestByEmployeeAndApprovalComponent, canActivate: [AuthGuard]},
//{path: 'letter-request-approval', component: LetterRequestApprovalComponent, canActivate: [AuthGuard]},
//{path: 'letter-print-by-admin-panel', component: LetterPrintByAdminPanelComponent, canActivate: [AuthGuard]},

View File

@ -49,13 +49,14 @@ import { ApproveFinancialDataComponent } from './approve-financial-data/approve-
import { AuthorizedPersonsComponent } from './authorized-persons/authorized-persons.component';
import { AuthorizedPersonComponent } from './authorized-persons/authorized-person/authorized-person.component';
import { LetterGenerateComponent } from './letter-generate/letter-generate.component';
import { ExceptionLetterGenerateComponent } from './exception-letter-generate/exception-letter-generate.component';
@NgModule({
declarations: [workflowRuleComponent, WorkFlowSetupComponent, WorkFlowSetupNewComponent, WorkFlowAdministrativeStatusComponent,
WorkFlowAdminComponent, WorkflowDelegationByEmployeeComponent, DelegationFromAdminPanelComponent,
LetterRequestApprovalComponent, LetterPrintByAdminPanelComponent,
LetterRequestByAdminApprovalComponent, ApproveFinancialDataComponent, AuthorizedPersonsComponent, AuthorizedPersonComponent, LetterGenerateComponent
LetterRequestByAdminApprovalComponent, ApproveFinancialDataComponent, AuthorizedPersonsComponent, AuthorizedPersonComponent, LetterGenerateComponent, ExceptionLetterGenerateComponent
],
imports: [

View File

@ -0,0 +1,58 @@
<app-loading-panel> </app-loading-panel>
<div class="card" style="padding:10px;">
<div class="p-grid">
<div class="p-col-12">
<div class="p-grid">
<div class="p-col-4 p-md-2">
<label>Employee(s)</label>
</div>
<div class="p-col-8 p-md-4">
<!-- <app-employee-picker (ItemSelected)="GetSelectedEmployee($event)" [setSelectedEmp]="selectedEmps"
[MultiSelect]="true"></app-employee-picker> -->
<app-employee-picker (ItemSelected)="GetSelectedEmployee($event)"
[MultiSelect]="true"></app-employee-picker>
</div>
<div class="p-col-4 p-md-2">
<label>Letter</label>
</div>
<div class="p-col-8 p-md-4">
<kendo-dropdownlist [(ngModel)]="selectedreportType" [data]="reportTypes" [textField]="'text'"
[valueField]="'value'" [defaultItem]="{ text: 'Select Letter..', value: null }"
(valueChange)="onSelectReport($event)">
</kendo-dropdownlist>
</div>
<div class="p-col-12">
<kendo-grid #grid [data]="selectedEmps" [kendoGridSelectBy]="'employeeID'" [selectedKeys]="mySelection" [pageable]="false" [sortable]="true" [reorderable]="true"
[resizable]="true">
<!-- <ng-template kendoGridToolbarTemplate>
<button type="button" kendoButton icon="delete" class="kt-delete" (click)="onClickRemoveAll()">
Remove All
</button>
<kendo-grid-spacer></kendo-grid-spacer>
<label>Attendance Count: {{employeeList.length}} </label>
</ng-template> -->
<kendo-grid-checkbox-column [resizable]="false" [width]="45" showSelectAll="true">
</kendo-grid-checkbox-column>
<kendo-grid-column field="employeeNo" title="Employee No" [width]="150">
</kendo-grid-column>
<kendo-grid-column field="name" title="Employee Name" [width]="220">
</kendo-grid-column>
<kendo-grid-column field="departmentName" title="Department" [width]="220">
</kendo-grid-column>
<kendo-grid-column field="gradeName" title="Grade" [width]="220">
</kendo-grid-column>
<!-- <kendo-grid-column title="Actions" width="25%" align="middle">
<ng-template kendoGridCellTemplate let-dataItem let-rowIndex="rowIndex">
<button kendoButton class="kt-delete" icon="delete" style="width: fit-content;"
(click)="onClickRemove(dataItem)">Remove</button>
</ng-template>
</kendo-grid-column> -->
</kendo-grid>
<div class="p-col-12" align="right">
<button kendoButton icon="upload" type="button" (click)="generateLetter()" [primary] = true>Generate</button>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,162 @@
import { error } from 'console';
import { Component, OnInit } from '@angular/core';
import { DynamicPicker, EnumDynamicpickerType } from '../../picker/dynamic-picker/Dynamic-Picker';
import { SearchEmployee } from 'src/app/_models/Employee/searchEmployee';
import { Router } from '@angular/router';
import { ApiService } from 'src/app/app.api.service';
import { HRMNotificationService } from 'src/app/app.notification.service';
import { loadingPanelService } from 'src/app/hrm-loding panel/loding.panel.service';
import { BasicService } from 'src/app/_services/Basic/basic.service';
import { Department } from 'src/app/_models/Basic/department';
import { Grade } from 'src/app/_models/Basic/grade';
import { EnumStatus } from '../../_models/enums';
import { Employee } from 'src/app/_models/Employee/employee';
import { LetterRequestService } from 'src/app/_services/letter-request/letter-request.service';
import { saveAs } from 'file-saver';
@Component({
selector: 'app-exception-letter-generate',
templateUrl: './exception-letter-generate.component.html',
styleUrls: ['./exception-letter-generate.component.scss']
})
export class ExceptionLetterGenerateComponent implements OnInit {
public selectedEmps: SearchEmployee[] = [];
public mySelection: number[] = [];
public selectedreportType: EnumExceptionLetterTemplateType;
public reportTypes = Object.keys(EnumExceptionLetterTemplateType)
.filter(key => !isNaN(Number(EnumExceptionLetterTemplateType[key])))
.map(key => ({
text: key.replace(/_/g, ' '),
value: EnumExceptionLetterTemplateType[key]
}));
public allDepartments: Department[];
public allGrades: Grade[];
constructor(
public router: Router, public loadingPanel: loadingPanelService,
public notificationService: HRMNotificationService,
public apiService: ApiService,
public basicService: BasicService, public letterRequestService: LetterRequestService) {
this.apiService.selectedMenuName = 'Employee Letter Generation';
}
ngOnInit(): void {
// this.basicService.getAllDepartment(EnumStatus.Active).subscribe(
// (resp) => {
// this.allDepartments = resp;
// },
// (err: any) => {
// this.notificationService.showError(err.error);
// }
// );
// this.basicService.getAllGrade(EnumStatus.Active).subscribe(
// (resp) => {
// this.allGrades = resp;
// },
// (err: any) => {
// this.notificationService.showError(err.error);
// }
// );
}
public GetSelectedEmployee(childData) {
this.selectedEmps = childData;
// this.selectedEmps.forEach(element => {
// element.departmentName = this.allDepartments.find(d => d.id == element.departmentID).name;
// element.gradeName = this.allDepartments.find(g => g.id == element.gradeID).name;
// });
}
public onSelectReport(value: any) {
debugger;
}
generateLetter() {
let employeeDataToGenerate: SearchEmployee[] = [];
this.selectedEmps.forEach(element => {
this.mySelection.forEach(item => {
if (element.employeeID == item) employeeDataToGenerate.push(element);
});
});
this.selectedreportType;
if (this.selectedreportType == undefined || this.selectedreportType['value'] == null) {
this.notificationService.showWarning("Please select a Letter to Generate");
return;
}
if (employeeDataToGenerate.length <= 0) {
this.notificationService.showWarning("Please select Employee to Generate Letter");
return;
}
this.loadingPanel.ShowLoadingPanel = true;
this.letterRequestService.generatedExceptiinLetter(this.selectedreportType['value'], employeeDataToGenerate).subscribe(
(resp: any[]) => {
debugger
if (resp.length > 0) {
resp.forEach(fileData => {
// this.downloadBlob(new Blob([fileData.fileContents], { type: 'application/msword' }), 'application/msword', fileData.fileDownloadName);
this.downloadFileWord(fileData.fileContents, fileData.fileDownloadName);
});
}
this.loadingPanel.ShowLoadingPanel = false;
},
(err: any) => {
this.notificationService.showError(err.error);
this.loadingPanel.ShowLoadingPanel = false;
}
);
}
private downloadBlob(data: any, type: string, fileName: string): void {
const blob: Blob = new Blob([data], { type: type });
// const fileName: string = this.workOrderBillReceive.UploadAttachment[0].OriginalFileName;
// const fileName: string = fileName;
const objectUrl: string = URL.createObjectURL(blob);
const a: HTMLAnchorElement = document.createElement('a') as HTMLAnchorElement;
a.href = objectUrl;
a.download = fileName;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(objectUrl);
}
downloadFileWord(blobContent, fileName) {
// const blob = new Blob([this.b64toBlob(blobContent, 'application/data:application/vnd.openxmlformats-officedocument.wordprocessingml.document', 1024)], {});
// saveAs(blob, fileName + '.docx');
const blob = new Blob([this.b64toBlob(blobContent, 'application/msword', 1024)], {});
saveAs(blob, fileName);
}
b64toBlob(b64Data, contentType, sliceSize) {
const byteCharacters = atob(b64Data);
const byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
const slice = byteCharacters.slice(offset, offset + sliceSize);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
const blob = new Blob(byteArrays, { type: contentType });
return blob;
}
}
export enum EnumExceptionLetterTemplateType {
Letter_Template_Staff = 1,
Letter_Template_Worker = 2
}

View File

@ -55,6 +55,7 @@
<div class="card" *ngIf="showPopUp" class="blur-background">
<kendo-window [height]="600" title="{{PDFTitle}}" *ngIf="showPopUp" (close)="closeForm()" [style]="{'min-width': '70%','max-width': '100%', 'max-height': '100%'}">
<app-loading-panel></app-loading-panel>
<div class='embed-responsive'>
<iframe class="pdf-viewer" id="pdf-viewer-ml" type='application/pdf' [zoom]="zoomLevel"></iframe>
</div>

View File

@ -60,6 +60,7 @@ export class LetterGenerateComponent implements OnInit {
};
}
this.showPopUp = true;
this.loadingPanelService.ShowLoadingPanel = true;
this.reportService.getAppointmentLetter(data).subscribe(
(resp: any) => {
if (this.reportType === 'PDF'){

View File

@ -13,7 +13,7 @@ export class ApiService {
public isSSO = false;
public versionDeployement = false;
public versionNumber = `V-${GlobalfunctionExtension.generateVersionNumber(new Date(2025, 0, 16))}-`+"01";
public versionNumber = `V-${GlobalfunctionExtension.generateVersionNumber(new Date(2025, 1, 23))}-`+"01";
public static BASE_URL = '';
public base_url = '';
// public currentLink = '';

View File

@ -11,13 +11,25 @@
<app-employee-picker [MultiSelect]="true"
(ItemSelected)="GetSelectedEmployee($event)"></app-employee-picker>
</div>
<div class="rosterAssignmentControls">
<strong>
<label>Roster Type: </label>
</strong>
</div>
<div class="rosterAssignmentControls">
<kendo-dropdownlist [(ngModel)]="selectedWorkPlanTypeIsFixed" [data]="workPlanTypes"
[defaultItem]="{ text: 'Select Roster Type..', value: null }" [textField]="'text'" [valueField]="'value'"
(valueChange)="onChangeWorkPlanType($event)" [valuePrimitive]="true"
class="form-control form-control-sm input-sm" formControlName="type">
</kendo-dropdownlist>
</div>
<div class="rosterAssignmentControls">
<strong>
<label>Roster: </label>
</strong>
</div>
<div class="rosterAssignmentControls">
<kendo-dropdownlist [(ngModel)]="selectedWorkPlanID" [data]="workPlanGroupList"
<kendo-dropdownlist [(ngModel)]="selectedWorkPlanID" [data]="workPlanGroupListByType"
[defaultItem]="{ name: 'Select..', value: null }" [textField]="'name'" [valueField]="'id'"
(valueChange)="populateEmpWorkPlanByWorkGroup($event)" [valuePrimitive]="true"
class="form-control form-control-sm input-sm" formControlName="group">

View File

@ -31,16 +31,23 @@ export class EchotexRosterAssignmentComponent implements OnInit {
workPlanGroupName = '';
workPlanGroupInitialShift = '';
workPlanGroupList: WorkPlanGroup[];
workPlanGroupListByType: WorkPlanGroup[] = [];
selectedEmployees: SearchEmployee[];
employees: Employee[];
empIds: number[] = [];
exportExcelFileName: string = '';
selectedWorkPlanTypeIsFixed: boolean;
selectedWorkPlanID: number;
fixedWorkPlan: boolean = true;
startDate: Date;
holidayDayOfWeekArray = Object.values(HolidayDayOfWeek);
workPlanTypes: { text: string, value: boolean| null }[] = [
{ text: 'Fixed', value: true },
{ text: 'Counter Clock', value: false }
]
constructor(public employeeService: EmployeeServices,
public attendanceServices: AttendanceServices,
public apiService: ApiService,
@ -85,6 +92,7 @@ export class EchotexRosterAssignmentComponent implements OnInit {
createForm() {
this.rosterAssignmentForm = new FormBuilder().group({
type: ['', Validators.required],
group: ['', Validators.required],
startDate: [''],
});
@ -202,13 +210,13 @@ export class EchotexRosterAssignmentComponent implements OnInit {
this.loadingPanel.ShowLoadingPanel = true;
this.empWorkPlanSetupList = [];
debugger;
if (workPlanGroup.type != EnumWorkPlanGroup.Fixed &&
(workPlanGroup.type != undefined || workPlanGroup.type != null)) {
this.fixedWorkPlan = false;
this.startDate = new Date();
} else {
this.fixedWorkPlan = true;
}
// if (workPlanGroup.type != EnumWorkPlanGroup.Fixed &&
// (workPlanGroup.type != undefined || workPlanGroup.type != null)) {
// this.fixedWorkPlan = false;
// this.startDate = new Date();
// } else {
// this.fixedWorkPlan = true;
// }
this.attendanceServices.getEmployeeWorkPlanSetupByWPGroupID(workPlanGroup.id).subscribe(
(resp) => {
this.empWorkPlanSetupList = resp;
@ -365,4 +373,23 @@ export class EchotexRosterAssignmentComponent implements OnInit {
// return dayIndex as EnumDayOfWeek;
// }
onChangeWorkPlanType(type: any) {
this.empWorkPlanSetupList = [];
this.workPlanGroupListByType = [];
this.selectedWorkPlanID = null;
this.fixedWorkPlan = true;
if (type == undefined || type == null) {
return;
}
else if (type){
this.workPlanGroupListByType = this.workPlanGroupList.filter(y => y.type == EnumWorkPlanGroup.Fixed);
}
else {
this.workPlanGroupListByType = this.workPlanGroupList.filter(y => y.type != EnumWorkPlanGroup.Fixed);
this.fixedWorkPlan = false;
this.startDate = new Date();
}
}
}

View File

@ -187,6 +187,16 @@ export class AcademicEntryComponent implements OnInit {
// this.isGrade = false;
// }
}
let educationType = this.educationTypes.find(x => x.description.toLowerCase() == "academic");
if (this.academic.id == 0 && educationType != undefined) {
this.academic.educationTypeID = educationType.id;
this.selectedEducationTypeID = this.academic.educationTypeID;
this.academic.examDate = new Date().getFullYear();
this.academic.passingYear = new Date().getFullYear();
this.selectEducationTypeEvent(educationType.id);
}
}
);
}
@ -285,7 +295,7 @@ export class AcademicEntryComponent implements OnInit {
educationLevelPicker: ['', Validators.required],
disciplinePicker: ['', Validators.required],
institutionPicker: ['', Validators.required],
resultTypePicker: ['', Validators.required],
resultTypePicker: [''],
examHeldOn: ['', Validators.required],
passingYear: ['', Validators.required],
gpaOrMarks: [''],
@ -304,11 +314,12 @@ export class AcademicEntryComponent implements OnInit {
this.selectedResultTypeID = this.academic.resultTypeID;
}
public onSave(e): void {
debugger;
this.academic.educationTypeID = this.selectedEducationTypeID;
this.academic.educationLevelID = this.selectedEducationLevelID;
this.academic.institutionID = this.selectedInstitutionID;
this.academic.disciplineID = this.selectedDisciplineID;
this.academic.resultTypeID = this.selectedResultTypeID;
this.academic.resultTypeID = this.selectedResultTypeID != null ? this.selectedResultTypeID : 0;
if (this.employeeService.hrEmployee.id === undefined || this.employeeService.hrEmployee.id === 0) {
this.notificationService.showWarning('please select an employee');
this.onCancel(null);
@ -320,10 +331,9 @@ export class AcademicEntryComponent implements OnInit {
return;
}
this.academic.createdBy = 0;
this.academic.employeeID = this.employeeService.hrEmployee.id;
this.academic.createdDate = new Date(this.academic.createdBy);
this.academic.createdBy = 0;
this.academic.createdDate = new Date();
this.loadingPanelService.ShowLoadingPanel = true;
this.employeeService.saveEmployeeAcademic(this.academic).subscribe(
(resp) => {

View File

@ -57,6 +57,21 @@
[(ngModel)]="contact.permanentTelephone" type="text" pInputText style="width:100%">
</div>
<div class="p-col-12 p-md-12 p-lg-3" style="margin: auto;">
<label for="txtPermanentMobilePhone">Mobile Phone</label>
</div>
<div class="p-col-12 p-md-12 p-lg-3">
<input id="txtPermanentMobilePhone" formControlName="permanentMobilePhone"
[(ngModel)]="contact.permanentMobile" type="text" pInputText style="width:100%">
</div>
<div class="p-col-12 p-md-12 p-lg-3">
<label for="txtParmanentPOInBangla">Post Office Name</label>
</div>
<div class="p-col-12 p-md-12 p-lg-3">
<input id="txtParmanentPO" formControlName="parmanentPO"
[(ngModel)]="contact.permanentPO" type="text" pInputText style="width:100%">
</div>
<div class="p-col-12 p-md-12 p-lg-3">
<label for="txtParmanentPOInBangla">Post Office Name (Bn)</label>
</div>
@ -65,21 +80,15 @@
[(ngModel)]="contact.parmanentPOInBangla" type="text" pInputText style="width:100%">
</div>
<!-- <div class="p-col-12 p-md-12 p-lg-1"></div> -->
<div class="p-col-12 p-md-12 p-lg-3" style="margin: auto;">
<label for="txtPermanentMobilePhone">Mobile Phone</label>
</div>
<div class="p-col-12 p-md-12 p-lg-3">
<input id="txtPermanentMobilePhone" formControlName="permanentMobilePhone"
[(ngModel)]="contact.permanentMobile" type="text" pInputText style="width:100%">
</div>
<div class="p-col-12 p-md-12 p-lg-1"></div>
<div class="p-col-12 p-md-12 p-lg-2" style="margin: auto;">
<label for="txtPermanentPostalCode">Postal Code</label>
</div>
<div class="p-col-12 p-md-12 p-lg-3">
<input id="txtPermanentPostalCode" formControlName="permanentPostalCode"
[(ngModel)]="contact.permanentPostCodeNo" type="text" pInputText style="width:100%">
</div>
<div class="p-lg-6"></div>
<div class="p-col-12 p-md-12 p-lg-12">
<label class="k-form-field right">
<!-- <input type="checkbox" [(ngModel)]="isSameAddress" (change)="checkAddress()" id="isSameAddress"
@ -155,15 +164,6 @@
[readonly]="this.isSameAddress">
</div>
<div class="p-col-12 p-md-12 p-lg-3">
<label for="txtPresentPOInBangla">Post Office Name(Bn)</label>
</div>
<div class="p-col-12 p-md-12 p-lg-3">
<input class="bangla-font" id="txtPresentPOInBangla" formControlName="presentPOInBangla"
[(ngModel)]="contact.presentPOInBangla" type="text" pInputText style="width:100%"
[readonly]="this.isSameAddress">
</div>
<div class="p-col-12 p-md-12 p-lg-3" style="margin: auto;">
<label for="txtPresentMobilePhone">Mobile Phone</label>
</div>
@ -173,8 +173,27 @@
[readonly]="this.isSameAddress">
</div>
<div class="p-col-12 p-md-12 p-lg-1"></div>
<div class="p-col-12 p-md-12 p-lg-2" style="margin: auto;">
<div class="p-col-12 p-md-12 p-lg-3">
<label for="txtPresentPOInBangla">Post Office Name</label>
</div>
<div class="p-col-12 p-md-12 p-lg-3">
<input id="txtPresentPO" formControlName="presentPO"
[(ngModel)]="contact.presentPO" type="text" pInputText style="width:100%"
[readonly]="this.isSameAddress">
</div>
<div class="p-col-12 p-md-12 p-lg-3">
<label for="txtPresentPOInBangla">Post Office Name (Bn)</label>
</div>
<div class="p-col-12 p-md-12 p-lg-3">
<input class="bangla-font" id="txtPresentPOInBangla" formControlName="presentPOInBangla"
[(ngModel)]="contact.presentPOInBangla" type="text" pInputText style="width:100%"
[readonly]="this.isSameAddress">
</div>
<!-- <div class="p-col-12 p-md-12 p-lg-1"></div> -->
<div class="p-col-12 p-md-12 p-lg-3" style="margin: auto;">
<label for="txtPresentPostalCode">Postal Code</label>
</div>
<div class="p-col-12 p-md-12 p-lg-3">
@ -182,6 +201,7 @@
[(ngModel)]="contact.presentPostCodeNo" type="text" pInputText style="width:100%"
[readonly]="this.isSameAddress">
</div>
<div class="p-lg-6"></div>
<div class="p-col-12 p-md-12 p-lg-12" style="height: 34px;">
<label class="k-form-field right">
<!-- <input type="checkbox" [(ngModel)]="isSameAddress" (change)="checkAddress()" id="isSameAddress"

View File

@ -89,6 +89,8 @@ export class ContactComponent implements OnInit {
permanentDistrictDropdown: new FormControl('', Validators.required),
permanentThanaDropdown: new FormControl('', Validators.required),
permanentPostalCode: new FormControl(''),
parmanentPO: new FormControl(''),
parmanentPOInBangla: new FormControl(''),
presentAddress: new FormControl('', Validators.required),
presentAddressInBangla: new FormControl(''),
@ -97,6 +99,8 @@ export class ContactComponent implements OnInit {
presentDistrictDropdown: new FormControl('', Validators.required),
presentThanaDropdown: new FormControl('', Validators.required),
presentPostCode: new FormControl(''),
presentPO: new FormControl(''),
presentPOInBangla: new FormControl(''),
contactLandPhone: new FormControl(''),
contactMobileNo: new FormControl(''),
@ -104,14 +108,12 @@ export class ContactComponent implements OnInit {
contactOfficialEmail: new FormControl(''),
contactFax: new FormControl(''),
emergencyContactPerson: new FormControl('', Validators.required),
emergencyAddress: new FormControl('', Validators.required),
emergencyContactPerson: new FormControl(''),
emergencyAddress: new FormControl(''),
emergencyLandPhone: new FormControl(''),
emergencyMobileNo: new FormControl('', Validators.required),
emergencyMobileNo: new FormControl(''),
relation: new FormControl(''),
presentPOInBangla: new FormControl(''),
parmanentPOInBangla: new FormControl(''),
});
/* if (this.employeeService.hrEmployee !== undefined && this.employeeService.hrEmployee.contacts.length > 0) {
this.contact = this.employeeService.hrEmployee.contacts[0];
@ -212,6 +214,7 @@ export class ContactComponent implements OnInit {
this.contact.presentDistrictID = this.contact.permanentDistrictID;
this.contact.presentThanaID = this.contact.permanentThanaID;
this.contact.presentTelephone = this.contact.permanentTelephone;
this.contact.presentPO = this.contact.permanentPO;
this.contact.presentPOInBangla = this.contact.parmanentPOInBangla;
this.contact.presentMobile = this.contact.permanentMobile;
this.contact.presentPostCodeNo = this.contact.permanentPostCodeNo;

View File

@ -27,7 +27,9 @@
<p-tabView [scrollable]="true">
<p-tabPanel header="General" leftIcon="pi pi-user">
<app-general [isActive]="!newEmployee" [employeeNo]="this.employeeService.hrEmployee.employeeNo"></app-general>
<app-general [isActive]="!newEmployee" [employeeNo]="this.employeeService.hrEmployee.employeeNo"
(defaultNationalityHandler)="defaultNationalityHandler($event)"
(defaultEmployeeTypeHandler)="defaultEmployeeTypeHandler($event)"></app-general>
</p-tabPanel>
<p-tabPanel header="Contacts" leftIcon="pi pi-phone">
<app-contact (saveContact)="saveContact($event)"></app-contact>

View File

@ -11,6 +11,8 @@ import {ApiService} from '../../app.api.service';
import { loadingPanelService } from '../../hrm-loding panel/loding.panel.service';
import { HRMNotificationService } from '../../app.notification.service';
import { DomSanitizer } from '@angular/platform-browser';
import { Nationality } from '../nationality/nationality';
import { Category } from 'src/app/_models/Basic/category';
@Component({
selector: 'app-employee-profile',
@ -30,6 +32,8 @@ export class EmployeeProfileComponent implements OnInit {
attachment: any;
fileType = '';
isDisplay = false;
defaultNationality: Nationality;
defaultEmployeeType: Category;
constructor(private fb: FormBuilder,
public employeeService: EmployeeServices,
public basicService: BasicService,
@ -261,6 +265,12 @@ export class EmployeeProfileComponent implements OnInit {
this.employeeService.hrEmployee.passportExpDate = new Date(this.employeeService.hrEmployee.passportExpDate);
this.employeeService.hrEmployee.passportIssueDate = new Date(this.employeeService.hrEmployee.passportIssueDate);
}
else {
this.hrEmployeeProfile.birthDate = new Date();
this.hrEmployeeProfile.joiningDate = new Date();
this.hrEmployeeProfile.nationalityID = this.defaultNationality != null ? this.defaultNationality.id : null;
this.hrEmployeeProfile.categoryID = this.defaultEmployeeType != null ? this.defaultEmployeeType.id : null;
}
this.employeeService.Employee_Get_Completed.next(this.hrEmployeeProfile);
}
@ -308,5 +318,12 @@ export class EmployeeProfileComponent implements OnInit {
onPopUpClose() {
this.isDisplay = false;
}
defaultNationalityHandler(dataItem: Nationality) {
this.defaultNationality = dataItem;
}
defaultEmployeeTypeHandler(dataItem: Category) {
this.defaultEmployeeType = dataItem;
}
}

View File

@ -67,6 +67,7 @@ export class ChildrenListComponent implements OnInit {
addNew() {
this.editIndex = -1;
this.empChildren = new EmpChildren();
this.empChildren.birthDate = new Date();
this.isDisplay = true;
}

View File

@ -68,6 +68,7 @@ export class SpouseListComponent implements OnInit {
addNew() {
this.editIndex = -1;
this.empSpouse = new EmpSpouse();
this.empSpouse.marriageDate = new Date();
this.isDisplay = true;
}

View File

@ -1,4 +1,4 @@
import { Component, Input, OnInit } from '@angular/core';
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import { DataTransferService } from '../../../data.transfer.service';
import { EmployeeServices } from '../../../_services/employee/employee.service';
@ -115,6 +115,7 @@ export class GeneralComponent implements OnInit {
pickerEmployee: SearchEmployee;
nationalities: Nationality[];
defaultNationality: Nationality;
defaultEmployeeType: Category;
nameBangla: string = 'asasas';
defaultPhoto = "assets/photos/profile-default.jpg";
photoPath = "Documents/EMPPHOTO";
@ -126,6 +127,8 @@ export class GeneralComponent implements OnInit {
permanentThanas: Thana[];
isAccessCard: boolean = false;
@Output() defaultNationalityHandler = new EventEmitter<Nationality>();
@Output() defaultEmployeeTypeHandler = new EventEmitter<Category>();
constructor(public employeeService: EmployeeServices, public basicService: BasicService,
public notificationService: HRMNotificationService,
@ -156,6 +159,11 @@ export class GeneralComponent implements OnInit {
},
() => {
this.defaultEmployeeType = this.employeeTypes.find(x => x.name.toLowerCase() == "worker");
if (this.defaultEmployeeType != undefined) {
// this.hrEmployee.categoryID = this.defaultEmployeeType.id;
this.defaultEmployeeTypeHandler.emit(this.defaultEmployeeType);
}
}
);
@ -178,7 +186,8 @@ export class GeneralComponent implements OnInit {
() => {
this.defaultNationality = this.nationalities.find(x => x.description.toLowerCase() == "bangladeshi");
if (this.defaultNationality) {
this.hrEmployee.nationalityID = this.defaultNationality.id;
// this.hrEmployee.nationalityID = this.defaultNationality.id;
this.defaultNationalityHandler.emit(this.defaultNationality);
}
}
);

View File

@ -86,6 +86,7 @@ export class NomineeListComponent implements OnInit {
this.editIndex = -1;
this.nominee = new EmpNominee();
this.nominee.employeeID = this.employeeService.hrEmployee.id;
this.nominee.percentage = 100;
this.isDisplay = true;
}
public editHandler(rowIndex: any) {

View File

@ -53,7 +53,7 @@
</div>
<div class="p-col-12 p-md-6 p-lg-8 form-control-lg form-control">
<input id="txtMailAddress" type="text" style="width:100%"
[(ngModel)]="employee.emailAddress" formControlName="emailAddress" pInputText required>
[(ngModel)]="employee.emailAddress" formControlName="emailAddress" pInputText>
</div>
<div class="p-col-12 p-md-6 p-lg-4" style="margin:auto">

View File

@ -137,6 +137,8 @@ export class EmployeePayrollProfileComponent implements OnInit {
this.lastSalaryProcessDate();
this.selectedCategoryid = this.ddlcategories.find(x => x.name.toLowerCase() == "worker").id;
// this.loadingPanelService.ShowLoadingPanel = true;
// this.employeeService.generateEmployeeNo().subscribe(
// (resp) => {
@ -153,6 +155,7 @@ export class EmployeePayrollProfileComponent implements OnInit {
}
else {
this.employee.employeeNo = undefined;
this.selectedCategoryid = undefined;
}
}

View File

@ -30,6 +30,7 @@ import { PayrollType } from '../../../_models/Authentication/payrollType';
import { GrievanceManagementService } from '../../../_services/grievance-management/grievanceManagement.service';
import { ActivatedRoute, Router } from '@angular/router';
import { WorkflowService } from '../../../_services/workflow/workflow.service';
import { AuthService } from '../../../_services/auth/auth.service';
@Component({
@ -77,6 +78,8 @@ export class LifeCycleEntryComponent implements OnInit {
this.empPickerActive = false;
}
_effectDate: Date = undefined;
public payrollType: PayrollType = undefined;
public salaryMonth: Date = new Date();
public empPickerActive: boolean = true;
public isDesingation: boolean = false;
public isDepartment: boolean = false;
@ -104,6 +107,7 @@ export class LifeCycleEntryComponent implements OnInit {
public utilityHandlerService: UntilityHandlerService, public organogramService: OrganogramService,
public loadingPanelService: loadingPanelService,
public router: Router, public workflowService: WorkflowService,
public authservice: AuthService,
public acrouter: ActivatedRoute,) {
if (this.router.url === '/payroll/career-and-profile/life-cycle-entry')
this.apiservice.selectedMenuName = 'Employee Life Cycle';
@ -135,7 +139,16 @@ export class LifeCycleEntryComponent implements OnInit {
}
);
this.authservice.GetPayrollTypeByLoginID().subscribe(
(resp: any) => {
this.payrollType = resp;
},
(err: any) => {
},
() => {
this.salaryMonth = new Date(this.payrollType.nextPayProcessDate);
}
);
}
private refreshGradeSalaries() {
@ -173,7 +186,7 @@ export class LifeCycleEntryComponent implements OnInit {
}
EventselectionChange(value: any) {
debugger;
this.isDesingation = false;
this.isDepartment = false;
this.isCategory = false;
@ -292,6 +305,16 @@ export class LifeCycleEntryComponent implements OnInit {
});
this._sDescription = item.description;
if(this._employeeStatus != undefined && this._employeeStatus.length > 0)
if(item == this._employeeStatus.find(x => x.description.toLowerCase() == 'joining') ){
this._effectDate = new Date(this._employee.joiningDate);
}
else {
debugger;
// let currentDate: Date = new Date();
let currentDate: Date = this.salaryMonth;
this._effectDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
}
}
}

View File

@ -11,11 +11,13 @@ using AutoMapper.Configuration;
using Google.Protobuf.WellKnownTypes;
using HRM.BO;
using HRM.DA;
using HRM.Report;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.StaticFiles;
using Microsoft.Extensions.Configuration;
using NPOI.HPSF;
using NPOI.SS.Formula.Functions;
using Org.BouncyCastle.Ocsp;
using static HRM.Report.PayrollDataSet.PayrollDataSet;
@ -783,6 +785,88 @@ namespace HRM.UI.Controllers
}
[HttpPost("generatedExceptiinLetter/{letterType}")]
public ActionResult generatedExceptiinLetter(int letterType, List<SearchEmployee> employees)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
int payrollTypeId = currentUser.PayrollTypeID.GetValueOrDefault();
//string downloadPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + @"\Downloads";
string downloadPath = System.Environment.CurrentDirectory + "\\Documents\\LetterTempFolder\\";
string lFileName = string.Empty;
//List<string> sFilePaths = new List<string>();
List<Tuple<byte[], string, string>> filesWithContents = new List<Tuple<byte[], string, string>>();
List<FileContentResult> files = new List<FileContentResult>();
LetterTemplte ltemplate = new LetterTemplte();
byte[] bytes = null;
try
{
if (letterType == 1)
{
ltemplate.SetObjectID(FixedLetterTemplte.Staff_Appointment_Letter);
ltemplate.ID = 2;
ltemplate.Description = "Letter Template Staff";
ltemplate.Subject = "Letter Template Staff";
ltemplate.Type = EnumDocType.Desktop_Letter;
ltemplate.TypeID = (int)EnumDocType.Desktop_Letter;
lFileName = "Staff.doc";
}
else
{
ltemplate.SetObjectID(FixedLetterTemplte.Worker_Appointment_Letter);
ltemplate.ID = 3;
ltemplate.Description = "Letter Template Worker";
ltemplate.Subject = "Letter Template Worker";
ltemplate.Type = EnumDocType.Desktop_Letter;
ltemplate.TypeID = (int)EnumDocType.Desktop_Letter;
lFileName = "Worker.doc";
}
if (employees != null && employees.Count > 0)
{
foreach (var emp in employees)
{
string sFilePath = new rptEmployee().Generate(ltemplate, emp.EmployeeID, payrollTypeId, downloadPath, lFileName);
byte[] buffer = new byte[16 * 1024];
buffer = System.IO.File.ReadAllBytes(sFilePath);
string contentType = GetFileType(sFilePath);
var name = lFileName;
if (System.IO.File.Exists(sFilePath))
{
System.IO.File.Delete(sFilePath);
}
//sFilePaths.Add(sFilePath);
filesWithContents.Add(new Tuple<byte[], string, string>(buffer, emp.EmployeeNo + "_" + name, contentType));
var file = File(buffer, contentType, emp.EmployeeNo + "_" + name);
//return file;
files.Add(file);
}
}
//return Ok(filesWithContents);
return Ok(files);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok();
}
}
}