public int AddPredpriyatieKontaktSave2(PredpriyatieKontaktJSON kontakt)
        {
            if (kontakt.IDPred == 0) kontakt.IDPred = Convert.ToInt32(Request.Params["IDPred"]);
            using (var ugtu_db = new UGTU_DBDataContext())
            {
                if ( kontakt.ValSvyazi!=null || kontakt.idNaznach!=null  )
                {
                    int? idKL = null;
                    if (kontakt.FIO == null && kontakt.Otdel == null)
                    {
                        idKL = ugtu_db.KontaktLico.Where(m => m.FIOKontaktLico == null && m.Otdel == null).Select(m => m.IDKontaktL).SingleOrDefault();
                    }
                    if (kontakt.FIO == null && kontakt.Otdel != null)
                    {
                        idKL = ugtu_db.KontaktLico.Where(m => m.FIOKontaktLico == null && m.Otdel == kontakt.Otdel).Select(m => m.IDKontaktL).SingleOrDefault();
                        if (idKL == 0) idKL = null;
                    }
                    if (idKL == null)
                    {
                        KontaktLico KL = new KontaktLico()
                        {
                            idDolznost = AddDolgnost(kontakt.Dolgnost),
                            FIOKontaktLico = kontakt.FIO,
                            Otdel = kontakt.Otdel
                        };
                        ugtu_db.KontaktLico.InsertOnSubmit(KL);
                        ugtu_db.SubmitChanges();
                        idKL = KL.IDKontaktL;
                    }
                    if (kontakt.idNaznach != null)
                    {
                        foreach (var idNaz in kontakt.idNaznach)
                        {
                            KontaktLico_NaznachKontaktLico KL_N = new KontaktLico_NaznachKontaktLico()
                            {
                                IDPredpriyatie = kontakt.IDPred,
                                IDKontaktL = (int)idKL,
                                IDNaznachKontaktL = (int)idNaz
                            };
                            ugtu_db.KontaktLico_NaznachKontaktLico.InsertOnSubmit(KL_N);
                            ugtu_db.SubmitChanges();
                        }
                    }

                    if (kontakt.idTipSvyazi != null)
                    {
                        for (int i = 0; i < kontakt.idTipSvyazi.Count; i++)//возможна ошибка
                        {

                            KontaktLico_Svyaz KL_S = new KontaktLico_Svyaz()
                            {
                                IDKontaktL = (int)idKL,
                                IDTSvyazi = (int)kontakt.idTipSvyazi[i],
                                Znach = kontakt.ValSvyazi[i],
                                IDPredpriyatie = kontakt.IDPred,
                            };
                            ugtu_db.KontaktLico_Svyaz.InsertOnSubmit(KL_S);
                            ugtu_db.SubmitChanges();
                        }
                    }
                    return 1;
                }
                else
                {

                    return 0;
                }
            }
        }
        public JsonResult GetKontakt(int idK, int idP)
        {
            using (var ugtu_db = new UGTU_DBDataContext())
            {
                PredpriyatieKontaktJSON PKJson = new PredpriyatieKontaktJSON();
                var rr = (from KL in ugtu_db.KontaktLico
                          join D in ugtu_db.Dolznost on KL.idDolznost equals D.IDDolznost
                             into g1
                          from D in g1.DefaultIfEmpty()
                          join KL_N in ugtu_db.KontaktLico_NaznachKontaktLico on KL.IDKontaktL equals KL_N.IDKontaktL
                          into g3
                          from KL_N in g3.DefaultIfEmpty()
                          join naznKL in ugtu_db.NaznachKontaktLico on KL_N.IDNaznachKontaktL equals naznKL.IDNaznachKontaktL
                          into g4
                          from naznKL in g4.DefaultIfEmpty()
                          join KL_S in ugtu_db.KontaktLico_Svyaz on KL.IDKontaktL equals KL_S.IDKontaktL
                          into g5
                          from KL_S in g5.DefaultIfEmpty()
                          join TS in ugtu_db.TipSvyazi on KL_S.IDTSvyazi equals TS.IDTSvyazi
                          into g6
                          from TS in g6.DefaultIfEmpty()
                          where KL.IDKontaktL==idK
                          select new
                          {
                              idKontakt = KL.IDKontaktL,
                              idPred1 = (int?)KL_N.IDPredpriyatie,
                              idPred2 = (int?)KL_S.IDPredpriyatie,
                              fio = KL.FIOKontaktLico,
                              dolgnost = D.NameDolznost,
                              naznach = naznKL.NameNaznachKontaktLico,
                              otdel = KL.Otdel,
                              tipsvyazi = TS.NameSvyazi,
                              idtipsvyazi = (int?)TS.IDTSvyazi,
                              valsvyazi = KL_S.Znach,
                              idNaznach = (int?)KL_N.IDNaznachKontaktL
                          }).OrderBy(m => m.idKontakt).ToList();
                var result = rr.Where(m => m.idPred1 == idP && m.idPred2 == idP).ToList();
                result.AddRange(rr.Where(m => m.idPred1 == idP && m.idPred2 == null).ToList());
                result.AddRange(rr.Where(m => m.idPred1 == null && m.idPred2 == idP).ToList());
                foreach (var kontakts in result.Select(m => m.idKontakt).Distinct())
                {

                    PKJson.IDKontakt = result.Where(m => m.idKontakt == kontakts).Select(m => m.idKontakt).FirstOrDefault();
                    PKJson.FIO = result.Where(m => m.idKontakt == kontakts).Select(m => m.fio).FirstOrDefault();
                    PKJson.Otdel = result.Where(m => m.idKontakt == kontakts).Select(m => m.otdel).FirstOrDefault();
                    PKJson.NameDolgnost = result.Where(m => m.idKontakt == kontakts).Select(m => m.dolgnost).FirstOrDefault();

                    PKJson.NameNaznach = new List<string>();
                    PKJson.idNaznach = new List<int?>();
                    foreach (var naznach in result.Where(m => m.idKontakt == kontakts).Select(m => new { naznach = m.naznach, idNaznach = m.idNaznach }).Distinct())
                    {
                        PKJson.NameNaznach.Add(naznach.naznach);
                        PKJson.idNaznach.Add(naznach.idNaznach);
                    }

                    PKJson.NameTipSvyazi = new List<string>();
                    PKJson.ValSvyazi = new List<string>();
                    PKJson.idTipSvyazi = new List<int?>();

                    foreach (var vals in result.Where(m => m.idKontakt == kontakts).Select(m => new { valsvyazi = m.valsvyazi, tipsvyazi = m.tipsvyazi, idtipsvyazi = m.idtipsvyazi }).Distinct())
                    {
                        PKJson.ValSvyazi.Add(vals.valsvyazi);
                        PKJson.NameTipSvyazi.Add(vals.tipsvyazi);
                        PKJson.idTipSvyazi.Add(vals.idtipsvyazi);
                    }
                }

                return Json(PKJson, JsonRequestBehavior.AllowGet);
            }
        }
        public int EditKontaktSave(PredpriyatieKontaktJSON kontakt)
        {
            using (var ugtu_db = new UGTU_DBDataContext())
            {
                if (kontakt.ValSvyazi != null || kontakt.idNaznach != null)
                {
                    int idKL = kontakt.IDKontakt;
                    var KL = ugtu_db.KontaktLico.Where(m => m.IDKontaktL == kontakt.IDKontakt).Single();
                    if (kontakt.FIO != null)
                    {  //ФИО
                        if (KL.FIOKontaktLico != null)//если в БД ФИО, редактируем
                        {
                            KL.Otdel = kontakt.Otdel;
                            KL.FIOKontaktLico = kontakt.FIO;
                            KL.idDolznost = AddDolgnost(kontakt.Dolgnost);
                        }else{//добавляем новый
                            KontaktLico KLnew = new KontaktLico()
                            {
                                FIOKontaktLico = kontakt.FIO,
                                Otdel = kontakt.Otdel,
                                idDolznost = kontakt.idDolgnost
                            };
                            ugtu_db.KontaktLico.InsertOnSubmit(KLnew);
                            ugtu_db.SubmitChanges();
                            idKL = KLnew.IDKontaktL;
                        }
                    }

                    if (kontakt.FIO == null && kontakt.Otdel != null)
                    { //Отдел
                        if (KL.FIOKontaktLico == null && KL.Otdel != null) //если в БД отдел, доб-ем или берем уже имеющийся
                        {
                            idKL = ugtu_db.KontaktLico.Where(m => m.FIOKontaktLico == null && m.Otdel == kontakt.Otdel).Select(m => m.IDKontaktL).SingleOrDefault();
                            if (idKL == 0)
                            {
                                KontaktLico KLnew = new KontaktLico()
                                {
                                    Otdel = kontakt.Otdel,
                                    idDolznost = kontakt.idDolgnost
                                };
                                ugtu_db.KontaktLico.InsertOnSubmit(KLnew);
                                ugtu_db.SubmitChanges();
                                idKL = KLnew.IDKontaktL;
                            }
                            ugtu_db.SubmitChanges();
                        }
                        if (KL.FIOKontaktLico == null && KL.Otdel == null) //если в БД предприятие, доб-ем или берем уже имеющийся
                        {
                            idKL = ugtu_db.KontaktLico.Where(m => m.FIOKontaktLico == null && m.Otdel == kontakt.Otdel).Select(m => m.IDKontaktL).SingleOrDefault();
                            if (idKL == 0)
                            {
                                KontaktLico KLnew = new KontaktLico()
                                {
                                    Otdel = kontakt.Otdel,
                                    idDolznost = kontakt.idDolgnost
                                };
                                ugtu_db.KontaktLico.InsertOnSubmit(KLnew);
                                ugtu_db.SubmitChanges();
                                idKL = KLnew.IDKontaktL;
                            }
                            ugtu_db.SubmitChanges();
                        }
                        if (KL.FIOKontaktLico != null) //если в БД ФИО
                        {
                            idKL = ugtu_db.KontaktLico.Where(m => m.FIOKontaktLico == null && m.Otdel == kontakt.Otdel).Select(m => m.IDKontaktL).SingleOrDefault();
                            if (idKL == 0)
                            {
                                KontaktLico KLnew = new KontaktLico()
                                {
                                    Otdel = kontakt.Otdel,
                                    idDolznost = kontakt.idDolgnost
                                };
                                ugtu_db.KontaktLico.InsertOnSubmit(KLnew);
                                ugtu_db.SubmitChanges();
                                idKL = KLnew.IDKontaktL;
                            }
                            ugtu_db.SubmitChanges();
                        }
                    }

                    if (kontakt.FIO == null && kontakt.Otdel == null)
                    { //Предприятие
                            idKL = ugtu_db.KontaktLico.Where(m => m.FIOKontaktLico == null && m.Otdel == null).Select(m => m.IDKontaktL).SingleOrDefault();
                    }
                    //--------------------------------Назначение------------------------------------

                        var N_KL = ugtu_db.KontaktLico_NaznachKontaktLico.Where(m => m.IDKontaktL == kontakt.IDKontakt && m.IDPredpriyatie == kontakt.IDPred).ToList();
                        foreach (var naznachKLBD in N_KL)
                        {
                            ugtu_db.KontaktLico_NaznachKontaktLico.DeleteOnSubmit(naznachKLBD);

                        }
                        ugtu_db.SubmitChanges();
                        if (kontakt.FIO != null || kontakt.Otdel != null) //только для ФИО и отдела (исключаем предприятие)
                        {
                        if (kontakt.idNaznach != null)
                        {
                            foreach (var naznachKL in kontakt.idNaznach)
                            {
                                KontaktLico_NaznachKontaktLico KL_N = new KontaktLico_NaznachKontaktLico()
                                {
                                    IDPredpriyatie = kontakt.IDPred,
                                    IDKontaktL = idKL,
                                    IDNaznachKontaktL = (int)naznachKL
                                };
                                ugtu_db.KontaktLico_NaznachKontaktLico.InsertOnSubmit(KL_N);
                            }
                            ugtu_db.SubmitChanges();
                        }
                    }
                    #region Хлам
                    //if (kontakt.idNaznach != null)
                    //{
                    //    foreach (var naznachKL in kontakt.idNaznach)
                    //    {
                    //        if (!N_KL.Exists(m => m.IDNaznachKontaktL == naznachKL))//если в БД нету, доб-ем
                    //        {
                    //            KontaktLico_NaznachKontaktLico KL_N = new KontaktLico_NaznachKontaktLico()
                    //            {
                    //                IDPredpriyatie = kontakt.IDPred,
                    //                IDKontaktL = kontakt.IDKontakt,
                    //                IDNaznachKontaktL = (int)naznachKL
                    //            };
                    //            ugtu_db.KontaktLico_NaznachKontaktLico.InsertOnSubmit(KL_N);
                    //            ugtu_db.SubmitChanges();
                    //        }
                    //    }
                    //    foreach (var naznachKLBD in N_KL) // если в параметрах нету то удаляем.
                    //    {
                    //        if (!kontakt.idNaznach.Exists(m => m == naznachKLBD.IDNaznachKontaktL))
                    //        {
                    //            ugtu_db.KontaktLico_NaznachKontaktLico.DeleteOnSubmit(naznachKLBD);
                    //            ugtu_db.SubmitChanges();
                    //        }
                    //    }
                    //}
                    //else //очистка БД, в случае пустого списка параметров
                    //{
                    //    foreach (var naznachKLBD in N_KL)
                    //    {
                    //        if (!kontakt.idNaznach.Exists(m => m == naznachKLBD.IDNaznachKontaktL))
                    //        {
                    //            ugtu_db.KontaktLico_NaznachKontaktLico.DeleteOnSubmit(naznachKLBD);
                    //            ugtu_db.SubmitChanges();
                    //        }
                    //    }
                    //}
                    #endregion
                    //--------------------------------Связи------------------------------------
                    var S_KL = ugtu_db.KontaktLico_Svyaz.Where(m => m.IDKontaktL == kontakt.IDKontakt && m.IDPredpriyatie == kontakt.IDPred).ToList();
                    foreach (var svyazKLBD in S_KL)
                    {
                        ugtu_db.KontaktLico_Svyaz.DeleteOnSubmit(svyazKLBD);
                    }
                    ugtu_db.SubmitChanges();
                    if (kontakt.ValSvyazi != null)
                    {
                        for (int i = 0; i < kontakt.ValSvyazi.Count(); i++)
                        {
                            KontaktLico_Svyaz KL_S = new KontaktLico_Svyaz()
                            {
                                IDKontaktL = idKL,
                                IDTSvyazi = (int)kontakt.idTipSvyazi[i],
                                Znach = kontakt.ValSvyazi[i],
                                IDPredpriyatie = kontakt.IDPred,
                            };
                            ugtu_db.KontaktLico_Svyaz.InsertOnSubmit(KL_S);

                        }
                        ugtu_db.SubmitChanges();
                    }
                    #region Хлам
                    //if (kontakt.idTipSvyazi != null)
                    //{
                    //    for (int i = 0; i < kontakt.ValSvyazi.Count();i++ )
                    //    {
                    //        if (!S_KL.Exists(m => m.IDTSvyazi == kontakt.idTipSvyazi[i]) && !S_KL.Exists(m => m.Znach == kontakt.ValSvyazi[i]))//если в БД нету, доб-ем
                    //        {
                    //            KontaktLico_Svyaz KL_S = new KontaktLico_Svyaz()
                    //            {
                    //                IDKontaktL = kontakt.IDKontakt,
                    //                IDTSvyazi = (int)kontakt.idTipSvyazi[i],
                    //                Znach = kontakt.ValSvyazi[i],
                    //                IDPredpriyatie = kontakt.IDPred,
                    //            };
                    //            ugtu_db.KontaktLico_Svyaz.InsertOnSubmit(KL_S);
                    //            ugtu_db.SubmitChanges();
                    //        }
                    //        else { //если в БД есть, ред-ем
                    //        var edit = S_KL.Where(m=>m.)
                    //        }
                    //    }
                    //    foreach (var svyazKLBD in S_KL) // если в параметрах нету то удаляем.
                    //    {
                    //        if (!kontakt.idTipSvyazi.Exists(m => m == svyazKLBD.IDTSvyazi) && !kontakt.ValSvyazi.Exists(m => m == svyazKLBD.Znach))
                    //        {
                    //            ugtu_db.KontaktLico_Svyaz.DeleteOnSubmit(svyazKLBD);
                    //            ugtu_db.SubmitChanges();
                    //        }
                    //    }
                    //}
                    //else //очистка БД, в случае пустого списка параметров
                    //{
                    //    foreach (var svyazKLBD in S_KL)
                    //    {
                    //        if (!kontakt.idTipSvyazi.Exists(m => m == svyazKLBD.IDTSvyazi) && !kontakt.ValSvyazi.Exists(m => m == svyazKLBD.Znach))
                    //        {
                    //            ugtu_db.KontaktLico_Svyaz.DeleteOnSubmit(svyazKLBD);
                    //            ugtu_db.SubmitChanges();
                    //        }
                    //    }
                    //}
                    #endregion
                    if (kontakt.FIO == null && KL.FIOKontaktLico!=null)
                    {
                        ugtu_db.KontaktLico.DeleteOnSubmit(KL);
                        ugtu_db.SubmitChanges();
                    }
                    return 1;
                }
                else { return 0; }
            }
        }