using System; using System.Data.Entity; using System.Linq; using Tango.BL; using Tango.BL.Entities; using Tango.Core.DI; using Tango.Integration.Operation; using Tango.PMR.Diagnostics; using Tango.PPC.Common; using Tango.PPC.Common.Application; using Tango.PPC.Common.Connection; using Tango.PPC.Common.Notifications; using Tango.Settings; using Tango.SharedUI; using Tango.PPC.Common.UWF; using Tango.Core.Commands; using Tango.PPC.Common.OS; using System.Collections.Generic; using System.Diagnostics; using System.Management; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.Timers; using Tango.PMR.FirmwareUpgrade; namespace Tango.PPC.UI.Dialogs { public class GeneralInformationViewVM : DialogViewVM { [TangoInject] public IMachineProvider MachineProvider { get; set; } [TangoInject] public IPPCApplicationManager ApplicationManager { get; set; } private PPCSettings _settings; /// /// Gets the main PPC settings. /// public PPCSettings Settings { get { if (_settings == null) { _settings = SettingsManager.Default.GetOrCreate(); } return _settings; } private set { _settings = value; } } public Site CurrentSite { get; set; } public String SiteName { get { return CurrentSite == null ? "" : CurrentSite.Name; } } private String _ipAddress; public String IPAddress { get { return _ipAddress; } set { _ipAddress = value; RaisePropertyChangedAuto(); } } private String _totalDyeTime; public String TotalDyeTime { get { return _totalDyeTime; } set { _totalDyeTime = value; RaisePropertyChangedAuto(); } } private String _totalDyeMeters; public String TotalDyeMeters { get { return _totalDyeMeters; } set { _totalDyeMeters = value; RaisePropertyChangedAuto(); } } private TimeSpan _upTime; public TimeSpan UpTime { get { return _upTime; } set { _upTime = value; RaisePropertyChangedAuto(); } } private string _headFirmware; public string HeadFirmware { get { return _headFirmware; } set { _headFirmware = value; RaisePropertyChangedAuto(); } } private string _dryerFirmware; public string DryerFirmware { get { return _dryerFirmware; } set { _dryerFirmware = value; RaisePropertyChangedAuto(); } } private string _MidtanksFirmware; public string MidtanksFirmware { get { return _MidtanksFirmware; } set { _MidtanksFirmware = value; RaisePropertyChangedAuto(); } } private string _lubricantFirmware; public string LubricantFirmware { get { return _lubricantFirmware; } set { _lubricantFirmware = value; RaisePropertyChangedAuto(); } } private string _dispensersFWFirmware; public string DispensersFWFirmware { get { return _dispensersFWFirmware; } set { _dispensersFWFirmware = value; RaisePropertyChangedAuto(); } } private string _windersFWFirmware; public string WindersFWFirmware { get { return _windersFWFirmware; } set { _windersFWFirmware = value; RaisePropertyChangedAuto(); } } public GeneralInformationViewVM( IMachineProvider provider, IPPCApplicationManager appManager) { MachineProvider = provider; ApplicationManager = appManager; InitSite(); IPAddress = GetIpv4Address(); InitTotalDyeProp(); UpTime = DateTime.Now - ApplicationManager.StartUpDate; } public override void OnShow() { base.OnShow(); GetFirmwareVersionDescriptors(); } public async void InitSite() { if (CurrentSite == null) { var machine = MachineProvider.Machine; if (machine != null && !String.IsNullOrEmpty(machine.SiteGuid)) { using (ObservablesContext db = ObservablesContext.CreateDefault()) { var site = (await db.Sites.Where(x => x.Guid == machine.SiteGuid).ToListAsync()).FirstOrDefault(); CurrentSite = site; RaisePropertyChanged(nameof(SiteName)); } } } } public String GetIpv4Address() { try { var host = Dns.GetHostEntry(Dns.GetHostName()); foreach (var ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { return ip.ToString(); } } return "N/A"; } catch (Exception ex) { return "N/A"; } } public async void InitTotalDyeProp() { try { using (ObservablesContext db = ObservablesContext.CreateDefault()) { var jobRuns = await db.JobRuns.Select(x => new { x.StartDate, x.EndDate, x.EndPosition }).ToListAsync(); TotalDyeTime = TimeSpan.FromHours(jobRuns.Select(x => x.EndDate - x.StartDate).Sum(x => x.TotalHours)).ToStringUnlimitedHours(); int meters = (int)jobRuns.Select(x => x.EndPosition).Sum(); TotalDyeMeters = $"{meters.ToString("N0")} meters"; } } catch (Exception ex) { LogManager.Log(ex, "Error loading machine counters."); TotalDyeTime = "error!"; TotalDyeMeters = "error!"; } } public async void GetFirmwareVersionDescriptors() { try { var descriptors = await MachineProvider.MachineOperator.GetFirmwareVersionDescriptors(); HeadFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.HeadCardSw); DryerFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.DryerCardSw); MidtanksFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.MidTankCardSw); LubricantFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.LubricantCardSw); DispensersFWFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.PumpCardSw); WindersFWFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.WinderCardSw); } catch (Exception ex) { LogManager.Log(ex, "GetFirmwareVersionDescriptors"); } } private String GetVersionByFileDescriptor(List descriptors, VersionFileDestination dtype) { var descriptor = descriptors.Where(x => x.Destination == dtype).FirstOrDefault(); return descriptor != null ? descriptor.Version : ""; } } }