dev_mashfiq #34

Merged
chapal merged 9 commits from dev_mashfiq into devqc 2025-02-27 11:42:04 +06:00
35 changed files with 903 additions and 220 deletions

View File

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

View File

@ -259,7 +259,9 @@ namespace HRM.BO
public Relation ContactPersonRelation { get; set; } public Relation ContactPersonRelation { get; set; }
public string PermanentAddressInBangla { get; set; } public string PermanentAddressInBangla { get; set; }
public string PresentAddressInBangla { get; set; } public string PresentAddressInBangla { get; set; }
public string PresentPO { get; set; }
public string PresentPOInBangla { get; set; } public string PresentPOInBangla { get; set; }
public string PermanentPO { get; set; }
public string ParmanentPOInBangla { get; set; } public string ParmanentPOInBangla { get; set; }
//#region Property PermanentDistrict : District //#region Property PermanentDistrict : District
@ -989,6 +991,7 @@ namespace HRM.BO
_telePhone = string.Empty; _telePhone = string.Empty;
_emailAddress = string.Empty; _emailAddress = string.Empty;
Gender = EnumGender.None;
} }
#endregion #endregion
@ -1138,6 +1141,14 @@ namespace HRM.BO
} }
#endregion #endregion
public string FatherName { get; set; }
public string MotherName { get; set; }
public string SpouseName { get; set; }
public string NationalID{ get; set; }
public EnumGender Gender { get; set; }
public int? DistrictID{ get; set; }
public int? ThanaID { get; set; }
public string PostOffice { get; set; }
public EnumProfileStatus ProfileStatus { get; set; } public EnumProfileStatus ProfileStatus { get; set; }
public string NomineeStatus { get; set; } public string NomineeStatus { get; set; }
public bool HasPicture { get; set; } public bool HasPicture { get; set; }
@ -1309,8 +1320,8 @@ namespace HRM.BO
#endregion #endregion
//CGPA or Marks //CGPA or Marks
#region GPAOrMarks #region GPAOrMarks
private double _gpa; private double? _gpa;
public double GPAOrMarks public double? GPAOrMarks
{ {
get { return _gpa; } get { return _gpa; }
set { _gpa = value; } set { _gpa = value; }
@ -1319,8 +1330,8 @@ namespace HRM.BO
//OutOf //OutOf
#region Property OutOf : double #region Property OutOf : double
private double _outOf; private double? _outOf;
public double OutOf public double? OutOf
{ {
get { return _outOf; } get { return _outOf; }
set { _outOf = value; } set { _outOf = value; }

View File

@ -4,6 +4,7 @@ using Ease.Core.DataAccess;
using HRM.BO; using HRM.BO;
using Microsoft.AspNetCore.Routing.Template; using Microsoft.AspNetCore.Routing.Template;
using Microsoft.Data.SqlClient; using Microsoft.Data.SqlClient;
using Org.BouncyCastle.Asn1.X509;
namespace HRM.DA namespace HRM.DA
{ {
@ -434,12 +435,12 @@ namespace HRM.DA
"EmployeeID, ContactID, PARMANENTADDRESS, PARMANENTDISTRICTID, PARMANENTTHANAID, PARMANENTTELEPHONE," + "EmployeeID, ContactID, PARMANENTADDRESS, PARMANENTDISTRICTID, PARMANENTTHANAID, PARMANENTTELEPHONE," +
" PresentAddress, PresentDistrictID, PresentThanaID, PresentTelephone, Mobile, PersonalEmail," + " PresentAddress, PresentDistrictID, PresentThanaID, PresentTelephone, Mobile, PersonalEmail," +
" OfficialEMail, Fax, EmergencyContactAddress, EmergencyContactPerson, EmergencyTelephone, PARMANENTMOBILE, " + " 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(" + " VALUES(" +
" %n, %n, %s, %n, %n, %s, " + " %n, %n, %s, %n, %n, %s, " +
" %s, %n, %n, %s, %s, %s," + " %s, %n, %n, %s, %s, %s," +
" %s, %s, %s, %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), item.EmployeeID, item.ID, item.PermanentAddress, DataReader.GetNullValue(item.PermanentDistrictID, 0),
DataReader.GetNullValue(item.PermanentThanaID, 0), item.PermanentTelephone, DataReader.GetNullValue(item.PermanentThanaID, 0), item.PermanentTelephone,
item.PresentAddress, DataReader.GetNullValue(item.PresentDistrictID, 0), item.PresentAddress, DataReader.GetNullValue(item.PresentDistrictID, 0),
@ -448,7 +449,7 @@ namespace HRM.DA
item.EmergencyTelephone, DataReader.GetNullValue(item.PermanentMobile), item.EmergencyTelephone, DataReader.GetNullValue(item.PermanentMobile),
DataReader.GetNullValue(item.PresentMobile), DataReader.GetNullValue(item.PersonalTelephone), DataReader.GetNullValue(item.PresentMobile), DataReader.GetNullValue(item.PersonalTelephone),
DataReader.GetNullValue(item.EmergencyMobile), 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); tc.ExecuteNonQuery(sql);
} }
@ -459,7 +460,7 @@ namespace HRM.DA
"PARMANENTADDRESS =%s , PARMANENTDISTRICTID =%n, PARMANENTTHANAID =%n, PARMANENTTELEPHONE=%s," + "PARMANENTADDRESS =%s , PARMANENTDISTRICTID =%n, PARMANENTTHANAID =%n, PARMANENTTELEPHONE=%s," +
" PresentAddress=%s, PresentDistrictID=%n, PresentThanaID=%n, PresentTelephone=%s, Mobile =%s, PersonalEmail=%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, " + " 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 ", " where EmployeeID =%n and ContactID =%n ",
item.PermanentAddress, DataReader.GetNullValue(item.PermanentDistrictID, 0), item.PermanentAddress, DataReader.GetNullValue(item.PermanentDistrictID, 0),
DataReader.GetNullValue(item.PermanentThanaID, 0), item.PermanentTelephone, DataReader.GetNullValue(item.PermanentThanaID, 0), item.PermanentTelephone,
@ -469,7 +470,7 @@ namespace HRM.DA
item.EmergencyTelephone, DataReader.GetNullValue(item.PermanentMobile), item.EmergencyTelephone, DataReader.GetNullValue(item.PermanentMobile),
DataReader.GetNullValue(item.PresentMobile), DataReader.GetNullValue(item.PersonalTelephone), DataReader.GetNullValue(item.PresentMobile), DataReader.GetNullValue(item.PersonalTelephone),
DataReader.GetNullValue(item.EmergencyMobile), 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); tc.ExecuteNonQuery(sql);
} }
@ -588,8 +589,8 @@ namespace HRM.DA
academic.ID, academic.EmployeeID, academic.EducationLevelID, academic.ID, academic.EmployeeID, academic.EducationLevelID,
DataReader.GetNullValue(academic.DisciplineID, 0), DataReader.GetNullValue(academic.InstitutionID, 0), DataReader.GetNullValue(academic.DisciplineID, 0), DataReader.GetNullValue(academic.InstitutionID, 0),
DataReader.GetNullValue(academic.PassingYear), DataReader.GetNullValue(academic.PassingYear),
DataReader.GetNullValue(academic.ClassOrDivision), academic.GPAOrMarks, academic.LastLevel, DataReader.GetNullValue(academic.ClassOrDivision), DataReader.GetNullValue(academic.GPAOrMarks), academic.LastLevel,
academic.OutOf, DataReader.GetNullValue(academic.ResultTypeID, 0), DataReader.GetNullValue(academic.OutOf), DataReader.GetNullValue(academic.ResultTypeID),
DataReader.GetNullValue(academic.InstituteName), DataReader.GetNullValue(academic.EducationTypeID, 0), DataReader.GetNullValue(academic.InstituteName), DataReader.GetNullValue(academic.EducationTypeID, 0),
academic.PhotoPath, academic.DocSubmissionDate, academic.ProfileStatus); academic.PhotoPath, academic.DocSubmissionDate, academic.ProfileStatus);
} }
@ -602,8 +603,8 @@ namespace HRM.DA
" where AcademicID =%n and EmployeeID =%n ", academic.EducationLevelID, " where AcademicID =%n and EmployeeID =%n ", academic.EducationLevelID,
DataReader.GetNullValue(academic.DisciplineID, 0), DataReader.GetNullValue(academic.InstitutionID, 0), DataReader.GetNullValue(academic.DisciplineID, 0), DataReader.GetNullValue(academic.InstitutionID, 0),
DataReader.GetNullValue(academic.PassingYear), DataReader.GetNullValue(academic.PassingYear),
DataReader.GetNullValue(academic.ClassOrDivision), academic.GPAOrMarks, academic.LastLevel, DataReader.GetNullValue(academic.ClassOrDivision), DataReader.GetNullValue(academic.GPAOrMarks), academic.LastLevel,
academic.OutOf, DataReader.GetNullValue(academic.ResultTypeID, 0), DataReader.GetNullValue(academic.OutOf), DataReader.GetNullValue(academic.ResultTypeID),
DataReader.GetNullValue(academic.InstituteName), DataReader.GetNullValue(academic.EducationTypeID, 0), DataReader.GetNullValue(academic.InstituteName), DataReader.GetNullValue(academic.EducationTypeID, 0),
academic.PhotoPath, academic.DocSubmissionDate, academic.ProfileStatus, academic.PhotoPath, academic.DocSubmissionDate, academic.ProfileStatus,
academic.ID, academic.EmployeeID); academic.ID, academic.EmployeeID);
@ -676,16 +677,16 @@ namespace HRM.DA
tc.ExecuteNonQuery("INSERT INTO EmpNominee(" + tc.ExecuteNonQuery("INSERT INTO EmpNominee(" +
"EmployeeID, NomineeID, NominationPurposeID, NominationDate, Name, RelationID, " + "EmployeeID, NomineeID, NominationPurposeID, NominationDate, Name, RelationID, " +
" Percentage, BirthDate, OccupationID, Address, TelePhone," + " Percentage, BirthDate, OccupationID, Address, TelePhone," +
" EmailAddress, NomineeMobileNo)" + " EmailAddress, NomineeMobileNo, FatherName , MotherName , SpouseName , GENDER , DistrictID , ThanaID , PostOffice)" +
" VALUES(" + " VALUES(" +
" %n, %n, %n, %d, %s, %n," + " %n, %n, %n, %d, %s, %n," +
" %n, %d, %n, %s, %s, %s, %s)", " %n, %d, %n, %s, %s, %s, %s, %s, %s, %s, %n, %n, %n, %s)",
nominee.EmployeeID, nominee.ID, nominee.NominationPurposeID, nominee.EmployeeID, nominee.ID, nominee.NominationPurposeID,
DataReader.GetNullValue(nominee.NominationDate), nominee.Name, DataReader.GetNullValue(nominee.NominationDate), nominee.Name,
DataReader.GetNullValue(nominee.RelationID, 0), DataReader.GetNullValue(nominee.RelationID, 0),
nominee.Percentage, DataReader.GetNullValue(nominee.BirthDate), nominee.Percentage, DataReader.GetNullValue(nominee.BirthDate),
DataReader.GetNullValue(nominee.OccupationID, 0), nominee.Address, nominee.TelePhone, DataReader.GetNullValue(nominee.OccupationID, 0), nominee.Address, nominee.TelePhone,
nominee.EmailAddress, nominee.NomineeMobileNo); nominee.EmailAddress, nominee.NomineeMobileNo, nominee.FatherName, nominee.MotherName, nominee.SpouseName, nominee.Gender, nominee.DistrictID, nominee.ThanaID, nominee.PostOffice);
} }
public static void Update(TransactionContext tc, EmpNominee nominee) public static void Update(TransactionContext tc, EmpNominee nominee)
@ -701,8 +702,16 @@ namespace HRM.DA
,[TELEPHONE] = %s ,[TELEPHONE] = %s
,[EMAILADDRESS] = %s ,[EMAILADDRESS] = %s
,[NomineeMobileNo] = %s ,[NomineeMobileNo] = %s
,[FatherName] = %s
,[MotherName] = %s
,[SpouseName] = %s
,[Gender] = %n
,[DistrictID] = %n
,[ThanaID] = %n
,[PostOffice] = %s
WHERE NOMINEEID = %n", nominee.ID, nominee.NominationPurposeID, nominee.Name, nominee.RelationID, WHERE NOMINEEID = %n", nominee.ID, nominee.NominationPurposeID, nominee.Name, nominee.RelationID,
nominee.Percentage, nominee.OccupationID, nominee.Address, nominee.TelePhone, nominee.EmailAddress, nominee.NomineeMobileNo, nominee.Percentage, nominee.OccupationID, nominee.Address, nominee.TelePhone, nominee.EmailAddress, nominee.NomineeMobileNo,
nominee.FatherName, nominee.MotherName, nominee.SpouseName, nominee.Gender, nominee.DistrictID, nominee.ThanaID, nominee.PostOffice,
nominee.ID); nominee.ID);
} }
@ -960,6 +969,13 @@ namespace HRM.DA
,[IsMinor] ,[IsMinor]
,[NID] ,[NID]
,[NIDPath] ,[NIDPath]
,[FatherName]
,[MotherName]
,[SpouseName]
,[Gender]
,[DistrictID]
,[ThanaID]
,[PostOffice]
,iif(isnull(eu.empfileuploadid, 0) > 0, 1, 0) HasPicture ,iif(isnull(eu.empfileuploadid, 0) > 0, 1, 0) HasPicture
,iif(isnull(eu2.empfileuploadid, 0) > 0, 1, 0) HasSignature ,iif(isnull(eu2.empfileuploadid, 0) > 0, 1, 0) HasSignature
from [EMPNOMINEE] en from [EMPNOMINEE] en

View File

@ -376,7 +376,7 @@ END;";
//Using TOP //Using TOP
sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("EmployeeNo LIKE %s", ( code + "%")); sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("EmployeeNo LIKE %s", ( code + "%"));
orderby = "EmployeeNo"; orderby = "EmployeeNo";
top = "TOP 50"; top = "TOP 15";
//Without suggestion //Without suggestion
//sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("EmployeeNo = %s", code ); //sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("EmployeeNo = %s", code );
@ -385,9 +385,16 @@ END;";
if (name != string.Empty) if (name != string.Empty)
sqlClause = SQLParser.TagSQL(sqlClause) + SQLParser.MakeSQL("Name LIKE %s", ("%" + name + "%")); 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( string finalSQl = SQLParser.MakeSQL(
"%q Select %q EmployeeID, EmployeeNo, Name, categoryID, GradeID, LocationID, designationid, DepartmentID From Employee %q %q Order by %s", "%q Select %q EmployeeID, EmployeeNo, Name, categoryID, GradeID, LocationID, designationid, DepartmentID From Employee %q %q " +
recurSqlClause, top, sqlClause, recurWhereClause, orderby); " 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); return tc.ExecuteReader(finalSQl);
} }

View File

@ -254,6 +254,8 @@ namespace HRM.DA
oEmpContact.ProfileStatus = (EnumProfileStatus)oReader.GetInt32("ProfileStatus").GetValueOrDefault(); oEmpContact.ProfileStatus = (EnumProfileStatus)oReader.GetInt32("ProfileStatus").GetValueOrDefault();
oEmpContact.PresentPOInBangla = oReader.GetString("PresentPOInBangla", true, null); oEmpContact.PresentPOInBangla = oReader.GetString("PresentPOInBangla", true, null);
oEmpContact.ParmanentPOInBangla = oReader.GetString("ParmanentPOInBangla", 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); this.SetObjectState(oEmpContact, ObjectState.Saved);
} }
@ -556,6 +558,16 @@ namespace HRM.DA
oEmpNominee.HasPicture = oReader.GetBoolean("HasPicture", true, false); oEmpNominee.HasPicture = oReader.GetBoolean("HasPicture", true, false);
oEmpNominee.HasSignature = oReader.GetBoolean("HasSignature", true, false); oEmpNominee.HasSignature = oReader.GetBoolean("HasSignature", true, false);
oEmpNominee.FatherName = oReader.GetString("FatherName");
oEmpNominee.MotherName = oReader.GetString("MotherName");
oEmpNominee.SpouseName = oReader.GetString("SpouseName");
oEmpNominee.NationalID = oReader.GetString("NID");
oEmpNominee.Gender = (EnumGender)oReader.GetInt32("Gender", 0);
oEmpNominee.DistrictID = oReader.GetInt32("DistrictID").HasValue ? oReader.GetInt32("DistrictID").Value : null;
oEmpNominee.ThanaID = oReader.GetInt32("ThanaID").HasValue ? oReader.GetInt32("ThanaID").Value : null;
oEmpNominee.PostOffice = oReader.GetString("PostOffice");
this.SetObjectState(oEmpNominee, ObjectState.Saved); this.SetObjectState(oEmpNominee, ObjectState.Saved);
} }
@ -596,8 +608,8 @@ namespace HRM.DA
oEmpAcademic.ProfileStatus = (EnumProfileStatus)oReader.GetInt32("ProfileStatus", 0); oEmpAcademic.ProfileStatus = (EnumProfileStatus)oReader.GetInt32("ProfileStatus", 0);
oEmpAcademic.ResultTypeID = oReader.GetInt32("ResultTypeID", 0); oEmpAcademic.ResultTypeID = oReader.GetInt32("ResultTypeID", 0);
oEmpAcademic.GPAOrMarks = oReader.GetDouble("GPAOrMarks", 0); oEmpAcademic.GPAOrMarks = oReader.GetDouble("OutOf").HasValue ? oReader.GetDouble("GPAOrMarks") : null;
oEmpAcademic.OutOf = oReader.GetDouble("OutOf", 0); oEmpAcademic.OutOf = oReader.GetDouble("OutOf").HasValue ? oReader.GetDouble("OutOf") : null;
oEmpAcademic.LastLevel = oReader.GetBoolean("LastLevel", false); oEmpAcademic.LastLevel = oReader.GetBoolean("LastLevel", false);
oEmpAcademic.InstituteName = oReader.GetString("InstituteName"); oEmpAcademic.InstituteName = oReader.GetString("InstituteName");
oEmpAcademic.PhotoPath = oReader.GetString("PhotoPath"); oEmpAcademic.PhotoPath = oReader.GetString("PhotoPath");

View File

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

View File

@ -1,7 +1,7 @@
import {NominationPurpose} from '../HRBasic/nomination-purpose'; import {NominationPurpose} from '../HRBasic/nomination-purpose';
import {Relation} from '../HRBasic/relation'; import {Relation} from '../HRBasic/relation';
import {Occupation} from '../HRBasic/occupation'; import {Occupation} from '../HRBasic/occupation';
import {EnumProfileStatus} from '../enums'; import {EnumProfileStatus, EnumGender} from '../enums';
import {BaseObject} from '../Basic/baseObject'; import {BaseObject} from '../Basic/baseObject';
import {empFileuploads} from './hrEmployee'; import {empFileuploads} from './hrEmployee';
@ -24,6 +24,14 @@ export class EmpNominee extends BaseObject {
signature: empFileuploads; signature: empFileuploads;
emailAddress: string; emailAddress: string;
profileStatus: EnumProfileStatus; profileStatus: EnumProfileStatus;
fatherName: string;
motherName: string;
spouseName: string;
nationalID: string;
gender: EnumGender;
districtID?: number | null;
thanaID?: number | null;
postOffice: string;
hasPicture: boolean; hasPicture: boolean;
hasSignature: boolean; hasSignature: boolean;
constructor() { constructor() {

View File

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

View File

@ -11,6 +11,7 @@ import { EnumLetterOrganizationType } from '../../_models/enums';
import { LetterRequest } from '../../_models/Letter-Request/Letter-Request'; import { LetterRequest } from '../../_models/Letter-Request/Letter-Request';
import { AuthorizedPerson } from '../../adhoc-feature/authorized-persons/authorizedPerson'; import { AuthorizedPerson } from '../../adhoc-feature/authorized-persons/authorizedPerson';
import { WFMovementTran } from '../../_models/Work-Flow/wFMovementTran'; import { WFMovementTran } from '../../_models/Work-Flow/wFMovementTran';
import { SearchEmployee } from 'src/app/_models/Employee/searchEmployee';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@ -233,6 +234,10 @@ export class LetterRequestService {
getImage(id: number) { getImage(id: number) {
return this.apiService.httpGet<any>('/LetterRequest/getImage' + '/' + id); 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 {ApproveFinancialDataComponent} from './approve-financial-data/approve-financial-data.component';
import {AuthorizedPersonsComponent} from './authorized-persons/authorized-persons.component'; import {AuthorizedPersonsComponent} from './authorized-persons/authorized-persons.component';
import { LetterGenerateComponent } from './letter-generate/letter-generate.component'; import { LetterGenerateComponent } from './letter-generate/letter-generate.component';
import { ExceptionLetterGenerateComponent } from './exception-letter-generate/exception-letter-generate.component';
const routes: Routes = [ const routes: Routes = [
@ -31,6 +32,7 @@ const routes: Routes = [
{path: 'letter-generate', component: LetterGenerateComponent, canActivate: [AuthGuard]}, {path: 'letter-generate', component: LetterGenerateComponent, canActivate: [AuthGuard]},
{path: 'workflow-delegation-by-employee', component: WorkflowDelegationByEmployeeComponent, canActivate: [AuthGuard]}, {path: 'workflow-delegation-by-employee', component: WorkflowDelegationByEmployeeComponent, canActivate: [AuthGuard]},
{path: 'delegation-from-admin-panel', component: DelegationFromAdminPanelComponent, 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-by-employee-and-approval', component: LetterRequestByEmployeeAndApprovalComponent, canActivate: [AuthGuard]},
//{path: 'letter-request-approval', component: LetterRequestApprovalComponent, canActivate: [AuthGuard]}, //{path: 'letter-request-approval', component: LetterRequestApprovalComponent, canActivate: [AuthGuard]},
//{path: 'letter-print-by-admin-panel', component: LetterPrintByAdminPanelComponent, 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 { AuthorizedPersonsComponent } from './authorized-persons/authorized-persons.component';
import { AuthorizedPersonComponent } from './authorized-persons/authorized-person/authorized-person.component'; import { AuthorizedPersonComponent } from './authorized-persons/authorized-person/authorized-person.component';
import { LetterGenerateComponent } from './letter-generate/letter-generate.component'; import { LetterGenerateComponent } from './letter-generate/letter-generate.component';
import { ExceptionLetterGenerateComponent } from './exception-letter-generate/exception-letter-generate.component';
@NgModule({ @NgModule({
declarations: [workflowRuleComponent, WorkFlowSetupComponent, WorkFlowSetupNewComponent, WorkFlowAdministrativeStatusComponent, declarations: [workflowRuleComponent, WorkFlowSetupComponent, WorkFlowSetupNewComponent, WorkFlowAdministrativeStatusComponent,
WorkFlowAdminComponent, WorkflowDelegationByEmployeeComponent, DelegationFromAdminPanelComponent, WorkFlowAdminComponent, WorkflowDelegationByEmployeeComponent, DelegationFromAdminPanelComponent,
LetterRequestApprovalComponent, LetterPrintByAdminPanelComponent, LetterRequestApprovalComponent, LetterPrintByAdminPanelComponent,
LetterRequestByAdminApprovalComponent, ApproveFinancialDataComponent, AuthorizedPersonsComponent, AuthorizedPersonComponent, LetterGenerateComponent LetterRequestByAdminApprovalComponent, ApproveFinancialDataComponent, AuthorizedPersonsComponent, AuthorizedPersonComponent, LetterGenerateComponent, ExceptionLetterGenerateComponent
], ],
imports: [ 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"> <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%'}"> <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'> <div class='embed-responsive'>
<iframe class="pdf-viewer" id="pdf-viewer-ml" type='application/pdf' [zoom]="zoomLevel"></iframe> <iframe class="pdf-viewer" id="pdf-viewer-ml" type='application/pdf' [zoom]="zoomLevel"></iframe>
</div> </div>

View File

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

View File

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

View File

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

View File

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

@ -10,9 +10,10 @@
<div class="p-col-12 p-md-6 p-lg-4" > <div class="p-col-12 p-md-6 p-lg-4" >
<kendo-dropdownlist [(ngModel)]="selectedEducationTypeID" [data]="educationTypes" <kendo-dropdownlist [(ngModel)]="selectedEducationTypeID" [data]="educationTypes"
[defaultItem]="{ description: 'Select a Level', id: null }" [textField]="'description'" [defaultItem]="{ description: 'Select a Level', id: null }" [textField]="'description'"
[valueField]="'id'" [valuePrimitive]="true" (valueChange)="selectEducationTypeEvent($event)" [valueField]="'id'" [valuePrimitive]="true"
class="form-control form-control-sm input-sm" formControlName="educationTypePicker" class="form-control form-control-sm input-sm" formControlName="educationTypePicker"
style="width:100%;"> style="width:100%;">
<!-- (valueChange)="selectEducationTypeEvent($event)" -->
</kendo-dropdownlist> </kendo-dropdownlist>
</div> </div>
@ -23,9 +24,10 @@
<kendo-dropdownlist [(ngModel)]="selectedEducationLevelID" [data]="educationLevels" <kendo-dropdownlist [(ngModel)]="selectedEducationLevelID" [data]="educationLevels"
[defaultItem]="{ description: 'Select Exam / Degree Title', id: null }" [textField]="'description'" [defaultItem]="{ description: 'Select Exam / Degree Title', id: null }" [textField]="'description'"
[valueField]="'id'" [valuePrimitive]="true" class="form-control form-control-sm input-sm" [valueField]="'id'" [valuePrimitive]="true" class="form-control form-control-sm input-sm"
formControlName="educationLevelPicker" (valueChange)="selectEducationLevelEvent($event)" formControlName="educationLevelPicker"
[disabled]="selectedEducationTypeID == undefined || selectedEducationTypeID == null"
style="width:100%;"> style="width:100%;">
<!-- (valueChange)="selectEducationLevelEvent($event)"
[disabled]="selectedEducationTypeID == undefined || selectedEducationTypeID == null" -->
</kendo-dropdownlist> </kendo-dropdownlist>
</div> </div>
@ -36,10 +38,10 @@
<kendo-dropdownlist [(ngModel)]="selectedInstitutionID" [data]="institutions" <kendo-dropdownlist [(ngModel)]="selectedInstitutionID" [data]="institutions"
[defaultItem]="{ name: 'Select institution/Board', id: null }" [textField]="'name'" [defaultItem]="{ name: 'Select institution/Board', id: null }" [textField]="'name'"
[valueField]="'id'" [valuePrimitive]="true" class="form-control form-control-sm input-sm" [valueField]="'id'" [valuePrimitive]="true" class="form-control form-control-sm input-sm"
[disabled]="(selectedEducationTypeID == undefined ||selectedEducationTypeID == null) || (selectedEducationLevelID == undefined || selectedEducationLevelID == null)"
[filterable]="true" (filterChange)="handleFilterInstitution($event)" [filterable]="true" (filterChange)="handleFilterInstitution($event)"
(valueChange)="selectInstitutionEvent($event)" formControlName="institutionPicker" (valueChange)="selectInstitutionEvent($event)" formControlName="institutionPicker"
style="width:100%;"> style="width:100%;">
<!-- [disabled]="(selectedEducationTypeID == undefined ||selectedEducationTypeID == null) || (selectedEducationLevelID == undefined || selectedEducationLevelID == null)" -->
</kendo-dropdownlist> </kendo-dropdownlist>
</div> </div>
@ -50,10 +52,10 @@
<kendo-dropdownlist class="form-control form-control-sm" id="subject" [data]="educationDiscipline" <kendo-dropdownlist class="form-control form-control-sm" id="subject" [data]="educationDiscipline"
[defaultItem]="{ description: 'Select a discipline', id: null }" [textField]="'description'" [defaultItem]="{ description: 'Select a discipline', id: null }" [textField]="'description'"
[valueField]="'id'" [valuePrimitive]="true" [(ngModel)]="selectedDisciplineID" [valueField]="'id'" [valuePrimitive]="true" [(ngModel)]="selectedDisciplineID"
[disabled]="isEditActive"
[disabled]="selectedEducationLevelID == undefined || selectedEducationLevelID == null"
[filterable]="true" (filterChange)="handleFilter($event)" formControlName="disciplinePicker" [filterable]="true" (filterChange)="handleFilter($event)" formControlName="disciplinePicker"
style="width:100%"> style="width:100%">
<!-- [disabled]="isEditActive"
[disabled]="selectedEducationLevelID == undefined || selectedEducationLevelID == null" -->
</kendo-dropdownlist> </kendo-dropdownlist>
</div> </div>
@ -94,19 +96,23 @@
</div> </div>
<div class="p-col-12 p-md-6 p-lg-2" *ngIf="isGrade" style="margin: auto;"> <div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
<!-- *ngIf="isGrade" -->
<label for="txtCgpaObtained">CGPA/Marks</label> <label for="txtCgpaObtained">CGPA/Marks</label>
</div> </div>
<div class="p-col-12 p-md-6 p-lg-4" *ngIf="isGrade" > <div class="p-col-12 p-md-6 p-lg-4">
<!-- *ngIf="isGrade" -->
<input id="txtCgpaObtained" formControlName="gpaOrMarks" [(ngModel)]="academic.gpaOrMarks" <input id="txtCgpaObtained" formControlName="gpaOrMarks" [(ngModel)]="academic.gpaOrMarks"
type="number" style="width: 100%;" pInputText /> type="number" style="width: 100%;" pInputText />
</div> </div>
<div class="p-col-12 p-md-6 p-lg-2" *ngIf="isGrade" > <div class="p-col-12 p-md-6 p-lg-2">
<!-- *ngIf="isGrade" -->
<label for="txtCgpaOutOf">Out of</label> <label for="txtCgpaOutOf">Out of</label>
</div> </div>
<div class="p-col-12 p-md-6 p-lg-4" *ngIf="isGrade" style="margin: auto;"> <div class="p-col-12 p-md-6 p-lg-4"style="margin: auto;">
<!-- *ngIf="isGrade" -->
<input id="txtCgpaOutOf" style="width: 100%;" formControlName="outOf" [(ngModel)]="academic.outOf" <input id="txtCgpaOutOf" style="width: 100%;" formControlName="outOf" [(ngModel)]="academic.outOf"
type="number" pInputText /> type="number" pInputText />
</div> </div>

View File

@ -17,6 +17,7 @@ import { BasicService } from '../../../../_services/Basic/basic.service';
import { enumEmpFileUploadType, EnumStatus } from '../../../../_models/enums'; import { enumEmpFileUploadType, EnumStatus } from '../../../../_models/enums';
import { loadingPanelService } from '../../../../hrm-loding panel/loding.panel.service'; import { loadingPanelService } from '../../../../hrm-loding panel/loding.panel.service';
import { empFileuploads } from '../../../../_models/HREmployee/hrEmployee'; import { empFileuploads } from '../../../../_models/HREmployee/hrEmployee';
import { forkJoin } from 'rxjs';
@Component({ @Component({
selector: 'app-academic-entry', selector: 'app-academic-entry',
@ -115,87 +116,142 @@ export class AcademicEntryComponent implements OnInit {
// } // }
// } // }
loadData() { loadData() {
this.basicService.getAllEducationLevel().subscribe( // this.basicService.getAllEducationLevel().subscribe(
(resp) => { // (resp) => {
this.alleducationLevels = resp; // this.alleducationLevels = resp;
}, // },
(err: any) => { // (err: any) => {
console.log(err); // console.log(err);
}, // },
() => { // () => {
if (this.academic.id > 0) { // // if (this.academic.id > 0) {
this.educationLevels = this.alleducationLevels.filter(x => x.educationTypeID == this.academic.educationTypeID); // // this.educationLevels = this.alleducationLevels//.filter(x => x.educationTypeID == this.academic.educationTypeID);
} // // }
else { // // else {
this.educationLevels = this.alleducationLevels.filter(x => x.educationTypeID == this.academic.educationTypeID); // this.educationLevels = this.alleducationLevels//.filter(x => x.educationTypeID == this.academic.educationTypeID);
} // // }
this.basicService.getAllDiscipline().subscribe( // this.basicService.getAllDiscipline().subscribe(
(resp) => { // (resp) => {
this.alleducationDiscipline = resp; // this.alleducationDiscipline = resp;
}, // },
(err: any) => { // (err: any) => {
console.log(err); // console.log(err);
}, // },
() => { // () => {
if (this.academic.id > 0) { // // if (this.academic.id > 0) {
// this.educationDiscipline = this.alleducationDiscipline.filter(x => x.educationLevelID == this.academic.educationLevelID); // // // this.educationDiscipline = this.alleducationDiscipline.filter(x => x.educationLevelID == this.academic.educationLevelID);
// this.educationDiscipline = this.alleducationDiscipline.filter(x => x.id == this.academic.disciplineID); // // // this.educationDiscipline = this.alleducationDiscipline.filter(x => x.id == this.academic.disciplineID);
this.educationDiscipline = this.alleducationDiscipline; // // this.educationDiscipline = this.alleducationDiscipline;
} // // }
else { // // else {
// this.educationDiscipline = this.alleducationDiscipline.filter(x => x.educationLevelID == this.academic.educationLevelID); // // this.educationDiscipline = this.alleducationDiscipline.filter(x => x.educationLevelID == this.academic.educationLevelID);
this.educationDiscipline = this.alleducationDiscipline; // this.educationDiscipline = this.alleducationDiscipline;
} // // }
this.basicService.getAllInstitutions().subscribe( // this.basicService.getAllInstitutions().subscribe(
(resp) => { // (resp) => {
this.allinstitutions = resp; // this.allinstitutions = resp;
}, // },
(err: any) => { // (err: any) => {
console.log(err); // console.log(err);
}, // },
() => { // () => {
if (this.academic.id > 0) { // if (this.academic.id > 0) {
// this.institutions = this.allinstitutions.filter(x => x.boardRequired == this.academic.educationType.boardRequired); // // this.institutions = this.allinstitutions.filter(x => x.boardRequired == this.academic.educationType.boardRequired);
if (this.academic.institution.boardRequired) // if (this.academic.institution != undefined && this.academic.institution.boardRequired)
// this.institutions = this.allinstitutions.filter(x => x.id == this.academic.institutionID || x.boardRequired == true); // // this.institutions = this.allinstitutions.filter(x => x.id == this.academic.institutionID || x.boardRequired == true);
this.institutions = this.allinstitutions.filter(x => x.boardRequired == true); // this.institutions = this.allinstitutions.filter(x => x.boardRequired == true);
else // else
// this.institutions = this.allinstitutions.filter(x => x.educationTypeID == this.academic.educationTypeID); // // this.institutions = this.allinstitutions.filter(x => x.educationTypeID == this.academic.educationTypeID);
this.institutions = this.allinstitutions.filter(x => x.boardRequired == false); // this.institutions = this.allinstitutions.filter(x => x.boardRequired == false);
}
//console.log(this.institutions);
this.basicService.getAllResultTypesByStatus(EnumStatus.Regardless).subscribe(
(resp) => {
this.allresultTypes = resp;
},
(err: any) => {
console.log(err);
},
() => {
if (this.academic.id > 0)
//console.log(this.allresultTypes);
if (this.academic.id > 0) {
let selectedEducationType: EducationType[] = this.educationTypes.filter(x => x.id == this.academic.educationTypeID)
// this.resultTypes = this.allresultTypes.filter(x => x.type == selectedEducationType[0].resultType);
// if (selectedEducationType[0].resultType === 2 || selectedEducationType[0].resultType === 4) {
// this.isGrade = true;
// } // }
// else { // //console.log(this.institutions);
// this.isGrade = false;
// this.basicService.getAllResultTypesByStatus(EnumStatus.Regardless).subscribe(
// (resp) => {
// this.allresultTypes = resp;
// },
// (err: any) => {
// console.log(err);
// },
// () => {
// if (this.academic.id > 0)
// //console.log(this.allresultTypes);
// if (this.academic.id > 0) {
// let selectedEducationType: EducationType[] = this.educationTypes//.filter(x => x.id == this.academic.educationTypeID)
// // this.resultTypes = this.allresultTypes.filter(x => x.type == selectedEducationType[0].resultType);
// // if (selectedEducationType[0].resultType === 2 || selectedEducationType[0].resultType === 4) {
// // this.isGrade = true;
// // }
// // else {
// // 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);
// let descp = this.alleducationDiscipline.find(d => d.description.toLowerCase() == 'nil');
// this.academic.disciplineID = descp != undefined ? descp.id : 0;
// let inst = this.allinstitutions.find(d => d.name.toLowerCase() == 'Institute of Chartered Secretary of Bangladesh'.toLowerCase());
// this.academic.institutionID = inst != undefined ? inst.id : 0;
// }
// }
// );
// }
// );
// }
// );
// }
// );
const educationlevelService = this.basicService.getAllEducationLevel();
const disciplineService = this.basicService.getAllDiscipline();
const institutionService = this.basicService.getAllInstitutions();
const resultTyoeService = this.basicService.getAllResultTypesByStatus(EnumStatus.Regardless);
this.loadingPanelService.ShowLoadingPanel = true;
forkJoin(educationlevelService, disciplineService, institutionService, resultTyoeService).subscribe(
([res1, res2, res3, res4]) => {
this.alleducationLevels = res1;
this.alleducationDiscipline = res2;
this.allinstitutions = res3;
this.allresultTypes = res4;
},
(x) => {
this.loadingPanelService.ShowLoadingPanel = false;
console.log(x);
this.notificationService.showError(x.error);
},
() => {
this.educationLevels = this.alleducationLevels;
this.educationDiscipline = this.alleducationDiscipline;
this.institutions = this.allinstitutions;
this.resultTypes = this.allresultTypes;
this.loadingPanelService.ShowLoadingPanel = 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;
let descp = this.alleducationDiscipline.find(d => d.description.toLowerCase() == 'nil');
this.academic.disciplineID = descp != undefined ? descp.id : 0;
this.selectedDisciplineID = this.academic.disciplineID;
let inst = this.allinstitutions.find(d => d.name.toLowerCase() == 'Institute of Chartered Secretary of Bangladesh'.toLowerCase());
this.academic.institutionID = inst != undefined ? inst.id : 0;
this. selectedInstitutionID = this.academic.institutionID;
this.academic.examDate = new Date().getFullYear();
this.academic.passingYear = new Date().getFullYear();
// this.selectEducationTypeEvent(educationType.id);
} }
} }
); );
} }
);
}
);
}
);
}
loaddiscipline(typeid: number) { loaddiscipline(typeid: number) {
// this.educationLevels = this.alleducationLevels.filter(x => x.educationTypeID === typeid); // this.educationLevels = this.alleducationLevels.filter(x => x.educationTypeID === typeid);
@ -210,8 +266,8 @@ export class AcademicEntryComponent implements OnInit {
} }
selectEducationTypeEvent(typeid: number) { selectEducationTypeEvent(typeid: number) {
if (typeid !== null) { if (typeid !== null) {
this.educationLevels = this.alleducationLevels.filter(x => x.educationTypeID == typeid); this.educationLevels = this.alleducationLevels//.filter(x => x.educationTypeID == typeid);
let selectedEducationType: EducationType[] = this.educationTypes.filter(x => x.id == this.academic.educationTypeID) let selectedEducationType: EducationType[] = this.educationTypes//.filter(x => x.id == this.academic.educationTypeID)
// this.institutions = this.allinstitutions.filter(x => x.boardRequired == selectedEducationType[0].boardRequired); // this.institutions = this.allinstitutions.filter(x => x.boardRequired == selectedEducationType[0].boardRequired);
// this.institutions = this.allinstitutions.filter(x => x.educationTypeID == typeid); // this.institutions = this.allinstitutions.filter(x => x.educationTypeID == typeid);
this.institutions = this.allinstitutions; this.institutions = this.allinstitutions;
@ -250,7 +306,7 @@ export class AcademicEntryComponent implements OnInit {
if (seletedInstitution.boardRequired == true) resultType = 1; if (seletedInstitution.boardRequired == true) resultType = 1;
else resultType = 2; else resultType = 2;
if (institutionid !== null) if (institutionid !== null)
this.resultTypes = this.allresultTypes.filter(x => x.type == resultType); this.resultTypes = this.allresultTypes//.filter(x => x.type == resultType);
this.selectedResultTypeID = null; this.selectedResultTypeID = null;
this.isGrade = false; this.isGrade = false;
@ -285,7 +341,7 @@ export class AcademicEntryComponent implements OnInit {
educationLevelPicker: ['', Validators.required], educationLevelPicker: ['', Validators.required],
disciplinePicker: ['', Validators.required], disciplinePicker: ['', Validators.required],
institutionPicker: ['', Validators.required], institutionPicker: ['', Validators.required],
resultTypePicker: ['', Validators.required], resultTypePicker: [''],
examHeldOn: ['', Validators.required], examHeldOn: ['', Validators.required],
passingYear: ['', Validators.required], passingYear: ['', Validators.required],
gpaOrMarks: [''], gpaOrMarks: [''],
@ -304,11 +360,12 @@ export class AcademicEntryComponent implements OnInit {
this.selectedResultTypeID = this.academic.resultTypeID; this.selectedResultTypeID = this.academic.resultTypeID;
} }
public onSave(e): void { public onSave(e): void {
debugger;
this.academic.educationTypeID = this.selectedEducationTypeID; this.academic.educationTypeID = this.selectedEducationTypeID;
this.academic.educationLevelID = this.selectedEducationLevelID; this.academic.educationLevelID = this.selectedEducationLevelID;
this.academic.institutionID = this.selectedInstitutionID; this.academic.institutionID = this.selectedInstitutionID;
this.academic.disciplineID = this.selectedDisciplineID; 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) { if (this.employeeService.hrEmployee.id === undefined || this.employeeService.hrEmployee.id === 0) {
this.notificationService.showWarning('please select an employee'); this.notificationService.showWarning('please select an employee');
this.onCancel(null); this.onCancel(null);
@ -320,10 +377,9 @@ export class AcademicEntryComponent implements OnInit {
return; return;
} }
this.academic.createdBy = 0;
this.academic.employeeID = this.employeeService.hrEmployee.id; this.academic.employeeID = this.employeeService.hrEmployee.id;
this.academic.createdDate = new Date(this.academic.createdBy);
this.academic.createdBy = 0; this.academic.createdBy = 0;
this.academic.createdDate = new Date();
this.loadingPanelService.ShowLoadingPanel = true; this.loadingPanelService.ShowLoadingPanel = true;
this.employeeService.saveEmployeeAcademic(this.academic).subscribe( this.employeeService.saveEmployeeAcademic(this.academic).subscribe(
(resp) => { (resp) => {

View File

@ -57,6 +57,21 @@
[(ngModel)]="contact.permanentTelephone" type="text" pInputText style="width:100%"> [(ngModel)]="contact.permanentTelephone" type="text" pInputText style="width:100%">
</div> </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"> <div class="p-col-12 p-md-12 p-lg-3">
<label for="txtParmanentPOInBangla">Post Office Name (Bn)</label> <label for="txtParmanentPOInBangla">Post Office Name (Bn)</label>
</div> </div>
@ -65,21 +80,15 @@
[(ngModel)]="contact.parmanentPOInBangla" type="text" pInputText style="width:100%"> [(ngModel)]="contact.parmanentPOInBangla" type="text" pInputText style="width:100%">
</div> </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;"> <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> <label for="txtPermanentPostalCode">Postal Code</label>
</div> </div>
<div class="p-col-12 p-md-12 p-lg-3"> <div class="p-col-12 p-md-12 p-lg-3">
<input id="txtPermanentPostalCode" formControlName="permanentPostalCode" <input id="txtPermanentPostalCode" formControlName="permanentPostalCode"
[(ngModel)]="contact.permanentPostCodeNo" type="text" pInputText style="width:100%"> [(ngModel)]="contact.permanentPostCodeNo" type="text" pInputText style="width:100%">
</div> </div>
<div class="p-lg-6"></div>
<div class="p-col-12 p-md-12 p-lg-12"> <div class="p-col-12 p-md-12 p-lg-12">
<label class="k-form-field right"> <label class="k-form-field right">
<!-- <input type="checkbox" [(ngModel)]="isSameAddress" (change)="checkAddress()" id="isSameAddress" <!-- <input type="checkbox" [(ngModel)]="isSameAddress" (change)="checkAddress()" id="isSameAddress"
@ -155,15 +164,6 @@
[readonly]="this.isSameAddress"> [readonly]="this.isSameAddress">
</div> </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;"> <div class="p-col-12 p-md-12 p-lg-3" style="margin: auto;">
<label for="txtPresentMobilePhone">Mobile Phone</label> <label for="txtPresentMobilePhone">Mobile Phone</label>
</div> </div>
@ -173,8 +173,27 @@
[readonly]="this.isSameAddress"> [readonly]="this.isSameAddress">
</div> </div>
<div class="p-col-12 p-md-12 p-lg-1"></div> <div class="p-col-12 p-md-12 p-lg-3">
<div class="p-col-12 p-md-12 p-lg-2" style="margin: auto;"> <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> <label for="txtPresentPostalCode">Postal Code</label>
</div> </div>
<div class="p-col-12 p-md-12 p-lg-3"> <div class="p-col-12 p-md-12 p-lg-3">
@ -182,6 +201,7 @@
[(ngModel)]="contact.presentPostCodeNo" type="text" pInputText style="width:100%" [(ngModel)]="contact.presentPostCodeNo" type="text" pInputText style="width:100%"
[readonly]="this.isSameAddress"> [readonly]="this.isSameAddress">
</div> </div>
<div class="p-lg-6"></div>
<div class="p-col-12 p-md-12 p-lg-12" style="height: 34px;"> <div class="p-col-12 p-md-12 p-lg-12" style="height: 34px;">
<label class="k-form-field right"> <label class="k-form-field right">
<!-- <input type="checkbox" [(ngModel)]="isSameAddress" (change)="checkAddress()" id="isSameAddress" <!-- <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), permanentDistrictDropdown: new FormControl('', Validators.required),
permanentThanaDropdown: new FormControl('', Validators.required), permanentThanaDropdown: new FormControl('', Validators.required),
permanentPostalCode: new FormControl(''), permanentPostalCode: new FormControl(''),
parmanentPO: new FormControl(''),
parmanentPOInBangla: new FormControl(''),
presentAddress: new FormControl('', Validators.required), presentAddress: new FormControl('', Validators.required),
presentAddressInBangla: new FormControl(''), presentAddressInBangla: new FormControl(''),
@ -97,6 +99,8 @@ export class ContactComponent implements OnInit {
presentDistrictDropdown: new FormControl('', Validators.required), presentDistrictDropdown: new FormControl('', Validators.required),
presentThanaDropdown: new FormControl('', Validators.required), presentThanaDropdown: new FormControl('', Validators.required),
presentPostCode: new FormControl(''), presentPostCode: new FormControl(''),
presentPO: new FormControl(''),
presentPOInBangla: new FormControl(''),
contactLandPhone: new FormControl(''), contactLandPhone: new FormControl(''),
contactMobileNo: new FormControl(''), contactMobileNo: new FormControl(''),
@ -104,14 +108,12 @@ export class ContactComponent implements OnInit {
contactOfficialEmail: new FormControl(''), contactOfficialEmail: new FormControl(''),
contactFax: new FormControl(''), contactFax: new FormControl(''),
emergencyContactPerson: new FormControl('', Validators.required), emergencyContactPerson: new FormControl(''),
emergencyAddress: new FormControl('', Validators.required), emergencyAddress: new FormControl(''),
emergencyLandPhone: new FormControl(''), emergencyLandPhone: new FormControl(''),
emergencyMobileNo: new FormControl('', Validators.required), emergencyMobileNo: new FormControl(''),
relation: new FormControl(''), relation: new FormControl(''),
presentPOInBangla: new FormControl(''),
parmanentPOInBangla: new FormControl(''),
}); });
/* if (this.employeeService.hrEmployee !== undefined && this.employeeService.hrEmployee.contacts.length > 0) { /* if (this.employeeService.hrEmployee !== undefined && this.employeeService.hrEmployee.contacts.length > 0) {
this.contact = this.employeeService.hrEmployee.contacts[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.presentDistrictID = this.contact.permanentDistrictID;
this.contact.presentThanaID = this.contact.permanentThanaID; this.contact.presentThanaID = this.contact.permanentThanaID;
this.contact.presentTelephone = this.contact.permanentTelephone; this.contact.presentTelephone = this.contact.permanentTelephone;
this.contact.presentPO = this.contact.permanentPO;
this.contact.presentPOInBangla = this.contact.parmanentPOInBangla; this.contact.presentPOInBangla = this.contact.parmanentPOInBangla;
this.contact.presentMobile = this.contact.permanentMobile; this.contact.presentMobile = this.contact.permanentMobile;
this.contact.presentPostCodeNo = this.contact.permanentPostCodeNo; this.contact.presentPostCodeNo = this.contact.permanentPostCodeNo;

View File

@ -27,7 +27,9 @@
<p-tabView [scrollable]="true"> <p-tabView [scrollable]="true">
<p-tabPanel header="General" leftIcon="pi pi-user"> <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>
<p-tabPanel header="Contacts" leftIcon="pi pi-phone"> <p-tabPanel header="Contacts" leftIcon="pi pi-phone">
<app-contact (saveContact)="saveContact($event)"></app-contact> <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 { loadingPanelService } from '../../hrm-loding panel/loding.panel.service';
import { HRMNotificationService } from '../../app.notification.service'; import { HRMNotificationService } from '../../app.notification.service';
import { DomSanitizer } from '@angular/platform-browser'; import { DomSanitizer } from '@angular/platform-browser';
import { Nationality } from '../nationality/nationality';
import { Category } from 'src/app/_models/Basic/category';
@Component({ @Component({
selector: 'app-employee-profile', selector: 'app-employee-profile',
@ -30,6 +32,8 @@ export class EmployeeProfileComponent implements OnInit {
attachment: any; attachment: any;
fileType = ''; fileType = '';
isDisplay = false; isDisplay = false;
defaultNationality: Nationality;
defaultEmployeeType: Category;
constructor(private fb: FormBuilder, constructor(private fb: FormBuilder,
public employeeService: EmployeeServices, public employeeService: EmployeeServices,
public basicService: BasicService, 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.passportExpDate = new Date(this.employeeService.hrEmployee.passportExpDate);
this.employeeService.hrEmployee.passportIssueDate = new Date(this.employeeService.hrEmployee.passportIssueDate); 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); this.employeeService.Employee_Get_Completed.next(this.hrEmployeeProfile);
} }
@ -308,5 +318,12 @@ export class EmployeeProfileComponent implements OnInit {
onPopUpClose() { onPopUpClose() {
this.isDisplay = false; this.isDisplay = false;
} }
defaultNationalityHandler(dataItem: Nationality) {
this.defaultNationality = dataItem;
}
defaultEmployeeTypeHandler(dataItem: Category) {
this.defaultEmployeeType = dataItem;
}
} }

View File

@ -67,6 +67,12 @@ export class ChildrenListComponent implements OnInit {
addNew() { addNew() {
this.editIndex = -1; this.editIndex = -1;
this.empChildren = new EmpChildren(); this.empChildren = new EmpChildren();
this.empChildren.birthDate = new Date();
let notApli = null;
if(this.occupations != null)
notApli = this.occupations.find(o => o.description.toUpperCase() == 'N/A');
if (notApli != null)
this.empChildren.occupationID = notApli.id;
this.isDisplay = true; this.isDisplay = true;
} }

View File

@ -68,6 +68,13 @@ export class SpouseListComponent implements OnInit {
addNew() { addNew() {
this.editIndex = -1; this.editIndex = -1;
this.empSpouse = new EmpSpouse(); this.empSpouse = new EmpSpouse();
this.empSpouse.dateOfBirth = new Date();
this.empSpouse.marriageDate = new Date();
let notApli = null;
if(this.occupations != null)
notApli = this.occupations.find(o => o.description.toUpperCase() == 'N/A');
if (notApli != null)
this.empSpouse.occupationID = notApli.id;
this.isDisplay = true; 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 { FormControl, FormGroup, Validators } from '@angular/forms';
import { DataTransferService } from '../../../data.transfer.service'; import { DataTransferService } from '../../../data.transfer.service';
import { EmployeeServices } from '../../../_services/employee/employee.service'; import { EmployeeServices } from '../../../_services/employee/employee.service';
@ -115,6 +115,7 @@ export class GeneralComponent implements OnInit {
pickerEmployee: SearchEmployee; pickerEmployee: SearchEmployee;
nationalities: Nationality[]; nationalities: Nationality[];
defaultNationality: Nationality; defaultNationality: Nationality;
defaultEmployeeType: Category;
nameBangla: string = 'asasas'; nameBangla: string = 'asasas';
defaultPhoto = "assets/photos/profile-default.jpg"; defaultPhoto = "assets/photos/profile-default.jpg";
photoPath = "Documents/EMPPHOTO"; photoPath = "Documents/EMPPHOTO";
@ -126,6 +127,8 @@ export class GeneralComponent implements OnInit {
permanentThanas: Thana[]; permanentThanas: Thana[];
isAccessCard: boolean = false; isAccessCard: boolean = false;
@Output() defaultNationalityHandler = new EventEmitter<Nationality>();
@Output() defaultEmployeeTypeHandler = new EventEmitter<Category>();
constructor(public employeeService: EmployeeServices, public basicService: BasicService, constructor(public employeeService: EmployeeServices, public basicService: BasicService,
public notificationService: HRMNotificationService, 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"); this.defaultNationality = this.nationalities.find(x => x.description.toLowerCase() == "bangladeshi");
if (this.defaultNationality) { if (this.defaultNationality) {
this.hrEmployee.nationalityID = this.defaultNationality.id; // this.hrEmployee.nationalityID = this.defaultNationality.id;
this.defaultNationalityHandler.emit(this.defaultNationality);
} }
} }
); );

View File

@ -71,11 +71,14 @@
</div> </div>
<div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;"> <div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
<label for="txtAddress">Address</label> <label for="txtAddress">Gender</label>
</div> </div>
<div class="p-col-12 p-md-6 p-lg-4"> <div class="p-col-12 p-md-6 p-lg-4">
<input id="txtAddress" formControlName="address" [(ngModel)]="nominee.address" type="text" <kendo-dropdownlist [(ngModel)]="nominee.gender" [data]="genderType"
pInputText style="width:100%" /> [defaultItem]="{ name: 'Select Gender..', value: null }" [textField]="'name'" [valueField]="'value'"
[valuePrimitive]="true" class="form-control form-control-sm input-sm" formControlName="gender"
id="gender" style="width:100%">
</kendo-dropdownlist>
</div> </div>
<div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;"> <div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
@ -102,6 +105,83 @@
pInputText style="width:100%" /> pInputText style="width:100%" />
</div> </div>
<div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
<label for="txtAddress">Address</label>
</div>
<div class="p-col-12 p-md-6 p-lg-4">
<input id="txtAddress" formControlName="address" [(ngModel)]="nominee.address" type="text"
pInputText style="width:100%" />
</div>
<div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
<label for="txtFatherName">Father Name</label>
</div>
<div class="p-col-12 p-md-6 p-lg-4">
<input id="txtFatherName" formControlName="fatherName" [(ngModel)]="nominee.fatherName" type="text"
pInputText style="width:100%" />
</div>
<div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
<label for="txtMotherName">Mother Name</label>
</div>
<div class="p-col-12 p-md-6 p-lg-4">
<input id="txtMotherName" formControlName="motherName" [(ngModel)]="nominee.motherName" type="text"
pInputText style="width:100%" />
</div>
<div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
<label for="txtSpouseName">Spouse Name</label>
</div>
<div class="p-col-12 p-md-6 p-lg-4">
<input id="txtSpouseName" formControlName="spouseName" [(ngModel)]="nominee.spouseName" type="text"
pInputText style="width:100%" />
</div>
<div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
<label for="txtNationalID">NationalID</label>
</div>
<div class="p-col-12 p-md-6 p-lg-4">
<input id="txtNationalID" formControlName="nID" [(ngModel)]="nominee.nationalID" type="text"
pInputText style="width:100%" />
</div>
<div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
<label for="txtDistrict">District</label>
</div>
<div class="p-col-12 p-md-6 p-lg-4">
<!-- <input id="txtDistrict" formControlName="district" [(ngModel)]="nominee.districtID" type="text"
pInputText style="width:100%" /> -->
<kendo-dropdownlist [(ngModel)]="nominee.districtID" [data]="districts"
[defaultItem]="{ name: 'Select District..', value: null }" [textField]="'name'"
[valueField]="'id'" style="width: 100%" (valueChange)="loadThana($event)"
[valuePrimitive]="true" class="form-control form-control-sm input-sm"
formControlName="district">
</kendo-dropdownlist>
</div>
<div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
<label for="txtThana">Thana</label>
</div>
<div class="p-col-12 p-md-6 p-lg-4">
<!-- <input id="txtThana" formControlName="thana" [(ngModel)]="nominee.thanaID" type="text"
pInputText style="width:100%" /> -->
<kendo-dropdownlist [(ngModel)]="nominee.thanaID" [data]="thanas"
[defaultItem]="{ name: 'Select Thana..', value: null }" [textField]="'name'" [valueField]="'id'"
style="width: 100%" [valuePrimitive]="true" class="form-control form-control-sm input-sm"
formControlName="thana">
</kendo-dropdownlist>
</div>
<div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
<label for="txtPostOffice">Post Office</label>
</div>
<div class="p-col-12 p-md-6 p-lg-4">
<input id="txtPostOffice" formControlName="postOffice" [(ngModel)]="nominee.postOffice" type="text"
pInputText style="width:100%" />
</div>
<div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;"> <div class="p-col-12 p-md-6 p-lg-2" style="margin: auto;">
<label for="fupPicture">Picture</label> <label for="fupPicture">Picture</label>
</div> </div>

View File

@ -11,10 +11,12 @@ import { HrEmployee } from '../../../../_models/HREmployee/hrEmployee';
import { BasicService } from '../../../../_services/Basic/basic.service'; import { BasicService } from '../../../../_services/Basic/basic.service';
import { forkJoin } from 'rxjs'; import { forkJoin } from 'rxjs';
import { Relation } from '../../../../_models/HRBasic/relation'; import { Relation } from '../../../../_models/HRBasic/relation';
import { District } from '../../../../_models/HRBasic/district';
import { Thana } from '../../../../_models/HRBasic/thana';
import { Occupation } from '../../../../_models/HRBasic/occupation'; import { Occupation } from '../../../../_models/HRBasic/occupation';
import { NominationPurpose } from '../../../../_models/HRBasic/nomination-purpose'; import { NominationPurpose } from '../../../../_models/HRBasic/nomination-purpose';
import { loadingPanelService } from '../../../../hrm-loding panel/loding.panel.service'; import { loadingPanelService } from '../../../../hrm-loding panel/loding.panel.service';
import { enumEmpFileUploadType } from '../../../../_models/enums'; import { enumEmpFileUploadType, EnumExtension, EnumGender, EnumMaritalStatus } from '../../../../_models/enums';
import { debug } from 'console'; import { debug } from 'console';
@ -30,6 +32,9 @@ export class NomineeEntryComponent implements OnInit {
nomineeForm: FormGroup; nomineeForm: FormGroup;
public active = false; public active = false;
nominee: EmpNominee; nominee: EmpNominee;
genderType: any = EnumExtension.getNamesAndValues(EnumGender);
districts: District[];
thanas: Thana[];
selectedPicture?: FileList; selectedPicture?: FileList;
selectedSignature?: FileList; selectedSignature?: FileList;
currentFile?: File; currentFile?: File;
@ -38,6 +43,8 @@ export class NomineeEntryComponent implements OnInit {
@Input() @Input()
public set InputObject(InputObject: EmpNominee) { public set InputObject(InputObject: EmpNominee) {
this.nominee = InputObject; this.nominee = InputObject;
if(this.nominee != undefined && this.nominee.districtID != null && this.nominee.districtID != 0)
this.loadThana(this.nominee.districtID);
} }
constructor(public employeeService: EmployeeServices, constructor(public employeeService: EmployeeServices,
@ -60,12 +67,14 @@ export class NomineeEntryComponent implements OnInit {
const getRelations = this.basicService.getAllRelations(); const getRelations = this.basicService.getAllRelations();
const getOccupations = this.basicService.getAllOccupation(); const getOccupations = this.basicService.getAllOccupation();
const getNominationPurpose = this.basicService.getAllNominationPurpose(); const getNominationPurpose = this.basicService.getAllNominationPurpose();
const getDistricts = this.basicService.getAllDistricts();
forkJoin([getRelations, getOccupations, getNominationPurpose]).subscribe( forkJoin([getRelations, getOccupations, getNominationPurpose, getDistricts]).subscribe(
([resp1, resp2, resp3]) => { ([resp1, resp2, resp3, resp4]) => {
this.relations = resp1; this.relations = resp1;
this.occupations = resp2; this.occupations = resp2;
this.nominationPurposes = resp3; this.nominationPurposes = resp3;
this.districts = resp4;
}, },
(x) => { (x) => {
console.log(x); console.log(x);
@ -76,6 +85,19 @@ export class NomineeEntryComponent implements OnInit {
); );
} }
loadThana(value: any) {
this.basicService.getAllThanas(value).subscribe((resp) => {
this.thanas = resp;
},
() => {
},
() => {
}
);
}
createForm() { createForm() {
this.nomineeForm = new FormBuilder().group({ this.nomineeForm = new FormBuilder().group({
nominationDate: ['', Validators.required], nominationDate: ['', Validators.required],
@ -91,6 +113,14 @@ export class NomineeEntryComponent implements OnInit {
picturePath: [''], picturePath: [''],
signaturePath: [''], signaturePath: [''],
mobile: [''], mobile: [''],
gender: ['', Validators.required],
fatherName: [''],
motherName: [''],
spouseName: [''],
nID: [''],
district: [''],
thana: [''],
postOffice: [''],
}); });
} }
@ -157,4 +187,5 @@ export class NomineeEntryComponent implements OnInit {
selectedFiles = undefined; selectedFiles = undefined;
} }
} }
} }

View File

@ -86,6 +86,15 @@ export class NomineeListComponent implements OnInit {
this.editIndex = -1; this.editIndex = -1;
this.nominee = new EmpNominee(); this.nominee = new EmpNominee();
this.nominee.employeeID = this.employeeService.hrEmployee.id; this.nominee.employeeID = this.employeeService.hrEmployee.id;
this.nominee.percentage = 100;
let notApli = null;
if(this.occupations != null)
notApli = this.occupations.find(o => o.description.toUpperCase() == 'N/A');
if (notApli != null)
this.nominee.occupationID = notApli.id;
let np = this.nominationPurposes.find(n => n.id == 8);
if(this.nominationPurposes != null && np != null)
this.nominee.nominationPurposeID = np.id;
this.isDisplay = true; this.isDisplay = true;
} }
public editHandler(rowIndex: any) { public editHandler(rowIndex: any) {

View File

@ -53,7 +53,7 @@
</div> </div>
<div class="p-col-12 p-md-6 p-lg-8 form-control-lg form-control"> <div class="p-col-12 p-md-6 p-lg-8 form-control-lg form-control">
<input id="txtMailAddress" type="text" style="width:100%" <input id="txtMailAddress" type="text" style="width:100%"
[(ngModel)]="employee.emailAddress" formControlName="emailAddress" pInputText required> [(ngModel)]="employee.emailAddress" formControlName="emailAddress" pInputText>
</div> </div>
<div class="p-col-12 p-md-6 p-lg-4" style="margin:auto"> <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.lastSalaryProcessDate();
this.selectedCategoryid = this.ddlcategories.find(x => x.name.toLowerCase() == "worker").id;
// this.loadingPanelService.ShowLoadingPanel = true; // this.loadingPanelService.ShowLoadingPanel = true;
// this.employeeService.generateEmployeeNo().subscribe( // this.employeeService.generateEmployeeNo().subscribe(
// (resp) => { // (resp) => {
@ -153,6 +155,7 @@ export class EmployeePayrollProfileComponent implements OnInit {
} }
else { else {
this.employee.employeeNo = undefined; this.employee.employeeNo = undefined;
this.selectedCategoryid = undefined;
} }
} }
@ -416,7 +419,7 @@ export class EmployeePayrollProfileComponent implements OnInit {
this.selectedEmployee.categoryID = this.employee.categoryID; this.selectedEmployee.categoryID = this.employee.categoryID;
this.selectedEmployee.name = this.employee.name; this.selectedEmployee.name = this.employee.name;
this.selectedEmployee.employeeNo = this.employee.employeeNo; this.selectedEmployee.employeeNo = this.employee.employeeNo;
this.showBankAccount = true; // this.showBankAccount = true;
} else { } else {
this.employee = new Employee(); this.employee = new Employee();

View File

@ -30,6 +30,7 @@ import { PayrollType } from '../../../_models/Authentication/payrollType';
import { GrievanceManagementService } from '../../../_services/grievance-management/grievanceManagement.service'; import { GrievanceManagementService } from '../../../_services/grievance-management/grievanceManagement.service';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
import { WorkflowService } from '../../../_services/workflow/workflow.service'; import { WorkflowService } from '../../../_services/workflow/workflow.service';
import { AuthService } from '../../../_services/auth/auth.service';
@Component({ @Component({
@ -77,6 +78,8 @@ export class LifeCycleEntryComponent implements OnInit {
this.empPickerActive = false; this.empPickerActive = false;
} }
_effectDate: Date = undefined; _effectDate: Date = undefined;
public payrollType: PayrollType = undefined;
public salaryMonth: Date = new Date();
public empPickerActive: boolean = true; public empPickerActive: boolean = true;
public isDesingation: boolean = false; public isDesingation: boolean = false;
public isDepartment: boolean = false; public isDepartment: boolean = false;
@ -104,6 +107,7 @@ export class LifeCycleEntryComponent implements OnInit {
public utilityHandlerService: UntilityHandlerService, public organogramService: OrganogramService, public utilityHandlerService: UntilityHandlerService, public organogramService: OrganogramService,
public loadingPanelService: loadingPanelService, public loadingPanelService: loadingPanelService,
public router: Router, public workflowService: WorkflowService, public router: Router, public workflowService: WorkflowService,
public authservice: AuthService,
public acrouter: ActivatedRoute,) { public acrouter: ActivatedRoute,) {
if (this.router.url === '/payroll/career-and-profile/life-cycle-entry') if (this.router.url === '/payroll/career-and-profile/life-cycle-entry')
this.apiservice.selectedMenuName = 'Employee Life Cycle'; 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() { private refreshGradeSalaries() {
@ -173,7 +186,7 @@ export class LifeCycleEntryComponent implements OnInit {
} }
EventselectionChange(value: any) { EventselectionChange(value: any) {
debugger;
this.isDesingation = false; this.isDesingation = false;
this.isDepartment = false; this.isDepartment = false;
this.isCategory = false; this.isCategory = false;
@ -292,6 +305,16 @@ export class LifeCycleEntryComponent implements OnInit {
}); });
this._sDescription = item.description; 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 Google.Protobuf.WellKnownTypes;
using HRM.BO; using HRM.BO;
using HRM.DA; using HRM.DA;
using HRM.Report;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.StaticFiles; using Microsoft.AspNetCore.StaticFiles;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using NPOI.HPSF;
using NPOI.SS.Formula.Functions; using NPOI.SS.Formula.Functions;
using Org.BouncyCastle.Ocsp; using Org.BouncyCastle.Ocsp;
using static HRM.Report.PayrollDataSet.PayrollDataSet; 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();
}
} }
} }