using DataPROWin7.DataModel; using DTS.Common.Classes.Groups; using DTS.Common.Classes.Sensors; using DTS.Common.Interface.Groups.GroupList; using DTS.Common.Storage; using DTS.SensorDB; using System; using System.Collections.Generic; using System.Linq; //FB 36879 This class handles eqx group process logic namespace DTS.Common.Import { public class EQXGroupImport : IGroupImport { public ParseParameters ParseParameters { get; set; } public Tuple> CreateGroups(List sensors, Dictionary> groupSensorLookup, TestTemplate testTemplate, bool createDynamicGroups, List staticGroups, Action setProgress) { var channelDefaults = DbOperations.GetChannelSettingDefaults(); var sensorLookup = sensors.ToDictionary(s => s.SerialNumber); if (groupSensorLookup == null || !groupSensorLookup.Any()) { return null; } int total = groupSensorLookup.Count; int current = 0; var displayOrder = 1; var sensorSerialHash = new HashSet(); var groupList = new List>(); foreach( var group in groupSensorLookup) { groupList.Add(new Tuple(group.Key, group.Value.Count)); } groupList.Sort((a, b) => { if ( a.Item2 == b.Item2) { return a.Item1.CompareTo(b.Item1); } return b.Item2.CompareTo(a.Item2); }); foreach (var groupTuple in groupList) { // Make your template var newGroup = GroupHelper.CreateEmptyGroup(); newGroup.Name = groupTuple.Item1; newGroup.DisplayName = newGroup.Name; var importTemplateChannelList = groupSensorLookup[groupTuple.Item1]; List groupChannels = new List(); var testGroupChannels = 0; foreach (var ch in importTemplateChannelList) { var groupChannel = new GroupChannel(false, newGroup.DisplayName, newGroup, channelDefaults); groupChannel.IsoCode = ch.IsoCode; if (sensorLookup.ContainsKey(ch.SerialNumber)) { var sd = sensorLookup[ch.SerialNumber]; groupChannel.IsoChannelName = sd.ISOChannelName; groupChannel.UserChannelName = sd.Comment; groupChannel.SetSensorData(sd, null); groupChannel.SensorId = sd.DatabaseId; groupChannel.Range = sd.Capacity; groupChannel.FilterClass = sd.FilterClass; groupChannel.Polarity = sd.Polarity; groupChannel.IsoCode = sd.ISOCode; groupChannel.SquibLimitDuration = sd.LimitSquibFireDuration; groupChannel.SquibDuration = sd.SquibFireDurationMS; groupChannel.SquibDelay = sd.SquibFireDelayMS; groupChannel.SquibFireMode = sd.SquibFireMode; groupChannel.SquibCurrent = sd.SquibOutputCurrent; groupChannel.DigitalOutputMode = sd.DigitalOutputMode; groupChannel.DigitalOutDelay = sd.DigitalOutputDelayMS; groupChannel.DigitalOutDuration = sd.DigitalOutputDurationMS; groupChannel.DigitalInputMode = sd.InputMode; groupChannel.ActiveValue = sd.InputActiveValue.ToString("N0"); groupChannel.DefaultValue = sd.InputDefaultValue.ToString("N0"); if (null != sd.Calibration) { //FB 36905 & 35530 check for null groupChannel.ZeroMethod = sd.Calibration.ZeroMethods.Methods[0].Method; groupChannel.ZeroMethodStart = sd.Calibration.ZeroMethods.Methods[0].Start; groupChannel.ZeroMethodEnd = sd.Calibration.ZeroMethods.Methods[0].End; groupChannel.AvailableInitialOffsets = sd.Calibration.InitialOffsets.Offsets; groupChannel.InitialOffset = sd.Calibration.InitialOffsets.DefaultOffset; } groupChannel.GroupChannelOrder = 1 + sensors.IndexOf(sd); groupChannel.TestSetupOrder = 1 + sensors.IndexOf(sd); if ( !sensorSerialHash.Contains(sd.SerialNumber)) { sensorSerialHash.Add(sd.SerialNumber); testGroupChannels++; } } groupChannels.Add(groupChannel); } newGroup.GroupChannelList = groupChannels; if (!createDynamicGroups) { staticGroups.Add(newGroup); } newGroup.DisplayOrder = displayOrder++; if (testGroupChannels > 0) { testTemplate.Groups.Add(newGroup); testTemplate.ChannelsForGroup[newGroup] = groupChannels.ToArray(); } setProgress(100D * current / total); current++; } return Tuple.Create(testTemplate, staticGroups); } public Dictionary> GetGroupSensorLookup(List sensors, Dictionary sensorGroupNameLookup, Dictionary> groupNameSensorListLookup) { Dictionary> groupSensorLookup = new Dictionary>(); //FB 30358 Either sensorGroupNameLookup or groupNameSensorListLookup will be populated. dependes on the child class if (sensorGroupNameLookup != null && sensorGroupNameLookup.Any()) { groupSensorLookup = sensorGroupNameLookup?.Values.Distinct().AsEnumerable(). ToDictionary(groupName => groupName, groupName => new List()); foreach (var s in sensors) { // Build the group sensor and group type dictionary if (!sensorGroupNameLookup.ContainsKey(s.SerialNumber)) continue; // add to group dictionary groupSensorLookup[sensorGroupNameLookup[s.SerialNumber]].Add(new TsetSetupImportSensorInfo(s.SerialNumber, s.ISOCode)); } } if (groupNameSensorListLookup != null && groupNameSensorListLookup.Any()) { foreach (var g in groupNameSensorListLookup) { groupSensorLookup.Add(g.Key, new List()); foreach (var sensorSerialNumber in g.Value) { var sd = sensors.Find(s => s.SerialNumber == sensorSerialNumber); if (sd != null) { groupSensorLookup[g.Key].Add(new TsetSetupImportSensorInfo(sd.SerialNumber, sd.ISOCode)); } } } } return groupSensorLookup; } } }