コード例 #1
0
        private bool CheckTimings()
        {
            Timings.ForEach((p) => {
                p.equipmentId = p.equipmentId.Trim();
                p.materialId  = p.materialId.Trim();
                p.timing      = p.timing.Trim();
            });
            //проверим, что для каждой записи по таймингу существует
            //указанная номенклатура и указанное оборудование
            //не должно быть номенклатуры, которую никто не умеет обрабатывать
            //а также что сам тайминг приводится к числу (хотя бы double)
            //и строго больше нуля
            Dictionary <string, bool> existingNomenclature = new Dictionary <string, bool>();

            foreach (var item in Nomenclature)
            {
                existingNomenclature.Add(item.id, false);
            }
            List <string> existingEquipmentId = Equipment.ConvertAll <string>(p => p.id);
            bool          validatedOk         = true;

            foreach (var item in Timings)
            {
                double timing;
                if (!double.TryParse(item.timing, out timing))
                {
                    ValidationResults.Add(new ValidationResult(string.Format("Time is not a number: {0}", item.ToString())));
                    validatedOk = false;
                }
                if (timing <= 0)
                {
                    ValidationResults.Add(new ValidationResult(string.Format("Time should be positive: {0}", item.ToString())));
                    validatedOk = false;
                }
                if (!existingEquipmentId.Contains(item.equipmentId))
                {
                    ValidationResults.Add(new ValidationResult(string.Format("Foreign key violation: no equipment with id='{0}' in {1}", item.equipmentId, item.ToString())));
                    validatedOk = false;
                }
                if (!existingNomenclature.ContainsKey(item.materialId))
                {
                    ValidationResults.Add(new ValidationResult(string.Format("Foreign key violation: no nomenclature with id='{0}' in {1}", item.materialId, item.ToString())));
                    validatedOk = false;
                }
                else
                {
                    existingNomenclature[item.materialId] = true;
                }
            }
            //вдруг никто не умеет обрабатывать какой-то тип руды
            foreach (var pair in existingNomenclature)
            {
                if (!pair.Value)
                {
                    ValidationResults.Add(new ValidationResult(string.Format("Foreign key violation: no equipment can treat nomenclature id='{0}' ", pair.Key)));
                    validatedOk = false;
                }
            }
            //проверим, что тайминг уникалин для пары оборудование + тип руды
            if (!CheckUnique <TimingDTO>(Timings, (p) => string.Format("{0}:{1}",
                                                                       p.equipmentId, p.materialId), "machine_tool_id + nomenclature_id"))
            {
                validatedOk = false;
            }
            ;
            return(validatedOk);
        }