Compare commits
8 Commits
devqc
...
dev_mashfi
Author | SHA1 | Date | |
---|---|---|---|
ccabffeeec | |||
634c30f368 | |||
116f8171ef | |||
558c53d4d3 | |||
2d28fb9ac5 | |||
accd302ef4 | |||
dc29f2f17c | |||
7b8473faef |
|
@ -1398,6 +1398,54 @@ namespace HRM.BO
|
|||
|
||||
return InWords;
|
||||
}
|
||||
public static string MillionToInWords(int no)
|
||||
{
|
||||
if (no == 0)
|
||||
return "zero";
|
||||
|
||||
if (no < 0)
|
||||
return "minus " + MillionToInWords(Math.Abs(no));
|
||||
|
||||
string stringValue = "";
|
||||
|
||||
if ((no / 1000000) > 0)
|
||||
{
|
||||
stringValue += MillionToInWords(no / 1000000) + " million ";
|
||||
no %= 1000000;
|
||||
}
|
||||
|
||||
if ((no / 1000) > 0)
|
||||
{
|
||||
stringValue += MillionToInWords(no / 1000) + " thousand ";
|
||||
no %= 1000;
|
||||
}
|
||||
|
||||
if ((no / 100) > 0)
|
||||
{
|
||||
stringValue += MillionToInWords(no / 100) + " hundred ";
|
||||
no %= 100;
|
||||
}
|
||||
|
||||
if (no > 0)
|
||||
{
|
||||
if (stringValue != "")
|
||||
stringValue += "and ";
|
||||
|
||||
var units = new[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
|
||||
var tens = new[] { "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
|
||||
|
||||
if (no < 20)
|
||||
stringValue += units[no];
|
||||
else
|
||||
{
|
||||
stringValue += tens[no / 10];
|
||||
if ((no % 10) > 0)
|
||||
stringValue += "-" + units[no % 10];
|
||||
}
|
||||
}
|
||||
|
||||
return stringValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -417,7 +417,8 @@ namespace HRM.BO
|
|||
{
|
||||
Email = 1,
|
||||
Event = 2,
|
||||
Letter = 3
|
||||
Letter = 3,
|
||||
Desktop_Letter = 4
|
||||
}
|
||||
|
||||
public enum EnumLeaveDayPeriod
|
||||
|
@ -555,9 +556,14 @@ namespace HRM.BO
|
|||
public const string CandidateDesig = "<<CANDIDATEDESIGNATION>>";
|
||||
public const string CandidateGrade = "<<CANDIDATEGRADE>>";
|
||||
public const string CandidateBasic = "<<CANDIDATEBASIC>>";
|
||||
public const string CandidateBasicPercent = "<<CANDIDATEBASICPERCENT>>";
|
||||
public const string AllowHR = "<<ALLOWHR>>";
|
||||
public const string AllowHRPercent = "<<ALLOWHRPERCENT>>";
|
||||
public const string AllowLTA = "<<ALLOWLTA>>";
|
||||
public const string AllowMedical = "<<ALLOWMEDICAL>>";
|
||||
public const string AllowMedicalPercent = "<<ALLOWMEDICALPERCENT>>";
|
||||
public const string AllowConveyance = "<<ALLOWCONVEYANCE>>";
|
||||
public const string AllowConveyancePercent = "<<ALLOWCONVEYANCEPERCENT>>";
|
||||
public const string AllowTotal = "<<TOTAL>>";
|
||||
public const string AcceptWithIN = "<<ACCEPTWITHIN>>";
|
||||
public const string JoiningBefore = "<<JOINBEFORE>>";
|
||||
|
@ -575,6 +581,53 @@ namespace HRM.BO
|
|||
public const string LineManagerDesignation = "<<SUPERVISORDESIGNATION>>";
|
||||
public const string FathersName = "<<FATHERSNAME>>";
|
||||
public const string MothersName = "<<MOTHERSNAME>>";
|
||||
public const string TakaInWord = "<<TakaInWord>>";
|
||||
|
||||
|
||||
public const string EmpPresentAddress = "<<EMPPresentAddress>>";
|
||||
public const string EmpPresentDistrict = "<<EMPPresentDistrict>>";
|
||||
public const string EmpPresentThana = "<<EMPPresentThana>>";
|
||||
public const string EmpPresentCountry = "<<EMPPresentCountry>>";
|
||||
public const string EmpNationality = "<<EMPNationality>>";
|
||||
public const string EmpPresentPhone = "<<EMPPresentPhone>>";
|
||||
public const string EmpPresentMobile = "<<EMPPresentMobile>>";
|
||||
public const string EmpReligion = "<<EmpReligion>>";
|
||||
public const string EmpGender = "<<EmpGender>>";
|
||||
public const string EmpMaritalStatus = "<<EmpMaritalStatus>>";
|
||||
|
||||
// Bangla Tags
|
||||
public const string EmpNameBangla = "<<bvg>>";
|
||||
public const string EmpCodeBangla = "<<‡KvW>>";
|
||||
public const string EmpWorkType = "<<Kv‡RiaiY>>";
|
||||
public const string EmpSpouseName = "<<¯^vgx/¯¿xibvg>>";
|
||||
public const string JoiningDateBangla = "<<‡hvM`vb>>";
|
||||
public const string EmpDesignaionBangla = "<<c`ex>>";
|
||||
public const string EmpDepartmentBangla = "<<wefvM>>";
|
||||
public const string BirthDateBangla = "<<Rb¥ZvwiL>>";
|
||||
public const string ProbationDateBangla = "<<wk¶vbexkZvwiL>>";
|
||||
public const string GradeBangla = "<<†MÖW>>";
|
||||
public const string BasicSalaryBangla = "<<gyj†eZb>>";
|
||||
public const string HouseRentBangla = "<<evoxfvov>>";
|
||||
public const string ConveyenceBangla = "<<hvZvqvZfvZv>>";
|
||||
public const string MedicalBangla = "<<wPwKrmvfvZv>>";
|
||||
public const string FoodBangla = "<<Lv`¨fvZv>>";
|
||||
public const string AttendenceBonusBangla = "<<ab>>";
|
||||
public const string ConductBonusBangla = "<<cb>>";
|
||||
public const string FatherNameBangla = "<<wcZvibvg>>";
|
||||
public const string MotherNameBangla = "<<gvZvibvg>>";
|
||||
public const string SpouseNameBangla = "<<¯úvD†Ri bvg>>";
|
||||
public const string VillagePABangla = "<<¯’vqxMÖvg>>";
|
||||
public const string PostOfficePABangla = "<<¯’vqx‡cvóAwdm>>";
|
||||
public const string ThanaPABangla = "<<¯’vqx_vbv>>";
|
||||
public const string DistrictPABangla = "<<¯’vqx‡Rjv>>";
|
||||
public const string VillageTABangla = "<<eZ©gvbMÖvg>>";
|
||||
public const string PostOfficeTABangla = "<<eZ©gvb‡cvóAwdm>>";
|
||||
public const string ThanaTABangla = "<<eZ©gvb_vbv>>";
|
||||
public const string DistrictTABangla = "<<eZ©gvb‡Rjv>>";
|
||||
public const string TotalTakaBangla = "<<me©‡gvU>>";
|
||||
public const string SectionBangla = "<<‡mKkb>>";
|
||||
public const string BloodGroupBangla = "<<i‡³iMÖæc>>";
|
||||
public const string FloorBangla = "<<‡d¬vi>>";
|
||||
|
||||
#endregion
|
||||
|
||||
|
|
|
@ -26,7 +26,18 @@
|
|||
<Compile Remove="Attendance\BuyerSetup.cs" />
|
||||
<Compile Remove="Organogram\OrganisationChart.cs" />
|
||||
<Compile Remove="Process\NotificationProcess.cs" />
|
||||
<Compile Remove="TagOutput\MSWord.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<COMReference Include="Microsoft.Office.Interop.Word">
|
||||
<WrapperTool>tlbimp</WrapperTool>
|
||||
<VersionMinor>7</VersionMinor>
|
||||
<VersionMajor>8</VersionMajor>
|
||||
<Guid>00020905-0000-0000-c000-000000000046</Guid>
|
||||
<Lcid>0</Lcid>
|
||||
<Isolated>false</Isolated>
|
||||
<EmbedInteropTypes>true</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -58,6 +58,7 @@ namespace HRM.BO
|
|||
public string Experience { get; set; }
|
||||
public string Skill { get; set; }
|
||||
public string PrevCandidateStatus { get; set; }
|
||||
public string TrackNo { get; set; }
|
||||
#endregion
|
||||
|
||||
//#region Service Factory ICVService : ICVService
|
||||
|
|
|
@ -14,29 +14,60 @@ namespace HRM.BO
|
|||
|
||||
public class FixedLetterTemplte
|
||||
{
|
||||
//BAT Letter Template
|
||||
public const int Visa_Letter_Business_Trip_With_Family = 1;
|
||||
public const int Salary_Certificate = 2;
|
||||
public const int Visa_Letter_Business_Trip = 3;
|
||||
public const int Visa_Letter_Personal_Trip = 4;
|
||||
public const int Visa_Letter_With_Family = 5;
|
||||
public const int Loan_Letter_Bank = 6;
|
||||
public const int Foreign_Currency_Bank_AC_For_secondee = 7;
|
||||
public const int Visa_for_Business_trip_or_Family = 8;
|
||||
public const int Visa_for_Company_Business = 9;
|
||||
public const int Loan_Certificate_Letter_for_Authorization = 10;
|
||||
public const int Loan_Certificate_Take_Home_Salary = 11;
|
||||
public const int Intvw_BrdMember_Notify_Mail = 12;
|
||||
public const int Employee_Intvw_Notify_Mail = 13;
|
||||
public const int Applicant_Intvw_Notify_Mail = 14;
|
||||
////BAT Letter Template
|
||||
//public const int Visa_Letter_Business_Trip_With_Family = 1;
|
||||
//public const int Salary_Certificate = 2;
|
||||
//public const int Visa_Letter_Business_Trip = 3;
|
||||
//public const int Visa_Letter_Personal_Trip = 4;
|
||||
//public const int Visa_Letter_With_Family = 5;
|
||||
//public const int Loan_Letter_Bank = 6;
|
||||
//public const int Foreign_Currency_Bank_AC_For_secondee = 7;
|
||||
//public const int Visa_for_Business_trip_or_Family = 8;
|
||||
//public const int Visa_for_Company_Business = 9;
|
||||
//public const int Loan_Certificate_Letter_for_Authorization = 10;
|
||||
//public const int Loan_Certificate_Take_Home_Salary = 11;
|
||||
//public const int Intvw_BrdMember_Notify_Mail = 12;
|
||||
//public const int Employee_Intvw_Notify_Mail = 13;
|
||||
//public const int Applicant_Intvw_Notify_Mail = 14;
|
||||
//public const int Welcome_Mail_New_Joiner = 15;
|
||||
//public const int Welcome_Mail_Employee = 16;
|
||||
//public const int Induction_Request_New_Joiner = 17;
|
||||
//public const int Induction_Request_Employee = 18;
|
||||
//public const int Announcement_New_Joiner = 19;
|
||||
//public const int Announcement_Employee = 20;
|
||||
//public const int Candidate_Offer_Letter = 21;
|
||||
//public const int Candidate_Appointment_Letter = 22;
|
||||
|
||||
//Echotex Letter Template
|
||||
public const int None = 0;
|
||||
public const int Officer_Appointment_Letter = 1;
|
||||
public const int Staff_Appointment_Letter = 2;
|
||||
public const int Worker_Appointment_Letter = 3;
|
||||
public const int Salary_Certificate_Letter = 4;
|
||||
public const int Official_Visa_Letter = 5;
|
||||
public const int Visa_with_family_Letter = 6;
|
||||
public const int University_admission_Letter = 7;
|
||||
public const int Credit_card_Letter = 8;
|
||||
public const int EXPERIENCE_CERTIFICATE_Letter = 9;
|
||||
public const int Training_Notification = 10; //Done
|
||||
public const int Applicant_Intvw_Notify_Mail = 11; //Done
|
||||
public const int Employee_Intvw_Notify_Mail = 12; //Done
|
||||
public const int Intvw_BrdMember_Notify_Mail = 13; //Done
|
||||
public const int Candidate_Offer_Letter = 14; //Done
|
||||
public const int Welcome_Mail_New_Joiner = 15;
|
||||
public const int Welcome_Mail_Employee = 16;
|
||||
public const int Induction_Request_New_Joiner = 17;
|
||||
public const int Induction_Request_Employee = 18;
|
||||
public const int Announcement_New_Joiner = 19;
|
||||
public const int Announcement_Employee = 20;
|
||||
public const int Candidate_Offer_Letter = 21;
|
||||
public const int Candidate_Appointment_Letter = 22;
|
||||
public const int Notify_Candidate_for_Interview = 21;
|
||||
public const int Notify_Candidate_For_Not_Selected = 22;
|
||||
public const int Travel_NOC_Business = 23;
|
||||
public const int Travel_NOC_Personal_with_Family = 24;
|
||||
public const int Travel_NOC_Personal_without_Family = 25;
|
||||
public const int Employment_Certificate = 26;
|
||||
public const int Salary_Without_Increment_Letter = 27;
|
||||
public const int Salary_With_Increment_Letter = 28;
|
||||
public static bool IsValidForDelete(int templateID)
|
||||
{
|
||||
if (templateID <= 17)
|
||||
|
|
|
@ -1,26 +1,24 @@
|
|||
using Common.BO;
|
||||
using Ease.Core.Model;
|
||||
|
||||
|
||||
using Payroll.BO;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Collections;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
//using Microsoft.Office.Interop;
|
||||
using Microsoft.Office.Interop.Word;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Payroll.BO
|
||||
namespace HRM.BO
|
||||
{
|
||||
public class MSWord
|
||||
{
|
||||
private Hashtable _Pair;
|
||||
private string _OriginalFile;
|
||||
private string _PreparedFile;
|
||||
private Microsoft.Office.Interop.Word.Application _wordapp;
|
||||
private Application _wordapp;
|
||||
public MSWord()
|
||||
{
|
||||
_wordapp = null;
|
||||
//_wordapp = null;
|
||||
}
|
||||
public Hashtable Pair
|
||||
{
|
||||
|
|
|
@ -85,6 +85,9 @@ namespace HRM.DA
|
|||
}
|
||||
internal static IDataReader Get(TransactionContext tc, EnumStatus status)
|
||||
{
|
||||
if(status == EnumStatus.Regardless)
|
||||
return tc.ExecuteReader("SELECT * FROM GRADES order by code");
|
||||
else
|
||||
return tc.ExecuteReader("SELECT * FROM GRADES where Status=%n order by code", status);
|
||||
}
|
||||
internal static IDataReader Get(TransactionContext tc, EnumStatus status, string sIDs,
|
||||
|
|
|
@ -120,7 +120,7 @@ namespace HRM.DA
|
|||
object obj =
|
||||
tc.ExecuteScalar("Select SALARYPROCESSID from SALARYPROCESS where SALARYMONTH=%d AND PAYROLLTYPEID=%n",
|
||||
dSMonth, payrollTypeID);
|
||||
if (obj == DBNull.Value) return false;
|
||||
if (obj == DBNull.Value || obj == null) return false;
|
||||
else bShowInDesktop=true;
|
||||
return bShowInDesktop;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ using System.Linq.Expressions;
|
|||
using HRM.BO;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using static iTextSharp.text.pdf.AcroFields;
|
||||
using System.Collections;
|
||||
|
||||
namespace HRM.DA
|
||||
{
|
||||
|
@ -5673,5 +5674,177 @@ namespace HRM.DA
|
|||
|
||||
return oEmpBasicInfos;
|
||||
}
|
||||
|
||||
public Hashtable CollectDataForBanglaAppointmentHash(HREmployee employee, PayrollType payrollType)//, bool isPhotoNeeded = false)
|
||||
{
|
||||
Hashtable table = new Hashtable();
|
||||
|
||||
//DataRow oRow = null;
|
||||
//DataTable dEmpInfo = new DataTable();
|
||||
string sempId = Convert.ToString(employee.ID);
|
||||
PhotoPath pPath = new PhotoPathService().Get().FirstOrDefault();
|
||||
DataTable dtEmpBasicInfo = new EmployeeService().GetAllEmpBasicInfo(sempId)
|
||||
.Tables[0]
|
||||
.AsEnumerable()
|
||||
.CopyToDataTable();
|
||||
|
||||
if (dtEmpBasicInfo.Rows.Count > 0)
|
||||
{
|
||||
DataRow drBasic = dtEmpBasicInfo.Rows[0];
|
||||
|
||||
//oRow = dEmpInfo.NewRow();
|
||||
table.Add(TagOutputConstant.EmpNameBangla, drBasic["BanglaName"].ToString());
|
||||
table.Add(TagOutputConstant.EmpCodeBangla, drBasic["EmployeeNo"].ToString());
|
||||
table.Add(TagOutputConstant.EmpSpouseName, drBasic["SPOUSENAMEBANGLA"].ToString());
|
||||
table.Add(TagOutputConstant.EmpWorkType, drBasic["WorkType"].ToString());
|
||||
|
||||
table.Add(TagOutputConstant.FatherNameBangla, drBasic["FATHERNAMEBANGLA"].ToString());
|
||||
table.Add(TagOutputConstant.MotherNameBangla, drBasic["MOTHERNAMEBANGLA"].ToString());
|
||||
table.Add(TagOutputConstant.SpouseNameBangla, drBasic["SPOUSENAMEBANGLA"].ToString());
|
||||
//oRow["HusbandName"] = string.Empty;
|
||||
table.Add(TagOutputConstant.JoiningDateBangla, Convert.ToDateTime(drBasic["JoiningDate"].ToString()).ToString("dd'/'MM'/'yyyy"));
|
||||
table.Add(TagOutputConstant.ProbationDateBangla, Convert.ToDateTime(drBasic["JoiningDate"].ToString()).AddDays(90).ToString("dd'/'MM'/'yyyy"));
|
||||
table.Add(TagOutputConstant.BirthDateBangla, Convert.ToDateTime(drBasic["BIRTHDATE"].ToString()).ToString("dd'/'MM'/'yyyy"));
|
||||
//table.Add(TagOutputConstant.BloodGroupBangla, ((EnumBloodGroup)Convert.ToInt32(drBasic["BLOODGROUP"].ToString())).BloodGroupToBangla());
|
||||
table.Add(TagOutputConstant.BloodGroupBangla, GlobalFunctions.BloodGroupToBangla((EnumBloodGroup)Convert.ToInt32(drBasic["BLOODGROUP"].ToString())));
|
||||
//if (isPhotoNeeded && _rImageManager != null)
|
||||
//{
|
||||
// oRow["EmpPhotograph"] = _rImageManager.GetImage(drBasic["PhotoPath"].ToString());
|
||||
//}
|
||||
table.Add(TagOutputConstant.VillagePABangla, drBasic["PERMANENTADDRESSINBANGLA"].ToString());
|
||||
table.Add(TagOutputConstant.PostOfficePABangla, drBasic["ParmanentPOInBangla"].ToString());
|
||||
table.Add(TagOutputConstant.ThanaPABangla, drBasic["ParmanentThanaBangla"].ToString());
|
||||
table.Add(TagOutputConstant.DistrictPABangla, drBasic["ParmanentDistricBANGLA"].ToString());
|
||||
table.Add(TagOutputConstant.VillageTABangla, drBasic["PRESENTADDRESSINBANGLA"].ToString());
|
||||
table.Add(TagOutputConstant.PostOfficeTABangla, drBasic["PresentPOInBangla"].ToString());
|
||||
table.Add(TagOutputConstant.ThanaTABangla, drBasic["TempThanaBangla"].ToString());
|
||||
table.Add(TagOutputConstant.DistrictTABangla, drBasic["TempDistricBANGLA"].ToString());
|
||||
table.Add(TagOutputConstant.EmpDepartmentBangla, drBasic["DepartmentBangla"].ToString());
|
||||
table.Add(TagOutputConstant.SectionBangla, drBasic["SectionBangla"].ToString());
|
||||
table.Add(TagOutputConstant.FloorBangla, drBasic["FloorBangla"].ToString());
|
||||
//oRow["EducationLevel"] = drBasic["EducationLevel"];
|
||||
table.Add(TagOutputConstant.EmpDesignaionBangla, drBasic["BanglaDesignation"].ToString());
|
||||
|
||||
table.Add(TagOutputConstant.GradeBangla, drBasic["GradeBanglaName"].ToString());
|
||||
//oRow["NationalID"] = drBasic["NationalID"];
|
||||
|
||||
string moneyFormat = "#,##0.00";
|
||||
|
||||
table.Add(TagOutputConstant.BasicSalaryBangla, employee.BasicSalary.ToString(moneyFormat));
|
||||
table.Add(TagOutputConstant.HouseRentBangla, 0.ToString(moneyFormat));
|
||||
table.Add(TagOutputConstant.ConveyenceBangla, 0.ToString(moneyFormat));
|
||||
table.Add(TagOutputConstant.MedicalBangla, 0.ToString(moneyFormat));
|
||||
table.Add(TagOutputConstant.FoodBangla, 0.ToString(moneyFormat));
|
||||
table.Add(TagOutputConstant.AttendenceBonusBangla, 0.ToString(moneyFormat));
|
||||
table.Add(TagOutputConstant.ConductBonusBangla, 0.ToString(moneyFormat));
|
||||
|
||||
List<ADParameterEmployee> adParamEmps = null;
|
||||
List<ADParameter> adParams = new ADParameterService().Get(employee.GradeID, EnumEntitleType.Grade, EnumAllowOrDeduct.Allowance, payrollType.ID);
|
||||
List<AllowanceDeduction> allowdeducitons = new AllowanceDeductionService().Get(EnumStatus.Regardless, payrollType.ID);
|
||||
EmployeeGradeSalary oEmpGradeSalary = new EmployeeGradeSalaryService().GetBasicOnDateBAT(employee.ID, DateTime.Now);
|
||||
|
||||
if (adParams != null)
|
||||
{
|
||||
foreach (ADParameter adParam in adParams)
|
||||
{
|
||||
//double amount = new ADParameterService().GetGradeDefinedAmount(employee, employee.BasicSalary, employee.GrossSalary, payrollTypeID);
|
||||
double amount = new ADParameterService().GetGradeDefinedAmount(employee, employee.BasicSalary, employee.GrossSalary, oEmpGradeSalary, adParam);
|
||||
adParam.AllowanceDeduction = allowdeducitons.FirstOrDefault(x => x.ID == adParam.AllowDeductID);
|
||||
|
||||
switch (adParam.AllowanceDeduction.Code.Trim())
|
||||
{
|
||||
case "001":
|
||||
table.Remove(TagOutputConstant.AttendenceBonusBangla);
|
||||
table.Add(TagOutputConstant.AttendenceBonusBangla, amount.ToString(moneyFormat));
|
||||
break;
|
||||
case "002":
|
||||
table.Remove(TagOutputConstant.ConductBonusBangla);
|
||||
table.Add(TagOutputConstant.ConductBonusBangla, amount.ToString(moneyFormat));
|
||||
break;
|
||||
case "008":
|
||||
table.Remove(TagOutputConstant.HouseRentBangla);
|
||||
table.Add(TagOutputConstant.HouseRentBangla, amount.ToString(moneyFormat));
|
||||
break;
|
||||
case "010":
|
||||
table.Remove(TagOutputConstant.ConveyenceBangla);
|
||||
table.Add(TagOutputConstant.ConveyenceBangla, amount.ToString(moneyFormat));
|
||||
break;
|
||||
case "011":
|
||||
table.Remove(TagOutputConstant.MedicalBangla);
|
||||
table.Add(TagOutputConstant.MedicalBangla, amount.ToString(moneyFormat));
|
||||
break;
|
||||
case "006":
|
||||
table.Remove(TagOutputConstant.FoodBangla);
|
||||
table.Add(TagOutputConstant.FoodBangla, amount.ToString(moneyFormat));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
adParamEmps = new ADParameterEmployeeService().GetByEmployee(employee.ID, EnumAllowOrDeduct.Allowance, EnumADEmpType.AppliedToIndividual);
|
||||
|
||||
if (adParamEmps != null)
|
||||
{
|
||||
foreach (ADParameterEmployee adEmp in adParamEmps)
|
||||
{
|
||||
|
||||
switch (adEmp.AllowDeduct.Code.Trim())
|
||||
{
|
||||
case "001":
|
||||
table.Remove(TagOutputConstant.AttendenceBonusBangla);
|
||||
table.Add(TagOutputConstant.AttendenceBonusBangla, adEmp.MonthlyAmount.ToString(moneyFormat));
|
||||
break;
|
||||
case "002":
|
||||
table.Remove(TagOutputConstant.ConductBonusBangla);
|
||||
table.Add(TagOutputConstant.ConductBonusBangla, adEmp.MonthlyAmount.ToString(moneyFormat));
|
||||
break;
|
||||
case "008":
|
||||
table.Remove(TagOutputConstant.HouseRentBangla);
|
||||
table.Add(TagOutputConstant.HouseRentBangla, adEmp.MonthlyAmount.ToString(moneyFormat));
|
||||
break;
|
||||
case "010":
|
||||
table.Remove(TagOutputConstant.ConveyenceBangla);
|
||||
table.Add(TagOutputConstant.ConveyenceBangla, adEmp.MonthlyAmount.ToString(moneyFormat));
|
||||
break;
|
||||
case "011":
|
||||
table.Remove(TagOutputConstant.MedicalBangla);
|
||||
table.Add(TagOutputConstant.MedicalBangla, adEmp.MonthlyAmount.ToString(moneyFormat));
|
||||
break;
|
||||
case "006":
|
||||
table.Remove(TagOutputConstant.FoodBangla);
|
||||
table.Add(TagOutputConstant.FoodBangla, adEmp.MonthlyAmount.ToString(moneyFormat));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
table.Add(TagOutputConstant.TotalTakaBangla, Math.Round(Convert.ToDouble(table[TagOutputConstant.BasicSalaryBangla]) +
|
||||
Convert.ToDouble(table[TagOutputConstant.HouseRentBangla]) +
|
||||
Convert.ToDouble(table[TagOutputConstant.ConveyenceBangla]) +
|
||||
Convert.ToDouble(table[TagOutputConstant.MedicalBangla]) +
|
||||
Convert.ToDouble(table[TagOutputConstant.FoodBangla]), 0).ToString(moneyFormat));
|
||||
double epf = 0, cpf = 0;
|
||||
double pfPercent = (payrollType.pFContriCompany / 100);
|
||||
epf = cpf = employee.BasicSalary * pfPercent;
|
||||
|
||||
List<PFException> oPfExceptions = new PFExceptionService().Get();
|
||||
PFException oEmpPFException = oPfExceptions.FirstOrDefault(x => x.EmployeeID == employee.ID);
|
||||
if (oEmpPFException != null) // && oEmpPFException.StartDate <= salary.SalaryMonth)
|
||||
{
|
||||
epf = oEmpPFException.EPFPercent == 0 ? oEmpPFException.EPFAmount : GlobalFunctions.Round(employee.BasicSalary * (oEmpPFException.EPFPercent / 100));
|
||||
cpf = oEmpPFException.EPFPercent == 0 ? oEmpPFException.CPFAmount : GlobalFunctions.Round(employee.BasicSalary * (oEmpPFException.CPFPercent / 100));
|
||||
}
|
||||
|
||||
//oRow["EPF"] = epf;
|
||||
//oRow["CPF"] = cpf;
|
||||
|
||||
}
|
||||
return table;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -857,6 +857,9 @@
|
|||
<TablixColumn>
|
||||
<Width>0.46875in</Width>
|
||||
</TablixColumn>
|
||||
<TablixColumn>
|
||||
<Width>0.39583in</Width>
|
||||
</TablixColumn>
|
||||
<TablixColumn>
|
||||
<Width>0.35417in</Width>
|
||||
</TablixColumn>
|
||||
|
@ -1198,6 +1201,39 @@
|
|||
</Textbox>
|
||||
</CellContents>
|
||||
</TablixCell>
|
||||
<TablixCell>
|
||||
<CellContents>
|
||||
<Textbox Name="Textbox100">
|
||||
<CanGrow>true</CanGrow>
|
||||
<KeepTogether>true</KeepTogether>
|
||||
<Paragraphs>
|
||||
<Paragraph>
|
||||
<TextRuns>
|
||||
<TextRun>
|
||||
<Value>=Sum(iif(Fields!ExtraAllowance.Value = 1,1,0))</Value>
|
||||
<Style>
|
||||
<FontSize>8pt</FontSize>
|
||||
</Style>
|
||||
</TextRun>
|
||||
</TextRuns>
|
||||
<Style />
|
||||
</Paragraph>
|
||||
</Paragraphs>
|
||||
<rd:DefaultName>Textbox100</rd:DefaultName>
|
||||
<Style>
|
||||
<Border>
|
||||
<Style>Solid</Style>
|
||||
</Border>
|
||||
<BackgroundColor>=iif(Sum(iif(Fields!AttenType.Value = 1 or Fields!AttenType.Value = 3 or Fields!AttenType.Value = 7 or Fields!AttenType.Value = 11 or Fields!AttenType.Value = 12,1,0))>0,"Yellow","White")</BackgroundColor>
|
||||
<PaddingLeft>2pt</PaddingLeft>
|
||||
<PaddingRight>2pt</PaddingRight>
|
||||
<PaddingTop>2pt</PaddingTop>
|
||||
<PaddingBottom>2pt</PaddingBottom>
|
||||
</Style>
|
||||
</Textbox>
|
||||
<rd:Selected>true</rd:Selected>
|
||||
</CellContents>
|
||||
</TablixCell>
|
||||
<TablixCell>
|
||||
<CellContents>
|
||||
<Textbox Name="Textbox8">
|
||||
|
@ -2457,6 +2493,87 @@
|
|||
</TablixMember>
|
||||
</TablixMembers>
|
||||
</TablixMember>
|
||||
<TablixMember>
|
||||
<TablixHeader>
|
||||
<Size>0.25in</Size>
|
||||
<CellContents>
|
||||
<Textbox Name="Textbox98">
|
||||
<CanGrow>true</CanGrow>
|
||||
<KeepTogether>true</KeepTogether>
|
||||
<Paragraphs>
|
||||
<Paragraph>
|
||||
<TextRuns>
|
||||
<TextRun>
|
||||
<Value />
|
||||
<Style>
|
||||
<FontSize>8pt</FontSize>
|
||||
</Style>
|
||||
</TextRun>
|
||||
</TextRuns>
|
||||
<Style>
|
||||
<TextAlign>Center</TextAlign>
|
||||
</Style>
|
||||
</Paragraph>
|
||||
</Paragraphs>
|
||||
<rd:DefaultName>Textbox98</rd:DefaultName>
|
||||
<Style>
|
||||
<Border>
|
||||
<Style>None</Style>
|
||||
</Border>
|
||||
<VerticalAlign>Middle</VerticalAlign>
|
||||
<PaddingLeft>2pt</PaddingLeft>
|
||||
<PaddingRight>2pt</PaddingRight>
|
||||
<PaddingTop>2pt</PaddingTop>
|
||||
<PaddingBottom>2pt</PaddingBottom>
|
||||
</Style>
|
||||
</Textbox>
|
||||
</CellContents>
|
||||
</TablixHeader>
|
||||
<TablixMembers>
|
||||
<TablixMember>
|
||||
<TablixHeader>
|
||||
<Size>0.69792in</Size>
|
||||
<CellContents>
|
||||
<Textbox Name="Textbox99">
|
||||
<CanGrow>true</CanGrow>
|
||||
<KeepTogether>true</KeepTogether>
|
||||
<Paragraphs>
|
||||
<Paragraph>
|
||||
<TextRuns>
|
||||
<TextRun>
|
||||
<Value>Extra Allowance</Value>
|
||||
<Style>
|
||||
<FontStyle>Normal</FontStyle>
|
||||
<FontSize>8pt</FontSize>
|
||||
<FontWeight>Normal</FontWeight>
|
||||
<TextDecoration>None</TextDecoration>
|
||||
<Color>#000000</Color>
|
||||
</Style>
|
||||
</TextRun>
|
||||
</TextRuns>
|
||||
<Style>
|
||||
<TextAlign>Center</TextAlign>
|
||||
</Style>
|
||||
</Paragraph>
|
||||
</Paragraphs>
|
||||
<rd:DefaultName>Textbox99</rd:DefaultName>
|
||||
<Style>
|
||||
<Border>
|
||||
<Style>Solid</Style>
|
||||
</Border>
|
||||
<BackgroundColor>Yellow</BackgroundColor>
|
||||
<VerticalAlign>Middle</VerticalAlign>
|
||||
<PaddingLeft>2pt</PaddingLeft>
|
||||
<PaddingRight>2pt</PaddingRight>
|
||||
<PaddingTop>2pt</PaddingTop>
|
||||
<PaddingBottom>2pt</PaddingBottom>
|
||||
</Style>
|
||||
</Textbox>
|
||||
</CellContents>
|
||||
</TablixHeader>
|
||||
</TablixMember>
|
||||
</TablixMembers>
|
||||
</TablixMember>
|
||||
<TablixMember>
|
||||
<TablixHeader>
|
||||
<Size>0.25in</Size>
|
||||
|
@ -4083,7 +4200,7 @@
|
|||
<DataSetName>MonthlyKPIDetail</DataSetName>
|
||||
<Top>0.16021in</Top>
|
||||
<Height>1.19792in</Height>
|
||||
<Width>13.95876in</Width>
|
||||
<Width>14.35459in</Width>
|
||||
<Style>
|
||||
<Border>
|
||||
<Style>None</Style>
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Ease.Core.Model;
|
||||
using Ease.Core.Utility;
|
||||
using HRM.BO;
|
||||
using HRM.BO.Configuration;
|
||||
using HRM.DA;
|
||||
using HRM.Report.Attendence.AttendenceDataSet;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Reporting.NETCore;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using NPOI.XSSF.Streaming.Values;
|
||||
|
@ -2844,6 +2847,38 @@ namespace HRM.Report
|
|||
oMonthlyKPIDetail = new EchoTexExceptionReportService().GetMonthlyKPIDetail(dFromDate, dToDate, sEmpID);
|
||||
|
||||
|
||||
#region Extra
|
||||
|
||||
oMonthlyKPIDetail.Tables[0].Columns.Add("ExtraAllowance", typeof(double));
|
||||
|
||||
if (oMonthlyKPIDetail != null && oMonthlyKPIDetail.Tables.Count > 0)
|
||||
{
|
||||
List<DailyAttnProcess> dAttnProcessess = dAttnProcessess = new DailyAttnProcessService().Get(sEmpID, dFromDate, dToDate);
|
||||
//List<AttnNationalHoliday> oNationalHolidays = AttnNationalHoliday.GetByMonth(dFromDate.FirstDateOfYear(), dFromDate.LastDateOfYear());
|
||||
List<Shift> oShifts = new ShiftService().Get(EnumStatus.Active, payrollTypeID);
|
||||
List<Employee> oemps = new EmployeeService().GetByEmpIDs(sEmpID);
|
||||
List<ADParameter> oAdparameters = new ADParameterService().Get(EnumStatus.Active, EnumAllowOrDeduct.Allowance, payrollTypeID).Where(x => x.AllowDeductID == 4).ToList(); // AllowDeductID = 4 is Extra Allowance in ALLOWANCEDEDUCTION table
|
||||
List<Grade> ogrades = new GradeService().Get(EnumStatus.Regardless);
|
||||
foreach (DataRow monthlyRow in oMonthlyKPIDetail.Tables[0].Rows)
|
||||
{
|
||||
Employee emp = oemps.Find(x => x.EmployeeNo.ToString() == monthlyRow["IDNo"].ToString());
|
||||
if (emp == null) continue;
|
||||
DateTime attnDate = Convert.ToDateTime(monthlyRow["AttnDate"]);
|
||||
List<DailyAttnProcess> dEmpAttn = dAttnProcessess.FindAll(x => x.EmployeeID == emp.ID && x.AttnDate.Date == attnDate.Date).ToList();
|
||||
DataTable oDataTable = new rptEcho().GetEmpDailyAttnNewKPI(emp.ID, dEmpAttn, emp, oShifts, oAdparameters, ogrades);
|
||||
if (oDataTable != null && oDataTable.Rows.Count > 0)
|
||||
{
|
||||
monthlyRow["ExtraAllowance"] = oDataTable.Rows[0]["ExtraAllowance"];
|
||||
}
|
||||
else
|
||||
{
|
||||
monthlyRow["ExtraAllowance"] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
DataTable oMnthlyKPIDtlSummary = new AttendenceDataSet.MnthlyKPIDtlSummaryDataTable();
|
||||
|
||||
#region Summary Parts
|
||||
|
@ -2883,6 +2918,64 @@ namespace HRM.Report
|
|||
|
||||
return reportProcessor.AttendanceReportsView(null, oMonthlyKPIDetail, null, RDLC, _parameters, true, payrollTypeID, reportType);
|
||||
}
|
||||
public DataTable GetEmpDailyAttnNewKPI(int EmpID, List<DailyAttnProcess> dAttnProcessess, Employee emp, List<Shift> oShifts, List<ADParameter> oADPrams, List<Grade> ogrades)
|
||||
{
|
||||
AttendenceDataSet.EmpDailyAttnDataTable dTable = new AttendenceDataSet.EmpDailyAttnDataTable();
|
||||
|
||||
var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");
|
||||
IConfiguration Configuration = builder.Build();
|
||||
|
||||
string sExtraAllowanceHour = Configuration.GetSection("Attendance")["ExtraAllowanceHour"];
|
||||
double dExtraAllowanceHours = 0;
|
||||
if (!double.TryParse(sExtraAllowanceHour, out dExtraAllowanceHours))
|
||||
{
|
||||
dExtraAllowanceHours = 13.5; // Default if Hour not given
|
||||
}
|
||||
DateTime startTime, endTime;
|
||||
|
||||
if (!(dAttnProcessess == null || dAttnProcessess.Count <= 0))
|
||||
{
|
||||
foreach (DailyAttnProcess dAttnProcess in dAttnProcessess)
|
||||
{
|
||||
DataRow Rowbody = dTable.NewRow();
|
||||
Rowbody["ExtraAllowance"] = 0;
|
||||
if (oADPrams != null && emp != null)
|
||||
{
|
||||
foreach (ADParameter adparam in oADPrams)
|
||||
{
|
||||
foreach (ADParameter.ADParameterGrade grn in adparam.ADParameterGrades)
|
||||
{
|
||||
//Grade gr = ogrades.GetItem(grn.GradeID);
|
||||
Grade gr = ogrades.Find(delegate (Grade item) { return item.ID == grn.GradeID; });
|
||||
if (gr != null && gr.ID == emp.GradeID)
|
||||
{
|
||||
if (dAttnProcess.InTime != null && dAttnProcess.InTime != DateTime.MinValue)
|
||||
{
|
||||
Shift sft = oShifts.FirstOrDefault(x => x.ID == dAttnProcess.ShiftID);
|
||||
startTime = dAttnProcess.InTime.Value.Date.Add(sft.InTime.TimeOfDay);
|
||||
|
||||
startTime = (DateTime)startTime.AddMinutes(-15) > (DateTime)dAttnProcess.InTime ? (DateTime)startTime.AddMinutes(-15) : (DateTime)dAttnProcess.InTime;
|
||||
|
||||
endTime = dAttnProcess.OutTime != null ? (DateTime)dAttnProcess.OutTime : DateTime.MinValue;
|
||||
if (endTime != DateTime.MinValue)
|
||||
{
|
||||
if (endTime.Subtract(startTime).Add(TimeSpan.FromMinutes(1)).TotalHours >= dExtraAllowanceHours)
|
||||
{
|
||||
Rowbody["ExtraAllowance"] = 1;// ncount++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dTable.Rows.Add(Rowbody);
|
||||
}
|
||||
}
|
||||
return dTable;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -5,7 +5,6 @@ using System.Data;
|
|||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Payroll.BO;
|
||||
using Ease.CoreV35;
|
||||
using Ease.Core.Model;
|
||||
using Ease.Core.Utility;
|
||||
|
@ -20,6 +19,9 @@ using HRM.Service;
|
|||
using HRM.BO.Configuration;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using System.Collections;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using NPOI.HPSF;
|
||||
|
||||
namespace HRM.Report
|
||||
{
|
||||
|
@ -2941,6 +2943,26 @@ namespace HRM.Report
|
|||
.OrderBy(x => Convert.ToInt32(x["EmployeeID"].ToString()))
|
||||
.CopyToDataTable();
|
||||
|
||||
string photoPath = "";
|
||||
string basePath = System.Environment.CurrentDirectory + "\\Documents\\EMPPHOTO\\";
|
||||
string fileNamePattern = "Image-" + employee.EmployeeNo.Trim();
|
||||
|
||||
string[] imageExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff" };
|
||||
string[] matchingFiles = Directory
|
||||
.GetFiles(basePath, fileNamePattern + ".*") // Check all files matching the pattern
|
||||
.Where(file => imageExtensions.Contains(Path.GetExtension(file), StringComparer.OrdinalIgnoreCase))
|
||||
.ToArray();
|
||||
|
||||
if (matchingFiles.Length > 0)
|
||||
{
|
||||
|
||||
photoPath = matchingFiles[0];
|
||||
//Console.WriteLine("Matching image files found:");
|
||||
//foreach (string file in matchingFiles)
|
||||
//{
|
||||
// photoPath = file;
|
||||
//}
|
||||
}
|
||||
|
||||
foreach (DataRow drBasic in dtEmpBasicInfo.Rows)
|
||||
{
|
||||
|
@ -2959,6 +2981,7 @@ namespace HRM.Report
|
|||
oRow["MartialStatus"] = (EnumMaritalStatus)Convert.ToInt16(drBasic["MARITALSTATUSID"]);
|
||||
oRow["Religion"] = drBasic["Religion"];
|
||||
oRow["Email"] = drBasic["PERSONALEMAIL"];
|
||||
oRow["EmpPhotograph"] = photoPath;
|
||||
//Commented for development
|
||||
//oRow["EmpPhotograph"] = _rImageManager.GetImage(drBasic["PhotoPath"].ToString());
|
||||
|
||||
|
@ -3377,6 +3400,7 @@ namespace HRM.Report
|
|||
oRow["Basic"] = employee.BasicSalary;
|
||||
List<ADParameter> adParams = new ADParameterService().Get(employee.GradeID, EnumEntitleType.Grade, EnumAllowOrDeduct.Allowance, payrollTypeID);
|
||||
List<ADParameterEmployee> adParamEmps = null;
|
||||
List<AllowanceDeduction> allowdeducitons = new AllowanceDeductionService().Get(EnumStatus.Regardless, payrollTypeID);
|
||||
|
||||
//EmployeeGradeSalary oEmpGradeSalary = new EmployeeGradeSalaryService().Get();
|
||||
EmployeeGradeSalary oEmpGradeSalary = new EmployeeGradeSalaryService().GetBasicOnDateBAT(employee.ID, DateTime.Now);
|
||||
|
@ -3385,6 +3409,8 @@ namespace HRM.Report
|
|||
foreach (ADParameter adParam in adParams)
|
||||
{
|
||||
double amount = new ADParameterService().GetGradeDefinedAmount(employee, employee.BasicSalary, employee.GrossSalary, oEmpGradeSalary, adParam);
|
||||
adParam.AllowanceDeduction = allowdeducitons.FirstOrDefault(x => x.ID == adParam.AllowDeductID);
|
||||
|
||||
switch (adParam.AllowanceDeduction.Code.Trim())
|
||||
{
|
||||
case "008":
|
||||
|
@ -3439,5 +3465,228 @@ namespace HRM.Report
|
|||
|
||||
return dEmpInfo;
|
||||
}
|
||||
|
||||
public string Generate(LetterTemplte letterTemplte/*LetterTemplte oLetterTemplate*/, int employeeID, int payrollTypeID, string sFPath, string lFileName)
|
||||
{
|
||||
try
|
||||
{
|
||||
string pdfFilePath = string.Empty;
|
||||
PayrollType payrollType = new PayrollTypeService().Get(payrollTypeID);
|
||||
string[] sBody = { };
|
||||
string sFilePath = string.Empty;
|
||||
Hashtable table = new Hashtable();
|
||||
|
||||
// Commented for testing in development phase
|
||||
//LetterTemplte letterTemplte = new LetterTemplteService().Get(oLetterTemplate.ID);
|
||||
//PhotoPath oPhotoPath = new PhotoPathService().Get(ID.FromInteger(1));
|
||||
//PhotoPath oPhotoPath = new PhotoPathService().Get(1);
|
||||
|
||||
#region Expandable Objects
|
||||
|
||||
// These Objects are create as per demand of diferent letters
|
||||
// These variables could grow depending on the type of ObjectID,suppordID etc
|
||||
|
||||
Employee oEmp = null;
|
||||
HREmployee oHREmp = null;
|
||||
Grade oGrade = null;
|
||||
|
||||
//For Recruitment
|
||||
Candidate oCandidate = null;
|
||||
CV oCV = null;
|
||||
|
||||
List<ADParameter> adParams;
|
||||
|
||||
//Letter Request Notification
|
||||
HRRequest oHRRequest = new HRRequest();
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
string sLetterName = string.Empty;
|
||||
table = new Hashtable();
|
||||
|
||||
switch (letterTemplte.ID)
|
||||
{
|
||||
|
||||
case FixedLetterTemplte.Officer_Appointment_Letter:
|
||||
// Dont Know if it works or not
|
||||
#region Management Appointment Letter
|
||||
|
||||
sLetterName = "Appointment Letter";
|
||||
oEmp = new EmployeeService().Get(employeeID);
|
||||
if (oEmp == null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
//oHREmp = new HREmployeeService().Get(oEmp.EmployeeNo);
|
||||
oHREmp = new HREmployeeService().Get(oEmp.ID);
|
||||
|
||||
|
||||
table = new Hashtable();
|
||||
table.Add(TagOutputConstant.CurrentDate, DateTime.Now.Date.ToString("dd MMMM, yyyy"));
|
||||
table.Add(TagOutputConstant.FullName, oHREmp.Name);
|
||||
if (oHREmp.Contacts.Any())
|
||||
{
|
||||
table.Add(TagOutputConstant.EmpPresentAddress, oHREmp.Contacts[0].PresentAddress);
|
||||
table.Add(TagOutputConstant.EmpPresentThana, oHREmp.Contacts[0].PresentThana);
|
||||
table.Add(TagOutputConstant.EmpPresentDistrict, oHREmp.Contacts[0].PresentDistrict);
|
||||
table.Add(TagOutputConstant.EmpPresentCountry, "Bangladesh");
|
||||
}
|
||||
table.Add(TagOutputConstant.BirthDate, oHREmp.BirthDate != DateTime.MinValue ? oHREmp.BirthDate.ToString("dd MMMM, yyyy") : string.Empty);
|
||||
table.Add(TagOutputConstant.EmpNationality, oHREmp.Nationality != null ? oHREmp.Nationality.Description : string.Empty);
|
||||
table.Add(TagOutputConstant.EmpReligion, oHREmp.Religion != null ? oHREmp.Religion.Name : string.Empty);
|
||||
|
||||
table.Add(TagOutputConstant.EmpGender, oEmp.Gender.ToString());
|
||||
table.Add(TagOutputConstant.EmpMaritalStatus, oEmp.MaritalStatus.ToString());
|
||||
table.Add(TagOutputConstant.EmployeeDesig, oEmp.Designation != null ? oEmp.Designation.Name : string.Empty);
|
||||
|
||||
|
||||
double TotalAllowance, Basic, HouseRent, Conveyence, Transport, Medical;
|
||||
TotalAllowance = Basic = HouseRent = Conveyence = Transport = Medical = 0.0;
|
||||
|
||||
|
||||
oGrade = new GradeService().Get((int)oEmp.GradeID);
|
||||
adParams = new ADParameterService().Get((int)oEmp.GradeID, EnumEntitleType.Grade, EnumAllowOrDeduct.Allowance, payrollTypeID);
|
||||
|
||||
Func<ADParameter, double, double> calculateOther = (a, b) =>
|
||||
a != null ? (a.PercentOfBasic == 0.0 ? a.FlatAmount : b * a.PercentOfBasic / 100) : 0.0;
|
||||
|
||||
Basic = oEmp.BasicSalary;
|
||||
HouseRent = calculateOther(adParams.Where(obj => obj.AllowDeductID == 8).SingleOrDefault(), Basic);
|
||||
Conveyence = calculateOther(adParams.Where(obj => obj.AllowDeductID == 9).SingleOrDefault(), Basic);
|
||||
Medical = calculateOther(adParams.Where(obj => obj.AllowDeductID == 11).SingleOrDefault(), Basic);
|
||||
|
||||
TotalAllowance = Basic + HouseRent + Conveyence + Medical;
|
||||
|
||||
table.Add(TagOutputConstant.CandidateBasic, Basic.ToString("#,###.00"));
|
||||
table.Add(TagOutputConstant.CandidateBasicPercent, TotalAllowance > 0 ? ((int)((Basic / TotalAllowance) * 100)).ToString() : "0");
|
||||
table.Add(TagOutputConstant.AllowHR, HouseRent.ToString("#,###.00"));
|
||||
table.Add(TagOutputConstant.AllowHRPercent, TotalAllowance > 0 ? (Math.Round((HouseRent / TotalAllowance) * 100)).ToString() : "0");
|
||||
table.Add(TagOutputConstant.AllowMedical, Medical.ToString("#,###.00"));
|
||||
table.Add(TagOutputConstant.AllowMedicalPercent, TotalAllowance > 0 ? (Math.Round((Medical / TotalAllowance) * 100)).ToString() : "0");
|
||||
table.Add(TagOutputConstant.AllowConveyance, Conveyence.ToString("#,###.00"));
|
||||
table.Add(TagOutputConstant.AllowConveyancePercent, TotalAllowance > 0 ? (Math.Round((Conveyence / TotalAllowance) * 100)).ToString() : "0");
|
||||
table.Add(TagOutputConstant.AllowTotal, TotalAllowance.ToString("#,###.00"));
|
||||
table.Add(TagOutputConstant.TakaInWord, HRM.BO.GlobalFunctions.MillionToInWords((int)TotalAllowance));
|
||||
|
||||
sFilePath = sFPath.TrimEnd('\\') + "\\" + oEmp.EmployeeNo + "-" + sLetterName + ".doc";
|
||||
|
||||
#endregion
|
||||
|
||||
break;
|
||||
case FixedLetterTemplte.Staff_Appointment_Letter:
|
||||
|
||||
#region Staff Appointment Letter
|
||||
|
||||
sLetterName = "Appointment Letter Staff";
|
||||
oEmp = new EmployeeService().Get(employeeID);
|
||||
if (oEmp == null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
//oHREmp = new HREmployeeService().Get(oEmp.EmployeeNo);
|
||||
oHREmp = new HREmployeeService().Get(oEmp.ID);
|
||||
|
||||
table = new EmployeeService().CollectDataForBanglaAppointmentHash(oHREmp, payrollType);
|
||||
|
||||
sFilePath = sFPath.TrimEnd('\\') + "\\" + oEmp.EmployeeNo + "-" + sLetterName + ".doc";
|
||||
|
||||
#endregion
|
||||
|
||||
break;
|
||||
case FixedLetterTemplte.Worker_Appointment_Letter:
|
||||
|
||||
#region Worker Appointment Letter
|
||||
|
||||
sLetterName = "Appointment Letter Worker";
|
||||
oEmp = new EmployeeService().Get(employeeID);
|
||||
if (oEmp == null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
oHREmp = new HREmployeeService().Get(oEmp.ID);
|
||||
|
||||
table = new EmployeeService().CollectDataForBanglaAppointmentHash(oHREmp, payrollType);
|
||||
|
||||
sFilePath = sFPath.TrimEnd('\\') + "\\" + oEmp.EmployeeNo + "-" + sLetterName + ".doc";
|
||||
|
||||
#endregion
|
||||
|
||||
break;
|
||||
default:
|
||||
//letterTemplte = new LetterTemplteService().Get(oLetterTemplate.ID);
|
||||
sLetterName = letterTemplte.Subject;
|
||||
if (oCandidate.IsEmployee == false)
|
||||
{
|
||||
table.Add(TagOutputConstant.CandidateName, oCV.Name);
|
||||
sFilePath = sFPath.TrimEnd('\\') + "\\" + oCV.TrackNo + "-" + sLetterName + ".doc";
|
||||
}
|
||||
else
|
||||
{
|
||||
sFilePath = sFPath.TrimEnd('\\') + "\\" + oEmp.EmployeeNo + "-" + sLetterName + ".doc";
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (table != null)
|
||||
{
|
||||
MSWord file = new MSWord();
|
||||
FileInfo ossInfo = null;
|
||||
//file.OriginalFile = letterTemplte.FilePath.Trim();
|
||||
file.OriginalFile = System.IO.Path.Combine(System.Environment.CurrentDirectory + "\\Documents\\LetterTempFolder\\" + lFileName);
|
||||
|
||||
ossInfo = new FileInfo(sFilePath);
|
||||
if (ossInfo.Exists)
|
||||
{
|
||||
ossInfo.Delete();
|
||||
}
|
||||
File.Copy(file.OriginalFile, sFilePath, true);
|
||||
file = new MSWord();
|
||||
file.OpenWordApplication();
|
||||
//file.OriginalFile = letterTemplte.FilePath.Trim();
|
||||
file.OriginalFile = System.IO.Path.Combine(System.Environment.CurrentDirectory + "\\Documents\\LetterTempFolder\\" + lFileName);
|
||||
file.ReplaceWords(sFilePath, table);
|
||||
|
||||
file.CloseWordApplication();
|
||||
//pdfFilePath = System.IO.Path.ChangeExtension(sFilePath, ".pdf");
|
||||
//ConvertDocToPdf(sFilePath, pdfFilePath);
|
||||
pdfFilePath = sFilePath;
|
||||
|
||||
}
|
||||
return pdfFilePath;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception(ex.Message);
|
||||
}
|
||||
}
|
||||
public void ConvertDocToPdf(string wordFilePath, string pdfFilePath)
|
||||
{
|
||||
Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
|
||||
Microsoft.Office.Interop.Word.Document wordDocument = null;
|
||||
try
|
||||
{
|
||||
// Open the Word document
|
||||
wordDocument = wordApp.Documents.Open(wordFilePath);
|
||||
|
||||
// Save as PDF
|
||||
wordDocument.SaveAs(pdfFilePath, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Error: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Clean up
|
||||
wordDocument?.Close();
|
||||
System.Runtime.InteropServices.Marshal.ReleaseComObject(wordDocument);
|
||||
wordApp.Quit();
|
||||
System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -296,6 +296,18 @@
|
|||
<None Remove="RDLC\UpCommingEmp.rdlc" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<COMReference Include="Microsoft.Office.Interop.Word">
|
||||
<WrapperTool>tlbimp</WrapperTool>
|
||||
<VersionMinor>7</VersionMinor>
|
||||
<VersionMajor>8</VersionMajor>
|
||||
<Guid>00020905-0000-0000-c000-000000000046</Guid>
|
||||
<Lcid>0</Lcid>
|
||||
<Isolated>false</Isolated>
|
||||
<EmbedInteropTypes>true</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Attendence\RDLC\DailyAbsent.rdlc" />
|
||||
<EmbeddedResource Include="Attendence\RDLC\DailyAbsentEcho.rdlc" />
|
||||
|
|
|
@ -133,4 +133,7 @@ export class ReportServices {
|
|||
getProfileReportData(param: any): Observable<HttpEvent<any>> {
|
||||
return this.apiService.httpPost<any>('/Report/getProfileReportData/', param);
|
||||
}
|
||||
getGeneratedProfileReportData(param: any) {
|
||||
return this.apiService.httpDownloadFile('/Report/getGeneratedProfileReport/', param);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ export class ApiService {
|
|||
|
||||
public isSSO = false;
|
||||
public versionDeployement = false;
|
||||
public versionNumber = `V-${GlobalfunctionExtension.generateVersionNumber(new Date(2025, 0, 9))}-`+"01";
|
||||
public versionNumber = `V-${GlobalfunctionExtension.generateVersionNumber(new Date(2025, 0, 16))}-`+"01";
|
||||
public static BASE_URL = '';
|
||||
public base_url = '';
|
||||
// public currentLink = '';
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<div class="p-col-3">
|
||||
<kendo-dropdownlist [(ngModel)]="selectedreportType" [data]="reportTypes" [textField]="'text'"
|
||||
[valueField]="'value'" [defaultItem]="{ text: 'Select Report Type..', value: null }"
|
||||
style="width:100%;">
|
||||
style="width:100%;" (valueChange)="onSelectReport($event)">
|
||||
</kendo-dropdownlist>
|
||||
</div>
|
||||
<!-- <div class="p-col-3" align="middle">
|
||||
|
@ -46,9 +46,9 @@
|
|||
</div> -->
|
||||
</div>
|
||||
<div class="p-col-12" align="right">
|
||||
<button kendoButton icon="file-pdf" [primary]="true" (click)="preview('PDF')">Preview</button>
|
||||
<button kendoButton icon="file-excel" [primary]="true" style="margin-left:5px;"
|
||||
(click)="preview('EXCEL')">Export</button>
|
||||
<button kendoButton icon="file-pdf" [primary]="true" (click)="preview('PDF')" *ngIf="isViewable">Preview</button>
|
||||
<button kendoButton icon="download" [primary]="true" style="margin-left:5px;"
|
||||
(click)="preview('Download')">Download</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
|
|
@ -45,6 +45,7 @@ import { encodeBase64 } from '@progress/kendo-file-saver';
|
|||
import { AuthorizedPerson } from 'src/app/adhoc-feature/authorized-persons/authorizedPerson';
|
||||
import { Employee } from 'src/app/_models/Employee/employee';
|
||||
import { HrEmployee } from 'src/app/_models/HREmployee/hrEmployee';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
|
||||
@Component({
|
||||
selector: 'app-employee-profile-reports',
|
||||
|
@ -56,6 +57,7 @@ export class EmployeeProfileReportsComponent implements OnInit {
|
|||
public showPopUp: boolean = false;
|
||||
public src: any;
|
||||
public PDFTitle = '';
|
||||
public isViewable: boolean = true;
|
||||
|
||||
public selectedreportType: EnumProfileReportType;
|
||||
public reportTypes = Object.keys(EnumProfileReportType)
|
||||
|
@ -82,6 +84,7 @@ export class EmployeeProfileReportsComponent implements OnInit {
|
|||
public router: Router, public loadingPanel: loadingPanelService,
|
||||
public notificationService: HRMNotificationService,
|
||||
public apiService: ApiService, public authService: AuthService) {
|
||||
this.apiService.selectedMenuName = 'Profile Reports';
|
||||
|
||||
}
|
||||
|
||||
|
@ -96,16 +99,39 @@ export class EmployeeProfileReportsComponent implements OnInit {
|
|||
|
||||
preview(reportType: string) {
|
||||
debugger;
|
||||
if (this.selectedEmployee == undefined || this.selectedEmployee == null) {
|
||||
this.notificationService.showWarning('Please Select and employee!!');
|
||||
return;
|
||||
}
|
||||
if (this.selectedreportType == undefined || this.selectedreportType['value'] == null) {
|
||||
this.notificationService.showWarning('Please select a report!!');
|
||||
return;
|
||||
}
|
||||
const data = {
|
||||
reportID: this.selectedreportType['value'],
|
||||
personID: this.authorizedPerson.id,
|
||||
personID: this.authorizedPerson != null ? this.authorizedPerson.id : 0,
|
||||
employeeID: this.selectedEmployee.employeeID,
|
||||
reportType: reportType
|
||||
reportType: reportType == 'Download' ? 'PDF' : reportType
|
||||
};
|
||||
switch (this.selectedreportType['value']) {
|
||||
case EnumProfileReportType.Print_CV:
|
||||
this.PDFTitle = this.selectedEmployee.employeeNo + '-' + EnumExtension.getName(EnumProfileReportType, EnumProfileReportType.Print_CV);
|
||||
break;
|
||||
case EnumProfileReportType.Appointment_Letter_Officer:
|
||||
this.PDFTitle = this.selectedEmployee.employeeNo + '-' + EnumExtension.getName(EnumProfileReportType, EnumProfileReportType.Appointment_Letter_Officer);
|
||||
break;
|
||||
case EnumProfileReportType.Appointment_Letter_Staff:
|
||||
this.PDFTitle = this.selectedEmployee.employeeNo + '-' + EnumExtension.getName(EnumProfileReportType, EnumProfileReportType.Appointment_Letter_Staff);
|
||||
break;
|
||||
case EnumProfileReportType.Appointment_Letter_Worker:
|
||||
this.PDFTitle = this.selectedEmployee.employeeNo + '-' + EnumExtension.getName(EnumProfileReportType, EnumProfileReportType.Appointment_Letter_Worker);
|
||||
break;
|
||||
}
|
||||
|
||||
this.loadingPanel.ShowLoadingPanel = true;
|
||||
if (reportType === 'PDF')
|
||||
this.showPopUp = true;
|
||||
if (this.selectedreportType['value'] == EnumProfileReportType.Print_CV || this.selectedreportType['value'] == EnumProfileReportType.Appointment_Letter_Officer) {
|
||||
this.reportService.getProfileReportData(data).subscribe(
|
||||
(resp: any) => {
|
||||
if (reportType === 'PDF') {
|
||||
|
@ -113,26 +139,54 @@ export class EmployeeProfileReportsComponent implements OnInit {
|
|||
this.src = URL.createObjectURL(this.b64toBlob(resp, 'application/pdf', 1024));
|
||||
var element = <HTMLIFrameElement>(document.getElementById("pdf-viewer-report"));
|
||||
element.src = this.src;
|
||||
} else if (reportType === 'EXCEL') {
|
||||
} else if (reportType === 'Download') {
|
||||
this.downloadFile(resp);
|
||||
}
|
||||
this.loadingPanel.ShowLoadingPanel = false;
|
||||
},
|
||||
(err) => {
|
||||
(err: any) => {
|
||||
this.closeForm();
|
||||
console.log(err);
|
||||
// console.log(err);
|
||||
this.notificationService.showError(err.error);
|
||||
this.loadingPanel.ShowLoadingPanel = false;
|
||||
},
|
||||
() => {
|
||||
|
||||
this.loadingPanel.ShowLoadingPanel = false;
|
||||
// this.loadGrid();
|
||||
}
|
||||
);
|
||||
}
|
||||
else {
|
||||
this.reportService.getGeneratedProfileReportData(data).subscribe(fileData => {
|
||||
|
||||
this.loadingPanel.ShowLoadingPanel = false;
|
||||
if (reportType == 'PDF') {
|
||||
var element = <HTMLIFrameElement>(document.getElementById("pdf-viewer-report"));
|
||||
element.src = URL.createObjectURL(new Blob([fileData], { type: 'application/pdf' }));
|
||||
|
||||
// Doc
|
||||
// var element = <HTMLIFrameElement>document.getElementById("pdf-viewer-report");
|
||||
// const fileUrl = URL.createObjectURL(new Blob([fileData], { type: 'application/msword' }));
|
||||
|
||||
// // Using Google Docs Viewer
|
||||
// element.src = `https://docs.google.com/gview?url=${encodeURIComponent(fileUrl)}&embedded=true`;
|
||||
}
|
||||
if (reportType == 'Download')
|
||||
this.downloadBlob(new Blob([fileData], { type: 'application/msword' }), 'application/msword', this.PDFTitle);
|
||||
// this.downloadBlob(new Blob([fileData], { type: 'application/pdf' }), 'application/pdf', this.PDFTitle);
|
||||
|
||||
},
|
||||
(error) => {
|
||||
this.closeForm();
|
||||
console.log(error);
|
||||
this.notificationService.showError(error.error);
|
||||
this.loadingPanel.ShowLoadingPanel = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
downloadFile(blobContent) {
|
||||
let blob = new Blob([this.b64toBlob(blobContent, 'application/data:application/vnd.ms-excel', 1024)], {});
|
||||
saveAs(blob, this.PDFTitle + '.xls');
|
||||
//EXCEL
|
||||
// let blob = new Blob([this.b64toBlob(blobContent, 'application/data:application/vnd.ms-excel', 1024)], {});
|
||||
// saveAs(blob, this.PDFTitle + '.xls');
|
||||
//PDF
|
||||
let blob = new Blob([this.b64toBlob(blobContent, 'application/pdf', 1024)], {});
|
||||
saveAs(blob, this.PDFTitle + '.pdf');
|
||||
}
|
||||
b64toBlob(b64Data, contentType, sliceSize) {
|
||||
const byteCharacters = atob(b64Data);
|
||||
|
@ -154,6 +208,21 @@ export class EmployeeProfileReportsComponent implements OnInit {
|
|||
return blob;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
public loadAuthorizedPerson() {
|
||||
this.employeeService.getAuthorizedPerson().subscribe(
|
||||
(resp) => {
|
||||
|
@ -183,6 +252,16 @@ export class EmployeeProfileReportsComponent implements OnInit {
|
|||
// }
|
||||
// );
|
||||
}
|
||||
onSelectReport(value: any) {
|
||||
debugger;
|
||||
if (this.selectedreportType['value'] != EnumProfileReportType.Appointment_Letter_Staff && this.selectedreportType['value'] != EnumProfileReportType.Appointment_Letter_Worker) {
|
||||
this.isViewable = true;
|
||||
|
||||
} else {
|
||||
this.isViewable = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export enum EnumProfileReportType {
|
||||
|
|
|
@ -786,8 +786,8 @@ export class ReportViewerComponent implements OnInit {
|
|||
this.multiselect = true;
|
||||
this.hiddenFromDate = true;
|
||||
this.hiddenToDate = true;
|
||||
this.fromDate = new Date();
|
||||
this.toDate = new Date();
|
||||
this.fromDate = GlobalfunctionExtension.getFirstDateofMonth(new Date());
|
||||
this.toDate = GlobalfunctionExtension.getLastDateOfMonth(new Date());
|
||||
this.hiddenAllSearch = false;
|
||||
this.hiddenExport = true;
|
||||
this.loadCurrentFiscalYear();
|
||||
|
|
|
@ -20,6 +20,7 @@ using NPOI.SS.Formula.Functions;
|
|||
using HRM.BO.Report;
|
||||
using HRM.Report.PayrollDataSet;
|
||||
using Newtonsoft.Json;
|
||||
using Microsoft.AspNetCore.StaticFiles;
|
||||
|
||||
namespace HRM.UI.Controllers.Report
|
||||
{
|
||||
|
@ -1716,6 +1717,8 @@ namespace HRM.UI.Controllers.Report
|
|||
int payrollTypeId = currentUser.PayrollTypeID.GetValueOrDefault();
|
||||
byte[] bytes = null;
|
||||
|
||||
LetterTemplte ltemplate = new LetterTemplte();
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
|
@ -1745,5 +1748,103 @@ namespace HRM.UI.Controllers.Report
|
|||
|
||||
return Ok(bytes);
|
||||
}
|
||||
|
||||
[HttpPost("getGeneratedProfileReport")]
|
||||
public ActionResult getGeneratedProfileReportData(dynamic data)
|
||||
{
|
||||
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
|
||||
var items = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(data));
|
||||
EnumProfileReportType reportid = (EnumProfileReportType)items["reportID"].ToObject<int>();
|
||||
int personID = 0;
|
||||
int employeeID = 0;
|
||||
|
||||
if (items["personID"] != null)
|
||||
personID = (int)items["personID"].ToObject<int>();
|
||||
if (items["employeeID"] != null)
|
||||
employeeID = (int)items["employeeID"].ToObject<int>();
|
||||
|
||||
string reportType = (string)items["reportType"].ToObject<string>();
|
||||
|
||||
int payrollTypeId = currentUser.PayrollTypeID.GetValueOrDefault();
|
||||
byte[] bytes = null;
|
||||
|
||||
LetterTemplte ltemplate = new LetterTemplte();
|
||||
|
||||
try
|
||||
{
|
||||
//string downloadPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + @"\Downloads";
|
||||
string downloadPath = System.Environment.CurrentDirectory + "\\Documents\\LetterTempFolder\\";
|
||||
string sFilePath = string.Empty, lFileName = string.Empty;
|
||||
|
||||
switch (reportid)
|
||||
{
|
||||
case EnumProfileReportType.Appointment_Letter_Worker:
|
||||
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";
|
||||
|
||||
sFilePath = new rptEmployee().Generate(ltemplate, employeeID, payrollTypeId, downloadPath, lFileName);
|
||||
break;
|
||||
case EnumProfileReportType.Appointment_Letter_Staff:
|
||||
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";
|
||||
|
||||
sFilePath = new rptEmployee().Generate(ltemplate, employeeID, payrollTypeId, downloadPath, lFileName);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
byte[] buffer = new byte[16 * 1024];
|
||||
buffer = System.IO.File.ReadAllBytes(sFilePath);
|
||||
string contentType = GetFileType(sFilePath);
|
||||
//var name = System.IO.Path.ChangeExtension(lFileName, ".pdf");
|
||||
var name = lFileName;
|
||||
if (System.IO.File.Exists(sFilePath))
|
||||
{
|
||||
System.IO.File.Delete(sFilePath);
|
||||
}
|
||||
//if (System.IO.File.Exists(System.IO.Path.ChangeExtension(sFilePath, ".doc")))
|
||||
//{
|
||||
// System.IO.File.Delete(System.IO.Path.ChangeExtension(sFilePath, ".doc"));
|
||||
//}
|
||||
return File(buffer, contentType, name);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
|
||||
}
|
||||
|
||||
return Ok(bytes);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[Route("get-file-type")]
|
||||
[AllowAnonymous]
|
||||
[IgnoreAntiforgeryToken]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
public string GetFileType(string originalFileName)
|
||||
{
|
||||
//var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(data));
|
||||
//string fileName = (string)item["fileName"].ToObject<string>();
|
||||
string fileName = originalFileName;
|
||||
string contentType;
|
||||
new FileExtensionContentTypeProvider().TryGetContentType(fileName, out contentType);
|
||||
return contentType ?? "application/octet-stream";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
2952
HRM.UI/Documents/LetterTempFolder/Staff.doc
Normal file
2952
HRM.UI/Documents/LetterTempFolder/Staff.doc
Normal file
File diff suppressed because it is too large
Load Diff
2967
HRM.UI/Documents/LetterTempFolder/Worker.doc
Normal file
2967
HRM.UI/Documents/LetterTempFolder/Worker.doc
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -1172,6 +1172,18 @@
|
|||
<TypeScriptCompile Remove="ClientApp\src\app\_models\Recruitement\InterviewAssessmentKpi.ts" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<COMReference Include="Microsoft.Office.Interop.Word">
|
||||
<WrapperTool>tlbimp</WrapperTool>
|
||||
<VersionMinor>7</VersionMinor>
|
||||
<VersionMajor>8</VersionMajor>
|
||||
<Guid>00020905-0000-0000-c000-000000000046</Guid>
|
||||
<Lcid>0</Lcid>
|
||||
<Isolated>false</Isolated>
|
||||
<EmbedInteropTypes>true</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="appsettings.json" />
|
||||
<EmbeddedResource Include="RDLC\CandidateAssesmentDetails.rdlc" />
|
||||
|
@ -1232,6 +1244,9 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="RDLC\IDCardPrint.rdlc">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="RDLC\Report177.rdlc">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
|
|
|
@ -1023,7 +1023,7 @@
|
|||
<TextRun>
|
||||
<Value>="‡dvb: "&Parameters!CPhone.Value</Value>
|
||||
<Style>
|
||||
<FontFamily>KarnaphuliMJ</FontFamily>
|
||||
<FontFamily>sutonnyMJ</FontFamily>
|
||||
<FontSize>7pt</FontSize>
|
||||
</Style>
|
||||
</TextRun>
|
||||
|
@ -1506,7 +1506,7 @@
|
|||
<TextRun>
|
||||
<Value> kZ©vejx</Value>
|
||||
<Style>
|
||||
<FontFamily>KarnaphuliMJ</FontFamily>
|
||||
<FontFamily>sutonnyMJ</FontFamily>
|
||||
<FontSize>8pt</FontSize>
|
||||
<FontWeight>Bold</FontWeight>
|
||||
</Style>
|
||||
|
@ -1597,7 +1597,7 @@
|
|||
<TextRun>
|
||||
<Value>1. GB KvW© n¯ÍvšÍi †hvM¨ b‡n |</Value>
|
||||
<Style>
|
||||
<FontFamily>KarnaphuliMJ</FontFamily>
|
||||
<FontFamily>sutonnyMJ</FontFamily>
|
||||
<FontSize>7pt</FontSize>
|
||||
</Style>
|
||||
</TextRun>
|
||||
|
@ -1626,7 +1626,7 @@
|
|||
<TextRun>
|
||||
<Value>2. GB KvW© nviv‡bv ‡M‡j ev bó n‡j mv‡_</Value>
|
||||
<Style>
|
||||
<FontFamily>KarnaphuliMJ</FontFamily>
|
||||
<FontFamily>sutonnyMJ</FontFamily>
|
||||
<FontSize>7pt</FontSize>
|
||||
</Style>
|
||||
</TextRun>
|
||||
|
@ -1655,7 +1655,7 @@
|
|||
<TextRun>
|
||||
<Value> mv‡_ KZ©„cÿ‡K AewnZ Ki‡Z n‡e|</Value>
|
||||
<Style>
|
||||
<FontFamily>KarnaphuliMJ</FontFamily>
|
||||
<FontFamily>sutonnyMJ</FontFamily>
|
||||
<FontSize>7pt</FontSize>
|
||||
</Style>
|
||||
</TextRun>
|
||||
|
@ -1684,7 +1684,7 @@
|
|||
<TextRun>
|
||||
<Value>=" kÖwgK AvBb Gi "+Parameters!Dhara.Value+" aviv ‡gvZv‡eK"</Value>
|
||||
<Style>
|
||||
<FontFamily>KarnaphuliMJ</FontFamily>
|
||||
<FontFamily>sutonnyMJ</FontFamily>
|
||||
<FontSize>7pt</FontSize>
|
||||
</Style>
|
||||
</TextRun>
|
||||
|
@ -1713,7 +1713,7 @@
|
|||
<TextRun>
|
||||
<Value> bZzb KvW© cÖ`vb Kiv nB‡e| </Value>
|
||||
<Style>
|
||||
<FontFamily>KarnaphuliMJ</FontFamily>
|
||||
<FontFamily>sutonnyMJ</FontFamily>
|
||||
<FontSize>7pt</FontSize>
|
||||
</Style>
|
||||
</TextRun>
|
||||
|
@ -1742,7 +1742,7 @@
|
|||
<TextRun>
|
||||
<Value> 3. PvKzix Z¨vM Kivi mgq KvW©wU ‡diZ</Value>
|
||||
<Style>
|
||||
<FontFamily>KarnaphuliMJ</FontFamily>
|
||||
<FontFamily>sutonnyMJ</FontFamily>
|
||||
<FontSize>7pt</FontSize>
|
||||
</Style>
|
||||
</TextRun>
|
||||
|
@ -2002,7 +2002,7 @@
|
|||
<TextRun>
|
||||
<Value> w`‡Z n‡e|</Value>
|
||||
<Style>
|
||||
<FontFamily>KarnaphuliMJ</FontFamily>
|
||||
<FontFamily>sutonnyMJ</FontFamily>
|
||||
<FontSize>7pt</FontSize>
|
||||
</Style>
|
||||
</TextRun>
|
||||
|
|
Loading…
Reference in New Issue
Block a user