265 lines
5.5 KiB
C#
265 lines
5.5 KiB
C#
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;
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|