EchoTex_Payroll/HRM.BO/Fund/Basic/GlobalFunctions.cs
2024-10-14 10:01:49 +06:00

1421 lines
53 KiB
C#

using System;
using System.Linq;
using System.Data;
using System.Collections.Generic;
using Ease.Core.Model;
using System.IO;
using Ease.Core.Utility;
using System.Text.RegularExpressions;
namespace HRM.BO
{
public class DefaultConfigurationValue
{
public DefaultConfigurationValue()
{
}
public DefaultConfigurationValue(int _roundDigit, string _dayFractionType, bool _isMidPointRound)
{
roundOfDigit = _roundDigit;
DayFactionType = _dayFractionType;
IsMidPointRound = _isMidPointRound;
}
public int roundOfDigit { get; }
public string DayFactionType { get; }
public bool IsMidPointRound { get; }
}
public class GlobalFunctions
{
private static DefaultConfigurationValue _defaultConfigVal;
public static bool bDataFound = false;
public static DefaultConfigurationValue defaultConfigVal
{
get
{
if (_defaultConfigVal == null)
{
_defaultConfigVal = GlobalFunctions.Service.RefreshServerValue();
}
return _defaultConfigVal;
}
set
{
_defaultConfigVal = value;
}
}
#region Service Factory IGlobalFunctionService : IGlobalFunctionService
internal static IGlobalFunctionService Service
{
get { return Services.Factory.CreateService<IGlobalFunctionService>(typeof(IGlobalFunctionService)); }
}
public static int MONTH_START_DATE { get; set; }
#endregion
public static string GetApiDefaultData(string str)
{
str = (str == "" || str == "null" || str == "undefined") ? string.Empty : str;
return str;
}
public static int? GetApiDefaultIntData(string str)
{
int? intData = null; ;
if (str != null && str != "" && str.ToLower() != "null" && str.ToLower() != "undefined")
{
intData = Convert.ToInt32(str);
}
return intData;
}
public static DateTime GetApiDefaultDateData(string str)
{
DateTime dateData = DateTime.MinValue;
if (str != null && str != "" && str.ToLower() != "null" && str.ToLower() != "undefined")
{
dateData = Convert.ToDateTime(str);
}
return dateData;
}
public static string AgeCalculate(DateTime Bday, DateTime Cday)
{
int Years = 0;
int Months = 0;
int Days = 0;
if ((Cday.Year - Bday.Year) > 0 ||
(((Cday.Year - Bday.Year) == 0) && ((Bday.Month < Cday.Month) ||
((Bday.Month == Cday.Month) && (Bday.Day <= Cday.Day)))))
{
int DaysInBdayMonth = DateTime.DaysInMonth(Bday.Year, Bday.Month);
int DaysRemain = Cday.Day + (DaysInBdayMonth - Bday.Day);
if (Cday.Month > Bday.Month)
{
Years = Cday.Year - Bday.Year;
Months = Cday.Month - (Bday.Month + 1) + Math.Abs(DaysRemain / DaysInBdayMonth);
Days = (DaysRemain % DaysInBdayMonth + DaysInBdayMonth) % DaysInBdayMonth;
}
else if (Cday.Month == Bday.Month)
{
if (Cday.Day >= Bday.Day)
{
Years = Cday.Year - Bday.Year;
Months = 0;
Days = Cday.Day - Bday.Day;
}
else
{
Years = (Cday.Year - 1) - Bday.Year;
Months = 11;
Days = DateTime.DaysInMonth(Bday.Year, Bday.Month) - (Bday.Day - Cday.Day);
}
}
else
{
Years = (Cday.Year - 1) - Bday.Year;
Months = Cday.Month + (11 - Bday.Month) + Math.Abs(DaysRemain / DaysInBdayMonth);
Days = (DaysRemain % DaysInBdayMonth + DaysInBdayMonth) % DaysInBdayMonth;
}
}
else
{
throw new ArgumentException("Birthday date must be earlier than current date");
}
return Years + " Years, " + Months + " Months, " + Days + " Days";
}
//public static DateTime GetOperationDate()
//{
// try
// {
// return Service.GetOperationDate();
// }
// catch (ServiceException e)
// {
// throw new Exception(e.Message, e);
// }
//}
public static string GetShortAttnType(EnumAttendanceType atype, EnumWorkPlanDayType daytype, double latehour)
{
string type = string.Empty;
switch (atype)
{
case EnumAttendanceType.Absent:
type = "AB";
break;
case EnumAttendanceType.Delay:
type = "LP";
break;
case EnumAttendanceType.Holiday:
type = "H";
break;
case EnumAttendanceType.Late:
type = "LP";
break;
case EnumAttendanceType.Leave:
type = "Lv";
break;
case EnumAttendanceType.Present:
type = "PR";
if (daytype == EnumWorkPlanDayType.WorkingDay &&
latehour > 0)
{
type = "L-PR";
}
else if (daytype == EnumWorkPlanDayType.WeeklyHoliday
&& latehour > 0)
{
type = "WD-L-PR";
}
else if (daytype == EnumWorkPlanDayType.WeeklyHoliday &&
latehour <= 0)
{
type = "WD-PR";
}
else if (daytype == EnumWorkPlanDayType.NationalHoliday &&
latehour > 0)
{
type = "H-L-PR";
}
else if (daytype == EnumWorkPlanDayType.NationalHoliday &&
latehour <= 0)
{
type = "H-PR";
}
break;
case EnumAttendanceType.OutSideDuty:
type = "OD";
break;
case EnumAttendanceType.Early:
type = "E";
break;
case EnumAttendanceType.WeeklyHoliday:
type = "WD";
break;
}
return type;
}
public static double GetHourtoMinutes(double hours)
{
return Math.Floor(hours) * ((hours - Math.Floor(hours))/100);
}
public static double GetOTDailyRate(double nBasic, DateTime dMonthDate)
{
double amount = 0;
amount = nBasic / Convert.ToDouble(DateTime.DaysInMonth(dMonthDate.Year, dMonthDate.Month));
return amount;
}
public static double GetOTHourlyRate(double nBasic, DateTime dMonthDate)
{
double amount = 0;
int hours = 0;//ConfigurationManager.GetIntValue("overtime", "hoursonmonth", EnumConfigurationType.Logic);
if (hours <= 0) hours = 208;
double doubleHOur = Convert.ToDouble(hours);
amount = nBasic / doubleHOur;
return amount;
}
public static double ConvertToDailyRate(double nBasic, DateTime dMonthDate)
{
enumfractionCalculatinType ntype = getFractionateCalType();
double amount = 0;
switch (ntype)
{
case enumfractionCalculatinType.Monthly:
amount = nBasic / Convert.ToDouble(DateTime.DaysInMonth(dMonthDate.Year, dMonthDate.Month));
break;
case enumfractionCalculatinType.Yearly:
amount = (nBasic * 12) / 365;
break;
case enumfractionCalculatinType.ThirtyDaysMonth:
case enumfractionCalculatinType.ThirtyDaysMonthActual:
amount = nBasic / 30;
break;
default:
break;
}
return amount;
}
public static int GetDaysInMonth(DateTime dMonthDate)
{
enumfractionCalculatinType ntype = getFractionateCalType();
int amount = 0;
switch (ntype)
{
case enumfractionCalculatinType.Monthly:
amount = DateTime.DaysInMonth(dMonthDate.Year, dMonthDate.Month);
break;
case enumfractionCalculatinType.ThirtyDaysMonthActual:
case enumfractionCalculatinType.ThirtyDaysMonth:
amount = 30;
break;
default:
amount = 30;
break;
}
return amount;
}
public static string ConvertDoubleHourToHourMinute(double totalHour)
{
string[] strParts = totalHour.ToString("0.000000").Split('.');
strParts[1] = "." + strParts[1];
string hourPart = Convert.ToInt32(strParts[0]).ToString("00");
string minutepart = Math.Round(Convert.ToDecimal(strParts[1]) * 60, 0, MidpointRounding.AwayFromZero).ToString("00");
return string.Format("{0}:{1}", hourPart, minutepart);
}
public static string GetShortAttnType(EnumAttendanceType attnType)
{
string type = string.Empty;
switch (attnType)
{
case EnumAttendanceType.Absent:
type = "A";
break;
case EnumAttendanceType.Delay:
type = "L";
break;
case EnumAttendanceType.Holiday:
type = "H";
break;
case EnumAttendanceType.Late:
type = "L";
break;
case EnumAttendanceType.Leave:
type = "Lv";
break;
case EnumAttendanceType.Present:
type = "P";
break;
case EnumAttendanceType.OutSideDuty:
type = "OD";
break;
case EnumAttendanceType.Early:
type = "E";
break;
case EnumAttendanceType.WeeklyHoliday:
type = "W";
break;
}
return type;
}
public static string BloodGroupToBangla(EnumBloodGroup eBloodGrp)
{
string str = string.Empty;
switch (eBloodGrp)
{
case EnumBloodGroup.None:
break;
case EnumBloodGroup.APos:
str = "G cwRwUf";
break;
case EnumBloodGroup.ANeg:
str = "G ‡b‡MwUf";
break;
case EnumBloodGroup.BPos:
str = "we cwRwUf";
break;
case EnumBloodGroup.BNeg:
str = "we ‡b‡MwUf";
break;
case EnumBloodGroup.OPos:
str = "I cwRwUf";
break;
case EnumBloodGroup.ONeg:
str = "I ‡b‡MwUf";
break;
case EnumBloodGroup.ABPos:
str = "Gwe cwRwUf";
break;
case EnumBloodGroup.ABNeg:
str = "Gwe ‡b‡MwUf";
break;
default:
break;
}
return str;
}
public static string GetFullAttnType(EnumAttendanceType attnType)
{
Regex r = new Regex(@"(?<=[A-Z])(?=[A-Z][a-z])|(?<=[^A-Z])(?=[A-Z])|(?<=[A-Za-z])(?=[^A-Za-z])");
return r.Replace(attnType.ToString(), " ");
}
//public static DateTime AttendanceMonthStart(DateTime date)
//{
// if (date.Day > 20)
// return new DateTime(date.Year, date.Month, 21);
// else if (date.Month == 1)
// return new DateTime(date.Year - 1, 12, 21);
// else return new DateTime(date.Year, date.AddMonths(-1).Month, 21);
//}
//public static DateTime AttendanceMonthEnd(DateTime date)
//{
// if (date.Day < 20)
// return new DateTime(date.Year, date.Month, 20);
// else
// if (date.Month == 12)
// return new DateTime(date.Year + 1, 1, 20);
// else return new DateTime(date.Year, date.AddMonths(1).Month, 20);
//}
//public static DateTime GetServerDate()
//{
// object serverDate = null;
// try
// {
// serverDate = Service.GetServerDate();
// }
// catch (ServiceException e)
// {
// throw new ServiceException(e.Message, e);
// }
// return Convert.ToDateTime(serverDate);
//}
//public static DataTable AvailableUserObject()
//{
// DataTable dataTable = new DataTable();
// try
// {
// dataTable = Service.AvailableUserObject();
// }
// catch (ServiceException e)
// {
// throw new ServiceException(e.Message, e);
// }
// return dataTable;
//}
public static string TagSQL(string sPrevious, string sNew)
{
string sSearch = string.Empty;
if (sPrevious == string.Empty)
{
return sSearch = " Where " + sNew;
}
else
{
return sSearch = sPrevious + " And " + sNew;
}
}
public static void ExportToExcel(StreamWriter wr, DataTable dt)
{
try
{
for (int i = 0; i < dt.Columns.Count; i++)
{
wr.Write(dt.Columns[i].ToString().ToUpper() + "\t");
}
wr.WriteLine();
//write rows to excel file
for (int i = 0; i < (dt.Rows.Count); i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
if (dt.Rows[i][j] != null)
{
wr.Write(Convert.ToString(dt.Rows[i][j]) + "\t");
}
else
{
wr.Write("\t");
}
}
//go to next line
wr.WriteLine();
}
//close file
wr.Close();
}
catch (Exception ex)
{
throw ex;
}
}
public static int GetDayofWeek(DateTime FromDate, DateTime ToDate, int day)
{
int i;
DateTime dateTemp;
i = 0;
dateTemp = FromDate;
while (dateTemp <= ToDate)
{
if (((int)dateTemp.DayOfWeek == day)) i = i + 1;
dateTemp = dateTemp.AddDays(1);
}
return i;
}
public static DateTime GetAttandaceSalaryMonth(DateTime dDate)
{
return GetAttandaceSalaryMonth(dDate, -1);
}
public static DateTime GetAttandaceSalaryMonth(DateTime dDate, int MonthStartDate)
{
if (MonthStartDate == 1) // Fisrt date of Current Month
{
return Global.DateFunctions.LastDateOfMonth(dDate);
}
else if (MonthStartDate == -1) // Fisrt date of Current Month
{
dDate = dDate.AddMonths(-1);
return Global.DateFunctions.LastDateOfMonth(dDate.AddMonths(1));
}
else
{
if (dDate.Day >= MonthStartDate)
return Global.DateFunctions.LastDateOfMonth(dDate.AddMonths(1));
else return Global.DateFunctions.LastDateOfMonth(dDate);
}
}
public static DateTime AttendanceMonthStart(DateTime date, int MonthStartDate)
{
if (MonthStartDate == 1) // Fisrt date of Current Month
{
return new DateTime(date.Year, date.Month, 1);
}
else if (MonthStartDate == -1) // Fisrt date of Current Month
{
date = date.AddMonths(-1);
return new DateTime(date.Year, date.Month, 1);
}
else
{
if (date.Day > MonthStartDate)
return new DateTime(date.Year, date.Month, MonthStartDate);
else if (date.Month == 1)
return new DateTime(date.Year - 1, 12, MonthStartDate);
else return new DateTime(date.Year, date.AddMonths(-1).Month, MonthStartDate);
}
}
public static DateTime AttendanceMonthEnd(DateTime date, int MonthStartDate)
{
if (MonthStartDate == 1) // Fisrt date of Current Month
{
return Global.DateFunctions.LastDateOfMonth(date);
}
else if (MonthStartDate == -1) // Fisrt date of Current Month
{
date = date.AddMonths(-1);
return Global.DateFunctions.LastDateOfMonth(date);
}
else
{
if (date.Day < MonthStartDate)
return new DateTime(date.Year, date.Month, MonthStartDate);
else
if (date.Month == 12)
return new DateTime(date.Year + 1, 1, MonthStartDate);
else return new DateTime(date.Year, date.AddMonths(1).Month, MonthStartDate);
}
}
//public static DateTime GetCurrentDate()
//{
// object currentDate = null;
// try
// {
// currentDate = Service.GetCurrentDate();
// }
// catch (ServiceException e)
// {
// throw new ServiceException(e.Message, e);
// }
// return Convert.ToDateTime(currentDate);
//}
//private static ErrorProvider _err = new ErrorProvider();
//public static void CatchError(Control ctrl, string msg)
//{
// _err.Clear();
// _err.BlinkRate = 250;
// _err.BlinkStyle = ErrorBlinkStyle.BlinkIfDifferentError;
// _err.SetError(ctrl, msg);
//}
public static double Round(double value)
{
double roundedValue = 0.00;
try
{
roundedValue = Math.Round(value, GetRoundOfDigit(), MidpointRounding.AwayFromZero);
// roundedValue = Math.Round(value,2, MidpointRounding.AwayFromZero);
}
catch (Exception ex)
{
throw new ServiceException(ex.InnerException.Message);
}
return roundedValue;
}
public static double Round(double value, int roundofdegit)
{
double roundedValue = 0.00;
try
{
roundedValue = Math.Round(value, GetRoundOfDigit(roundofdegit), MidpointRounding.AwayFromZero);
}
catch (Exception ex)
{
throw new ServiceException(ex.InnerException.Message);
}
return roundedValue;
}
public static double ConvertToHourlyRate(double nBasic)
{
double amount = 0;
int hours = 0;//ConfigurationManager.GetIntValue("overtime", "hoursonmonth", EnumConfigurationType.Logic);
if (hours <= 0) hours = 208;
double doubleHOur = Convert.ToDouble(hours);
amount = nBasic / doubleHOur;
return amount;
}
public static enumfractionCalculatinType getFractionateCalType()
{
enumfractionCalculatinType type = enumfractionCalculatinType.Monthly;
string caltype = GlobalFunctions.defaultConfigVal.DayFactionType; //ConfigurationManager.GetStringValue("root", "monthfraction", EnumConfigurationType.Logic);
if (caltype.ToUpper() == "THIRTYDAYS")
type = enumfractionCalculatinType.ThirtyDaysMonth;
else if (caltype.ToUpper() == "THIRTYDAYSACTUAL")
type = enumfractionCalculatinType.ThirtyDaysMonthActual;
else if (caltype.ToUpper() == "YEARLY")
type = enumfractionCalculatinType.Yearly;
else
type = enumfractionCalculatinType.Monthly;
return type;
}
//public static int GetdaysInMonth(DateTime dMonth)
//{
// int daysinMonth = 30;
// enumfractionCalculatinType type = enumfractionCalculatinType.Monthly;
// string caltype = GlobalFunctions.defaultConfigVal.DayFactionType; //ConfigurationManager.GetStringValue("root", "monthfraction", EnumConfigurationType.Logic);
// if (caltype.ToUpper() == "THIRTYDAYS")
// daysinMonth = 30;
// else
// daysinMonth = GlobalFunctions.FirstDateOfMonth(dMonth) - GlobalFunctions.LastDateOfMonth(dMonth)
// return type;
//}
public static double GetFraction(DateTime StartDate, DateTime EndDate)
{
double WorkDays;
double MonDays;
double TotFract;
double nFraction = 1;
TotFract = 0;
// bool isYearly = ConfigurationManager.GetBoolValue("root", "fractionalcalculationyearly", EnumConfigurationType.Logic);
//bool isYearly = ConfigurationManager.GetBoolValue("root", "fractionalcalculation", EnumConfigurationType.Logic);
enumfractionCalculatinType ntype = getFractionateCalType();
WorkDays = Global.DateFunctions.DateDiff("d", StartDate,
GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
switch (ntype)
{
case enumfractionCalculatinType.Monthly:
while (StartDate <= EndDate)
{
WorkDays = Global.DateFunctions.DateDiff("d", StartDate,
GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
MonDays = Global.DateFunctions.DateDiff("d",
GlobalFunctions.FirstDateOfMonth(StartDate),
GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
if (StartDate.Month == EndDate.Month && EndDate != GlobalFunctions.LastDateOfMonth(EndDate))
{
WorkDays = Global.DateFunctions.DateDiff("d",
GlobalFunctions.FirstDateOfMonth(EndDate), EndDate) + 1;
}
TotFract = TotFract + WorkDays / MonDays;
StartDate = GlobalFunctions.LastDateOfMonth(StartDate).AddDays(1);
}
nFraction = TotFract;
break;
case enumfractionCalculatinType.Yearly:
//0.032876712328767123287671232876712
//0.0328767123
//if (StartDate == GlobalFunctions.FirstDateOfMonth(StartDate) && EndDate == GlobalFunctions.LastDateOfMonth(EndDate))
//{
// WorkDays = Ease.CoreV35.Utility.Global.DateFunctions.DateDiff("m", StartDate, EndDate) + 1;
// nFraction = WorkDays;
//}
//else
//{
// WorkDays = Ease.CoreV35.Utility.Global.DateFunctions.DateDiff("d", StartDate, EndDate) + 1;
// double yearlyFraction = 0.0328767123; // which mean 12/365
// nFraction = yearlyFraction * WorkDays;
//}
nFraction = 0;
if (Global.DateFunctions.DateDiff("m", GlobalFunctions.FirstDateOfMonth(StartDate),
GlobalFunctions.LastDateOfMonth(EndDate)) > 2)
{
nFraction = Global.DateFunctions.DateDiff("m", GlobalFunctions.FirstDateOfMonth(StartDate.AddMonths(1)),
GlobalFunctions.LastDateOfMonth(EndDate.AddMonths(-1)));
nFraction = nFraction + (Global.DateFunctions.DateDiff("d", StartDate,
GlobalFunctions.LastDateOfMonth(StartDate)) + 1) * 0.0328767123;
nFraction = nFraction + (Global.DateFunctions.DateDiff("d", GlobalFunctions.FirstDateOfMonth(EndDate),
EndDate) + 1) * 0.0328767123;
}
else
{
if (StartDate.Month == EndDate.Month && StartDate.Year == EndDate.Year) // if cross two month
{
if (StartDate == FirstDateOfMonth(StartDate) && EndDate == LastDateOfMonth(EndDate))
nFraction = 1;
else
nFraction = nFraction + (Global.DateFunctions.DateDiff("d", StartDate,
EndDate) + 1) * 0.0328767123;
}
else
{
if (StartDate == FirstDateOfMonth(StartDate) && EndDate == LastDateOfMonth(EndDate))
nFraction = 1;
else
nFraction = nFraction + (Global.DateFunctions.DateDiff("d", StartDate,
GlobalFunctions.LastDateOfMonth(StartDate)) + 1) * 0.0328767123;
if (EndDate == LastDateOfMonth(EndDate))
nFraction = nFraction + 1;
else nFraction = nFraction + (Global.DateFunctions.DateDiff("d", GlobalFunctions.FirstDateOfMonth(EndDate),
EndDate) + 1) * 0.0328767123;
}
}
//while (StartDate <= EndDate)
//{
// if (StartDate.Day != 1 )
// {
// nFraction = nFraction + ((double)(Ease.CoreV35.Utility.Global.DateFunctions.DateDiff("d",
// GlobalFunctions.FirstDateOfMonth(EndDate), EndDate) + 1)) * 0.0328767123;
// }
// WorkDays = Ease.CoreV35.Utility.Global.DateFunctions.DateDiff("d", StartDate,
// GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
// MonDays = Ease.CoreV35.Utility.Global.DateFunctions.DateDiff("d",
// GlobalFunctions.FirstDateOfMonth(StartDate),
// GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
// if (StartDate.Month == EndDate.Month && EndDate != GlobalFunctions.LastDateOfMonth(EndDate))
// {
// nFraction = nFraction + ((double) (Ease.CoreV35.Utility.Global.DateFunctions.DateDiff("d",
// GlobalFunctions.FirstDateOfMonth(EndDate), EndDate) + 1)) * 0.0328767123;
// }
// TotFract = TotFract + WorkDays / MonDays;
// StartDate = GlobalFunctions.LastDateOfMonth(StartDate).AddDays(1);
//}
break;
case enumfractionCalculatinType.ThirtyDaysMonth:
WorkDays = Global.DateFunctions.DateDiff("d", StartDate,
GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
while (StartDate <= EndDate)
{
WorkDays = Global.DateFunctions.DateDiff("d", StartDate,
GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
MonDays = Global.DateFunctions.DateDiff("d",
GlobalFunctions.FirstDateOfMonth(StartDate), GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
int tempDaya = Global.DateFunctions.DateDiff("d", FirstDateOfMonth(StartDate),
GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
if (tempDaya == 31) WorkDays = WorkDays - 1;
else if (tempDaya < 30)
if (tempDaya == 28) WorkDays = WorkDays + 2;
else WorkDays = WorkDays + 1;
MonDays = 30;
if (StartDate.Month == EndDate.Month && EndDate != GlobalFunctions.LastDateOfMonth(EndDate))
{
WorkDays = Global.DateFunctions.DateDiff("d",
GlobalFunctions.FirstDateOfMonth(EndDate), EndDate) + 1;
MonDays = 30;
}
TotFract = TotFract + WorkDays / MonDays;
StartDate = GlobalFunctions.LastDateOfMonth(StartDate).AddDays(1);
}
nFraction = TotFract;
break;
case enumfractionCalculatinType.ThirtyDaysMonthActual:
WorkDays = Global.DateFunctions.DateDiff("d", StartDate,
GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
while (StartDate <= EndDate)
{
WorkDays = Global.DateFunctions.DateDiff("d", StartDate,
GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
MonDays = Global.DateFunctions.DateDiff("d",
GlobalFunctions.FirstDateOfMonth(StartDate), GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
int tempDaya = Global.DateFunctions.DateDiff("d", FirstDateOfMonth(StartDate),
GlobalFunctions.LastDateOfMonth(StartDate)) + 1;
//if (tempDaya == 31) WorkDays = WorkDays - 1;
//else if (tempDaya < 30)
// if (tempDaya == 28) WorkDays = WorkDays + 2;
// else WorkDays = WorkDays + 1;
MonDays = 30;
if (StartDate.Month == EndDate.Month && EndDate != GlobalFunctions.LastDateOfMonth(EndDate))
{
WorkDays = Global.DateFunctions.DateDiff("d",
GlobalFunctions.FirstDateOfMonth(EndDate), EndDate) + 1;
MonDays = 30;
}
double temp = WorkDays / MonDays;
if (temp > 1) temp = 1;
TotFract = TotFract + temp;
StartDate = GlobalFunctions.LastDateOfMonth(StartDate).AddDays(1);
}
nFraction = TotFract;
break;
default:
break;
}
return nFraction;
}
private static int GetRoundOfDigit()
{
int RoundofDigit = 2;
try
{
if (RoundofDigit != -1)
{
//####
RoundofDigit = GlobalFunctions.defaultConfigVal.roundOfDigit; // ConfigurationManager.GetIntValue("root", "roundofdegit", EnumConfigurationType.Logic);
if (RoundofDigit > 4 || RoundofDigit < 0)
{
RoundofDigit = -1;
throw new ServiceException("Round of digit not greater 4 digit. Location: "
+ "logic-Configuration; Node:Root, Child-Node:RoundOfDegit, Value:" + RoundofDigit.ToString());
}
}
}
catch (Exception ex)
{
throw new ServiceException(ex.InnerException.Message);
}
return RoundofDigit;
}
private static int GetRoundOfDigit(int roundofDigit)
{
try
{
if (roundofDigit > 4 || roundofDigit < 0)
{
roundofDigit = -1;
throw new ServiceException("Round of digit not greater 4 digit. Location: "
+ "logic-Configuration; Node:Root, Child-Node:RoundOfDegit, Value:" + roundofDigit.ToString());
}
}
catch (Exception ex)
{
throw new ServiceException(ex.InnerException.Message);
}
return roundofDigit;
}
public static double GetFractinalOfMonth(DateTime dDate)
{
double WorkDays;
double TotalDays;
double nFraction = 1;
WorkDays = Global.DateFunctions.DateDiff("d", dDate,
GlobalFunctions.LastDateOfMonth(dDate)) + 1;
// bool isYearly = ConfigurationManager.GetBoolValue("root", "fractionalcalculationyearly", EnumConfigurationType.Logic);
enumfractionCalculatinType ntype = getFractionateCalType();
switch (ntype)
{
case enumfractionCalculatinType.Monthly:
TotalDays = Global.DateFunctions.DateDiff("d",
GlobalFunctions.FirstDateOfMonth(dDate), GlobalFunctions.LastDateOfMonth(dDate)) + 1;
nFraction = (WorkDays / TotalDays);
break;
case enumfractionCalculatinType.Yearly:
double yearlyFraction = 0.0328767123; // which mean 12/365
if (dDate.Day == 1) // if date is first of month, fractionate should be 1
nFraction = 1;
else
nFraction = yearlyFraction * WorkDays;
if (nFraction > 1) nFraction = 1; // monthly fraction can't greater 1,
break;
case enumfractionCalculatinType.ThirtyDaysMonth:
if (dDate == LastDateOfMonth(dDate))
return 1;
else
{
WorkDays = Global.DateFunctions.DateDiff("d", dDate,
GlobalFunctions.LastDateOfMonth(dDate)) + 1;
int tempDaya = Global.DateFunctions.DateDiff("d", FirstDateOfMonth(dDate),
GlobalFunctions.LastDateOfMonth(dDate)) + 1;
if (tempDaya == 31) WorkDays = WorkDays - 1;
else if (tempDaya < 30)
if (tempDaya == 28) WorkDays = WorkDays + 2;
else WorkDays = WorkDays + 1;
TotalDays = 30;
// TotalDays = Ease.CoreV35.Utility.Global.DateFunctions.DateDiff("d",
// GlobalFunctions.FirstDateOfMonth(dDate), GlobalFunctions.LastDateOfMonth(dDate));
nFraction = (WorkDays / TotalDays);
}
break;
case enumfractionCalculatinType.ThirtyDaysMonthActual:
if (dDate == LastDateOfMonth(dDate))
return 1;
else
{
WorkDays = Global.DateFunctions.DateDiff("d", dDate,
GlobalFunctions.LastDateOfMonth(dDate)) + 1;
int tempDaya = Global.DateFunctions.DateDiff("d", FirstDateOfMonth(dDate),
GlobalFunctions.LastDateOfMonth(dDate)) + 1;
//if (tempDaya == 31) WorkDays = WorkDays - 1;
//else if (tempDaya < 30)
// if (tempDaya == 28) WorkDays = WorkDays + 2;
// else WorkDays = WorkDays + 1;
TotalDays = 30;
// TotalDays = Ease.CoreV35.Utility.Global.DateFunctions.DateDiff("d",
// GlobalFunctions.FirstDateOfMonth(dDate), GlobalFunctions.LastDateOfMonth(dDate));
nFraction = (WorkDays / TotalDays);
}
break;
default:
break;
}
return nFraction;
}
public static double GetFractinalOfTillDate(DateTime dDate)
{
double WorkDays;
double TotalDays;
double nFraction = 1;
WorkDays = Global.DateFunctions.DateDiff("d",
GlobalFunctions.FirstDateOfMonth(dDate), dDate) + 1;
enumfractionCalculatinType ntype = getFractionateCalType();
switch (ntype)
{
case enumfractionCalculatinType.Monthly:
TotalDays = Global.DateFunctions.DateDiff("d",
GlobalFunctions.FirstDateOfMonth(dDate), GlobalFunctions.LastDateOfMonth(dDate)) + 1;
nFraction = (WorkDays / TotalDays);
break;
case enumfractionCalculatinType.Yearly:
double yearlyFraction = 0.0328767123; // which mean 12/365
if (WorkDays == dDate.Day)
nFraction = 1;
else
nFraction = yearlyFraction * WorkDays;
break;
case enumfractionCalculatinType.ThirtyDaysMonth:
if (dDate == FirstDateOfMonth(dDate))
return 1;
else
{
WorkDays = Global.DateFunctions.DateDiff("d",
GlobalFunctions.FirstDateOfMonth(dDate), dDate) + 1;
int tempDaya = Global.DateFunctions.DateDiff("d", FirstDateOfMonth(dDate),
GlobalFunctions.LastDateOfMonth(dDate)) + 1;
if (tempDaya == 31) WorkDays = WorkDays - 1;
else if (tempDaya < 30)
if (tempDaya == 28) WorkDays = WorkDays + 2;
else WorkDays = WorkDays + 1;
TotalDays = 30;
// TotalDays = Ease.CoreV35.Utility.Global.DateFunctions.DateDiff("d",
// GlobalFunctions.FirstDateOfMonth(dDate), GlobalFunctions.LastDateOfMonth(dDate));
nFraction = (WorkDays / TotalDays);
}
break;
case enumfractionCalculatinType.ThirtyDaysMonthActual:
if (dDate == FirstDateOfMonth(dDate))
return 1;
else
{
WorkDays = Global.DateFunctions.DateDiff("d",
GlobalFunctions.FirstDateOfMonth(dDate), dDate) + 1;
int tempDaya = Global.DateFunctions.DateDiff("d", FirstDateOfMonth(dDate),
GlobalFunctions.LastDateOfMonth(dDate)) + 1;
//if (tempDaya == 31) WorkDays = WorkDays - 1;
//else if (tempDaya < 30)
// if (tempDaya == 28) WorkDays = WorkDays + 2;
// else WorkDays = WorkDays + 1;
TotalDays = 30;
// TotalDays = Ease.CoreV35.Utility.Global.DateFunctions.DateDiff("d",
// GlobalFunctions.FirstDateOfMonth(dDate), GlobalFunctions.LastDateOfMonth(dDate));
nFraction = (WorkDays / TotalDays);
}
break;
default:
break;
}
return nFraction;
}
//public static DateTime GetYearEnd()
//{
// object yearEndDate = null;
// try
// {
// yearEndDate = Service.GetYearEndDate();
// }
// catch (ServiceException e)
// {
// throw new ServiceException(e.Message, e);
// }
// return Convert.ToDateTime(yearEndDate);
//}
public static DateTime FirstDateOfMonth(DateTime date)
{
return Global.DateFunctions.FirstDateOfMonth(date);
}
public static string GetShortAttnType(EnumAttendanceType attnType,
ref int presentDays, ref int absentDays, ref int lateDays,
ref int leaveDays, ref int weeklyHolidays, ref int osdDays,
ref int festivalHolidays)
{
string type = string.Empty;
switch (attnType)
{
case EnumAttendanceType.Absent:
type = "AB";
absentDays++;
break;
case EnumAttendanceType.Delay:
type = "LP";
lateDays++;
break;
case EnumAttendanceType.Holiday:
type = "FH";
festivalHolidays++;
break;
case EnumAttendanceType.Late:
type = "LP";
lateDays++;
break;
case EnumAttendanceType.Leave:
type = "Lv";
leaveDays++;
break;
case EnumAttendanceType.Present:
type = "PR";
presentDays++;
break;
case EnumAttendanceType.OutSideDuty:
type = "OD";
osdDays++;
break;
case EnumAttendanceType.Early:
type = "E";
break;
case EnumAttendanceType.WeeklyHoliday:
type = "WD";
weeklyHolidays++;
break;
}
return type;
}
public static string GetLeaveType(int? ReferenceID, List<Leave> _leaves)
{
string leaveType = "Lv";
Leave leave = null;
if (ReferenceID != 0)
{
leave = new Leave();
leave = _leaves.Where(o => o.ID == ReferenceID).FirstOrDefault();
if (leave != null)
{
leaveType = leave.Code;
}
}
return leaveType;
}
//return Total Hour and Minutes In string Format(Hour.Minutes)
public static string GetHourMinutes(List<String> hours)
{
string HoursMinutes = string.Empty;
double hour = 0;
double minutes = 0;
foreach (String hr in hours)
{
//string[] x = hr.ToString("f").Split('.');
//string xx = hr.ToString();
if (hr.Contains(":"))
{
hour = hour + Convert.ToDouble(hr.Split(':')[0]);
if (hr.Split('.').Length > 1)
minutes = minutes + Convert.ToDouble(hr.Split(':')[1]);
}
else
{
hour = hour + Convert.ToDouble(hr.Split('.')[0]);
if(hr.Split('.').Length >1)
minutes = minutes + Convert.ToDouble(hr.Split('.')[1]);
}
}
if (minutes > 60)
{
//int hr = Convert.ToInt32(minutes) / 60;
long hr = Convert.ToInt64(minutes) / 60;
hour = hour + Convert.ToDouble(hr);
minutes = minutes % 60;
}
return HoursMinutes = Convert.ToString(hour) + ":" + minutes.ToString("00");
}
public static string TakaFormat(double _Number)
{
//Written by Shaila
string _sign = "";
string _NumStr;
string _TakaFormat;
if (_Number < 0)
{
_sign = "-";
_Number = (-_Number);
}
_NumStr = _Number.ToString("0.00");
_TakaFormat = Right(_NumStr, 6);
if ((_NumStr.Length) <= 6)
{
_NumStr = "";
}
else
_NumStr = Left(_NumStr, _NumStr.Length - 6);
if (_NumStr == "")
{
_TakaFormat = _sign + _TakaFormat;
return _TakaFormat;
}
int _CommaCount = 1;
int _DigitCount = 0;
do
{
if (_CommaCount % 3 == 0)
{
_DigitCount = 3;
}
else
_DigitCount = 2;
_TakaFormat = Right(_NumStr, _DigitCount) + "," + _TakaFormat;
if (_NumStr.Length <= _DigitCount)
{
_NumStr = "";
}
else
_NumStr = Left(_NumStr, _NumStr.Length - _DigitCount);
_CommaCount = _CommaCount + 1;
} //end do
while (_NumStr != "");
_TakaFormat = _sign + _TakaFormat;
return _TakaFormat;
} //End of TakaFormat
public static string Right(string _Str, int _Len)
{
//Written by Shaila
string sStr;
if (_Len < _Str.Length)
{
sStr = _Str.Substring(_Str.Length - _Len, _Len);
}
else
sStr = _Str;
return sStr;
} //EndofRight
public static string Left(string _Str, int _Len)
{
//Written by Shaila
string sStr;
if (_Len < _Str.Length)
{
sStr = _Str.Substring(0, _Len);
}
else
sStr = _Str;
return sStr;
} //EndofLeft
public static string GetHourMinutes(double hours)
{
var ts = TimeSpan.FromHours(hours);
return string.Format("{0}:{1}", ts.Hours, ts.Minutes);
}
public static DateTime LastPayProcessDate(DateTime nextPayProcessDate)
{
return Global.DateFunctions.LastDateOfMonth(nextPayProcessDate.AddMonths(-1));
}
public static DateTime LastDateOfMonth(DateTime date)
{
return Global.DateFunctions.LastDateOfMonth(date);
}
public static String NumWordsWrapper(double value)
{
string words = "";
double intPart;
double decPart = 0;
if (value == 0)
return "zero";
try
{
string[] splitter = value.ToString().Split('.');
intPart = double.Parse(splitter[0]);
if (splitter.Length > 1)
{
decPart = double.Parse(splitter[1]);
}
}
catch
{
intPart = value;
}
words = NumWords(Convert.ToInt32(intPart));
if (decPart > 0)
{
if (words != "")
words += " and ";
int counter = decPart.ToString().Length;
switch (counter)
{
case 1: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// tenths
case 2: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// hundredths
case 3: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// thousandths
case 4: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// ten-thousandths
case 5: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// hundred-thousandths
case 6: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// millionths
case 7: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// ten-millionths
}
}
return words + " Taka Only";
}
private static string NumWords(int Num)
{
#region Old Code
//string[] numbersArr = new string[] { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
//string[] tensArr = new string[] { "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninty" };
//string[] suffixesArr = new string[] { "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion", "nonillion", "decillion", "undecillion", "duodecillion", "tredecillion", "Quattuordecillion", "Quindecillion", "Sexdecillion", "Septdecillion", "Octodecillion", "Novemdecillion", "Vigintillion" };
//string words = "";
//bool tens = false;
//if (n < 0)
//{
// words += "negative ";
// n *= -1;
//}
//int power = (suffixesArr.Length + 1) * 3;
//while (power > 3)
//{
// double pow = Math.Pow(10, power);
// if (n > pow)
// {
// if (n % Math.Pow(10, power) > 0)
// {
// words += NumWords(Math.Floor(n / pow)) + " " + suffixesArr[(power / 3) - 1] + " and ";
// }
// else if (n % pow > 0)
// {
// words += NumWords(Math.Floor(n / pow)) + " " + suffixesArr[(power / 3) - 1];
// }
// n %= pow;
// }
// power -= 3;
//}
//if (n >= 1000)
//{
// if (n % 1000 > 0) words += NumWords(Math.Floor(n / 1000)) + " thousand and ";
// else words += NumWords(Math.Floor(n / 1000)) + " thousand";
// n %= 1000;
//}
//if (0 <= n && n <= 999)
//{
// if ((int)n / 100 > 0)
// {
// words += NumWords(Math.Floor(n / 100)) + " hundred";
// n %= 100;
// }
// if ((int)n / 10 > 1)
// {
// if (words != "")
// words += " ";
// words += tensArr[(int)n / 10 - 2];
// tens = true;
// n %= 10;
// }
// if (n < 20)
// {
// if (words != "" && tens == false)
// words += " ";
// words += (tens ? "-" + numbersArr[(int)n - 1] : numbersArr[(int)n - 1]);
// n -= Math.Floor(n);
// }
//}
//return words;
#endregion
string[] Below20 = { "", "One ", "Two ", "Three ", "Four ",
"Five ", "Six " , "Seven ", "Eight ", "Nine ", "Ten ", "Eleven ",
"Twelve " , "Thirteen ", "Fourteen ","Fifteen ",
"Sixteen " , "Seventeen ","Eighteen " , "Nineteen " };
string[] Below100 = { "", "", "Twenty ", "Thirty ",
"Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety " };
string InWords = "";
if (Num >= 1 && Num < 20)
InWords += Below20[Num];
if (Num >= 20 && Num <= 99)
InWords += Below100[Num / 10] + Below20[Num % 10];
if (Num >= 100 && Num <= 999)
InWords += NumWords(Num / 100) + " Hundred " + NumWords(Num % 100);
if (Num >= 1000 && Num <= 99999)
InWords += NumWords(Num / 1000) + " Thousand " + NumWords(Num % 1000);
if (Num >= 100000 && Num <= 9999999)
InWords += NumWords(Num / 100000) + " Lac " + NumWords(Num % 100000);
if (Num >= 10000000)
InWords += NumWords(Num / 10000000) + " Crore " + NumWords(Num % 10000000);
return InWords;
}
}
#region Interface IGlobalFunctionService
public interface IGlobalFunctionService
{
DateTime GetOperationDate();
//DateTime GetServerDate();
//DataTable AvailableUserObject();
//DateTime GetCurrentDate();
//DateTime GetYearEndDate();
DefaultConfigurationValue RefreshServerValue();
}
#endregion
}