public async Task <CheckListEquipmentUI> GetCheckListByEquipmentModelId(int id)
        {
            using (var conn = new SqlConnection(AppSettings.ConnectionString))
            {
                var sql    = Sql.SqlQueryCach["Equipment.GetCheckListsByEquipmentId"];
                var result = (await conn
                              .QueryAsync <CheckListEquipment, EquipmentModel, Equipment, CheckListEquipment>(
                                  sql,
                                  (ce, em, equipment) =>
                {
                    em.Equipment = equipment;
                    ce.EquipmentModel = em;

                    return(ce);
                }, new { equipment_model_id = id })).ToArray();

                var algos = new List <Algorithm>();
                var ret   = new CheckListEquipmentUI();
                if (result.Any())
                {
                    var first = result.FirstOrDefault();
                    ret.Id        = first.EquipmentModel.Id;
                    ret.Equipment = first.EquipmentModel.Equipment;
                    algos.AddRange(result.Select(row => new Algorithm
                    {
                        CheckListType = row.CheckListType,
                        FaultType     = row.FaultType,
                        NameTask      = row.NameTask,
                        Value         = row.Value,
                        ValueType     = row.ValueType
                    }));
                    //добавим алгоритмы (нулл), которые не сохранены в бд, но нужны UI
                    foreach (CheckListType cType in Enum.GetValues(typeof(CheckListType)))
                    {
                        if (cType == CheckListType.Surrender)
                        {
                            continue;
                        }

                        var already = algos.Where(item => item.CheckListType == cType).ToList();
                        if (already.Count != 0)
                        {
                            continue;
                        }
                        algos.Add(new Algorithm
                        {
                            CheckListType = cType
                        });
                    }

                    ret.Algorithms = algos.ToArray();
                }
                else
                {
                    ret = null;
                }

                return(ret);
            }
        }
        public async Task <JsonResult> AddUpdateEquipmentWithCheckLists([FromBody] CheckListEquipmentUI ces)
        {
            await CheckPermission();

            var er  = new EquipmentRepository(_logger);
            var ret = await er.AddOrUpdateEquipmentWithCheckLists(ces);

            return(Json(ret));
        }
        public bool IsEquipmentChecklistsEmpty(CheckListEquipmentUI eq)
        {
            bool check = true;

            foreach (var algo in eq.Algorithms)
            {
                if (algo.NameTask != null)
                {
                    check = false;
                }
            }

            return(check);
        }
        public async Task DeleteEquipmentWithCheckLists(CheckListEquipmentUI eq)
        {
            //Начинаем блядь КВН
            using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled))
            {
                using (var conn = new SqlConnection(AppSettings.ConnectionString))
                {
                    var mr = new ModelRepository(_logger);

                    //сначала удалим чеклисты
                    await _DeleteCheckListsFromEquipment(eq.Id);

                    //затем связку с моделями
                    await mr.DeleteEquipmentFromModel(eq.Id);
                }

                transaction.Complete();
            }
        }
        public async Task <CheckListEquipmentUI> AddOrUpdateEquipmentWithCheckLists(CheckListEquipmentUI ces)
        {
            if (ces == null)
            {
                throw new Exception("Не указано наименование");
            }

            //Начинаем блядь КВН
            using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled))
            {
                using (var conn = new SqlConnection(AppSettings.ConnectionString))
                {
                    if (ces.Id == 0)
                    {
                        //insert new EquipmentModel, get Id
                        var em = new EquipmentModel
                        {
                            ModelId     = ces.ModelId,
                            EquipmentId = ces.Equipment.Id,
                            ParentId    = ces.ParentId,
                            IsMark      = ces.IsMark
                        };
                        var mr = new ModelRepository(_logger);
                        em = await mr.AddEquipmentToModel(em);

                        ces.Id         = em.Id;
                        ces.Algorithms = new List <Algorithm>().ToArray();
                    }
                    else
                    {
                        var mr = new ModelRepository(_logger);
                        await mr.UpdateEquipment(new EquipmentModel
                        {
                            EquipmentId = ces.Equipment.Id,
                            Id          = ces.Id,
                            IsMark      = ces.IsMark
                        });
                    }

                    //
                    var listAdded = new List <CheckListType>();
                    foreach (var algo in ces.Algorithms)
                    {
                        //if (string.IsNullOrEmpty(algo.NameTask) || algo.FaultType == null)
                        //    throw new Exception("Не заполнены Алгоритмы");
                        if (string.IsNullOrEmpty(algo.NameTask) || algo.Value == null || algo.ValueType == null)
                        {
                            continue;
                        }

                        await AddOrUpdateCheckListToEquipment(ces.Id, algo);

                        listAdded.Add(algo.CheckListType);
                    }

                    foreach (CheckListType cType in Enum.GetValues(typeof(CheckListType)))
                    {
                        if (cType == CheckListType.Surrender)
                        {
                            continue;
                        }

                        var already = listAdded.Where(item => item == cType).ToList();
                        if (already.Count == 0)
                        {
                            await DeleteCheckListFromEquipment(new CheckListEquipment
                            {
                                CheckListType    = cType,
                                EquipmentModelId = ces.Id
                            });

                            /*var algo = new Algorithm
                             * {
                             *  CheckListType = cType
                             * };
                             * await AddOrUpdateCheckListToEquipment(ces.Id, algo);*/
                        }
                    }

                    var shit = await GetCheckListByEquipmentModelId(ces.Id);

                    transaction.Complete();
                    return(shit);
                }
            }
        }