using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Globalization;
using System.IO;
using System.Text.RegularExpressions;
using _0_Framework.Infrastructure;
using Microsoft.Extensions.WebEncoders.Testing;
using PersianTools.Core;
using static System.Net.Mime.MediaTypeNames;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using Image = System.Drawing.Image;
using Newtonsoft.Json;
using Newtonsoft.Json.Bson;
using Microsoft.Extensions.Logging;
using System.IO.Compression;
using System.Linq;
using _0_Framework.Domain.CustomizeCheckoutShared.Base;
using System.ComponentModel.DataAnnotations;
namespace _0_Framework.Application;
public static class Tools
{
public static string[] MonthNames =
{"فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"};
public static string[] DayNames = { "شنبه", "یکشنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه" };
public static string[] DayNamesG = { "یکشنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه", "شنبه" };
///
/// نام ستون از جدول مزد سنوات طبثه بندی را میگیرد و دیتای داخل آن ستون را برمیگرداند
///
///
///
///
public static double? GetDynamicDouble(object obj, string propertyName)
{
if (obj == null || string.IsNullOrWhiteSpace(propertyName))
return null;
var propertyInfo = obj.GetType().GetProperty(propertyName);
if (propertyInfo == null)
return null;
var value = propertyInfo.GetValue(obj);
if (value == null)
return null;
try
{
return Convert.ToDouble(value);
}
catch
{
return null;
}
}
public static bool IsMobileValid(this string mobileNo)
{
if (mobileNo.Length < 11)
return false;
return Regex.IsMatch(mobileNo, "^((09))(\\d{9})$");
}
///
/// متد رند کننده مبلغ
/// استفاده شده در بیمه
///
///
///
public static double GetRoundDoubleValue(double value)
{
string strValue = value.ToString();
if (strValue.IndexOf('.') > -1)
{
string a = strValue.Substring(strValue.IndexOf('.') + 1, 1);
if (int.Parse(a) > 5)
{
return (Math.Round(value, MidpointRounding.ToPositiveInfinity));
}
else
{
return (Math.Round(value, MidpointRounding.ToNegativeInfinity));
}
}
return value;
}
///
/// تاریخ شروع و تعداد ماه را میگیرد و تاریخ پایان قراردا را بر میگرداند
///
///
///
///
public static (DateTime endDateGr, string endDateFa) FindEndOfContract(string startDate, string monthPlus)
{
int startYear = Convert.ToInt32(startDate.Substring(0, 4));
int startMonth = Convert.ToInt32(startDate.Substring(5, 2));
int startDay = Convert.ToInt32(startDate.Substring(8, 2));
var start = new PersianDateTime(startYear, startMonth, startDay);
var end = (start.AddMonths(Convert.ToInt32(monthPlus))).AddDays(-1);
return ($"{end}".ToGeorgianDateTime(), $"{end}");
}
///
/// دریافت روزهای کارکرد پرسنل در لیست بیمه ماه مشخص شده
/// با کمک شروع بکار و ترک کار
///
///
///
///
///
///
///
public static (int countWorkingDays, DateTime startWork, DateTime endWork, bool hasStartWorkInMonth, bool hasLeftWorkInMonth) GetEmployeeInsuranceWorkingDays(DateTime startWork, DateTime? leftWork, DateTime startDate,
DateTime endDate, long employeeId)
{
DateTime start = startDate;
DateTime end = endDate;
bool startWorkInMonth = false;
bool endWorkInMonth = false;
//اگر شروع بکار پرسنل در ماه مشخص شده لیست بیمه بود
if (startWork >= startDate)
{
start = startWork;
startWorkInMonth = true;
}
if (leftWork == null)
leftWork = DateTime.MinValue;
//اگر ترک کار پرسنل در ماه مشخص شده لیست بیمه بود
if (leftWork != DateTime.MinValue && leftWork.Value < endDate)
{
end = leftWork.Value;
endWorkInMonth = true;
}
int countDays = (int)(end - start).TotalDays + 1;
//روزهای کارکرد پرسنل با آی دی های زیر دستی تعریف شد
switch (employeeId)
{
//case 3812://ثابت- کسری حاجی پور
// countWorkingDays = 15;
// break;
case 40463://ثابت
countDays = 10;
break;
case 40469://ثابت
countDays = 7;
break;
//case 9950://ثابت
// countDays = 15;
//break;
case 9640://ثابت
countDays = 15;
break;
case 40998://ثابت
countDays = 15;
break;
case 6219://ثابت
countDays = 15;
break;
//case 7897://ثابت
// countWorkingDays = 15;
}
return (countDays, start, end, startWorkInMonth, endWorkInMonth);
}
///
/// محاسبه سن
///
///
///
///
public static (int yearCount, int monthCount, int dayCount) GetAge(DateTime startDate, DateTime endDate)
{
var startFa = startDate.ToFarsi();
int startYear = Convert.ToInt32(startFa.Substring(0, 4));
int startMonth = Convert.ToInt32(startFa.Substring(5, 2));
int startDay = Convert.ToInt32(startFa.Substring(8, 2));
var start = new PersianDateTime(startYear, startMonth, startDay);
var endFa = endDate.ToFarsi();
int endYear = Convert.ToInt32(endFa.Substring(0, 4));
int endMonth = Convert.ToInt32(endFa.Substring(5, 2));
int endDay = Convert.ToInt32(endFa.Substring(8, 2));
var end = new PersianDateTime(endYear, endMonth, endDay);
int months = 0;
int days = 0;
int years = 0;
var firstYearCounter = start.AddYears(1);
//اگر سنش هنوز به یک سال نرسیده بود
if (firstYearCounter > end)
{
start = start.AddYears(-1);
var endMonthCounter = new PersianDateTime(end.Year, end.Month, start.Day);
for (var monthCounter = start; monthCounter <= end; monthCounter = monthCounter.AddMonths(1))
{
if (monthCounter <= end)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("month : " + monthCounter);
months++;
}
if (monthCounter.Month == end.Month)
{
var firstDayCounter = monthCounter.AddDays(1);
for (var dayCounter = firstDayCounter; dayCounter <= end; dayCounter = dayCounter.AddDays(1))
{
if (dayCounter <= end)
{
days++;
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("day : " + dayCounter);
}
}
months = months > 0 ? months - 1 : 0;
break;
}
}
}
else
{
for (var yearCouner = firstYearCounter; yearCouner <= end; yearCouner = yearCouner.AddYears(1))
{
if (yearCouner.Year <= end.Year)
{
years++;
Console.ForegroundColor = ConsoleColor.DarkMagenta;
Console.WriteLine("year : " + yearCouner);
}
if (yearCouner.Year == end.Year)
{
var endMonthCounter = new PersianDateTime(end.Year, end.Month, (yearCouner.Day > end.Day ? end.Day : yearCouner.Day));
if (yearCouner.Day <= end.Day)
{
endMonthCounter = end;
}
for (var monthCounter = yearCouner; monthCounter <= endMonthCounter; monthCounter = monthCounter.AddMonths(1))
{
if (monthCounter < end)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("month : " + monthCounter);
months++;
}
if (monthCounter.Month == end.Month)
{
var firstDayCounter = monthCounter.AddDays(1);
if (yearCouner.Day > end.Day)
{
firstDayCounter = firstDayCounter.AddMonths(-1);
}
for (var dayCounter = firstDayCounter; dayCounter <= end; dayCounter = dayCounter.AddDays(1))
{
if (dayCounter <= end)
{
days++;
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("day : " + dayCounter);
}
}
months = months > 0 ? months - 1 : 0;
break;
}
}
}
}
}
Console.ResetColor();
Console.WriteLine($"old: [{years} year] ، [{months} month] ، [{days} day]");
return (years, months, days);
}
public static string ToFarsi(this DateTime? date)
{
try
{
if (date != null) return date.Value.ToFarsi();
}
catch (Exception)
{
return "";
}
return "";
}
public static string ToFarsi(this DateTime date)
{
if (date == new DateTime()) return "";
var pc = new PersianCalendar();
return $"{pc.GetYear(date)}/{pc.GetMonth(date):00}/{pc.GetDayOfMonth(date):00}";
}
public static string ToFarsiMonth(this DateTime date)
{
if (date == new DateTime()) return "";
var pc = new PersianCalendar();
return $"{pc.GetMonth(date)}";
}
///
/// این متد تاریخ میلادی را گرفته و ماه 31 یا 30 روزه را تشخیص میدهد، ماه اسفند 30 روزه برمگیردد
///
///
///
public static int CountMonthDays(this DateTime date)
{
if (date == new DateTime()) return 0;
var pc = new PersianCalendar();
return pc.GetMonth(date) switch
{
1 => 31,
2 => 31,
3 => 31,
4 => 31,
5 => 31,
6 => 31,
7 => 30,
8 => 30,
9 => 30,
10 => 30,
11 => 30,
12 => 30,
_ => 0,
};
}
public static string ToFarsiYear2(this DateTime date)
{
if (date == new DateTime()) return "";
var pc = new PersianCalendar();
var year = pc.GetYear(date).ToString();
string y1 = string.Empty;
string y2 = string.Empty;
string sum = string.Empty;
for (int i = 0; i < year.Length; i++)
{
if (year[i] == 2)
{
y1 += year[i];
}
if (year[i] == 3)
{
y2 += year[i];
}
}
sum = y1 + y2;
return sum;
}
public static string ToFarsiYear(this DateTime date)
{
if (date == new DateTime()) return "";
var pc = new PersianCalendar();
return $"{pc.GetYear(date)}";
}
public static string ToDiscountFormat(this DateTime date)
{
if (date == new DateTime()) return "";
return $"{date.Year}/{date.Month}/{date.Day}";
}
public static string GetTime(this DateTime date)
{
return $"_{date.Hour:00}_{date.Minute:00}_{date.Second:00}";
}
public static string ToFarsiFull(this DateTime date)
{
var pc = new PersianCalendar();
return
$"{pc.GetYear(date)}/{pc.GetMonth(date):00}/{pc.GetDayOfMonth(date):00} {date.Hour:00}:{date.Minute:00}:{date.Second:00}";
}
private static readonly string[] Pn = { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };
private static readonly string[] En = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
public static string ToEnglishNumber(this string strNum)
{
var cash = strNum;
for (var i = 0; i < 10; i++)
cash = cash.Replace(Pn[i], En[i]);
return cash;
}
public static string ToPersianNumber(this int intNum)
{
var chash = intNum.ToString();
for (var i = 0; i < 10; i++)
chash = chash.Replace(En[i], Pn[i]);
return chash;
}
public static DateTime? FromFarsiDate(this string InDate)
{
if (string.IsNullOrEmpty(InDate))
return null;
var spited = InDate.Split('/');
if (spited.Length < 3)
return null;
if (!int.TryParse(spited[0].ToEnglishNumber(), out var year))
return null;
if (!int.TryParse(spited[1].ToEnglishNumber(), out var month))
return null;
if (!int.TryParse(spited[2].ToEnglishNumber(), out var day))
return null;
var c = new PersianCalendar();
return c.ToDateTime(year, month, day, 0, 0, 0, 0);
}
public static DateTime ToGeorgianDateTime(this string persianDate)
{
try
{
persianDate = persianDate.ToEnglishNumber();
var year = Convert.ToInt32(persianDate.Substring(0, 4));
var month = Convert.ToInt32(persianDate.Substring(5, 2));
var day = Convert.ToInt32(persianDate.Substring(8, 2));
return new DateTime(year, month, day, new PersianCalendar());
}
catch (Exception e)
{
return new DateTime(3000, 12, 20, new PersianCalendar());
}
}
public static DateTime ToGeorgian(this string persianDate)
{
persianDate = persianDate.ToEnglishNumber();
var year = Convert.ToInt32(persianDate.Substring(0, 4));
var month = 01;
var day = 01;
return new DateTime(year, month, day, new PersianCalendar());
}
public static string ToMoney(this double myMoney)
{
return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir"));
}
///
/// اگر مبلغ صفر باشد خط تیره برمیگرداند
///
///
///
public static string ToMoneyCheckZero(this double myMoney)
{
if (myMoney == 0)
return "-";
return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir"));
}
///
/// اگر مبلغ صفر یا نال باشد خط تیره برمیگرداند
///
///
///
public static string ToMoneyCheckZeroNullable(this double? myMoney)
{
if (myMoney == 0 || myMoney == null)
return "-";
return myMoney?.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir"));
}
public static string ToMoneyNullable(this double? myMoney)
{
return myMoney?.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir"));
}
public static string ToDoubleMoney(this string myMoney)
{
string bb = string.Empty;
for (int x = 0; x < myMoney.Length; x++)
{
if (char.IsDigit(myMoney[x]))
bb += myMoney[x];
}
if (bb.Length > 0)
{
return bb;
}
else
{
return "0";
}
}
public static double MoneyToDouble(this string myMoney)
{
string bb = string.Empty;
bool isNegative = false;
try
{
if (!string.IsNullOrWhiteSpace(myMoney))
{
for (int x = 0; x < myMoney.Length; x++)
{
if (char.IsDigit(myMoney[x]))
{
bb += myMoney[x];
}
else if (myMoney[x] == '-' && bb.Length == 0)
{
// اگر علامت منفی قبل از اولین عدد آمد، در نظر بگیر
isNegative = true;
}
}
if (bb.Length > 0)
{
double res = double.Parse(bb);
return isNegative ? -res : res;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
catch (Exception)
{
return 0;
}
}
public static string ToFileName(this DateTime date)
{
return $"{date.Year:0000}-{date.Month:00}-{date.Day:00}-{date.Hour:00}-{date.Minute:00}-{date.Second:00}";
}
public static string FindeEndOfMonth(this string date)
{
string y2 = string.Empty;
var year = Convert.ToInt32(date.Substring(0, 4));
var month = Convert.ToInt32(date.Substring(5, 2));
var YearD = date.Substring(0, 4);
var MonthD = date.Substring(5, 2);
if (month <= 6)
{
y2 = $"{YearD}/{MonthD}/31";
}
else if (month > 6 && month < 12)
{
y2 = $"{YearD}/{MonthD}/30";
}
else if (month == 12)
{
switch (year)
{
case 1346:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1350:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1354:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1358:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1362:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1366:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1370:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1375:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1379:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1383:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1387:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1391:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1395:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1399:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1403:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1408:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1412:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1416:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1420:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1424:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1428:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1432:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1436:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1441:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1445:
y2 = $"{YearD}/{MonthD}/30";
break;
default:
y2 = $"{YearD}/{MonthD}/29";
break;
}
}
return y2;
}
///
/// تاریخ شمسی میگیرد و پایان ماه را به میلادی برمیگرداند
///
///
///
public static DateTime FindeEndOfMonthReturnGr(this string date)
{
string y2 = string.Empty;
var year = Convert.ToInt32(date.Substring(0, 4));
var month = Convert.ToInt32(date.Substring(5, 2));
var YearD = date.Substring(0, 4);
var MonthD = date.Substring(5, 2);
if (month <= 6)
{
y2 = $"{YearD}/{MonthD}/31";
}
else if (month > 6 && month < 12)
{
y2 = $"{YearD}/{MonthD}/30";
}
else if (month == 12)
{
switch (year)
{
case 1346:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1350:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1354:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1358:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1362:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1366:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1370:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1375:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1379:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1383:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1387:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1391:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1395:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1399:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1403:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1408:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1412:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1416:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1420:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1424:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1428:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1432:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1436:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1441:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1445:
y2 = $"{YearD}/{MonthD}/30";
break;
default:
y2 = $"{YearD}/{MonthD}/29";
break;
}
}
return y2.ToGeorgianDateTime();
}
///
/// تعداد روزهای سال را برمیگرداند
/// اگر کبیسهد بود سال 366 روزه برمیگرداند
/// اگر کبیسهد نبود سال 365 روزه برمیگرداند
///
///
///
public static int YearTotalDays(this string date)
{
int y2 = 366;
var year = Convert.ToInt32(date.Substring(0, 4));
switch (year)
{
case 1346:
y2 = 367;
break;
case 1350:
y2 = 367;
break;
case 1354:
y2 = 367;
break;
case 1358:
y2 = 367;
break;
case 1362:
y2 = 367;
break;
case 1366:
y2 = 367;
break;
case 1370:
y2 = 367;
break;
case 1375:
y2 = 367;
break;
case 1379:
y2 = 367;
break;
case 1383:
y2 = 367;
break;
case 1387:
y2 = 367;
break;
case 1391:
y2 = 367;
break;
case 1395:
y2 = 367;
break;
case 1399:
y2 = 367;
break;
case 1403:
y2 = 367;
break;
case 1408:
y2 = 367;
break;
case 1412:
y2 = 367;
break;
case 1416:
y2 = 367;
break;
case 1420:
y2 = 367;
break;
case 1424:
y2 = 367;
break;
case 1428:
y2 = 367;
break;
case 1432:
y2 = 367;
break;
case 1436:
y2 = 367;
break;
case 1441:
y2 = 367;
break;
case 1445:
y2 = 367;
break;
default:
y2 = 366;
break;
}
return y2;
}
public static int BetweenDateGeorgianToDay(DateTime dateStart, DateTime? dateEnd)
{
DateTime end = DateTime.Now;
if (dateEnd != null)
{
end = (DateTime)dateEnd;
}
return (int)(end - dateStart).TotalDays;
}
public static string GetMonthByNumber(this string value)
{
if (value == "01")
{
return "فروردین";
}
else if (value == "02")
{
return "اردیبهشت";
}
else if (value == "03")
{
return "خرداد";
}
else if (value == "04")
{
return "تیر";
}
else if (value == "05")
{
return "مرداد";
}
else if (value == "06")
{
return "شهریور";
}
else if (value == "07")
{
return "مهر";
}
else if (value == "08")
{
return "آبان";
}
else if (value == "09")
{
return "آذر";
}
else if (value == "10")
{
return "دی";
}
else if (value == "11")
{
return "بهمن";
}
else
return "اسفند";
}
public static string RestTimeSplit(this string restTime)
{
string result = string.Empty;
if (restTime?.Length >= 2)
{
result = restTime.Substring(0, 2);
if (result == "00")
result = "0";
}
else
{
result = "0";
}
return result;
}
public static string NationalCodeValid(this string nationalCode)
{
try
{
char[] chArray = nationalCode.ToCharArray();
int[] numArray = new int[chArray.Length];
var cunt = chArray.Length;
for (int i = 0; i < chArray.Length; i++)
{
numArray[i] = (int)char.GetNumericValue(chArray[i]);
}
int num2 = numArray[9];
switch (nationalCode)
{
case "0000000000":
case "1111111111":
case "2222222222":
case "3333333333":
case "4444444444":
case "5555555555":
case "6666666666":
case "7777777777":
case "8888888888":
case "9999999999":
return "incorrect";
}
int num3 =
((((((((numArray[0] * 10) + (numArray[1] * 9)) + (numArray[2] * 8)) + (numArray[3] * 7)) +
(numArray[4] * 6)) + (numArray[5] * 5)) + (numArray[6] * 4)) + (numArray[7] * 3)) +
(numArray[8] * 2);
int num4 = num3 - ((num3 / 11) * 11);
if ((((num4 == 0) && (num2 == num4)) || ((num4 == 1) && (num2 == 1))) ||
((num4 > 1) && (num2 == Math.Abs((int)(num4 - 11)))) && cunt <= 10)
{
return "valid";
}
else
{
return "invalid";
}
}
catch (Exception)
{
return "lessThan10";
}
}
public static string RestTimeMinSplit(this string restTime)
{
string result = string.Empty;
if (restTime?.Length > 2)
{
result = restTime.Substring(3, 2);
if (result == "00")
result = "0";
}
else
{
result = "0";
}
return result;
}
public static List ExtractNumbers(this string input)
{
List numbers = new List();
string pattern = @"\d+"; // Matches one or more digits
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
if (long.TryParse(match.Value, out long number))
{
numbers.Add(number);
}
}
return numbers;
}
public static int ExtractIntNumbers(this string input)
{
int numbers = 0;
string num = "";
string pattern = @"\d+"; // Matches one or more digits
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
if (int.TryParse(match.Value, out int number))
{
num += $"{number}";
}
}
try
{
numbers = Convert.ToInt32(num);
}
catch (Exception e)
{
return 0;
}
return numbers;
}
public static string ToFarsiMonthByNumber(this string value)
{
if (value == "") return "";
string result = "";
switch (value)
{
case "1":
case "01":
result = "فروردین";
break;
case "2":
case "02":
result = "اردیبهشت";
break;
case "3":
case "03":
result = "خرداد";
break;
case "4":
case "04":
result = "تیر";
break;
case "5":
case "05":
result = "مرداد";
break;
case "6":
case "06":
result = "شهریور";
break;
case "7":
case "07":
result = "مهر";
break;
case "8":
case "08":
result = "آبان";
break;
case "9":
case "09":
result = "آذر";
break;
case "10":
result = "دی";
break;
case "11":
result = "بهمن";
break;
case "12":
result = "اسفند";
break;
default:
result = "";
break;
}
return result;
}
public static string ToFarsiMonthByIntNumber(this int value)
{
if (value == 0) return "";
string result = "";
switch (value)
{
case 1:
result = "فروردین";
break;
case 2:
result = "اردیبهشت";
break;
case 3:
result = "خرداد";
break;
case 4:
result = "تیر";
break;
case 5:
result = "مرداد";
break;
case 6:
result = "شهریور";
break;
case 7:
result = "مهر";
break;
case 8:
result = "آبان";
break;
case 9:
result = "آذر";
break;
case 10:
result = "دی";
break;
case 11:
result = "بهمن";
break;
case 12:
result = "اسفند";
break;
default:
result = "";
break;
}
return result;
}
#region Vafa
public static string ToFarsiWithoutYear(this DateTime date)
{
if (date == new DateTime()) return "";
var pc = new PersianCalendar();
return $"{pc.GetMonth(date):00}/{pc.GetDayOfMonth(date):00}";
}
public static int ToMonthByStringValue(this string value)
{
if (value == "") return 0;
int result = 0;
switch (value)
{
case "فروردین":
result = 1;
break;
case "اردیبهشت":
result = 2;
break;
case "خرداد":
result = 3;
break;
case "تیر":
result = 4;
break;
case "مرداد":
result = 5;
break;
case "شهریور":
result = 6;
break;
case "مهر":
result = 7;
break;
case "آبان":
result = 8;
break;
case "آذر":
result = 9;
break;
case "دی":
result = 10;
break;
case "بهمن":
result = 11;
break;
case "اسفند":
result = 12;
break;
default:
result = 0;
break;
}
return result;
}
public static string ColorPercent(this int value)
{
string color = "";
var redDark = "#B91C1C";
var redLight = "#EF4444";
var orangeDark = "#F59E0B";
var orangeLight = "#FBBF24";
var limeDark = "#81CB0F";
var limeLight = "#A3E635";
switch (value)
{
case <= 16:
color = redDark;
break;
case <= 33:
color = redLight;
break;
case <= 49:
color = orangeDark;
break;
case <= 66:
color = orangeLight;
break;
case <= 83:
color = limeLight;
break;
case <= 100:
color = limeDark;
break;
default:
color = "";
break;
}
return color;
}
public static double RoundMoney(this double value)
{
var valueLength = (((int)value).ToString()).Length;
var checkZero = (((int)value).ToString()).Substring(1, 1);
int digitValue = 0;
int digitLentgh = 0;
int d = 0;
if ((int)value == 10499677)
{
Console.WriteLine(90);
}
switch (valueLength)
{
case 6:
digitValue = 5000;
digitLentgh = 100000;
d = 1000;
break;
case 7:
digitValue = 50000;
digitLentgh = 1000000;
d = 10000;
break;
case 8:
digitValue = checkZero == "0" ? 50000 : 500000;
digitLentgh = checkZero == "0" ? 100000 : 10000000;
d = 100000;
break;
}
int result = 0;
int rightDigits = (int)(value % digitLentgh);
//if (rightDigits < digitValue)
//{
// result = (int)(value / d) * d;
//}
//else
//{
// result = (int)(value / d + 1) * d;
//}
result = (int)(value / d + 1) * d;
return result;
}
public static string ToMoneyToman(this double myMoney)
{
myMoney = myMoney / 10;
return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir"));
}
public static PersianDateTime ToPersianDateTime(this DateTime date)
{
var persianDate = date.ToFarsi();
var year = Convert.ToInt32(persianDate.Substring(0, 4));
var month = Convert.ToInt32(persianDate.Substring(5, 2));
var day = Convert.ToInt32(persianDate.Substring(8, 2));
return new PersianDateTime(year, month, day);
}
public static string ResizeImage(string imagePath, int width, int height)
{
using (var srcImage = Image.FromFile(imagePath))
{
var newImage = new Bitmap(width, height);
using (var graphics = Graphics.FromImage(newImage))
{
graphics.CompositingQuality = CompositingQuality.HighSpeed;
graphics.InterpolationMode = InterpolationMode.Bicubic;
graphics.SmoothingMode = SmoothingMode.HighSpeed;
graphics.DrawImage(srcImage, 0, 0, width, height);
}
using (var memoryStream = new MemoryStream())
{
newImage.Save(memoryStream, ImageFormat.Jpeg);
return Convert.ToBase64String(memoryStream.ToArray());
}
}
}
public static PersianDateTime ToFirstDayOfNextMonth(this DateTime date)
{
var pc = new PersianCalendar();
var year = pc.GetYear(date);
var month = pc.GetMonth(date);
if (month == 12)
{
year += 1;
month = 1;
}
else
{
month += 1;
}
return new PersianDateTime(year, month, 1);
}
#endregion
#region Safa
public static string GetContentTypeImage(string extension)
{
if (!extension.StartsWith("."))
{
extension = "." + extension;
}
return extension.ToLower() switch
{
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".gif" => "image/gif",
".bmp" => "image/bmp",
".svg" => "image/svg+xml",
".ico" => "image/x-icon",
_ => "",
};
}
public static string GetContentType(string extension)
{
// Ensure the extension starts with a dot
if (!extension.StartsWith("."))
{
extension = "." + extension;
}
// Use switch expression to return the appropriate content type
return extension.ToLower() switch
{
".txt" => "text/plain",
".htm" => "text/html",
".html" => "text/html",
".css" => "text/css",
".js" => "application/javascript",
".json" => "application/json",
".xml" => "application/xml",
".pdf" => "application/pdf",
".zip" => "application/zip",
".rar" => "application/x-rar-compressed",
".tar" => "application/x-tar",
".mp3" => "audio/mpeg",
".wav" => "audio/wav",
".mp4" => "video/mp4",
".avi" => "video/x-msvideo",
".doc" => "application/msword",
".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
".xls" => "application/vnd.ms-excel",
".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
".ppt" => "application/vnd.ms-powerpoint",
".pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation",
_ => "application/octet-stream",
};
}
#endregion
public static string ConvertToEnglish(this string value)
{
if (string.IsNullOrEmpty(value))
return value;
string EnglishNumbers = "";
for (int i = 0; i < value.Length; i++)
{
if (Char.IsDigit(value[i]))
{
EnglishNumbers += char.GetNumericValue(value, i);
}
else
{
EnglishNumbers += value[i].ToString();
}
}
return EnglishNumbers;
}
public static DateTime ExtractTimeFromDbbackup(this string value)
{
DateTime dateTime = new DateTime();
var parts = value.Split('-');
if (parts.Length >= 4 && parts[1].Length == 4 && parts[2].Length == 2 && parts[3].Length == 2 && parts[4].Length == 2 && parts[5].Length >= 2)
{
var part5 = parts[5].Substring(0, 2);
try
{
PersianCalendar pc = new PersianCalendar();
dateTime = pc.ToDateTime(int.Parse(parts[1]), int.Parse(parts[2]), int.Parse(parts[3]), int.Parse(parts[4]), int.Parse(part5), 0, 0, 0);
}
catch (Exception e)
{
}
}
//var year = value.Substring(10, 4);
//var month = value.Substring(15, 2);
//var day = value.Substring(18, 2);
//var persianDate = year + "/" + month + "/" + day;
//var georgianDate = persianDate.ToGeorgianDateTime();
//var hourString = value.Substring(21, 2);
//int hour = hourString.ExtractIntNumbers();
//var result = new DateTime(georgianDate.Year, georgianDate.Month, georgianDate.Day, hour, 1, 1);
return dateTime;
}
public static DateTime ExtractTimeFromInsurancebackup(this string value)
{
var year = value.Substring(14, 4);
var month = value.Substring(19, 2);
var day = value.Substring(22, 2);
var persianDate = year + "/" + month + "/" + day;
var georgianDate = persianDate.ToGeorgianDateTime();
var hourString = value.Substring(25, 2);
int hour = hourString.ExtractIntNumbers();
var result = new DateTime(georgianDate.Year, georgianDate.Month, georgianDate.Day, hour, 1, 1);
return result;
}
public static string FindeEndOfYear(this string date)
{
var year = Convert.ToInt32(date.Substring(0, 4));
var month = Convert.ToInt32(date.Substring(5, 2));
var day = Convert.ToInt32(date.Substring(8, 2));
var start = new PersianDateTime(year, month, day);
var startAddYear = start.AddMonths(11);
var monthStr = $"{startAddYear.Month}";
if (monthStr.Length < 2)
monthStr = $"0{monthStr}";
var lastMonth = $"{startAddYear.Year}/{monthStr}/01";
var end = lastMonth.FindeEndOfMonth();
return end;
}
public static string CalculateLeaveHoursAndDays(string paidLeaveType, string leaveHourses)
{
string leaveHoursResult = "";
if (paidLeaveType == "ساعتی")
{
var leaveH = TimeSpan.Parse(leaveHourses);
var hours = (int)leaveH.TotalHours;
var minutes = (int)leaveH.TotalMinutes % 60;
if (hours > 0 && minutes > 0)
{
leaveHoursResult = hours + " ساعت و " + minutes + " دقیقه";
}
else if (hours > 0 && minutes == 0)
{
leaveHoursResult = hours + " ساعت";
}
else if (hours == 0 && minutes > 0)
{
leaveHoursResult = minutes + " دقیقه";
}
}
else
{
leaveHoursResult = leaveHourses + " روز";
}
return leaveHoursResult;
}
public static string ComputationOfHoursAndMinutes(double data)
{
int hours = (int)Math.Floor(data);
double remaining = data - hours;
int minutes = (int)(remaining * 60);
string result;
if (minutes == 0)
{
result = hours + " س";
}
else
{
result = hours + " س " + minutes + " د";
}
return result;
}
public static bool CheckValidHm(string input)
{
if (string.IsNullOrWhiteSpace(input))
return true;
string pattern = @"^([2][0-3]|[1][0-9]|[0-9]|[0][0-9])([:][0-5][0-9])$";
var match = Regex.Match(input, pattern);
if (!match.Success)
return false;
return true;
}
///
/// چک میکند که در دو شیفت استاتیک تداخل زمانی وجود دارد یا خیر
/// چک میکند که آیا ساعات وارد شده ولید هستند یا خیر
///
///
///
///
///
///
public static bool InterferenceTime(string start1, string end1, string start2, string end2)
{
if (!CheckValidHm(start1))
return true;
if (!CheckValidHm(end1))
return true;
if (!CheckValidHm(start2))
return true;
if (!CheckValidHm(end2))
return true;
//اگه دو شیفت نبود
if (string.IsNullOrWhiteSpace(start1) || string.IsNullOrWhiteSpace(start2))
return false;
try
{
var start1Gr = Convert.ToDateTime(start1);
var end1Gr = Convert.ToDateTime(end1);
if (end1Gr < start1Gr)
end1Gr = end1Gr.AddDays(1);
var start2Gr = Convert.ToDateTime(start2);
var end2Gr = Convert.ToDateTime(end2);
start2Gr = new DateTime(end1Gr.Year, end1Gr.Month, end1Gr.Day, start2Gr.Hour, start2Gr.Minute,
start2Gr.Second);
end2Gr = new DateTime(end1Gr.Year, end1Gr.Month, end1Gr.Day, end2Gr.Hour, end2Gr.Minute,
end2Gr.Second);
if (end2Gr < start2Gr)
end2Gr = end2Gr.AddDays(1);
var diff = (end1Gr - start1Gr).Add((end2Gr - start2Gr));
if (diff > new TimeSpan(24,0,0))
return true;
if (start2Gr <= end1Gr)
return true;
return false;
}
catch (Exception)
{
return true;
}
}
public static DateTime FindFirstDayOfMonthGr(this DateTime date)
{
var pc = new PersianCalendar();
return ($"{pc.GetYear(date)}/{pc.GetMonth(date):00}/01").ToGeorgianDateTime();
}
#region Mahan
public static bool IsvalidIban(this string iban)
{
return Regex.IsMatch(iban, @"^IR[0-9]{24}$");
}
public static bool IsValidCardNumber(this string cardNumber)
{
return Regex.IsMatch(cardNumber, @"^[0-9]{16}$");
}
///
/// این متد حروف عربی را به فارسی در میاورد. مثال: علي را به علی تبدیل میکند
///
///
///
public static string ToPersian(this string text)
{
var res = "";
foreach (var @char in text)
{
if (@char == char.Parse("ي"))
res += "ی";
else if (@char == char.Parse("ك"))
res += "ک";
else
res += @char;
}
return res;
}
///
/// این متد سعی میکند رشته را به تاریخ برگرداند و یک بول و دیت تایم برمیگرداند
///
/// تاریخ شمسی
/// تاریخ
///
public static bool TryToGeorgianDateTime(this string persianDate, out DateTime georgianDateTime)
{
if (string.IsNullOrWhiteSpace(persianDate))
{
georgianDateTime = new DateTime(3000, 12, 20, new PersianCalendar());
return false;
}
persianDate = persianDate.ToEnglishNumber();
try
{
var year = Convert.ToInt32(persianDate.Substring(0, 4));
var month = Convert.ToInt32(persianDate.Substring(5, 2));
var day = Convert.ToInt32(persianDate.Substring(8, 2));
georgianDateTime = new DateTime(year, month, day, new PersianCalendar());
return true;
}
catch
{
georgianDateTime = new DateTime(3000, 12, 20, new PersianCalendar());
return false;
}
}
public static string FindFirstDayOfMonth(this DateTime date)
{
var pc = new PersianCalendar();
return $"{pc.GetYear(date)}/{pc.GetMonth(date):00}/01";
}
public static string ToFarsiDuration(this string date)
{
var today = DateTime.Now.ToFarsi();
var year = Convert.ToInt32(today.Substring(0, 4));
var month = Convert.ToInt32(today.Substring(5, 2));
var day = Convert.ToInt32(today.Substring(8, 2));
var todayPersianDate = new PersianDateTime(year, month, day);
var planYear = Convert.ToInt32(date.Substring(0, 4));
var planMonth = Convert.ToInt32(date.Substring(5, 2));
var planDay = Convert.ToInt32(date.Substring(8, 2));
var planPersianDate = new PersianDateTime(planYear, planMonth, planDay);
if (planPersianDate > todayPersianDate)
{
var countDay = 0;
var counMonth = 0;
var nextMonth = new PersianDateTime(todayPersianDate).AddMonths(1);
for (var start = todayPersianDate; start <= planPersianDate; start = start.AddDays(1))
{
countDay++;
if (start == nextMonth)
{
counMonth++;
nextMonth = new PersianDateTime(start).AddMonths(1);
countDay = 0;
}
}
if (counMonth > 0)
{
if (countDay == 0)
{
return $"{counMonth} ماه";
}
return $"{counMonth}ماه و {countDay} روز";
}
else
{
return $"{countDay}روز";
}
}
else
{
return "";
}
}
public static string ToFarsiDuration2(this string date)
{
var persianCalendar = new System.Globalization.PersianCalendar();
var today = DateTime.Now;
// Convert today's Gregorian date to Persian date
var todayYear = persianCalendar.GetYear(today);
var todayMonth = persianCalendar.GetMonth(today);
var todayDay = persianCalendar.GetDayOfMonth(today);
var todayPersianDate = new DateTime(todayYear, todayMonth, todayDay, persianCalendar);
// Parse the target Persian date from the input string
var planYear = int.Parse(date.Substring(0, 4));
var planMonth = int.Parse(date.Substring(5, 2));
var planDay = int.Parse(date.Substring(8, 2));
var planPersianDate = new DateTime(planYear, planMonth, planDay, persianCalendar);
if (planPersianDate > todayPersianDate)
{
// Calculate the exact difference in years, months, and days
int yearDifference = planYear - todayYear;
int monthDifference = planMonth - todayMonth;
int dayDifference = planDay - todayDay;
if (dayDifference < 0)
{
monthDifference--;
dayDifference += persianCalendar.GetDaysInMonth(todayYear, todayMonth);
}
if (monthDifference < 0)
{
yearDifference--;
monthDifference += 12;
}
// Construct the duration string
var duration = "";
if (yearDifference > 0)
{
duration += $"{yearDifference} سال ";
}
if (monthDifference > 0)
{
duration += $"{monthDifference} ماه ";
}
if (dayDifference > 0)
{
duration += $"{dayDifference} روز";
}
return duration.Trim();
}
else
{
return "";
}
}
public static string SerializeToBson(object obj)
{
using var memoryStream = new MemoryStream();
using (BsonDataWriter bsonWriter = new BsonDataWriter(memoryStream))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(bsonWriter, obj);
}
byte[] bsonData = memoryStream.ToArray();
return Convert.ToBase64String(bsonData);
}
//بیسان هایی که بصورت لیست بودند استخراج میشود
public static List DeserializeFromBsonList(string base64Data)
{
byte[] data = Convert.FromBase64String(base64Data);
using MemoryStream memoryStream = new MemoryStream(data);
using BsonDataReader reader = new BsonDataReader(memoryStream);
reader.ReadRootValueAsArray = true;
JsonSerializer serializer = new JsonSerializer();
return serializer.Deserialize>(reader);
}
//بیسان هایی که بصورت تکی بودند استخراج میشود
public static T DeserializeFromBson(string base64Data)
{
byte[] bsonData = Convert.FromBase64String(base64Data);
using MemoryStream memoryStream = new MemoryStream(bsonData);
using BsonDataReader bsonReader = new BsonDataReader(memoryStream);
JsonSerializer serializer = new JsonSerializer();
return serializer.Deserialize(bsonReader);
}
public static TimeOnly CalculateOffset(ICollection shiftDetailsRegularShifts)
{
if (!shiftDetailsRegularShifts.Any())
{
return TimeOnly.MinValue;
}
var date = new DateOnly();
var firstStartShift = new DateTime(date, shiftDetailsRegularShifts.MinBy(x => x.Placement).StartTime);
var lastEndShift = new DateTime(date, shiftDetailsRegularShifts.MaxBy(x => x.Placement).EndTime);
if (lastEndShift > firstStartShift)
firstStartShift = firstStartShift.AddDays(1);
var offSet = (firstStartShift - lastEndShift).Divide(2);
return TimeOnly.FromDateTime(lastEndShift.Add(offSet));
}
public static DateTime GetNextDayOfWeek(this DateTime date, DayOfWeek dayOfWeek)
{
int numberOfNextDayOfWeek = ((int)dayOfWeek - (int)date.DayOfWeek + 7) % 7;
return date.AddDays(numberOfNextDayOfWeek == 0 ? 7 : numberOfNextDayOfWeek);
}
//این متد آخر همان روز را به صورت دیت تایم برمیگرداند
public static DateTime ToEndDayOfGeorgianDateTime(this string persianDate)
{
persianDate = persianDate.ToEnglishNumber();
try
{
var year = Convert.ToInt32(persianDate.Substring(0, 4));
var month = Convert.ToInt32(persianDate.Substring(5, 2));
var day = Convert.ToInt32(persianDate.Substring(8, 2));
var res = new DateTime(year, month, day, new PersianCalendar());
res = res.AddHours(23);
res = res.AddMinutes(59);
res = res.AddSeconds(59);
return res;
}
catch (Exception e)
{
return new DateTime(3000, 12, 20, new PersianCalendar());
}
}
//تبدیل به تاریخ با ساعت
public static DateTime ToGeorgianDateWithTime(this string persianDate, string persianTime)
{
persianDate = persianDate.ToEnglishNumber();
try
{
var year = Convert.ToInt32(persianDate.Substring(0, 4));
var month = Convert.ToInt32(persianDate.Substring(5, 2));
var day = Convert.ToInt32(persianDate.Substring(8, 2));
var hour = int.Parse(persianTime.Substring(0, 2));
var minute = int.Parse(persianTime.Substring(3, 2));
var res = new DateTime(year, month, day, new PersianCalendar());
res = res.AddHours(hour);
res = res.AddMinutes(minute);
return res;
}
catch (Exception e)
{
return new DateTime(3000, 12, 20, new PersianCalendar());
}
}
public static string DayOfWeeKToPersian(this DayOfWeek dayOfWeek)
{
return dayOfWeek switch
{
DayOfWeek.Friday => "جمعه",
DayOfWeek.Monday => "دوشنبه",
DayOfWeek.Saturday => "شنبه",
DayOfWeek.Sunday => "یکشنبه",
DayOfWeek.Thursday => "پنجشنبه",
DayOfWeek.Tuesday => "سه شنبه",
DayOfWeek.Wednesday => "چهارشنبه",
_ => ""
};
}
public static bool IsInvalidDateTime(this DateTime date)
{
return date == new DateTime(3000, 12, 20, new PersianCalendar());
}
#endregion
#region Pooya
///
/// محاسبه روز های هر ماه شمسی
///
/// تاریخ روزی از ماه
public static int CountPersianMonthDays(this DateTime date)
{
DateTime currentMonthDate, nextMonthDate;
currentMonthDate = date.FindFirstDayOfMonth().ToGeorgianDateTime();
FindFirstDayOfNextMonth(date, out nextMonthDate);
return ((int)(nextMonthDate.Date - currentMonthDate.Date).TotalDays);
}
public static string FindFirstDayOfNextMonth(this DateTime date, out DateTime nextMonthDate)
{
var dateFa = date.ToFarsi();
int year = Convert.ToInt32(dateFa.Substring(0, 4));
int month = Convert.ToInt32(dateFa.Substring(5, 2));
int nextMonth;
int nextMonthYear;
if (month == 12)
{
nextMonthYear = year + 1;
nextMonth = 1;
}
else
{
nextMonthYear = year;
nextMonth = month + 1;
}
nextMonthDate = new DateTime(nextMonthYear, nextMonth, 1, new PersianCalendar());
return $"{nextMonthYear:0000}/{nextMonth:00}/01";
}
///
/// اضافه یا کم کردن ماه، توجه داشته باشید خروجی متد همیشه یکم ماه می باشد
///
public static string AddMonthsFa(this DateTime date, int count, out DateTime result)
{
var dateFa = date.ToFarsi();
int year = Convert.ToInt32(dateFa.Substring(0, 4));
int month = Convert.ToInt32(dateFa.Substring(5, 2));
int newMonth;
int newYear;
//add operation
if (count >= 0)
{
newYear = year;
while (month + count > 12)
{
newYear += 1;
count -= 12;
}
newMonth = month + count;
}
//subtract operation
else
{
newYear = year;
while (month + count < 1)
{
newYear -= 1;
count += 12;
}
newMonth = month + count;
}
result = new DateTime(newYear, newMonth, 1, new PersianCalendar());
return $"{newYear:0000}/{newMonth:00}/01";
}
public static DateTime GetUndefinedDateTime()
{
return new DateTime(2121, 03, 21);
}
public static bool IsDateUndefined(this DateTime date)
{
return date == new DateTime(2121, 03, 21);
}
public static string ToFarsiHoursAndMinutes(int hours, int minutes, string emptyValue = "")
{
string message = emptyValue;
if (hours > 0 && minutes > 0)
{
message = hours + " " + "ساعت و" + " " + minutes + " " + "دقیقه";
}
else if (hours > 0 && minutes == 0)
{
message = hours + " " + "ساعت ";
}
else if (hours == 0 && minutes > 0)
{
message = minutes + " " + "دقیقه";
}
return message;
}
public static string ToFarsiHoursAndMinutes(this TimeSpan timeSpan, string emptyValue = "")
{
var hours = (int)timeSpan.TotalHours;
var minutes = timeSpan.Minutes;
string message = emptyValue;
if (hours > 0 && minutes > 0)
{
message = hours + " " + "ساعت و" + " " + minutes + " " + "دقیقه";
}
else if (hours > 0 && minutes == 0)
{
message = hours + " " + "ساعت ";
}
else if (hours == 0 && minutes > 0)
{
message = minutes + " " + "دقیقه";
}
return message;
}
public static string ToFarsiDaysAndHoursAndMinutes(this TimeSpan timeSpan, string emptyValue = "")
{
var hours = (int)timeSpan.TotalHours;
var minutes = timeSpan.Minutes;
var days = hours / 24;
hours = hours % 24;
string message = "";
if (days > 0)
message += days + " " + "روز";
if (hours > 0)
if (message == "")
message += hours + " " + "ساعت";
else
message += " و " + hours + " " + "ساعت";
if (minutes > 0)
if (message == "")
message += minutes + " " + "دقیقه";
else
message += " و " + minutes + " " + "دقیقه";
if (message == "")
message = emptyValue;
return message;
}
public static bool ArePropertiesEqual(this T obj1, T obj2)
{
// If either object is null, they can't be equal
if (obj1 == null || obj2 == null)
return false;
// Get the type of the objects
var type = typeof(T);
// Iterate through each property
foreach (var property in type.GetProperties())
{
// Get the values of the current property for both objects
var value1 = property.GetValue(obj1);
var value2 = property.GetValue(obj2);
// If both values are null, they are considered equal
if (value1 == null && value2 == null)
continue;
// If one value is null, but the other isn't, they are not equal
if (value1 == null || value2 == null)
return false;
// If values are not equal, return false
if (!value1.Equals(value2))
return false;
}
// If all properties are equal, return true
return true;
}
#endregion
#region Davoodi
public static List GetDaysBetweenDateGeorgian(DateTime startDate, DateTime? endDate)
{
var days = new List();
if (endDate == null)
endDate = DateTime.Now;
var persianStartDate = new MD.PersianDateTime.Standard.PersianDateTime(startDate);
var persianEndDate = new MD.PersianDateTime.Standard.PersianDateTime(endDate);
while (persianEndDate - persianStartDate >= TimeSpan.FromDays(0))
{
days.Add(persianStartDate.ToShortDateString());
persianStartDate = persianStartDate.AddDays(1);
}
return days;
}
public static int GetWorkingDaysDifference(DateTime? fromDate, DateTime? toDate)
{
//var workingDays = PersianDateExtensions.GetWorkingDays(new PersianDateTime(fromDate.ToFarsi()), new PersianDateTime(toDate.ToFarsi()), true);
var workingDays = PersianDateExtensions.GetWorkingDays((DateTime)fromDate, (DateTime)toDate, true);
if (fromDate > toDate)
workingDays *= -1;
return workingDays;
}
#endregion
}