Last fixes
This commit is contained in:
		
							
								
								
									
										226
									
								
								DataBase/AccessDB.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								DataBase/AccessDB.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,226 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
	public class Access
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		[ForeignKey("User")]
 | 
			
		||||
		public int UserId { get; set; }
 | 
			
		||||
		public User User { get; set; }
 | 
			
		||||
		public int FormId { get; set; }
 | 
			
		||||
		public int FormatAccess { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		public static void AccessCheckValid(Access obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null) throw new Exception("Ошибка инициализации.");
 | 
			
		||||
				if (UserGetById(obj.UserId) == null) throw new Exception("Пользователь не указан.");
 | 
			
		||||
				if (obj.FormId < 0 || obj.FormId >= FormArray.formName.Length) throw new Exception("Неверно указана форма.");
 | 
			
		||||
				if (obj.FormId < 0 || obj.FormatAccess >= FormArray.formAccess.Length) throw new Exception("Неверно указаны разрешения");
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static Access AccessGetById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Accessy
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Access[] AccessGetByUserIdFormId(int UserId, int FormId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Accessy
 | 
			
		||||
						where a.UserId == UserId && a.FormId == FormId
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.ToArray();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						throw;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Access AccessGetByUserIdFormIdAccessId(int UserId, int FormId, int AccessId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Accessy
 | 
			
		||||
						where
 | 
			
		||||
							a.UserId == UserId &&
 | 
			
		||||
							a.FormId == FormId &&
 | 
			
		||||
							a.FormatAccess == AccessId
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void AccessAdd(Access obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				AccessCheckValid(obj);
 | 
			
		||||
				var local_obj = AccessGetByUserIdFormIdAccessId(obj.UserId, obj.FormId, obj.FormatAccess);
 | 
			
		||||
				if (local_obj == null)
 | 
			
		||||
					using (var db = new MainDB())
 | 
			
		||||
					{
 | 
			
		||||
						db.Accessy.Add(obj);
 | 
			
		||||
						db.SaveChanges();
 | 
			
		||||
					}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void AccessDelete(Access obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					return;
 | 
			
		||||
				var localObj = AccessGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Разрешение не существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Accessy.Remove(localObj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static Access[] AccessList(int UserId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var access = (
 | 
			
		||||
						from a in db.Accessy
 | 
			
		||||
						where a.UserId == UserId
 | 
			
		||||
						orderby a.FormId
 | 
			
		||||
						orderby a.FormatAccess
 | 
			
		||||
						select a
 | 
			
		||||
						).ToArray();
 | 
			
		||||
					return access;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static bool[,] AccessListTable(int UserId)
 | 
			
		||||
    {
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				var result = new bool[FormArray.formName.Length, FormArray.formAccess.Length];
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var list = AccessList(UserId);
 | 
			
		||||
					foreach (var r in list)
 | 
			
		||||
						result[r.FormId, r.FormatAccess] = true;
 | 
			
		||||
					return result;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static int AccessToSettingsFullCountWithoutUserId(User user)
 | 
			
		||||
    {
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var users =
 | 
			
		||||
						(from a in db.Usery
 | 
			
		||||
						 where a.Id != user.Id
 | 
			
		||||
						 select a).ToArray();
 | 
			
		||||
					var count = 0;
 | 
			
		||||
					foreach(var usr in users)
 | 
			
		||||
          {
 | 
			
		||||
						var access =
 | 
			
		||||
							from a in db.Accessy
 | 
			
		||||
							where
 | 
			
		||||
								a.UserId == usr.Id &&
 | 
			
		||||
								a.FormId == 7
 | 
			
		||||
							select a;
 | 
			
		||||
						if (access.Count() == FormArray.formAccess.Length)
 | 
			
		||||
							count++;
 | 
			
		||||
          }
 | 
			
		||||
					return count;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										322
									
								
								DataBase/ChelDB.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										322
									
								
								DataBase/ChelDB.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,322 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
	public class Chel
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		public string FName { get; set; }
 | 
			
		||||
		public string SName { get; set; }
 | 
			
		||||
		public string TName { get; set; }
 | 
			
		||||
		public bool Male { get; set; }
 | 
			
		||||
		public DateTime Birthday { get; set; }
 | 
			
		||||
		public string Address { get; set; }
 | 
			
		||||
		public string INN { get; set; }
 | 
			
		||||
		public string Phone { get; set; }
 | 
			
		||||
		public string SNILS { get; set; }
 | 
			
		||||
		public string Pasport { get; set; }
 | 
			
		||||
		public bool Pensia { get; set; }
 | 
			
		||||
		public List<CorrStaj> CorrStajy { get; set; }
 | 
			
		||||
		public List<Learn> Learny { get; set; }
 | 
			
		||||
		public List<Rabotnik> Rabotniky { get; set; }
 | 
			
		||||
		public List<Free> Freey { get; set; }
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		public static void ChelCheckValid(Chel obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null) throw new Exception("Ошибка инициализации человека.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.FName)) throw new Exception("Фамилия не указана.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.SName)) throw new Exception("Имя не указано.");
 | 
			
		||||
				if (obj.Birthday > DateTime.Now) throw new Exception("Дата рождения не верна.");
 | 
			
		||||
				if (obj.Birthday > DateTime.Now.AddYears(-18).AddDays(1)) throw new Exception("Нельза добавить несовершеннолетнего.");
 | 
			
		||||
				var rgx = new Regex("^[0-9]{12}$");
 | 
			
		||||
				if (!rgx.IsMatch(obj.INN)) throw new Exception("ИНН указан неверно.");
 | 
			
		||||
				rgx = new Regex("^[0-9]{3}-[0-9]{3}-[0-9]{3} [0-9]{2}$");
 | 
			
		||||
				if (!rgx.IsMatch(obj.SNILS)) throw new Exception("СНИЛС указан неверно.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.Pasport)) throw new Exception("Надо добавить паспорт.");
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static Chel ChelGetById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Chely
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Chel ChelGetByINN(string inn)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Chely
 | 
			
		||||
						where a.INN == inn
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Chel ChelGetBySNILS(string snils)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Chely
 | 
			
		||||
						where a.SNILS == snils
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static string ChelGetFIOShortById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						(from a in db.Chely
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a).Single();
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.FName + " " + 
 | 
			
		||||
									res.SName[0].ToString() + "." +
 | 
			
		||||
								((!string.IsNullOrEmpty(res.TName)) ?
 | 
			
		||||
									res.TName[0].ToString() + "." : "");
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return "";
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void ChelAdd(Chel obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ChelCheckValid(obj);
 | 
			
		||||
				if (ChelGetByINN(obj.INN) != null)
 | 
			
		||||
					throw new Exception("ИНН повторяется.");
 | 
			
		||||
				if (ChelGetBySNILS(obj.SNILS) != null)
 | 
			
		||||
					throw new Exception("СНИЛС повторяется.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Chely.Add(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void ChelChange(Chel obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ChelCheckValid(obj);
 | 
			
		||||
				var localObj = ChelGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Человека не существует.");
 | 
			
		||||
				var innObj = ChelGetByINN(obj.INN);
 | 
			
		||||
				if (innObj != null && innObj.Id != localObj.Id)
 | 
			
		||||
					throw new Exception("ИНН повторяется.");
 | 
			
		||||
				var snilsObj = ChelGetBySNILS(obj.SNILS);
 | 
			
		||||
				if (snilsObj != null && snilsObj.Id != localObj.Id)
 | 
			
		||||
					throw new Exception("СНИЛС повторяется.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Chely.Update(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void ChelDelete(Chel obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					return;
 | 
			
		||||
				var localObj = ChelGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Человека не существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Chely.Remove(localObj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static Chel[] ChelList(string filter = null, bool isWorker = true)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var chels = (
 | 
			
		||||
						from a in db.Chely
 | 
			
		||||
						select a
 | 
			
		||||
						).ToList();
 | 
			
		||||
 | 
			
		||||
					filter = filter == null ? "" : filter.ToLower();
 | 
			
		||||
					for (var i = 0; i < chels.Count;)
 | 
			
		||||
					{
 | 
			
		||||
						if (!isWorker)
 | 
			
		||||
						{
 | 
			
		||||
							var check = new List<Rabotnik>(RabotnikHistoryByChelId(chels[i].Id));
 | 
			
		||||
							var a = check.FindAll(x => !x.End.HasValue || (x.Start >= DateTime.Now && x.End.Value <= DateTime.Now)).Count();
 | 
			
		||||
							if (a > 0)
 | 
			
		||||
							{
 | 
			
		||||
								chels.RemoveAt(i);
 | 
			
		||||
								continue;
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						var fname = chels[i].FName.ToLower();
 | 
			
		||||
						var sname = chels[i].SName.ToLower();
 | 
			
		||||
						var tname = chels[i].TName.ToLower();
 | 
			
		||||
						var bday = chels[i].Birthday.ToString("yyyy.MM.dd");
 | 
			
		||||
						var adres = chels[i].Address.ToLower();
 | 
			
		||||
						var inn = chels[i].INN.ToLower();
 | 
			
		||||
						var snils = chels[i].SNILS.ToLower();
 | 
			
		||||
						var pasp = chels[i].Pasport.ToLower();
 | 
			
		||||
						if (
 | 
			
		||||
							fname.Contains(filter) || sname.Contains(filter) ||
 | 
			
		||||
							tname.Contains(filter) || bday.Contains(filter) ||
 | 
			
		||||
							adres.Contains(filter) || inn.Contains(filter) ||
 | 
			
		||||
							snils.Contains(filter) || pasp.Contains(filter)
 | 
			
		||||
							)
 | 
			
		||||
							i++;
 | 
			
		||||
						else
 | 
			
		||||
							chels.RemoveAt(i);
 | 
			
		||||
					}
 | 
			
		||||
					return chels.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static string[][] ChelListTableMain(string filter = null, bool isWorker = true)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				return ChelListTableMain(ChelList(filter, isWorker));
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static string[][] ChelListTableMain(Chel[] data)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				var result = new List<string[]>();
 | 
			
		||||
				foreach (var chel in data)
 | 
			
		||||
					result.Add(
 | 
			
		||||
						new string[]
 | 
			
		||||
						{
 | 
			
		||||
							chel.Id.ToString(),
 | 
			
		||||
							chel.FName.ToString(),
 | 
			
		||||
							chel.SName.ToString(),
 | 
			
		||||
							chel.TName.ToString(),
 | 
			
		||||
							chel.Male ? "Муж." : "Жен.",
 | 
			
		||||
							chel.Birthday.ToString("yyyy.MM.dd"),
 | 
			
		||||
							chel.Address.ToString(),
 | 
			
		||||
							chel.Phone.ToString(),
 | 
			
		||||
							chel.INN.ToString(),
 | 
			
		||||
							chel.SNILS.ToString(),
 | 
			
		||||
							chel.Pasport.ToString(),
 | 
			
		||||
							chel.Pensia ? "Да" : "Нет",
 | 
			
		||||
						}
 | 
			
		||||
					);
 | 
			
		||||
				return result.ToArray();
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										264
									
								
								DataBase/ChildDB.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										264
									
								
								DataBase/ChildDB.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,264 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
	public class Child
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		[ForeignKey("Chel")]
 | 
			
		||||
		public int? Parent1Id { get; set; }
 | 
			
		||||
		public Chel Parent1 { get; set; }
 | 
			
		||||
		[ForeignKey("Chel")]
 | 
			
		||||
		public int? Parent2Id { get; set; }
 | 
			
		||||
		public Chel Parent2 { get; set; }
 | 
			
		||||
		public string FName { get; set; }
 | 
			
		||||
		public string SName { get; set; }
 | 
			
		||||
		public string TName { get; set; }
 | 
			
		||||
		public bool Male { get; set; }
 | 
			
		||||
		public DateTime Birthday { get; set; }
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		public static void ChildCheckValid(Child obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					throw new Exception("Ошибка инициализации ребенка.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.FName))
 | 
			
		||||
					throw new Exception("Пустая фамилия.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.FName))
 | 
			
		||||
					throw new Exception("Пустое имя.");
 | 
			
		||||
				if (!obj.Parent2Id.HasValue && !obj.Parent1Id.HasValue)
 | 
			
		||||
					throw new Exception("Не указано ни одного родителя.");
 | 
			
		||||
				if (obj.Parent2Id.HasValue && obj.Parent1Id.HasValue && obj.Parent1Id.Value == obj.Parent2Id.Value)
 | 
			
		||||
					throw new Exception("Указан один и тот же родитель 2 раза.");
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Child ChildGetById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Childy
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void ChildAdd(Child obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ChildCheckValid(obj);
 | 
			
		||||
				if (!obj.Parent1Id.HasValue && obj.Parent2Id.HasValue)
 | 
			
		||||
        {
 | 
			
		||||
					obj.Parent1Id = obj.Parent2Id;
 | 
			
		||||
					obj.Parent2Id = null;
 | 
			
		||||
				}
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Childy.Add(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void ChildChange(Child obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ChildCheckValid(obj);
 | 
			
		||||
				var localObjById = ChildGetById(obj.Id);
 | 
			
		||||
				if (localObjById == null)
 | 
			
		||||
					throw new Exception("Не существует запись о ребенке.");
 | 
			
		||||
				if (!obj.Parent1Id.HasValue && obj.Parent2Id.HasValue)
 | 
			
		||||
				{
 | 
			
		||||
					obj.Parent1Id = obj.Parent2Id;
 | 
			
		||||
					obj.Parent2Id = null;
 | 
			
		||||
				}
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Childy.Update(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void ChildDelete(Child obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					return;
 | 
			
		||||
				var localObj = ChildGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Запись о ребенке не существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Childy.Remove(localObj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Child[] ChildList(string filter = null)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var child = (
 | 
			
		||||
						from a in db.Childy
 | 
			
		||||
						select a
 | 
			
		||||
						).ToList();
 | 
			
		||||
					var _filter = string.IsNullOrEmpty(filter) ? "" : filter.ToLower();
 | 
			
		||||
					for (var i = 0; i < child.Count;)
 | 
			
		||||
					{
 | 
			
		||||
						var fname = child[i].FName.ToLower();
 | 
			
		||||
						var sname = child[i].SName.ToLower();
 | 
			
		||||
						var tname = child[i].TName.ToLower();
 | 
			
		||||
						var bday = child[i].Birthday.ToString("yyyy.MM.dd");
 | 
			
		||||
						if (
 | 
			
		||||
							fname.Contains(filter) || sname.Contains(filter) ||
 | 
			
		||||
							tname.Contains(filter) || bday.Contains(filter)
 | 
			
		||||
							)
 | 
			
		||||
							i++;
 | 
			
		||||
						else
 | 
			
		||||
							child.RemoveAt(i);
 | 
			
		||||
					}
 | 
			
		||||
					return child.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static string[][] ChildTableMain(string filter = null)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var result = new List<string[]>();
 | 
			
		||||
					var childs = ChildList(filter);
 | 
			
		||||
					foreach (var child in childs)
 | 
			
		||||
					{
 | 
			
		||||
						result.Add(
 | 
			
		||||
							new string[]
 | 
			
		||||
							{
 | 
			
		||||
								child.Id.ToString(),
 | 
			
		||||
								child.FName + " " +
 | 
			
		||||
									child.SName[0].ToString() + "." +
 | 
			
		||||
									((!string.IsNullOrEmpty(child.TName)) ?
 | 
			
		||||
										child.TName[0].ToString() + "." : ""),
 | 
			
		||||
								child.Male ? "Мальчик" : "Девочка",
 | 
			
		||||
								child.Birthday.ToString("yyyy.MM.dd"),
 | 
			
		||||
								child.Parent1Id.HasValue ? ChelGetFIOShortById(child.Parent1Id.Value) : "",
 | 
			
		||||
								child.Parent2Id.HasValue ? ChelGetFIOShortById(child.Parent2Id.Value) : ""
 | 
			
		||||
							}
 | 
			
		||||
						);
 | 
			
		||||
					}
 | 
			
		||||
					return result.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static int ChildCount(DateTime dt, bool? isMale = null)
 | 
			
		||||
    {
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var workIds = (
 | 
			
		||||
						from a in db.Rabotniky
 | 
			
		||||
						where
 | 
			
		||||
							!a.End.HasValue ||
 | 
			
		||||
							(
 | 
			
		||||
								dt >= a.Start
 | 
			
		||||
									&&
 | 
			
		||||
								dt <= a.End.Value
 | 
			
		||||
							)
 | 
			
		||||
						select a.ChelId
 | 
			
		||||
						).ToArray();
 | 
			
		||||
					var _dt = dt.AddYears(-15);
 | 
			
		||||
					var res = (
 | 
			
		||||
						from a in db.Childy
 | 
			
		||||
						where
 | 
			
		||||
							a.Birthday > _dt
 | 
			
		||||
								&&
 | 
			
		||||
							(
 | 
			
		||||
								!isMale.HasValue
 | 
			
		||||
									||
 | 
			
		||||
								a.Male == isMale.Value
 | 
			
		||||
							)
 | 
			
		||||
								&&
 | 
			
		||||
							(
 | 
			
		||||
								(
 | 
			
		||||
									a.Parent1Id.HasValue
 | 
			
		||||
										&&
 | 
			
		||||
									workIds.Contains(a.Parent1Id.Value)
 | 
			
		||||
								)
 | 
			
		||||
								 ||
 | 
			
		||||
								(
 | 
			
		||||
									a.Parent2Id.HasValue
 | 
			
		||||
										&&
 | 
			
		||||
									workIds.Contains(a.Parent2Id.Value)
 | 
			
		||||
								)
 | 
			
		||||
							)
 | 
			
		||||
						select a
 | 
			
		||||
						).Count();
 | 
			
		||||
					return res;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -15,7 +15,14 @@ namespace Diplom_O.DataBase
 | 
			
		||||
		public DbSet<Shtat> Shtat { get; set; }
 | 
			
		||||
		public DbSet<Rabotnik> Rabotniky { get; set; }
 | 
			
		||||
		public DbSet<Chel> Chely { get; set; }
 | 
			
		||||
		public DbSet<ChelToChel> ChelToChely  { get; set; }
 | 
			
		||||
		public DbSet<TypeStaj> TypeStajy { get; set; }
 | 
			
		||||
		public DbSet<RabotnikTypeStaj> RabotnikTypeStajy { get; set; }
 | 
			
		||||
		public DbSet<Child> Childy { get; set; }
 | 
			
		||||
		public DbSet<Learn> Learny { get; set; }
 | 
			
		||||
		public DbSet<CorrStaj> CorrStajy { get; set; }
 | 
			
		||||
		public DbSet<Free> Freey { get; set; }
 | 
			
		||||
		public DbSet<Access> Accessy { get; set; }
 | 
			
		||||
		public DbSet<User> Usery { get; set; }
 | 
			
		||||
 | 
			
		||||
		public MainDB()
 | 
			
		||||
		{
 | 
			
		||||
@@ -29,67 +36,30 @@ namespace Diplom_O.DataBase
 | 
			
		||||
		protected override void OnModelCreating(ModelBuilder modelBuilder) { }
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	public class Rabotnik
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		[ForeignKey("Chel")]
 | 
			
		||||
		public int ChelId { get; set; }
 | 
			
		||||
		public Chel Chel { get; set; }
 | 
			
		||||
		[ForeignKey("Shtat")]
 | 
			
		||||
		public int ShtatId { get; set; }
 | 
			
		||||
		public Shtat Shtat { get; set; }
 | 
			
		||||
 | 
			
		||||
		public string KodSotr { get; set; }
 | 
			
		||||
		public string Kategoriya { get; set; }
 | 
			
		||||
		public bool Pensiya { get; set; }
 | 
			
		||||
 | 
			
		||||
		public DateTime Start { get; set; }
 | 
			
		||||
		public DateTime? End { get; set; }
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public class Shtat
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		public string Doljnost { get; set; }
 | 
			
		||||
		public int Size { get; set; }
 | 
			
		||||
		public bool Active { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
	public class Chel
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		public string FName { get; set; }
 | 
			
		||||
		public string SName { get; set; }
 | 
			
		||||
		public string TName { get; set; }
 | 
			
		||||
		public bool Male { get; set; }
 | 
			
		||||
		public DateTime Birthday { get; set; }
 | 
			
		||||
		public string Address { get; set; }
 | 
			
		||||
		public string INN { get; set; }
 | 
			
		||||
		public string SNILS { get; set; }
 | 
			
		||||
		public string Pasport { get; set; }
 | 
			
		||||
		public List<Rabotnik> Rabota { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
	public class ChelToChel
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		[ForeignKey("Chel1")]
 | 
			
		||||
		public int Chel1Id { get; set; }
 | 
			
		||||
		public Chel Chel1 { get; set; }
 | 
			
		||||
		[ForeignKey("Chel2")]
 | 
			
		||||
		public int Chel2Id { get; set; }
 | 
			
		||||
		public Chel Chel2 { get; set; }
 | 
			
		||||
		public int Lvl { get; set; }
 | 
			
		||||
		public static void InitDB()
 | 
			
		||||
    {
 | 
			
		||||
			if (UserGetByLogin("Admin") != null)
 | 
			
		||||
				return;
 | 
			
		||||
			var user = new User()
 | 
			
		||||
			{
 | 
			
		||||
				Login = "Admin",
 | 
			
		||||
				Pass = "Admin",
 | 
			
		||||
				Hide = true,
 | 
			
		||||
				Default = 7
 | 
			
		||||
			};
 | 
			
		||||
			UserAdd(user);
 | 
			
		||||
    }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										179
									
								
								DataBase/CorrStajDB.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								DataBase/CorrStajDB.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,179 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
  public class CorrStaj
 | 
			
		||||
  {
 | 
			
		||||
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
    public int Id { get; set; }
 | 
			
		||||
		[ForeignKey("Chel")]
 | 
			
		||||
		public int ChelId { get; set; }
 | 
			
		||||
		public Chel Chel { get; set; }
 | 
			
		||||
		[ForeignKey("TypeStaj")]
 | 
			
		||||
		public int TypeStajId { get; set; }
 | 
			
		||||
		public TypeStaj TypeStaj { get; set; }
 | 
			
		||||
		public int Year { get; set; }
 | 
			
		||||
		public int Month { get; set; }
 | 
			
		||||
		public int Day { get; set; }
 | 
			
		||||
		public bool AddFlag { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		public static void CorrStajValid(CorrStaj obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					throw new Exception("Ошибка инициализации стажа.");
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static CorrStaj CorrStajGetById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var corrstaj =
 | 
			
		||||
						from a in db.CorrStajy
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return corrstaj.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static CorrStaj CorrStaj(int chelId, string name)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var ts = TypeStajGetByName(name);
 | 
			
		||||
					if (ts == null)
 | 
			
		||||
						return null;
 | 
			
		||||
					var corrstaj =
 | 
			
		||||
						from a in db.CorrStajy
 | 
			
		||||
						where a.TypeStajId == ts.Id && a.ChelId == chelId
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return corrstaj.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void CorrStajAdd(CorrStaj obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				CorrStajValid(obj);
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.CorrStajy.Add(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void CorrStajChange(CorrStaj obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				CorrStajValid(obj);
 | 
			
		||||
				var localObjById = CorrStajGetById(obj.Id);
 | 
			
		||||
				var localObjByName = CorrStaj(obj.ChelId, TypeStajGetById(obj.TypeStajId).Name);
 | 
			
		||||
				if (localObjById == null)
 | 
			
		||||
					throw new Exception("Корректировка стажа не существует.");
 | 
			
		||||
				if (localObjByName != null &&
 | 
			
		||||
					localObjByName.Id != localObjById.Id)
 | 
			
		||||
					throw new Exception("Корректировка стажа существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.CorrStajy.Update(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void CorrStajDelete(CorrStaj obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					return;
 | 
			
		||||
				var localObj = CorrStajGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Корректироваки стажа не существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.CorrStajy.Remove(localObj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static CorrStaj[] CorrStajList(int chelId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = (
 | 
			
		||||
						from a in db.CorrStajy
 | 
			
		||||
						where a.ChelId == chelId
 | 
			
		||||
						select a
 | 
			
		||||
						).ToList();
 | 
			
		||||
					return res.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										224
									
								
								DataBase/FreeDB.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										224
									
								
								DataBase/FreeDB.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,224 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
	public class Free
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		[ForeignKey("Chel")]
 | 
			
		||||
		public int ChelId { get; set; }
 | 
			
		||||
		public Chel Chel { get; set; }
 | 
			
		||||
		public string Type { get; set; }
 | 
			
		||||
		public DateTime Start { get; set; }
 | 
			
		||||
		public DateTime? End { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		public static void FreeCheckValid(Free obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null) throw new Exception("Ошибка инициализации.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.Type)) throw new Exception("Тип не указан.");
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static Free FreeGetById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Freey
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void FreeAdd(Free obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				FreeCheckValid(obj);
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					obj.Start = new DateTime(obj.Start.Year, obj.Start.Month, obj.Start.Day, 0, 0, 0);
 | 
			
		||||
					if (obj.End.HasValue)
 | 
			
		||||
						obj.End = new DateTime(obj.End.Value.Year, obj.End.Value.Month, obj.End.Value.Day, 23, 59, 59);
 | 
			
		||||
					db.Freey.Add(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void FreeChange(Free obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				FreeCheckValid(obj);
 | 
			
		||||
				var localObj = FreeGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Отстранение не указано.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					obj.Start = new DateTime(obj.Start.Year, obj.Start.Month, obj.Start.Day, 0, 0, 0);
 | 
			
		||||
					if (obj.End.HasValue)
 | 
			
		||||
						obj.End = new DateTime(obj.End.Value.Year, obj.End.Value.Month, obj.End.Value.Day, 23, 59, 59);
 | 
			
		||||
					db.Freey.Update(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void FreeDelete(Free obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					return;
 | 
			
		||||
				var localObj = FreeGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Отстранение не существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Freey.Remove(localObj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static Free[] FreeList(int chelId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var free = (
 | 
			
		||||
						from a in db.Freey
 | 
			
		||||
						where a.ChelId == chelId
 | 
			
		||||
						select a
 | 
			
		||||
						).ToArray();
 | 
			
		||||
					return free;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Dictionary<string, int> FreeListDays(int chelId, DateTime start, DateTime end)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
        {
 | 
			
		||||
					var list =
 | 
			
		||||
						from a in db.Freey
 | 
			
		||||
						where
 | 
			
		||||
							a.ChelId == chelId &&
 | 
			
		||||
							a.Start <= end &&
 | 
			
		||||
							(!a.End.HasValue || a.End.Value >= start)
 | 
			
		||||
						select a;
 | 
			
		||||
					var subres = new Dictionary<string, int>();
 | 
			
		||||
					foreach(var r in list)
 | 
			
		||||
          {
 | 
			
		||||
						var s = r.Start <= start ? start : r.Start;
 | 
			
		||||
						var e = r.End.HasValue ?
 | 
			
		||||
							r.End.Value >= end ? end :
 | 
			
		||||
								r.End.Value :
 | 
			
		||||
							end;
 | 
			
		||||
						var d = (int)Math.Ceiling((e - s).TotalDays);
 | 
			
		||||
						if (d <= 0)
 | 
			
		||||
							continue;
 | 
			
		||||
						if (!subres.ContainsKey("Общее"))
 | 
			
		||||
							subres.Add("Общее", 0);
 | 
			
		||||
						subres["Общее"] = subres["Общее"] + d;
 | 
			
		||||
						if (!subres.ContainsKey(r.Type))
 | 
			
		||||
							subres.Add(r.Type, 0);
 | 
			
		||||
						subres[r.Type] = subres[r.Type] + d;
 | 
			
		||||
          }
 | 
			
		||||
					return subres;
 | 
			
		||||
        }
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static string[][] FreeListTable(int chelId, DateTime? start = null, DateTime? end = null)
 | 
			
		||||
    {
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var list =
 | 
			
		||||
						from a in db.Freey
 | 
			
		||||
						where
 | 
			
		||||
							a.ChelId == chelId &&
 | 
			
		||||
							(!end.HasValue || a.Start <= end.Value) &&
 | 
			
		||||
							(!a.End.HasValue || !start.HasValue || a.End.Value >= start.Value)
 | 
			
		||||
						select a;
 | 
			
		||||
					var subres = new List<string[]>();
 | 
			
		||||
					foreach (var r in list)
 | 
			
		||||
					{
 | 
			
		||||
						var s = !start.HasValue ? r.Start :
 | 
			
		||||
							r.Start <= start ? start.Value : r.Start;
 | 
			
		||||
						var e = r.End.HasValue ?
 | 
			
		||||
							end.HasValue ?
 | 
			
		||||
							r.End.Value >= end ? end.Value :
 | 
			
		||||
								r.End.Value :
 | 
			
		||||
							end.Value :
 | 
			
		||||
							DateTime.Now;
 | 
			
		||||
						subres.Add(
 | 
			
		||||
							new string[]{
 | 
			
		||||
								r.Id.ToString(),
 | 
			
		||||
								r.Type,
 | 
			
		||||
								s.ToString("yyyy.MM.dd"),
 | 
			
		||||
								e.ToString("yyyy.MM.dd"),
 | 
			
		||||
								Math.Ceiling((e - s).TotalDays).ToString()
 | 
			
		||||
						});
 | 
			
		||||
					}
 | 
			
		||||
					return subres.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,340 +0,0 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
	public static class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		public static void ChkShtat(Shtat obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.Doljnost)) throw new Exception("Пустая должность.");
 | 
			
		||||
				if (obj.Size <= 0) throw new Exception("Количество мест <= 0.");
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static Shtat GetShtat(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = from a in db.Shtat
 | 
			
		||||
										where a.Id == id
 | 
			
		||||
										select a;
 | 
			
		||||
					try { return res.Single(); }
 | 
			
		||||
					catch { return null; }
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static (Shtat shtat, int ost)[] ListShtat(string filter = null)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var f = (string.IsNullOrEmpty(filter)) ? "" : filter.ToLower();
 | 
			
		||||
					var shtat = (string.IsNullOrEmpty(f)) ?
 | 
			
		||||
						(from a in db.Shtat
 | 
			
		||||
						 where a.Active
 | 
			
		||||
						 select a).ToArray() :
 | 
			
		||||
						 (from a in db.Shtat
 | 
			
		||||
							where a.Doljnost.ToLower().Contains(f) && a.Active
 | 
			
		||||
							select a).ToArray();
 | 
			
		||||
					var res = new List<(Shtat shtat, int ost)>();
 | 
			
		||||
					for (var i = 0; i < shtat.Length; i++)
 | 
			
		||||
						res.Add((shtat[i], shtat[i].Size - BusySizeShtat(shtat[i].Id)));
 | 
			
		||||
					return res.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static void AddShtat(Shtat obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ChkShtat(obj);
 | 
			
		||||
				if (HaveDoljFromShtat(obj.Doljnost)) throw new Exception("Должность существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					obj.Active = true;
 | 
			
		||||
					db.Shtat.Add(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static void ChangeShtat(Shtat obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ChkShtat(obj);
 | 
			
		||||
				if (GetShtat(obj.Id) == null) throw new Exception("Должность не существует.");
 | 
			
		||||
				if (GetShtat(obj.Id).Doljnost != obj.Doljnost && HaveDoljFromShtat(obj.Doljnost)) throw new Exception("Должность существует.");
 | 
			
		||||
				if (obj.Size < BusySizeShtat(obj.Id)) throw new Exception("Занятых мест больше > указанных.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Shtat.Update(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static void DelShtat(Shtat obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ChkShtat(obj);
 | 
			
		||||
				if (GetShtat(obj.Id) == null) throw new Exception("Должность не существует.");
 | 
			
		||||
				if (BusySizeShtat(obj.Id) > 0) throw new Exception("Есть занятые места.");
 | 
			
		||||
				obj.Active = false;
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Shtat.Update(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static int BusySizeShtat(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = (from a in db.Rabotniky
 | 
			
		||||
										 where a.ShtatId == id && !a.End.HasValue
 | 
			
		||||
										 select a).ToArray();
 | 
			
		||||
					return res.Length;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static bool HaveDoljFromShtat(string dolj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var chkDolj = from a in db.Shtat
 | 
			
		||||
												where a.Doljnost == dolj && a.Active
 | 
			
		||||
												select a;
 | 
			
		||||
					return chkDolj.Count() > 0;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void ChkChel(Chel chel)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (string.IsNullOrEmpty(chel.FName)) throw new Exception("Фамилия не указана.");
 | 
			
		||||
				if (string.IsNullOrEmpty(chel.SName)) throw new Exception("Имя не указано.");
 | 
			
		||||
				if (chel.Birthday > DateTime.Now) throw new Exception("Дата рождения не верна.");
 | 
			
		||||
				var rgx = new Regex("^[0-9]{12}$");
 | 
			
		||||
				if (!rgx.IsMatch(chel.INN)) throw new Exception("ИНН указан неверно.");
 | 
			
		||||
				rgx = new Regex("^[0-9]{3}-[0-9]{3}-[0-9]{3} [0-9]{2}$");
 | 
			
		||||
				if (!rgx.IsMatch(chel.SNILS)) throw new Exception("СНИЛС указан неверно.");
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static Chel GetChel(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = from a in db.Chely
 | 
			
		||||
										where a.Id == id
 | 
			
		||||
										select a;
 | 
			
		||||
					try { return res.Single(); }
 | 
			
		||||
					catch { return null; }
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static Chel[] ListChel(string filter = null)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var f = (string.IsNullOrEmpty(filter)) ? "" : filter.ToLower();
 | 
			
		||||
					return (string.IsNullOrEmpty(f)) ?
 | 
			
		||||
						(from a in db.Chely
 | 
			
		||||
						 select a).ToArray() :
 | 
			
		||||
						 (from a in db.Chely
 | 
			
		||||
							where
 | 
			
		||||
							  (!string.IsNullOrEmpty(a.FName) && a.FName.ToLower().Contains(f)) ||
 | 
			
		||||
								(!string.IsNullOrEmpty(a.SName) && a.SName.ToLower().Contains(f)) ||
 | 
			
		||||
								(!string.IsNullOrEmpty(a.TName) && a.TName.ToLower().Contains(f)) ||
 | 
			
		||||
								a.Birthday.ToString("yyyy.MM.dd").ToLower().Contains(f) ||
 | 
			
		||||
								(!string.IsNullOrEmpty(a.Address) && a.Address.ToLower().Contains(f)) ||
 | 
			
		||||
								(!string.IsNullOrEmpty(a.INN) && a.INN.ToLower().Contains(f)) ||
 | 
			
		||||
								(!string.IsNullOrEmpty(a.SNILS) && a.SNILS.ToLower().Contains(f)) ||
 | 
			
		||||
								(!string.IsNullOrEmpty(a.Pasport) && a.Pasport.ToLower().Contains(f))
 | 
			
		||||
							select a).ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static bool HaveChelRabotnik(int id, bool all=false)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = (from a in db.Rabotniky
 | 
			
		||||
										 where a.ChelId == id && (all || !a.End.HasValue)
 | 
			
		||||
										 select a).ToArray();
 | 
			
		||||
					return res.Length > 0;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static void AddChel(Chel chel)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ChkChel(chel);
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Chely.Add(chel);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static void ChangeChel(Chel chel)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ChkChel(chel);
 | 
			
		||||
				if (GetChel(chel.Id) == null) throw new Exception("Человека не существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Chely.Update(chel);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static void DelChel(Chel chel)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ChkChel(chel);
 | 
			
		||||
				if (GetChel(chel.Id) == null) throw new Exception("Человека не существует.");
 | 
			
		||||
				if (HaveChelRabotnik(chel.Id, true)) throw new Exception("Человек есть в таблице работников.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Chely.Remove(chel);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static bool HaveChelToChel(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = (from a in db.ChelToChely
 | 
			
		||||
										 where a.Chel1Id == id || a.Chel2Id == id
 | 
			
		||||
										 select a).Count();
 | 
			
		||||
					return res > 0;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static bool CanBirthdayChelToChel(int id, DateTime date)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = (from a in db.ChelToChely
 | 
			
		||||
										 join b in db.Chely on a.Chel2Id equals b.Id
 | 
			
		||||
										 join c in db.Chely on a.Chel1Id equals c.Id
 | 
			
		||||
										 where (a.Chel1Id == id && date > b.Birthday) ||
 | 
			
		||||
										       (a.Chel2Id == id && date < c.Birthday)
 | 
			
		||||
										 select a).Count();
 | 
			
		||||
					return res == 0;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static (int chelToChelId, Chel chel, int lvl)[] ListRodFromChel(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				var rodChel = new List<(int chelToChelId, Chel chel, int lvl)>();
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var parents = new List<(Chel chel,int lvl)>() { (GetChel(id), 0) };
 | 
			
		||||
					var childrens = new List<(Chel chel, int lvl)>() { (GetChel(id), 0) };
 | 
			
		||||
					while (parents.Count > 0 || childrens.Count > 0)
 | 
			
		||||
					{
 | 
			
		||||
						var newParents = new List<(Chel chel, int lvl)>();
 | 
			
		||||
						var newChildrens = new List<(Chel chel, int lvl)>();
 | 
			
		||||
						for(var i = 0; i < parents.Count || i < childrens.Count; i++)
 | 
			
		||||
						{
 | 
			
		||||
							var parentsLinks =
 | 
			
		||||
								(from a in db.ChelToChely
 | 
			
		||||
								 where (i < parents.Count) && a.Chel2Id == parents[i].chel.Id
 | 
			
		||||
								 select a).ToArray();
 | 
			
		||||
							var childrensLinks =
 | 
			
		||||
								(from a in db.ChelToChely
 | 
			
		||||
								 where (i < childrens.Count) && a.Chel1Id == childrens[i].chel.Id
 | 
			
		||||
								 select a).ToArray();
 | 
			
		||||
							for (var j = 0; j < parentsLinks.Length || j < childrensLinks.Length; j++)
 | 
			
		||||
							{
 | 
			
		||||
								var chel = j < parentsLinks.Length ? GetChel(parentsLinks[j].Chel1Id) : null;
 | 
			
		||||
								if (chel != null && rodChel.FindAll(x => x.chel.Id == chel.Id).Count == 0)
 | 
			
		||||
								{
 | 
			
		||||
									rodChel.Add((parentsLinks[j].Id, chel, parents[i].lvl - parentsLinks[j].Lvl));
 | 
			
		||||
									newParents.Add((chel, parents[i].lvl - parentsLinks[j].Lvl));
 | 
			
		||||
								}
 | 
			
		||||
 | 
			
		||||
								chel = j < childrensLinks.Length ? GetChel(childrensLinks[j].Chel2Id) : null;
 | 
			
		||||
								if (chel != null && rodChel.FindAll(x => x.chel.Id == chel.Id).Count == 0)
 | 
			
		||||
								{
 | 
			
		||||
									rodChel.Add((childrensLinks[j].Id, chel, childrens[i].lvl + childrensLinks[j].Lvl));
 | 
			
		||||
									newChildrens.Add((chel, childrens[i].lvl + childrensLinks[j].Lvl));
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
						parents = newParents;
 | 
			
		||||
						childrens = newChildrens;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				return rodChel.OrderByDescending(x => x.lvl).ToArray();
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static ChelToChel GetChelToChel(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = from a in db.ChelToChely
 | 
			
		||||
										where a.Id == id
 | 
			
		||||
										select a;
 | 
			
		||||
					try { return res.Single(); }
 | 
			
		||||
					catch { return null; }
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										182
									
								
								DataBase/LearnDB.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								DataBase/LearnDB.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,182 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
	public class Learn
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		[ForeignKey("Chel")]
 | 
			
		||||
		public int ChelId { get; set; }
 | 
			
		||||
		public Chel Chel { get; set; }
 | 
			
		||||
		public string NameSchool { get; set; }
 | 
			
		||||
		public string Type { get; set; }
 | 
			
		||||
		public string Spec { get; set; }
 | 
			
		||||
		public string Curs { get; set; }
 | 
			
		||||
		public string ProfPer { get; set; }
 | 
			
		||||
		public DateTime End { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		public static void LearnCheckValid(Learn obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null) throw new Exception("Ошибка инициализации.");
 | 
			
		||||
				if (ChelGetById(obj.ChelId) == null) throw new Exception("Человек не указан.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.NameSchool)) throw new Exception("Обр. учр. не указано.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.Type)) throw new Exception("Уровень не указан.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.Spec)) throw new Exception("Специальность не указана.");
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static Learn LearnGetById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Learny
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void LearnAdd(Learn obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				LearnCheckValid(obj);
 | 
			
		||||
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Learny.Add(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void LearnChange(Learn obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				LearnCheckValid(obj);
 | 
			
		||||
				var localObj = LearnGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Образование не указано.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Learny.Update(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void LearnDelete(Learn obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					return;
 | 
			
		||||
				var localObj = LearnGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Образование не существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Learny.Remove(localObj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static Learn[] LearnList(int chelId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var learns = (
 | 
			
		||||
						from a in db.Learny
 | 
			
		||||
						where a.ChelId == chelId
 | 
			
		||||
						select a
 | 
			
		||||
						).ToArray();
 | 
			
		||||
					return learns;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static string[][] LearnListTableMain(int chelId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				return LearnListTableMain(LearnList(chelId));
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static string[][] LearnListTableMain(Learn[] data)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				var result = new List<string[]>();
 | 
			
		||||
				foreach (var learn in data)
 | 
			
		||||
					result.Add(
 | 
			
		||||
						new string[]
 | 
			
		||||
						{
 | 
			
		||||
							learn.Id.ToString(),
 | 
			
		||||
							learn.NameSchool,
 | 
			
		||||
							learn.Type,
 | 
			
		||||
							learn.Spec,
 | 
			
		||||
							learn.End.ToString("yyyy.MM.dd"),
 | 
			
		||||
							learn.Curs,
 | 
			
		||||
							learn.ProfPer
 | 
			
		||||
						}
 | 
			
		||||
					);
 | 
			
		||||
				return result.ToArray();
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										448
									
								
								DataBase/RabotinkDB.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										448
									
								
								DataBase/RabotinkDB.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,448 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
	public class Rabotnik
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		[ForeignKey("Chel")]
 | 
			
		||||
		public int ChelId { get; set; }
 | 
			
		||||
		public Chel Chel { get; set; }
 | 
			
		||||
		[ForeignKey("Shtat")]
 | 
			
		||||
		public int? ShtatId { get; set; }
 | 
			
		||||
		public Shtat Shtat { get; set; }
 | 
			
		||||
		public string TabNum { get; set; }
 | 
			
		||||
		public bool AnotherWork { get; set; }
 | 
			
		||||
		public DateTime Start { get; set; }
 | 
			
		||||
		public DateTime? End { get; set; }
 | 
			
		||||
		public List<RabotnikTypeStaj> RabotnikTypeStajy { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		public static void RabotnikCheckValid(Rabotnik obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					throw new Exception("Ошибка инициализации сотрудника.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.TabNum) && !obj.AnotherWork)
 | 
			
		||||
					throw new Exception("Пустой табельный номер.");
 | 
			
		||||
				if (
 | 
			
		||||
					obj.Start > (obj.End.HasValue ? obj.End.Value : DateTime.Now)
 | 
			
		||||
					)
 | 
			
		||||
					throw new Exception("Неверная дата.");
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static Rabotnik RabotnikGetById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Rabotniky
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static Rabotnik[] RabotnikHistoryById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				var rabotnik = RabotnikGetById(id);
 | 
			
		||||
				RabotnikCheckValid(rabotnik);
 | 
			
		||||
				return
 | 
			
		||||
					RabotnikHistoryByChelId(
 | 
			
		||||
						rabotnik.ChelId
 | 
			
		||||
						);
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Rabotnik[] RabotnikHistoryByRabotingId(Rabotnik obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				RabotnikCheckValid(obj);
 | 
			
		||||
				return RabotnikHistoryByChelId(
 | 
			
		||||
					obj.ChelId
 | 
			
		||||
					);
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Rabotnik[] RabotnikHistoryByChelId(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Rabotniky
 | 
			
		||||
						where a.ChelId == id
 | 
			
		||||
						orderby a.Start
 | 
			
		||||
						select a;
 | 
			
		||||
					return res.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		public static bool RabotnikCheckDate(int chelId, DateTime start, DateTime? end, int rabotnikId = -1)
 | 
			
		||||
    {
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var now = DateTime.Now;
 | 
			
		||||
					var _end = end ?? now;
 | 
			
		||||
					return (
 | 
			
		||||
						from a in db.Rabotniky
 | 
			
		||||
						where
 | 
			
		||||
							a.ChelId == chelId
 | 
			
		||||
								&&
 | 
			
		||||
							(rabotnikId != -1 ? a.Id != rabotnikId : true)
 | 
			
		||||
								&&
 | 
			
		||||
							(
 | 
			
		||||
								(
 | 
			
		||||
									a.Start >= start
 | 
			
		||||
										&&
 | 
			
		||||
									a.Start <= _end
 | 
			
		||||
								)
 | 
			
		||||
									||
 | 
			
		||||
								(
 | 
			
		||||
									(a.End ?? now) >= start
 | 
			
		||||
										&&
 | 
			
		||||
									(a.End ?? now) <= _end
 | 
			
		||||
								)
 | 
			
		||||
							)
 | 
			
		||||
						select a
 | 
			
		||||
						).Count() == 0;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void RabotnikAdd(Rabotnik obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				RabotnikCheckValid(obj);
 | 
			
		||||
				if (!RabotnikCheckDate(obj.ChelId, obj.Start, obj.End))
 | 
			
		||||
					throw new Exception("Попадает в существующий временной интервал.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Rabotniky.Add(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void RabotnikChange(Rabotnik obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				RabotnikCheckValid(obj);
 | 
			
		||||
				var localObjById = RabotnikGetById(obj.Id);
 | 
			
		||||
				if (localObjById == null)
 | 
			
		||||
					throw new Exception("Не существует запись о сотруднике.");
 | 
			
		||||
				if (obj.ChelId != localObjById.ChelId)
 | 
			
		||||
					throw new Exception("Нельзя менять человека.");
 | 
			
		||||
				if (!RabotnikCheckDate(obj.ChelId, obj.Start, obj.End, obj.Id))
 | 
			
		||||
					throw new Exception("Пересекатеся с другими записями о работе.");
 | 
			
		||||
				/*if (ShtatGetById(obj.ShtatId) == null)
 | 
			
		||||
					throw new Exception("Должность не существует.");*/
 | 
			
		||||
				if (Program.IsDebug)
 | 
			
		||||
					throw new Exception("НАДО ДОРАБОТАТЬ ПРОВЕРКУ ЗАПОЛНЕНИЯ ДОЛЖНОСТЕЙ");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Rabotniky.Update(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void RabotnikDelete(Rabotnik obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					return;
 | 
			
		||||
				var localObj = RabotnikGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Запись о сотруднике не существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var type = FuncDB.RabotnikTypeStajList(obj.Id);
 | 
			
		||||
					foreach (var r in type)
 | 
			
		||||
						FuncDB.RabotnikTypeStajDelete(r);
 | 
			
		||||
					db.Rabotniky.Remove(localObj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Rabotnik[] RabotnikList(string filter = null)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var _filter = string.IsNullOrEmpty(filter) ? null : filter.ToLower();
 | 
			
		||||
					var rabotnik = (
 | 
			
		||||
						from a in db.Rabotniky
 | 
			
		||||
						select a
 | 
			
		||||
						);
 | 
			
		||||
					return rabotnik.ToArray();
 | 
			
		||||
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Rabotnik[] RabotnikListLast(string filter = null)
 | 
			
		||||
    {
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var _chel = FuncDB.ChelList();
 | 
			
		||||
					var rabotnik = new List<Rabotnik>();
 | 
			
		||||
					var _filter = string.IsNullOrEmpty(filter) ? null : filter.ToLower();
 | 
			
		||||
					foreach (var c in _chel)
 | 
			
		||||
          {
 | 
			
		||||
						var rab = (
 | 
			
		||||
							from a in db.Rabotniky
 | 
			
		||||
							where a.End == null && a.ChelId == c.Id
 | 
			
		||||
							select a
 | 
			
		||||
							).ToArray();
 | 
			
		||||
						if (rab.Length == 0)
 | 
			
		||||
            {
 | 
			
		||||
							rab = (
 | 
			
		||||
								from a in db.Rabotniky
 | 
			
		||||
								where a.ChelId == c.Id
 | 
			
		||||
								orderby a.End descending
 | 
			
		||||
								select a
 | 
			
		||||
								).ToArray();
 | 
			
		||||
            }
 | 
			
		||||
						if (rab.Length > 0)
 | 
			
		||||
							rabotnik.Add(rab[0]);
 | 
			
		||||
          }
 | 
			
		||||
					return rabotnik.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Rabotnik[] RabotnikListByChelId(int chelId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var rabotnik = (
 | 
			
		||||
						from a in db.Rabotniky
 | 
			
		||||
						where a.ChelId == chelId
 | 
			
		||||
						orderby a.Start
 | 
			
		||||
						select a
 | 
			
		||||
						);
 | 
			
		||||
					return rabotnik.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static string[][] RabotnikTableMain(string filter = null)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				return RabotnikTableMain(RabotnikListLast(filter));
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static string[][] RabotnikTableMain(Rabotnik[] data)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var result = new List<string[]>();
 | 
			
		||||
					foreach (var rabotnik in data)
 | 
			
		||||
					{
 | 
			
		||||
						result.Add(
 | 
			
		||||
							new string[]
 | 
			
		||||
							{
 | 
			
		||||
							rabotnik.Id.ToString(),
 | 
			
		||||
							rabotnik.TabNum,
 | 
			
		||||
							ChelGetFIOShortById(rabotnik.ChelId),
 | 
			
		||||
							rabotnik.AnotherWork ?
 | 
			
		||||
								"Иное место" :
 | 
			
		||||
								ShtatGetById(rabotnik.ShtatId.Value).Doljnost
 | 
			
		||||
							}
 | 
			
		||||
						);
 | 
			
		||||
					}
 | 
			
		||||
					return result.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		public static string[][] RabotnikByChelIdTable(int chelId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				return RabotnikByChelIdTable(RabotnikListByChelId(chelId));
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static string[][] RabotnikByChelIdTable(Rabotnik[] data)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var result = new List<string[]>();
 | 
			
		||||
					foreach (var rabotnik in data)
 | 
			
		||||
					{
 | 
			
		||||
						result.Add(
 | 
			
		||||
							new string[]
 | 
			
		||||
							{
 | 
			
		||||
							rabotnik.Id.ToString(),
 | 
			
		||||
							rabotnik.TabNum,
 | 
			
		||||
							rabotnik.AnotherWork ?
 | 
			
		||||
								"Иное место" :
 | 
			
		||||
								ShtatGetById(rabotnik.ShtatId.Value).Doljnost,
 | 
			
		||||
							rabotnik.Start.ToString("yyyy.MM.dd"),
 | 
			
		||||
							rabotnik.End.HasValue ? rabotnik.End.Value.ToString("yyyy.MM.dd") : "По настоящее время"
 | 
			
		||||
							}
 | 
			
		||||
						);
 | 
			
		||||
					}
 | 
			
		||||
					return result.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static (int year, int month, int day) RabotnikGetTotalTime(Rabotnik obj, DateTime? onDate = null)
 | 
			
		||||
    {
 | 
			
		||||
			if (!onDate.HasValue)
 | 
			
		||||
				onDate = DateTime.Now;
 | 
			
		||||
			var year = 0;
 | 
			
		||||
			var month = 0;
 | 
			
		||||
			var day = 0;
 | 
			
		||||
 | 
			
		||||
			if (obj == null)
 | 
			
		||||
				return (year, month, day);
 | 
			
		||||
			var cursor =
 | 
			
		||||
				obj.End.HasValue ?
 | 
			
		||||
					obj.End.Value <= onDate ?
 | 
			
		||||
						obj.End.Value :
 | 
			
		||||
						onDate.Value :
 | 
			
		||||
					onDate.Value;
 | 
			
		||||
			var finish = obj.Start;
 | 
			
		||||
			if (cursor <= finish)
 | 
			
		||||
				return (year, month, day);
 | 
			
		||||
			while (finish.Year < cursor.Year)
 | 
			
		||||
      {
 | 
			
		||||
				year++;
 | 
			
		||||
				cursor = cursor.AddYears(-1);
 | 
			
		||||
      }
 | 
			
		||||
			if (finish.Month > cursor.Month)
 | 
			
		||||
      {
 | 
			
		||||
				year--;
 | 
			
		||||
				cursor = cursor.AddYears(1);
 | 
			
		||||
			}
 | 
			
		||||
			while (finish.Month != cursor.Month)
 | 
			
		||||
			{
 | 
			
		||||
				month++;
 | 
			
		||||
				cursor = cursor.AddMonths(-1);
 | 
			
		||||
			}
 | 
			
		||||
			if (finish.Day > cursor.Day)
 | 
			
		||||
			{
 | 
			
		||||
				month--;
 | 
			
		||||
				cursor = cursor.AddMonths(1);
 | 
			
		||||
			}
 | 
			
		||||
			while (finish.Day != cursor.Day)
 | 
			
		||||
			{
 | 
			
		||||
				day++;
 | 
			
		||||
				cursor = cursor.AddDays(-1);
 | 
			
		||||
			}
 | 
			
		||||
			while (day < 0)
 | 
			
		||||
			{
 | 
			
		||||
				day += 30;
 | 
			
		||||
				month--;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			while (month < 0)
 | 
			
		||||
      {
 | 
			
		||||
				month += 12;
 | 
			
		||||
				year--;
 | 
			
		||||
      }
 | 
			
		||||
			return (year, month, day);
 | 
			
		||||
    }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										188
									
								
								DataBase/RabotnikTypeStajDB.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								DataBase/RabotnikTypeStajDB.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,188 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
  public class RabotnikTypeStaj
 | 
			
		||||
  {
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		[ForeignKey("Rabotnik")]
 | 
			
		||||
		public int RabitnikId { get; set; }
 | 
			
		||||
		[ForeignKey("TypeStaj")]
 | 
			
		||||
		public int TypeStajId { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		public static void RabotnikTypeStajCheckValid(RabotnikTypeStaj obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					throw new Exception("Ошибка инициализации стажа сотрудника.");
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static RabotnikTypeStaj RabotnikTypeStajGetById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.RabotnikTypeStajy
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static RabotnikTypeStaj RabotnikTypeStajGetByTypeStajIdRabotnikId(int typeStajId, int rabotnikId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.RabotnikTypeStajy
 | 
			
		||||
						where a.RabitnikId == rabotnikId &&
 | 
			
		||||
						a.TypeStajId == typeStajId
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void RabotnikTypeStajAdd(RabotnikTypeStaj obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				RabotnikTypeStajCheckValid(obj);
 | 
			
		||||
				if (RabotnikTypeStajGetByTypeStajIdRabotnikId(obj.TypeStajId, obj.RabitnikId) != null )
 | 
			
		||||
					throw new Exception("Тип стажа сотрудника существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.RabotnikTypeStajy.Add(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void RabotnikTypeStajDelete(RabotnikTypeStaj obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					return;
 | 
			
		||||
				var localObj = RabotnikTypeStajGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Тип стажа сотрудника не существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.RabotnikTypeStajy.Remove(localObj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static RabotnikTypeStaj[] RabotnikTypeStajList(int rabId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = (
 | 
			
		||||
						from a in db.RabotnikTypeStajy
 | 
			
		||||
						where a.RabitnikId == rabId
 | 
			
		||||
						select a
 | 
			
		||||
						).ToList();
 | 
			
		||||
					return res.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static string[][] RabotnikTypeStajListString(int rabId)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				var rts = RabotnikTypeStajList(rabId);
 | 
			
		||||
				var res = new List<string[]>();
 | 
			
		||||
				foreach (var r in rts)
 | 
			
		||||
        {
 | 
			
		||||
					res.Add(
 | 
			
		||||
						new string[]
 | 
			
		||||
            {
 | 
			
		||||
							r.Id.ToString(),
 | 
			
		||||
							TypeStajGetById(r.TypeStajId).Name
 | 
			
		||||
            }
 | 
			
		||||
					);
 | 
			
		||||
        }
 | 
			
		||||
				return res.ToArray();
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static RabotnikTypeStaj[] RabotnikTypeStajListByTypeStaj(int typeStaj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = (
 | 
			
		||||
						from a in db.RabotnikTypeStajy
 | 
			
		||||
						where a.TypeStajId == typeStaj
 | 
			
		||||
						select a
 | 
			
		||||
						).ToList();
 | 
			
		||||
					return res.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										310
									
								
								DataBase/ShtatDB.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										310
									
								
								DataBase/ShtatDB.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,310 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
	public class Shtat
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		public string Doljnost { get; set; }
 | 
			
		||||
		public int Size { get; set; }
 | 
			
		||||
		public bool Active { get; set; }
 | 
			
		||||
		public List<Rabotnik> Rabotniky { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
  {
 | 
			
		||||
		public static void ShtatCheckValid(Shtat obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					throw new Exception("Ошибка инициализации должности.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.Doljnost))
 | 
			
		||||
					throw new Exception("Пустая должность.");
 | 
			
		||||
				if (obj.Size <= 0)
 | 
			
		||||
					throw new Exception("Количество мест <= 0.");
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		private static void ShtatClear()
 | 
			
		||||
    {
 | 
			
		||||
      try
 | 
			
		||||
      {
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var shtat = (
 | 
			
		||||
						from a in db.Shtat
 | 
			
		||||
						where !a.Active
 | 
			
		||||
						select a).ToArray();
 | 
			
		||||
					for (var i = 0; i < shtat.Length; i++)
 | 
			
		||||
						if(ShtatFreeSpaceByShtat(shtat[i]) == shtat[i].Size)
 | 
			
		||||
            {
 | 
			
		||||
							db.Shtat.Remove(shtat[i]);
 | 
			
		||||
							db.SaveChanges();
 | 
			
		||||
						}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
      {
 | 
			
		||||
				return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		public static Shtat ShtatGetById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Shtat
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static Shtat ShtatGetByDoljnost(string doljnost)
 | 
			
		||||
    {
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var chkDolj =
 | 
			
		||||
						from a in db.Shtat
 | 
			
		||||
						where a.Doljnost == doljnost && a.Active
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return chkDolj.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static int ShtatFreeSpaceById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				return
 | 
			
		||||
					ShtatFreeSpaceByShtat(
 | 
			
		||||
						ShtatGetById(id)
 | 
			
		||||
						);
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static int ShtatFreeSpaceByShtat(Shtat obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ShtatCheckValid(obj);
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var now = DateTime.Now;
 | 
			
		||||
					var res = (
 | 
			
		||||
						from a in db.Rabotniky
 | 
			
		||||
						where
 | 
			
		||||
							a.ShtatId == obj.Id
 | 
			
		||||
								&&
 | 
			
		||||
							(
 | 
			
		||||
								!a.End.HasValue
 | 
			
		||||
									||
 | 
			
		||||
								(
 | 
			
		||||
									now >= a.Start
 | 
			
		||||
										&&
 | 
			
		||||
									now <= a.End.Value
 | 
			
		||||
								)
 | 
			
		||||
							)
 | 
			
		||||
						select a).Count();
 | 
			
		||||
					return obj.Size - res;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void ShtatAdd(Shtat obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ShtatCheckValid(obj);
 | 
			
		||||
				if (ShtatGetByDoljnost(obj.Doljnost) != null)
 | 
			
		||||
					throw new Exception("Должность существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					obj.Active = true;
 | 
			
		||||
					db.Shtat.Add(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void ShtatChange(Shtat obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				ShtatCheckValid(obj);
 | 
			
		||||
				var localObjById = ShtatGetById(obj.Id);
 | 
			
		||||
				var localObjByDoljnost = ShtatGetByDoljnost(obj.Doljnost);
 | 
			
		||||
				if (localObjById == null)
 | 
			
		||||
					throw new Exception("Должность не существует.");
 | 
			
		||||
				if (localObjByDoljnost != null &&
 | 
			
		||||
					localObjByDoljnost != localObjById)
 | 
			
		||||
					throw new Exception("Должность существует.");
 | 
			
		||||
				if (localObjById.Size - ShtatFreeSpaceByShtat(localObjById) > obj.Size ) 
 | 
			
		||||
					throw new Exception("Занятых мест больше > указанных.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Shtat.Update(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void ShtatDelete(Shtat obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					return;
 | 
			
		||||
				var localObj = ShtatGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Должность не существует.");
 | 
			
		||||
				if (ShtatFreeSpaceByShtat(localObj) != localObj.Size)
 | 
			
		||||
					throw new Exception("Есть занятые места.");
 | 
			
		||||
				localObj.Active = false;
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Shtat.Update(localObj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
				ShtatClear();
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static (Shtat shtat, int free)[] ShtatList(string filter = null, bool isActual = false)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var shtat = (
 | 
			
		||||
						from a in db.Shtat
 | 
			
		||||
						where a.Active 
 | 
			
		||||
						select a
 | 
			
		||||
						).ToList();
 | 
			
		||||
					var res = new List<(Shtat shtat, int free)>();
 | 
			
		||||
					for (var i = 0; i < shtat.Count; i++)
 | 
			
		||||
					{
 | 
			
		||||
						var free = ShtatFreeSpaceByShtat(shtat[i]);
 | 
			
		||||
						if (isActual && free <= 0)
 | 
			
		||||
							continue;
 | 
			
		||||
						res.Add((
 | 
			
		||||
							shtat[i],
 | 
			
		||||
							free
 | 
			
		||||
							));
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					if (string.IsNullOrEmpty(filter))
 | 
			
		||||
						return res.ToArray();
 | 
			
		||||
 | 
			
		||||
					filter = filter.ToLower();
 | 
			
		||||
					for (var i = 0; i < res.Count;)
 | 
			
		||||
          {
 | 
			
		||||
						var dolj = res[i].shtat.Doljnost.ToLower();
 | 
			
		||||
						if (!dolj.Contains(filter))
 | 
			
		||||
							res.RemoveAt(i);
 | 
			
		||||
						else
 | 
			
		||||
							i++;
 | 
			
		||||
          }
 | 
			
		||||
					return res.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static string[][] ShtatListTableMain(string filter = null, bool isActual = false)
 | 
			
		||||
    {
 | 
			
		||||
      try
 | 
			
		||||
      {
 | 
			
		||||
				return ShtatListTableMain(ShtatList(filter, isActual));
 | 
			
		||||
      }
 | 
			
		||||
      catch
 | 
			
		||||
      {
 | 
			
		||||
				throw;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
		public static string[][] ShtatListTableMain((Shtat shtat, int free)[] data)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				var result = new List<string[]>();
 | 
			
		||||
				foreach (var (shtat, free) in data)
 | 
			
		||||
					result.Add(
 | 
			
		||||
						new string[]
 | 
			
		||||
						{
 | 
			
		||||
							shtat.Id.ToString(),
 | 
			
		||||
							shtat.Doljnost,
 | 
			
		||||
							shtat.Size.ToString(),
 | 
			
		||||
							free.ToString()
 | 
			
		||||
						}
 | 
			
		||||
					);
 | 
			
		||||
				return result.ToArray();
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										194
									
								
								DataBase/TypeStajDB.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								DataBase/TypeStajDB.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,194 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
  public class TypeStaj
 | 
			
		||||
  {
 | 
			
		||||
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
    public int Id { get; set; }
 | 
			
		||||
    public string Name { get; set; }
 | 
			
		||||
		public List<CorrStaj> CorrStajy { get; set; }
 | 
			
		||||
		public List<RabotnikTypeStaj> RabotnikTypeStajy { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		public static void TypeStajCheckValid(TypeStaj obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					throw new Exception("Ошибка инициализации стажа.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.Name))
 | 
			
		||||
					throw new Exception("Пустой стаж.");
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static TypeStaj TypeStajGetById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.TypeStajy
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static TypeStaj TypeStajGetByName(string name)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var chkTypeStaj =
 | 
			
		||||
						from a in db.TypeStajy
 | 
			
		||||
						where a.Name == name
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return chkTypeStaj.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void TypeStajAdd(TypeStaj obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				TypeStajCheckValid(obj);
 | 
			
		||||
				if (TypeStajGetByName(obj.Name) != null)
 | 
			
		||||
					throw new Exception("Тип стажа существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.TypeStajy.Add(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void TypeStajChange(TypeStaj obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				TypeStajCheckValid(obj);
 | 
			
		||||
				var localObjById = TypeStajGetById(obj.Id);
 | 
			
		||||
				var localObjByName = TypeStajGetByName(obj.Name);
 | 
			
		||||
				if (localObjById == null)
 | 
			
		||||
					throw new Exception("Тип стажа не существует.");
 | 
			
		||||
				if (localObjByName != null &&
 | 
			
		||||
					localObjByName != localObjById)
 | 
			
		||||
					throw new Exception("Тип стажа существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.TypeStajy.Update(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void TypeStajDelete(TypeStaj obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					return;
 | 
			
		||||
				var localObj = TypeStajGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Тип стажа не существует.");
 | 
			
		||||
				if (RabotnikTypeStajListByTypeStaj(localObj.Id).Length > 0)
 | 
			
		||||
					throw new Exception("Тип стажа используется.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.TypeStajy.Remove(localObj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static TypeStaj[] TypeStajList(int[] filter = null)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = (
 | 
			
		||||
						from a in db.TypeStajy
 | 
			
		||||
						where filter == null || filter.Contains(a.Id) 
 | 
			
		||||
						select a
 | 
			
		||||
						).ToList();
 | 
			
		||||
					return res.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static string[] TypeStajListString(int[] filter = null)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res = (
 | 
			
		||||
						from a in db.TypeStajy
 | 
			
		||||
						where filter == null || filter.Contains(a.Id)
 | 
			
		||||
						select a.Name
 | 
			
		||||
						).ToList();
 | 
			
		||||
					res.Remove("Общий");
 | 
			
		||||
					return res.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										209
									
								
								DataBase/UserDB.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										209
									
								
								DataBase/UserDB.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,209 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace Diplom_O.DataBase
 | 
			
		||||
{
 | 
			
		||||
	public class User
 | 
			
		||||
	{
 | 
			
		||||
		[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
 | 
			
		||||
		public int Id { get; set; }
 | 
			
		||||
		public string Login { get; set; }
 | 
			
		||||
		public string Pass { get; set; }
 | 
			
		||||
		public bool Hide { get; set; }
 | 
			
		||||
		public int Default { get; set; }
 | 
			
		||||
		public List<Access> Accessy { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static partial class FuncDB
 | 
			
		||||
	{
 | 
			
		||||
		public static void UserCheckValid(User obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null) throw new Exception("Ошибка инициализации.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.Login)) throw new Exception("Логин не указан.");
 | 
			
		||||
				if (string.IsNullOrEmpty(obj.Pass)) throw new Exception("Пароль не указан.");
 | 
			
		||||
				if (obj.Default < 0 || obj.Default > 7) throw new Exception("Форма не существует.");
 | 
			
		||||
			}
 | 
			
		||||
			catch { throw; }
 | 
			
		||||
		}
 | 
			
		||||
		public static User UserGetById(int id)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Usery
 | 
			
		||||
						where a.Id == id
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static User UserGetByLogin(string login)
 | 
			
		||||
    {
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var res =
 | 
			
		||||
						from a in db.Usery
 | 
			
		||||
						where a.Login == login
 | 
			
		||||
						select a;
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						return res.Single();
 | 
			
		||||
					}
 | 
			
		||||
					catch
 | 
			
		||||
					{
 | 
			
		||||
						return null;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		public static void UserAdd(User obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				UserCheckValid(obj);
 | 
			
		||||
				if (UserGetByLogin(obj.Login) != null)
 | 
			
		||||
					throw new Exception("Пользователь существует.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Usery.Add(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
				var user = UserGetByLogin(obj.Login);
 | 
			
		||||
				for (var i = 0; i < FormArray.formAccess.Length; i++)
 | 
			
		||||
				{
 | 
			
		||||
					var access = new Access()
 | 
			
		||||
					{
 | 
			
		||||
						UserId = user.Id,
 | 
			
		||||
						FormId = user.Default,
 | 
			
		||||
						FormatAccess = i
 | 
			
		||||
					};
 | 
			
		||||
					AccessAdd(access);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void UserChange(User obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				UserCheckValid(obj);
 | 
			
		||||
				var localObj = UserGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Пользователь не указан.");
 | 
			
		||||
				var localObjByLogin = UserGetByLogin(obj.Login);
 | 
			
		||||
				if (localObjByLogin != null &&
 | 
			
		||||
					localObjByLogin.Id != localObj.Id)
 | 
			
		||||
					throw new Exception("Логин существует.");
 | 
			
		||||
				if (AccessGetByUserIdFormIdAccessId(localObj.Id, obj.Default, 0)  == null)
 | 
			
		||||
					throw new Exception("Сначала нужен доступ к форме.");
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Usery.Update(obj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static void UserDelete(User obj)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				if (obj == null)
 | 
			
		||||
					return;
 | 
			
		||||
				var localObj = UserGetById(obj.Id);
 | 
			
		||||
				if (localObj == null)
 | 
			
		||||
					throw new Exception("Пользователь не существует.");
 | 
			
		||||
				var acessy = AccessList(localObj.Id);
 | 
			
		||||
				foreach (var a in acessy)
 | 
			
		||||
					AccessDelete(a);
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					db.Usery.Remove(localObj);
 | 
			
		||||
					db.SaveChanges();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static User[] UserList(bool showHide = false)
 | 
			
		||||
		{
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var user = (
 | 
			
		||||
						from a in db.Usery
 | 
			
		||||
						where (showHide || !a.Hide)
 | 
			
		||||
						select a
 | 
			
		||||
						).ToArray();
 | 
			
		||||
					return user;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		public static string[][] UserListTable(bool showHide = false)
 | 
			
		||||
    {
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				using (var db = new MainDB())
 | 
			
		||||
				{
 | 
			
		||||
					var list = UserList(showHide);
 | 
			
		||||
					var subres = new List<string[]>();
 | 
			
		||||
					foreach (var r in list)
 | 
			
		||||
					{
 | 
			
		||||
						subres.Add(
 | 
			
		||||
							new string[]{
 | 
			
		||||
								r.Login
 | 
			
		||||
						});
 | 
			
		||||
					}
 | 
			
		||||
					return subres.ToArray();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch
 | 
			
		||||
			{
 | 
			
		||||
				throw;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user