Files
BeWoPlaner/Shared/Core/Utils.cs

1146 lines
39 KiB
C#
Raw Normal View History

2016-06-27 01:45:38 +02:00
using System;
using System.Collections;
using System.Collections.Generic;
2016-09-30 09:00:41 +02:00
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
2016-06-27 01:45:38 +02:00
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
2016-06-27 01:45:38 +02:00
using System.Xml.Serialization;
2018-01-16 17:11:02 +01:00
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
2018-01-16 17:11:02 +01:00
using BS.Shared.Extensions;
using DevExpress.XtraScheduler;
2016-06-27 01:45:38 +02:00
namespace BS.Shared.Core
{
public class Utils
{
private static readonly Dictionary<char, string> criticals = new Dictionary<char, string>
{
2016-06-27 01:45:38 +02:00
{ '"', "&quot;" },
{ '€', "&euro;" },
{ '¡', "&iexcl;" },
{ '¢', "&cent;" },
{ '£', "&pound;" },
{ '¤', "&curren;" },
{ '¥', "&yen;" },
{ '¦', "&brvbar;" },
{ '§', "&sect;" },
{ '¨', "&uml;" },
{ '©', "&copy;" },
{ 'ª', "&ordf;" },
{ '«', "&laquo;" },
{ '¬', "&not;" },
{ '­', "&shy;" },
{ '®', "&reg;" },
{ '¯', "&macr;" },
{ '°', "&deg;" },
{ '±', "&plusmn;" },
{ '²', "&sup2;" },
{ '³', "&sup3;" },
{ '´', "&acute;" },
{ 'µ', "&micro;" },
{ '¶', "&para;" },
{ '·', "&middot;" },
{ '¸', "&cedil;" },
{ '¹', "&sup1;" },
{ 'º', "&ordm;" },
{ '»', "&raquo;" },
{ '¼', "&frac14;" },
{ '½', "&frac12;" },
{ '¾', "&frac34;" },
{ '¿', "&iquest;" },
{ 'À', "&Agrave;" },
{ 'Á', "&Aacute;" },
{ 'Â', "&Acirc;" },
{ 'Ã', "&Atilde;" },
{ 'Ä', "&Auml;" },
{ 'Å', "&Aring;" },
{ 'Æ', "&AElig;" },
{ 'Ç', "&Ccedil;" },
{ 'È', "&Egrave;" },
{ 'É', "&Eacute;" },
{ 'Ê', "&Ecirc;" },
{ 'Ë', "&Euml;" },
{ 'Ì', "&Igrave;" },
{ 'Í', "&Iacute;" },
{ 'Î', "&Icirc;" },
{ 'Ï', "&Iuml;" },
{ 'Ð', "&ETH;" },
{ 'Ñ', "&Ntilde;" },
{ 'Ò', "&Ograve;" },
{ 'Ó', "&Oacute;" },
{ 'Ô', "&Ocirc;" },
{ 'Õ', "&Otilde;" },
{ 'Ö', "&Ouml;" },
{ '×', "&times;" },
{ 'Ø', "&Oslash;" },
{ 'Ù', "&Ugrave;" },
{ 'Ú', "&Uacute;" },
{ 'Û', "&Ucirc;" },
{ 'Ü', "&Uuml;" },
{ 'Ý', "&Yacute;" },
{ 'Þ', "&THORN;" },
{ 'ß', "&szlig;" },
{ 'à', "&agrave;" },
{ 'á', "&aacute;" },
{ 'â', "&acirc;" },
{ 'ã', "&atilde;" },
{ 'ä', "&auml;" },
{ 'å', "&aring;" },
{ 'æ', "&aelig;" },
{ 'ç', "&ccedil;" },
{ 'è', "&egrave;" },
{ 'é', "&eacute;" },
{ 'ê', "&ecirc;" },
{ 'ë', "&euml;" },
{ 'ì', "&igrave;" },
{ 'í', "&iacute;" },
{ 'î', "&icirc;" },
{ 'ï', "&iuml;" },
{ 'ð', "&eth;" },
{ 'ñ', "&ntilde;" },
{ 'ò', "&ograve;" },
{ 'ó', "&oacute;" },
{ 'ô', "&ocirc;" },
{ 'õ', "&otilde;" },
{ 'ö', "&ouml;" },
{ '÷', "&divide;" },
{ 'ø', "&oslash;" },
{ 'ù', "&ugrave;" },
{ 'ú', "&uacute;" },
{ 'û', "&ucirc;" },
{ 'ü', "&uuml;" },
{ 'ý', "&yacute;" },
{ 'þ', "&thorn;" },
{ 'ÿ', "&yuml;" }
// {'>', "&lt;"},
// {'<', "&gt;"},
};
public static bool AreAllNull(params object[] pObjects)
{
foreach (object iO in pObjects)
{
if (iO != null)
{
return false;
}
}
return true;
}
public static bool AreAllNullOrEmpty(params object[] pObjects)
{
foreach (object iObject in pObjects)
{
if (iObject is string)
{
if (!String.IsNullOrEmpty(iObject as string))
2016-06-27 01:45:38 +02:00
{
return false;
}
}
else if (iObject is IEnumerable)
{
if ((iObject as IEnumerable).GetEnumerator().MoveNext())
{
return false;
}
}
else if (iObject != null)
{
return false;
}
}
return true;
}
public static string Compress(string text)
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}
ms.Position = 0;
MemoryStream outStream = new MemoryStream();
byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);
byte[] gzBuffer = new byte[compressed.Length + 4];
Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return Convert.ToBase64String(gzBuffer);
}
public static string Decompress(string compressedText)
{
byte[] gzBuffer = Convert.FromBase64String(compressedText);
using (MemoryStream ms = new MemoryStream())
{
int msgLength = BitConverter.ToInt32(gzBuffer, 0);
ms.Write(gzBuffer, 4, gzBuffer.Length - 4);
byte[] buffer = new byte[msgLength];
ms.Position = 0;
using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress))
{
zip.Read(buffer, 0, buffer.Length);
}
return Encoding.UTF8.GetString(buffer);
}
}
public static string EnumName<T>(T pObject)
{
return Enum.GetName(typeof(T), pObject);
}
public static T EnumParse<T>(string pValue)
{
return (T)Enum.Parse(typeof(T), pValue);
}
public static IEnumerable<T> GetAllEnumValues<T>()
{
return Enum.GetValues(typeof(T)).Cast<T>();
}
public static List<DayOfWeek> GetDayOfWeeks(DayOfWeek lFirst)
{
var lResult = new List<DayOfWeek>();
DateTime lStart = DateTime.Now;
while (lStart.DayOfWeek != lFirst)
{
lStart = lStart.AddDays(1);
}
for (int i = 1; i < 8; i++)
{
lResult.Add(lStart.DayOfWeek);
lStart = lStart.AddDays(1);
}
return lResult;
}
public static int GetWholeWorkWeekCount(DateTime pStart, DateTime pEnd)
{
return GetWholeWorkWeeks(pStart, pEnd).Count();
}
public static List<DateTimeSpan> GetWholeWorkWeeks(DateTime pStart, DateTime pEnd)
{
while (pStart.DayOfWeek != DayOfWeek.Monday)
{
pStart = pStart.AddDays(1);
}
List<DateTimeSpan> lResult = new List<DateTimeSpan>();
while ((pStart = pStart.AddDays(4)) <= pEnd.Date)
{
lResult.Add(new DateTimeSpan { StartDateTime = pStart.AddDays(-4), EndDateTime = pStart.AddDays(1).AddMilliseconds(-1) });
pStart = pStart.AddDays(3);
}
return lResult;
}
public static bool IsAnyNull(params object[] pObjects)
{
foreach (object iO in pObjects)
{
if (iO == null)
{
return true;
}
}
return false;
}
public static bool IsAnyNullOrEmpty(params string[] pStrings)
{
foreach (string iString in pStrings)
{
if (String.IsNullOrEmpty(iString))
2016-06-27 01:45:38 +02:00
{
return true;
}
}
return false;
}
public static Queue<T> MakeQueue<T>(params T[] items)
{
return new Queue<T>(items);
}
public static string MyHtmlEncode(string pString)
{
StringBuilder htmlk = new StringBuilder();
int ia = 0;
for (int i = 0; i < pString.Length; i++)
{
char c = pString[i];
if (criticals.ContainsKey(c))
{
htmlk.Append(pString.Substring(ia, i - ia));
htmlk.Append(criticals[c]);
ia = i + 1;
}
}
htmlk.Append(pString.Substring(ia));
return htmlk.ToString();
}
public static NullCompareResult NullCompare(object pO1, object pO2)
{
NullCompareResult lResult = new NullCompareResult();
lResult.Different = (pO1 == null && pO2 != null) || (pO1 != null && pO2 == null);
lResult.BothNotNull = pO1 != null && pO2 != null;
return lResult;
}
public static byte[] ReadFully(Stream stream)
{
byte[] buffer = new byte[32768];
using (MemoryStream ms = new MemoryStream())
{
while (true)
{
int read = stream.Read(buffer, 0, buffer.Length);
if (read <= 0)
{
return ms.ToArray();
}
ms.Write(buffer, 0, read);
}
}
}
public static void ReadWriteStream(Stream readStream, Stream writeStream)
{
int Length = 256;
byte[] buffer = new byte[Length];
int bytesRead = readStream.Read(buffer, 0, Length);
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = readStream.Read(buffer, 0, Length);
}
readStream.Close();
writeStream.Close();
}
public static T XMLDeserialize<T>(string pPath)
{
T lResult = default(T);
using (var uFS = File.Open(pPath, FileMode.Open))
{
var lSerialzer = new XmlSerializer(typeof(T));
lResult = (T)lSerialzer.Deserialize(uFS);
}
return lResult;
}
public static T XMLDeserializeFromString<T>(string serializedXML)
{
T lResult = default(T);
if (!String.IsNullOrEmpty(serializedXML))
{
var lSerialzer = new XmlSerializer(typeof(T));
StringReader r = new StringReader(serializedXML);
lResult = (T)lSerialzer.Deserialize(r);
}
return lResult;
}
public static object XMLDeserializeFromString(string serializedXML, Type type)
{
object lResult = null;
if (!String.IsNullOrEmpty(serializedXML))
{
var lSerialzer = new XmlSerializer(type);
StringReader r = new StringReader(serializedXML);
lResult = lSerialzer.Deserialize(r);
}
return lResult;
}
public static void XMLSerialize<T>(string pPath, T pObject)
{
if (!Directory.Exists(Path.GetDirectoryName(pPath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(pPath));
}
using (var uFS = File.Create(pPath))
{
var lSerialzer = new XmlSerializer(typeof(T));
lSerialzer.Serialize(uFS, pObject);
}
}
public static string XMLSerializeToString(object pObject)
{
var lSerialzer = new XmlSerializer(pObject.GetType());
StringWriter strw = new StringWriter();
lSerialzer.Serialize(strw, pObject);
string str = strw.ToString();
int test = str.Length;
return str;
}
public static void SaveExceptionAsTextFile(string pPath, Exception e)
{
#if DEBUG
var directoryName = Path.GetDirectoryName(pPath);
if (directoryName != null)
{
if (!Directory.Exists(directoryName))
return;
}
var innerException = e.InnerException;
var sw = new StreamWriter(pPath, true);
sw.WriteLine(e.Message);
sw.WriteLine(e.StackTrace + "\n");
while (innerException != null)
{
sw.WriteLine(innerException.Message);
sw.WriteLine(innerException.StackTrace + "\n");
innerException = innerException.InnerException;
}
sw.Flush();
sw.Close();
#endif
}
public static int ToInt<T>(T e) where T : struct, IComparable, IFormattable, IConvertible // where T : Enum is not possible
{
return (int)(Object)e;
}
2016-09-30 09:00:41 +02:00
public static byte[] ErstelleThumbnail(byte[] data, int width, int height)
{
var imageOriginal = CreateImageFromByteArray(data);
if (imageOriginal == null)
{
return null;
}
var originalW = imageOriginal.Width;
var originalH = imageOriginal.Height;
DateTime? originRecordDateTime;
var smallImage = ResizeImage(imageOriginal, new Size(width, height));
var smallData = CreateByteArrayFromImage(smallImage);
smallImage.Dispose();
return smallData;
}
public static Image CreateImageFromByteArray(byte[] data)
{
try
{
using (var ms = new MemoryStream(data))
{
ms.Position = 0;
var image = Image.FromStream(ms);
return image;
}
}
catch (Exception)
{
return null;
}
}
public static Image ResizeImage(Image original, Size size)
{
var newSize = CalcSize(original.Width, original.Height, size.Width, size.Height);
var newImage = new Bitmap(newSize.Width, newSize.Height);
using (var graphicsHandle = Graphics.FromImage(newImage))
{
graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphicsHandle.DrawImage(original, 0, 0, newSize.Width, newSize.Height);
}
return newImage;
}
public static byte[] CreateByteArrayFromImage(Image image)
{
if (image != null)
{
using (var memoryStream = new MemoryStream())
{
image.Save(memoryStream, ImageFormat.Jpeg);
return memoryStream.ToArray();
}
}
return null;
}
2018-06-26 17:18:59 +02:00
public static Bitmap CropImage(Image image)
{
var originalBitmap = new Bitmap(image);
2018-06-26 17:18:59 +02:00
var min = new Point(int.MaxValue, int.MaxValue);
var max = new Point(int.MinValue, int.MinValue);
2018-06-26 17:18:59 +02:00
for(var x = 0; x < originalBitmap.Width; ++x)
2018-06-26 17:18:59 +02:00
{
for(var y = 0; y < originalBitmap.Height; ++y)
2018-06-26 17:18:59 +02:00
{
var pixelColor = originalBitmap.GetPixel(x, y);
if (!(pixelColor.R == 255 && pixelColor.G == 255 && pixelColor.B == 255) && pixelColor.A > 0)
2018-06-26 17:18:59 +02:00
{
if (x < min.X) min.X = x;
if (y < min.Y) min.Y = y;
if (x > max.X) max.X = x;
if (y > max.Y) max.Y = y;
}
}
2018-06-26 17:18:59 +02:00
}
2018-06-29 16:35:19 +02:00
// Create a new bitmap from the crop rectangleig
if (min.X < int.MaxValue && min.Y < int.MaxValue && max.X > int.MinValue && max.Y > int.MinValue)
2018-06-26 17:18:59 +02:00
{
var cropRectangle = new Rectangle(min.X, min.Y, max.X - min.X, max.Y - min.Y);
2019-02-12 19:22:22 +01:00
if (cropRectangle.Width > 0 && cropRectangle.Height > 0)
2018-06-29 16:35:19 +02:00
{
var newBitmap = new Bitmap(cropRectangle.Width, cropRectangle.Height);
using (var graphics = Graphics.FromImage(newBitmap))
2019-02-12 19:22:22 +01:00
{
graphics.DrawImage(originalBitmap, 0, 0, cropRectangle, GraphicsUnit.Pixel);
2019-02-12 19:22:22 +01:00
}
return newBitmap;
}
2018-06-26 17:18:59 +02:00
}
2018-06-29 16:35:19 +02:00
return originalBitmap;
2018-06-26 17:18:59 +02:00
}
2016-09-30 09:00:41 +02:00
private static Size CalcSize(int originalWidth, int originalHeight, int desiredWidth, int desiredHeight)
{
var percentWidth = desiredWidth / (float)originalWidth;
var percentHeight = desiredHeight / (float)originalHeight;
var percent = percentHeight < percentWidth ? percentHeight : percentWidth;
var width = (int)Math.Round(originalWidth * percent, MidpointRounding.AwayFromZero);
var height = (int)Math.Round(originalHeight * percent, MidpointRounding.AwayFromZero);
if (width == 0)
{
width = 1;
}
if (height == 0)
{
height = 1;
}
return new Size(width, height);
}
2018-01-16 17:11:02 +01:00
public static List<TextModuleDC> GetParentTextModules(List<TextModuleDC> childTextModules)
{
_Parents.Clear();
2018-01-16 17:11:02 +01:00
foreach(var textModule in childTextModules)
{
GetParentTextModule(textModule);
}
return _Parents;
2018-01-16 17:11:02 +01:00
}
private static readonly List<TextModuleDC> _Parents = new List<TextModuleDC>();
2018-01-16 17:11:02 +01:00
private static void GetParentTextModule(TextModuleDC textModule)
{
if(textModule.Parent != null)
{
_Parents.AddIfNotIn(textModule.Parent);
2018-01-16 17:11:02 +01:00
if(textModule.Parent.Parent != null)
{
GetParentTextModule(textModule.Parent.Parent);
}
}
}
public static string CollectionToString(string pSeperator, IEnumerable pCollection)
{
pSeperator += " ";
var result = "";
var enumerator = pCollection.GetEnumerator();
while(enumerator.MoveNext())
{
var currentString = enumerator.Current?.ToString();
result += currentString + pSeperator;
}
return result.Trim(pSeperator?.ToCharArray());
}
public static long? ParseObjectToNullableLong(object object2Parse)
{
if(object2Parse == null)
{
return null;
}
var wasSuccessful = Int64.TryParse(object2Parse.ToString(), out var output);
if(wasSuccessful)
{
return output;
}
return null;
}
public static bool CheckSchedulerRights(List<CompactCustomerDC> pCustomerList, List<ResourceDC> pResourceList, List<Employee2SchedulerAppointmentDC> pEmployeeList, CompactEmployeeDC pOriginator, bool pIsNew, SchedulerRightsCheckType pCheckType, UserDC pLoggedOnUser, List<long> teamMemberCustomerOids, bool ignoreViewEditCreateAllRights = false)
{
var loggedInEmployee = pLoggedOnUser.Employee;
var isAllowedToViewEverything = !ignoreViewEditCreateAllRights && pLoggedOnUser.HasRight(UserRightType.ViewAll);
var isAllowedToEditEverything = !ignoreViewEditCreateAllRights && pLoggedOnUser.HasRight(UserRightType.EditAll);
var isAllowedToCreateEverything = !ignoreViewEditCreateAllRights && pLoggedOnUser.HasRight(UserRightType.CreateAll);
var isAllowedToViewCustomers = pLoggedOnUser.HasRight(UserRightType.CustomerView_View);
var isAllowedToViewMyTeamsCustomers = pLoggedOnUser.HasRight(UserRightType.Customer_ViewMyTeams);
var isAllowedToViewOwnCustomers = pLoggedOnUser.HasRight(UserRightType.Customer_ViewMyCustomers);
var isAllowedToViewAllCustomerAppointments = pLoggedOnUser.HasRight(UserRightType.KalenderKliententermineAlleAnsehen);
var isAllowedToCreateCustomerAppointments = pLoggedOnUser.HasRight(UserRightType.KalenderKliententermineAnlegen);
var isAllowedToEditCustomerAppointments = pLoggedOnUser.HasRight(UserRightType.KalenderKliententermineAendern);
var isAllowedToViewEmployeeAppointments = pLoggedOnUser.HasRight(UserRightType.KalenderMitarbeitertermineAnsehen);
var isAllowedToCreateEmployeeAppointments = pLoggedOnUser.HasRight(UserRightType.KalenderMitarbeitertermineAnlegen);
var isAllowedToEditEmployeeAppointments = pLoggedOnUser.HasRight(UserRightType.KalenderMitarbeitertermineAendern);
var isAllowedToViewResourceAppointments = pLoggedOnUser.HasRight(UserRightType.KalenderRessourcentermineAnsehen);
var isAllowedToCreateResourceAppointments = pLoggedOnUser.HasRight(UserRightType.KalenderRessourcentermineAnlegen);
var isAllowedToEditResourceAppointments = pLoggedOnUser.HasRight(UserRightType.KalenderRessourcentermineAendern);
var isAllowedToEditOtherEmployeesResourceAppointments = pLoggedOnUser.HasRight(UserRightType.KalenderRessourcentermineAndererAendern);
var hasEmployees = pEmployeeList?.Count > 0;
var hasCustomers = pCustomerList?.Count > 0;
var hasResources = pResourceList?.Count > 0;
// Prüfen, ob die Klienten alle in der Liste des Employees sind!
var relatedCustomerOids = new List<long>(loggedInEmployee.RelatedCustomerOIDList);
relatedCustomerOids.AddRangeIfElementsNotIn(teamMemberCustomerOids);
var hasOnlyOwnCustomers = pCustomerList?.All(c => loggedInEmployee.RelatedCustomerOIDList.Contains(c.CustomerOid)) ?? false;
var hasOnlyTeamMembersCustomers = pCustomerList?.All(c => teamMemberCustomerOids.Contains(c.CustomerOid)) ?? false;
var isOwnAppointment = Equals(pOriginator, loggedInEmployee);
var employeeListOnlyContainsEmployee = pEmployeeList?.Count == 1 && pEmployeeList[0].Employee.Equals(loggedInEmployee);
var employeeIsInList = pEmployeeList?.Any(a => Equals(loggedInEmployee, a.Employee)) ?? false;
var result = true;
switch(pCheckType)
{
case SchedulerRightsCheckType.View:
if(isAllowedToViewEverything || employeeIsInList)
{
return true;
}
if(hasEmployees)
{
if(!employeeListOnlyContainsEmployee)
{
result = isAllowedToViewEmployeeAppointments;
}
}
if(!result)
{
return false;
}
if(hasCustomers)
{
if(isAllowedToViewCustomers)
{
result = hasOnlyOwnCustomers || isAllowedToViewAllCustomerAppointments;
}
else
{
return false;
}
//if(!isAllowedToViewAllCustomerAppointments)
//{
// return false;
//}
// ToDo: Prüfen, ob eigene Klienten, die des Teams oder fremde Klienten in der Liste sind
/*
* isAllowedToViewAllCustomerAppointments darf Kliententermine sehen. Sind Klienten in der Liste, die der Mitarbeiter nicht sehen darf, müssen diese anonymisiert werden.
*/
// Alle Klienten ansehen
//if(isAllowedToViewCustomers)
//{
// result = hasOnlyOwnCustomers || isAllowedToViewAllCustomerAppointments;
//}
//else
//{
// // ToDo: Gucken, ob CustomerOids in der Klientenliste sind, die nicht in der relatedCustomerOids-Liste sind
// if(pCustomerList.Any(a => !relatedCustomerOids.Contains(a.CustomerOid)))
// {
// result = false;
// }
// // Sind nur die eigenen
// if(isAllowedToViewOwnCustomers && hasOnlyOwnCustomers)
// {
// result = true;
// }
// // Sind nur Klienten aus eigenen Teams
// if(isAllowedToViewMyTeamsCustomers && hasOnlyTeamMembersCustomers)
// {
// result = true;
// }
// //if()
// //{
// //}
//}
}
if(!result)
{
return false;
}
if(hasResources)
{
result = isOwnAppointment ?
isAllowedToViewResourceAppointments :
isAllowedToViewEmployeeAppointments && isAllowedToViewResourceAppointments;
}
break;
case SchedulerRightsCheckType.Create:
if(isAllowedToCreateEverything)
{
return true;
}
if(hasEmployees)
{
result = isAllowedToCreateEmployeeAppointments;
if(!result)
{
return false;
}
}
if(hasCustomers)
{
result = !hasOnlyOwnCustomers ? isAllowedToViewAllCustomerAppointments : isAllowedToCreateCustomerAppointments;
if(!result)
{
return false;
}
}
if(hasResources)
{
result = isAllowedToCreateResourceAppointments;
}
break;
case SchedulerRightsCheckType.Edit:
if(isAllowedToEditEverything)
{
return true;
}
if(!isOwnAppointment || hasEmployees && !employeeListOnlyContainsEmployee)
{
result = isAllowedToEditEmployeeAppointments;
if(hasResources)
{
result = isAllowedToEditResourceAppointments;
}
if(!result)
{
return false;
}
}
if(hasCustomers)
{
result = isAllowedToEditCustomerAppointments;
if(!result)
{
return false;
}
}
if(hasResources)
{
// ToDo: Hier beachten, ob employeeListOnlyContainsEmployee true ist
if(employeeListOnlyContainsEmployee)
{
return isAllowedToEditResourceAppointments;
}
result = hasEmployees ? isAllowedToEditOtherEmployeesResourceAppointments : isAllowedToEditResourceAppointments;
}
break;
default:
return false;
}
return result;
}
public static bool CheckSchedulerRights(SchedulerAppointmentDC pAppointment, SchedulerRightsCheckType pCheckType, UserDC pLoggedOnUser, List<long> teamMemberCustomerOids, bool ignoreViewEditCreateAllRights = false)
{
return CheckSchedulerRights(pAppointment.CustomerList, pAppointment.ResourceList, pAppointment.EmployeeList, pAppointment.Originator, !pAppointment.SchedulerAppointmentOid.HasValue, pCheckType, pLoggedOnUser, teamMemberCustomerOids, ignoreViewEditCreateAllRights);
}
public static bool IsPowerOfTwo(int number)
{
return ((number - 1) & number) == 0;
}
public static int FindClosestPowerOfTwo(int number)
{
if (IsPowerOfTwo(number))
{
return number;
}
while (!IsPowerOfTwo(number))
{
number--;
}
return number;
}
public static List<DayOfWeek> GetWeekDaysFromNumber(int number)
{
var weekDays = new List<DayOfWeek>();
if (number % 2 != 0)
{
number--;
weekDays.Add(DayOfWeek.Sunday);
}
var closestPowerOfTwo = FindClosestPowerOfTwo(number);
var rest = number - closestPowerOfTwo;
weekDays.Add(DateTimeUtils.ConvertWeekDaysToDayOfWeek(DateTimeUtils.GetWeekDays(closestPowerOfTwo)));
if (rest > 0)
{
do
{
closestPowerOfTwo = FindClosestPowerOfTwo(rest);
rest -= closestPowerOfTwo;
weekDays.Add(DateTimeUtils.ConvertWeekDaysToDayOfWeek(DateTimeUtils.GetWeekDays(closestPowerOfTwo)));
} while (!IsPowerOfTwo(rest) || rest > 0);
}
return weekDays.OrderBy(day => (int)day).ToList();
}
public static DateTime GetNextDateTime(DateTime pDate, DayOfWeek pDayOfWeek, int pPeriodicity, RecurrenceType pType)
{
var dow = pDate.DayOfWeek;
if (dow > pDayOfWeek)
{
var date = pDate;
do
{
date = date.AddDays(1);
} while (date.DayOfWeek != pDayOfWeek);
return CalculateNextDateTime(pType, date, pType == RecurrenceType.Weekly ? 7 * pPeriodicity - 1 : pPeriodicity - 1);
}
return CalculateNextDateTime(pType, pDate, pDayOfWeek - dow);
}
private static DateTime CalculateNextDateTime(RecurrenceType recurrenceType, DateTime date, int timeToAdd)
{
switch(recurrenceType)
{
case RecurrenceType.Daily:
return date.AddDays(timeToAdd);
case RecurrenceType.Weekly:
return date.AddDays(timeToAdd);
case RecurrenceType.Monthly:
return date.AddMonths(timeToAdd);
default:
return date.AddYears(timeToAdd);
}
}
public static readonly string TestAppointmentNotice = "k9Rx2mU4y";
2019-09-27 15:55:01 +02:00
public static string GetSexAbbrevation(Sex? sex)
2019-09-27 15:55:01 +02:00
{
switch (sex)
2019-09-27 15:55:01 +02:00
{
case Sex.Male:
return "m";
case Sex.Female:
return "w";
case Sex.Divers:
return "d";
default:
return string.Empty;
2019-09-27 15:55:01 +02:00
}
}
public static string GetSexTranslation(Sex? sex, bool lowerCase = false)
2019-09-27 15:55:01 +02:00
{
string result;
2019-09-27 15:55:01 +02:00
switch (sex)
{
case Sex.Male:
result = "Männlich";
break;
case Sex.Female:
result = "Weiblich";
break;
case Sex.Divers:
result = "Divers";
break;
default:
result = string.Empty;
break;
}
return lowerCase ? result.ToLowerInvariant() : result;
2019-09-27 15:55:01 +02:00
}
public static bool ContainsKey(string[] array, string key)
{
return array.Any(keyEntry => keyEntry.Equals(key));
}
public static RecurrenceInformation GetOccurrenceId(string pRecurrenceInfoString)
{
var regex = new Regex("Index=\"[0-9]+\"");
var match = regex.Match(pRecurrenceInfoString);
var recurrenceInfo = new RecurrenceInfo();
recurrenceInfo.FromXml(pRecurrenceInfoString);
var index = 0;
if(!match.Value.IsNullOrEmpty())
{
index = int.Parse(match.Value.Split('"')[1]);
}
return new RecurrenceInformation(recurrenceInfo.Id.ToString(), index);
}
public static string CreateSavePath(string tempPath, string filename)
{
var saveFilename = filename.Replace("..", "")
.Replace("\"", "")
.Replace("/", "")
.Replace(":", "")
.Replace(";", "");
return Path.Combine(tempPath, saveFilename);
}
/// <summary>
/// Vergleicht die Elemente zweier Listen. Diese müssen vorher sortiert werden!
/// </summary>
/// <typeparam name="T">Typ. Muss gleich sein</typeparam>
/// <param name="a">Die erste Liste</param>
/// <param name="b">Die Liste mit der die erste Liste verglichen wird</param>
/// <returns>True, wenn die Elemente beider Listen gleich sind</returns>
public static bool ListsEqual<T>(IEnumerable<T> a, IEnumerable<T> b)
{
if(a == null && b == null)
{
return true;
}
if(a == null || b == null)
{
return false;
}
var x = a.ToArray();
var y = b.ToArray();
if(x.Length != y.Length)
{
return false;
}
for(var i = 0; i < x.Length; i++)
{
var obj1 = x[i];
var obj2 = y[i];
if(!(obj1?.Equals(obj2) ?? false))
{
return false;
}
}
return true;
}
public static string GetSpecificValueFromRecurrenceInfo(string recurrenecInfoString, int startIndex)
{
var valueBuilder = new StringBuilder();
for(; startIndex < recurrenecInfoString.Length; startIndex++)
{
var cr = recurrenecInfoString[startIndex];
if(cr.Equals('"'))
{
break;
}
valueBuilder.Append(cr);
}
return valueBuilder.ToString();
}
public static Guid? GetRecurrenceIdFromRecurrenceInfo(string recurrenceInfo)
{
if(recurrenceInfo?.Length > 0)
{
var idString = GetSpecificValueFromRecurrenceInfo(recurrenceInfo, recurrenceInfo.IndexOf("Id=\"", StringComparison.InvariantCulture) + 4);
if(Guid.TryParse(idString, out var recurrenceId))
{
return recurrenceId;
}
}
return null;
}
public static int GetRecurrenceIndexFromRecurrenceInfo(string recurrenceInfo)
{
if(recurrenceInfo?.Length > 0)
{
var indexString = GetSpecificValueFromRecurrenceInfo(recurrenceInfo, recurrenceInfo.IndexOf("Index=\"", StringComparison.InvariantCulture) + 7);
if(int.TryParse(indexString, out var index))
{
return index;
}
}
return 0;
}
public static void WriteToTextFileOnDesktop(string fileName, string text)
{
#if DEBUG
var path = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
using(var fileStream = new FileStream($"{path}/{fileName}", FileMode.Append, FileAccess.Write))
{
using(var streamWriter = new StreamWriter(fileStream))
{
streamWriter.WriteLine(text);
}
}
#endif
}
2016-06-27 01:45:38 +02:00
}
public struct NullCompareResult
{
public bool BothNotNull;
public bool Different;
}
2019-09-27 15:55:01 +02:00
public struct ArbeitszeitEintragDateTimeObject
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
public ArbeitszeitEintragDateTimeObject(DateTime start, DateTime end)
{
Start = start;
End = end;
}
}
2016-06-27 01:45:38 +02:00
}