Sonjiwon преди 3 години
родител
ревизия
b1486f135a
променени са 36 файла, в които са добавени 958 реда и са изтрити 129 реда
  1. 46 20
      InkjetScale/InkjetScale.BusinessLogic.Scale/ScaleManager.cs
  2. 2 1
      InkjetScale/InkjetScale.Common/Events/PubSubEvents.cs
  3. 5 3
      InkjetScale/InkjetScale.Common/InkjetScale.Common.csproj
  4. 13 0
      InkjetScale/InkjetScale.Common/Interface/IEntity.cs
  5. 24 0
      InkjetScale/InkjetScale.Common/Interface/IGenericRepository.cs
  6. 17 0
      InkjetScale/InkjetScale.Common/Model/NozzleData.cs
  7. 18 0
      InkjetScale/InkjetScale.Common/Model/SerialConfig.cs
  8. 15 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/App.config
  9. 17 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/Entity/CustomHistory.cs
  10. 19 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/Entity/NozzleDataEntity.cs
  11. 30 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/Entity/ProductModel.cs
  12. 20 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/Entity/SerialConfigEntity.cs
  13. 21 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/Entity/SystemInfo.cs
  14. 171 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/GenericRepository.cs
  15. 88 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/InkjetScale.DataAccess.Sqlite.csproj
  16. 37 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/InkjetScaleContext.cs
  17. 51 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/InkjetScaleDbInitializer.cs
  18. 28 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/ModelConfiguration.cs
  19. 36 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/Properties/AssemblyInfo.cs
  20. 69 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/SqlManager.cs
  21. 5 0
      InkjetScale/InkjetScale.DataAccess.Sqlite/packages.config
  22. 4 0
      InkjetScale/InkjetScale.GUI.LogViews/InkjetScale.GUI.LogViews.csproj
  23. 11 10
      InkjetScale/InkjetScale.GUI.LogViews/Views/RegisteredWeightView.xaml
  24. 6 26
      InkjetScale/InkjetScale.GUI.LogViews/Views/RegisteredWeightViewModel.cs
  25. 1 1
      InkjetScale/InkjetScale.GUI.LogViews/Views/ScaleLogView.xaml
  26. 20 2
      InkjetScale/InkjetScale.GUI.LogViews/Views/ScaleLogViewModel.cs
  27. 4 0
      InkjetScale/InkjetScale.GUI.MainViews/InkjetScale.GUI.MainViews.csproj
  28. 6 6
      InkjetScale/InkjetScale.GUI.MainViews/Views/ScaleMainView.xaml
  29. 27 8
      InkjetScale/InkjetScale.GUI.MainViews/Views/ScaleMainViewModel.cs
  30. 9 17
      InkjetScale/InkjetScale.sln
  31. 29 4
      InkjetScale/InkjetScale/App.config
  32. 19 3
      InkjetScale/InkjetScale/App.xaml.cs
  33. 34 1
      InkjetScale/InkjetScale/InkjetScale.csproj
  34. 3 3
      InkjetScale/InkjetScale/Shell.xaml
  35. 44 24
      InkjetScale/InkjetScale/ShellViewModel.cs
  36. 9 0
      InkjetScale/InkjetScale/packages.config

+ 46 - 20
InkjetScale/InkjetScale.BusinessLogic.Scale/ScaleManager.cs

@@ -1,9 +1,11 @@
 using InkjetScale.BusinessLogic.Calculation;
 using InkjetScale.Common;
 using InkjetScale.Common.Events;
+using InkjetScale.Common.Model;
 using Prism.Events;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.IO.Ports;
 using System.Linq;
 using System.Text;
@@ -32,36 +34,62 @@ namespace InkjetScale.BusinessLogic.Scale
         }
 
 
-        public void InitSerial()
+        public void InitSerial(SerialConfig config)
         {
-            Scale.PortName = "COM2";
-            Scale.BaudRate = 9600;
-            Scale.DataBits = 8;
-            Scale.StopBits = StopBits.One;
-            Scale.Parity = Parity.None;
+            Scale.PortName = "COM" + config.ToString();
+            Scale.BaudRate = config.BaudRate;
+            Scale.DataBits = config.DataBits;
+            Scale.StopBits = config.StopBits;
+            Scale.Parity = config.pParity;
         }
 
         public bool Open()
         {
-            var ports = SerialPort.GetPortNames();
-            if (ports == null || !ports.Contains("COM2"))
-                return false;
-
-            if (!Scale.IsOpen)
+            try
             {
-                Scale.Open();
-                Scale.Encoding = Encoding.Default;
-                Scale.DataReceived += new SerialDataReceivedEventHandler(SerialDataReceived);
+                var ports = SerialPort.GetPortNames();
+                if (ports == null)
+                    return false;
+
+                if (!Scale.IsOpen)
+                {
+                    Scale.Open();
+                    Scale.Encoding = Encoding.Default;
+                    Scale.DataReceived += new SerialDataReceivedEventHandler(SerialDataReceived);
 
-                readThread.Start();
-                RunMode = eSerialRunMode.AUTO;
+                    readThread.Start();
+                    RunMode = eSerialRunMode.AUTO;
 
-                return true;
+                    return true;
+                }
+                else
+                    return false;
             }
-            else
+            catch(Win32Exception)
+            {
                 return false;
+            }
+            catch(Exception ex)
+            {
+                return false;
+            }
+           
         }
 
+        public void LoadNozzleData(NozzleData nozzleData)
+        {
+            var d = new ViewLogArgs()
+            {
+                IsRegister = true,
+                Time = nozzleData.Time,
+                Head = nozzleData.Head,
+                Weight = nozzleData.Weight,
+                pl = nozzleData.Pl,
+            };
+            this.ea.GetEvent<ViewLogEvent>().Publish(d);
+        }
+
+
         public void Dispose()
         {
             if (Scale.IsOpen)
@@ -80,11 +108,9 @@ namespace InkjetScale.BusinessLogic.Scale
 
         private void SerialDataReceived(object sender, SerialDataReceivedEventArgs e)
         {
-
             if (!Scale.IsOpen)
                 return;
 
-            //count = this.Scale.Read(ReceiveByte, 0, 28);
             string readLine = this.Scale.ReadLine();
 
             ScaleMessagePubEvent(readLine, readLine.Length);

+ 2 - 1
InkjetScale/InkjetScale.Common/Events/PubSubEvents.cs

@@ -1,4 +1,5 @@
-using Prism.Events;
+using InkjetScale.Common.Model;
+using Prism.Events;
 using System;
 using System.Collections.Generic;
 using System.Linq;

+ 5 - 3
InkjetScale/InkjetScale.Common/InkjetScale.Common.csproj

@@ -84,6 +84,10 @@
     <Compile Include="Enums.cs" />
     <Compile Include="Events\PubSubEvents.cs" />
     <Compile Include="Events\PubSubModel.cs" />
+    <Compile Include="Interface\IEntity.cs" />
+    <Compile Include="Interface\IGenericRepository.cs" />
+    <Compile Include="Model\NozzleData.cs" />
+    <Compile Include="Model\SerialConfig.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="StringNames\RegionNames.cs" />
     <Compile Include="StringNames\ViewNames.cs" />
@@ -91,8 +95,6 @@
   <ItemGroup>
     <None Include="packages.config" />
   </ItemGroup>
-  <ItemGroup>
-    <Folder Include="Model\" />
-  </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>

+ 13 - 0
InkjetScale/InkjetScale.Common/Interface/IEntity.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.Common.Interface
+{
+    public interface IEntity
+    {
+        int Id { get; set; }
+    }
+}

+ 24 - 0
InkjetScale/InkjetScale.Common/Interface/IGenericRepository.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.Common.Interface
+{
+    public interface IGenericRepository<T> where T : class
+    {
+        int Count { get; }
+        T GetById(object id);
+        IEnumerable<T> GetAll();
+        IEnumerable<T> FindBy(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "");
+        void Add(T entity);
+        void Delete(object entity);
+        void Delete(Expression<Func<T, bool>> filter = null);
+        void Edit(T entity);
+        void Save();
+        void Clean();
+        void Dispose();
+    }
+}

+ 17 - 0
InkjetScale/InkjetScale.Common/Model/NozzleData.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.Common.Model
+{
+    public class NozzleData
+    {
+        public int Id { get; set; }
+        public DateTime Time { get; set; }
+        public eHeadList Head { get; set; }
+        public double Weight { get; set; }
+        public double Pl { get; set; }
+    }
+}

+ 18 - 0
InkjetScale/InkjetScale.Common/Model/SerialConfig.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.IO.Ports;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.Common.Model
+{
+    public class SerialConfig
+    {
+        public int PortNo { get; set; }
+        public int BaudRate { get; set; }
+        public Parity pParity { get; set; }
+        public int DataBits { get; set; }
+        public StopBits StopBits { get; set; 
+    }
+}

+ 15 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/App.config

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <configSections>
+    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+  </configSections>
+  <entityFramework>
+    <providers>
+      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
+    </providers>
+  </entityFramework>
+	<startup>
+		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+	</startup>
+</configuration>

+ 17 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/Entity/CustomHistory.cs

@@ -0,0 +1,17 @@
+using SQLite.CodeFirst;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.DataAccess.Sqlite.Entity
+{
+    class CustomHistory : IHistory
+    {
+        public int Id { get; set; }
+        public string Hash { get; set; }
+        public string Context { get; set; }
+        public DateTime CreateDate { get; set; }
+    }
+}

+ 19 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/Entity/NozzleDataEntity.cs

@@ -0,0 +1,19 @@
+using InkjetScale.Common;
+using InkjetScale.Common.Interface;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.DataAccess.Sqlite.Entity
+{
+    public class NozzleDataEntity : IEntity
+    {
+        public int Id { get; set; }
+        public DateTime Time { get; set; }
+        public eHeadList Head { get; set; }
+        public double Weight { get; set; }
+        public double Pl { get; set; }
+    }
+}

+ 30 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/Entity/ProductModel.cs

@@ -0,0 +1,30 @@
+using InkjetScale.Common.Interface;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.DataAccess.Sqlite.Entity
+{
+    public class ProductModel : IEntity
+    {
+        public int Id { get; set; }
+
+        [Index]
+        [Required]
+        public int ModelID { get; set; }
+
+        public string Name { get; set; }
+        public string Description { get; set; }
+
+        public DateTime CreateTime { get; set; }
+
+        public ProductModel() => this.CreateTime = DateTime.Now;
+
+        //public virtual List<LightConfigEntity> LightValueDatas { get; set; }
+        //public virtual List<CameraCalData> CamCalDatas { get; set; }
+    }
+}

+ 20 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/Entity/SerialConfigEntity.cs

@@ -0,0 +1,20 @@
+using InkjetScale.Common.Interface;
+using System;
+using System.Collections.Generic;
+using System.IO.Ports;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.DataAccess.Sqlite.Entity
+{
+    public class SerialConfigEntity : IEntity
+    {
+        public int Id { get; set; }
+        public int PortNo { get; set; }
+        public int BaudRate { get; set; }
+        public Parity pParity { get; set; }
+        public int DataBits { get; set; }
+        public StopBits StopBits { get; set; }
+    }
+}

+ 21 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/Entity/SystemInfo.cs

@@ -0,0 +1,21 @@
+using InkjetScale.Common.Interface;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.DataAccess.Sqlite.Entity
+{
+    public class SystemInfo : IEntity
+    {
+        public int Id { get; set; }
+
+        public string SystemID { get; set; }
+        public int? CurrentProductModelId { get; set; }
+
+        [ForeignKey("CurrentProductModelId")]
+        public virtual ProductModel CurrentModel { get; set; }
+    }
+}

+ 171 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/GenericRepository.cs

@@ -0,0 +1,171 @@
+using InkjetScale.Common.Interface;
+using System;
+using System.Collections.Generic;
+using System.Data.Entity;
+using System.Data.Entity.Infrastructure;
+using System.Data.Entity.Validation;
+using System.Linq;
+using System.Linq.Expressions;
+
+namespace InkjetScale.DataAccess.Sqlite
+{
+    public class GenericRepository<T> : IGenericRepository<T> where T : class
+    {
+        object lockObj = new object();
+
+        DbContext Context = null;
+        public int Count => GetAll().Count();
+
+        DbSet<T> table = null;
+
+        public GenericRepository(DbContext dbContext)
+        {
+            this.Context = dbContext;
+            this.table = Context.Set<T>();
+        }
+
+        public void Dispose()
+        {
+            this.Context.Dispose();
+        }
+
+        public void Add(T entity)
+        {
+            lock (lockObj)
+            {
+                table.Add(entity);
+                this.Save();
+            }
+        }
+
+        public void Delete(object entity)
+        {
+            T existing = table.Find(entity);
+            if (existing == null)
+                return;
+
+            lock (lockObj)
+            {
+                if (Context.Entry(existing).State == EntityState.Detached)
+                {
+                    table.Attach(existing);
+                }
+
+                table.Remove(existing);
+                this.Save();
+            }
+        }
+
+        public void Delete(Expression<Func<T, bool>> filter = null)
+        {
+            lock (lockObj)
+            {
+                var delList = this.table.Where(filter).ToList();
+                if (delList.Any() && delList != null)
+                {
+                    this.table.RemoveRange(delList);
+                    Save();
+                }
+            }
+        }
+
+        public void Edit(T entity)
+        {
+            //if (entity == null)
+            //{
+            //    logger.E($"[DataBase] - Update obj is Null {this.table.GetType().Name}");
+            //    return;
+            //}
+
+            lock (lockObj)
+            {
+                table.Attach(entity);
+                Context.Entry(entity).State = EntityState.Modified;
+                this.Save();
+            }
+        }
+
+        public IEnumerable<T> FindBy(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "")
+        {
+            IQueryable<T> query = this.table;
+
+            lock (lockObj)
+            {
+                if (filter != null)
+                    query = query.Where(filter);
+
+                if (includeProperties != null)
+                {
+                    foreach (var includeProperty in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
+                        query = query.Include(includeProperty);
+                }
+
+                if (orderBy != null)
+                    return orderBy(query).ToList();
+                else
+                    return query.ToList();
+            }
+        }
+
+        public IEnumerable<T> GetAll()
+        {
+            lock (lockObj)
+                return table.ToList();
+        }
+
+        public T GetById(object id)
+        {
+            lock (lockObj)
+                return table.Find(id);
+        }
+
+
+        public void Clean()
+        {
+            lock (lockObj)
+            {
+                var delList = table.ToList();
+
+                if (delList != null && delList.Any())
+                {
+                    table.RemoveRange(delList);
+                    this.Save();
+                }
+            }
+        }
+
+        public void Save()
+        {
+            try
+            {
+                Context.SaveChanges();
+            }
+            catch (DbEntityValidationException dbEx)
+            {
+                foreach (var validationErrors in dbEx.EntityValidationErrors)
+                {
+                    foreach (var validationError in validationErrors.ValidationErrors)
+                    {
+                        //logger.E("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
+                    }
+                }
+                return;
+            }
+            catch (DbUpdateConcurrencyException ex)
+            {
+                ex.Entries.Single().Reload();
+                //logger.E($"[DataBase] - DbUpdateConcurrencyException {this.table.GetType().Name}");
+                return;
+            }
+        }
+
+        public virtual T DetachEntity(T entityToDetach)
+        {
+            if (entityToDetach != null)
+                Context.Entry(entityToDetach).State = EntityState.Detached;
+            Context.SaveChanges();
+            return entityToDetach;
+        }
+
+    }
+}

+ 88 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/InkjetScale.DataAccess.Sqlite.csproj

@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.props" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" />
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{44603B31-78B6-4057-BB0D-E4A5D1992647}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>InkjetScale.DataAccess.Sqlite</RootNamespace>
+    <AssemblyName>InkjetScale.DataAccess.Sqlite</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
+    </Reference>
+    <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath>
+    </Reference>
+    <Reference Include="SQLite.CodeFirst, Version=1.7.0.34, Culture=neutral, PublicKeyToken=eb96ba0a78d831a7, processorArchitecture=MSIL">
+      <HintPath>..\packages\SQLite.CodeFirst.1.7.0.34\lib\net45\SQLite.CodeFirst.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Entity\CustomHistory.cs" />
+    <Compile Include="Entity\NozzleDataEntity.cs" />
+    <Compile Include="Entity\ProductModel.cs" />
+    <Compile Include="Entity\SerialConfigEntity.cs" />
+    <Compile Include="Entity\SystemInfo.cs" />
+    <Compile Include="GenericRepository.cs" />
+    <Compile Include="InkjetScaleContext.cs" />
+    <Compile Include="InkjetScaleDbInitializer.cs" />
+    <Compile Include="ModelConfiguration.cs" />
+    <Compile Include="SqlManager.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\InkjetScale.Common\InkjetScale.Common.csproj">
+      <Project>{BC7536F1-00FA-4970-8460-22B63D280108}</Project>
+      <Name>InkjetScale.Common</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.props'))" />
+    <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" />
+  </Target>
+  <Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" />
+</Project>

+ 37 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/InkjetScaleContext.cs

@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Data.Common;
+using System.Data.Entity;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.DataAccess.Sqlite
+{
+    public class InkjetScaleContext : DbContext
+    {
+        public InkjetScaleContext(string nameOfConnectionString) : base(nameOfConnectionString)
+        {
+            this.Configure();
+        }
+
+        public InkjetScaleContext(DbConnection connection, bool contextOwnsConnection) : base(connection, contextOwnsConnection)
+        {
+            this.Configure();
+        }
+
+        void Configure()
+        {
+            Configuration.ProxyCreationEnabled = true;
+            Configuration.LazyLoadingEnabled = true;
+        }
+
+        protected override void OnModelCreating(DbModelBuilder modelBuilder)
+        {
+            ModelConfiguration.Configure(modelBuilder);
+            var initializer = new InkjetScaleDbInitializer(modelBuilder);
+            Database.SetInitializer(initializer);
+            base.OnModelCreating(modelBuilder);
+        }
+    }
+}

+ 51 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/InkjetScaleDbInitializer.cs

@@ -0,0 +1,51 @@
+using InkjetScale.Common;
+using InkjetScale.DataAccess.Sqlite.Entity;
+using SQLite.CodeFirst;
+using System;
+using System.Collections.Generic;
+using System.Data.Entity;
+
+namespace InkjetScale.DataAccess.Sqlite
+{
+    public class InkjetScaleDbInitializer : SqliteDropCreateDatabaseWhenModelChanges<InkjetScaleContext>
+    {
+        public InkjetScaleDbInitializer(DbModelBuilder modelBuilder) : base(modelBuilder, typeof(CustomHistory))
+        {
+
+        }
+
+        protected override void Seed(InkjetScaleContext context)
+        {
+            context.Set<SystemInfo>().Add(new SystemInfo { SystemID = "Scale", CurrentProductModelId = 1 });
+
+            var nozzleDataList = new List<NozzleDataEntity>();
+            for (eHeadList h = eHeadList.HeadPack1Head1; h <= eHeadList.HeadPack3Head4; h++)
+            {
+                nozzleDataList.Add(new NozzleDataEntity()
+                {
+                    Time = DateTime.Now,
+                    Head = h,
+                    Weight = 0,
+                    Pl = 0,
+                });
+            }
+            context.Set<NozzleDataEntity>().AddRange(nozzleDataList);
+
+            context.Set<SerialConfigEntity>().Add(new SerialConfigEntity()
+            {
+                PortNo = 2,
+                BaudRate = 9600,
+                DataBits = 8,
+                pParity = System.IO.Ports.Parity.None,
+                StopBits = System.IO.Ports.StopBits.One,
+            });
+
+            context.Set<ProductModel>().Add(new ProductModel()
+            {
+                Name = "DefaultModel",
+                ModelID = 1,
+            });
+
+        }
+    }
+}

+ 28 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/ModelConfiguration.cs

@@ -0,0 +1,28 @@
+using InkjetScale.DataAccess.Sqlite.Entity;
+using System;
+using System.Collections.Generic;
+using System.Data.Entity;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.DataAccess.Sqlite
+{
+
+    public class ModelConfiguration
+    {
+        public static void Configure(DbModelBuilder modelBuilder)
+        {
+            modelBuilder.Entity<SystemInfo>();
+            ConfigureProductModels(modelBuilder);
+            modelBuilder.Entity<NozzleDataEntity>();
+            modelBuilder.Entity<SerialConfigEntity>();
+        }
+
+        static void ConfigureProductModels(DbModelBuilder modelBuilder)
+        {
+            modelBuilder.Entity<ProductModel>();
+        }
+                
+    }
+}

+ 36 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("InkjetScale.DataAccess.Sqlite")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("InkjetScale.DataAccess.Sqlite")]
+[assembly: AssemblyCopyright("Copyright ©  2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("44603b31-78b6-4057-bb0d-e4a5d1992647")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+//      주 버전
+//      부 버전 
+//      빌드 번호
+//      수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 69 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/SqlManager.cs

@@ -0,0 +1,69 @@
+using InkjetScale.Common.Interface;
+using InkjetScale.DataAccess.Sqlite.Entity;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.DataAccess.Sqlite
+{
+    public class SqlManager
+    {
+
+        public IGenericRepository<ProductModel> ProductModel { get; set; }
+        public IGenericRepository<SystemInfo> SystemInfo { get; set; }
+        public IGenericRepository<NozzleDataEntity> NozzleDataEntity { get; set; }
+        public IGenericRepository<SerialConfigEntity> SerialConfigEntity { get; set; }
+
+        public string ConnectStringName { get; set; }
+
+        public SqlManager()
+        {
+
+        }
+
+        public void Init(string connectString)
+        {
+            this.ConnectStringName = connectString;
+            this.SerialConfigEntity = new GenericRepository<SerialConfigEntity>(new InkjetScaleContext(connectString));
+            this.NozzleDataEntity = new GenericRepository<NozzleDataEntity>(new InkjetScaleContext(connectString));
+
+            var modelDB = new InkjetScaleContext(connectString);
+            this.SystemInfo = new GenericRepository<SystemInfo>(modelDB);
+            this.ProductModel = new GenericRepository<ProductModel>(modelDB);
+        }
+
+        public class EntityHelper
+        {
+            /// <summary>
+            /// Makes a shallow copy of an entity object. This works much like a MemberwiseClone()
+            /// but directly instantiates a new object and copies only properties that work with
+            /// EF and don't have the NotMappedAttribute.
+            ///
+            /// ** It also avoids copying the EF's proxy reference that would occur by using MemberwiseClone() **
+            ///
+            /// </summary>
+            /// <typeparam name="TEntity">The entity type.</typeparam>
+            /// <param name="source">The source entity.</param>
+            public static TEntity ShallowCopy<TEntity>(TEntity source) where TEntity : class, new()
+            {
+                // get the properties from the entity that are read/write and not marked with he NotMappedAttribute
+                var notMappedType = typeof(System.ComponentModel.DataAnnotations.Schema.NotMappedAttribute);
+                var sourceProperties = typeof(TEntity)
+                                        .GetProperties()
+                                        .Where(p => p.CanRead && p.CanWrite && (p.GetCustomAttributes(notMappedType, true).Length == 0));
+
+                // copy the properties into a new entity
+                var newObj = new TEntity();
+                foreach (var property in sourceProperties)
+                {
+                    property.SetValue(newObj, property.GetValue(source, null), null);
+                }
+
+                return newObj;
+            }
+        }
+
+    }
+}

+ 5 - 0
InkjetScale/InkjetScale.DataAccess.Sqlite/packages.config

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="EntityFramework" version="6.4.4" targetFramework="net472" />
+  <package id="SQLite.CodeFirst" version="1.7.0.34" targetFramework="net472" />
+</packages>

+ 4 - 0
InkjetScale/InkjetScale.GUI.LogViews/InkjetScale.GUI.LogViews.csproj

@@ -120,6 +120,10 @@
       <Project>{BC7536F1-00FA-4970-8460-22B63D280108}</Project>
       <Name>InkjetScale.Common</Name>
     </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.DataAccess.Sqlite\InkjetScale.DataAccess.Sqlite.csproj">
+      <Project>{44603B31-78B6-4057-BB0D-E4A5D1992647}</Project>
+      <Name>InkjetScale.DataAccess.Sqlite</Name>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Import Project="..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets" Condition="Exists('..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets')" />

+ 11 - 10
InkjetScale/InkjetScale.GUI.LogViews/Views/RegisteredWeightView.xaml

@@ -30,7 +30,7 @@
                     <Grid Grid.Row="0">
                         <StackPanel Orientation="Horizontal" Margin="10, 0,0,0">
                             <materialDesign:PackIcon Kind="DatabaseOutline" Height="32" Width="32" VerticalAlignment="Center" Foreground="White"/>
-                            <Button Style="{StaticResource MaterialDesignRaisedButton}" Command="{Binding ClearCommand}"  
+                            <Button Style="{StaticResource MaterialDesignRaisedButton}"   
                                                 HorizontalAlignment="Center" VerticalAlignment="Center" Background="{x:Null}" BorderThickness="0" >
                                 <TextBlock Margin="8,0,0,0" VerticalAlignment="Center" Style="{DynamicResource MaterialDesignSubtitle1TextBlock}" 
                                            Text="HeadPack1" Foreground="White"/>
@@ -38,13 +38,12 @@
                         </StackPanel>
                     </Grid>
 
-
                     <Grid Grid.Row="1">
                         <DataGrid Margin="0 8 0 0" ItemsSource="{Binding HeadPack1DataList}" CanUserSortColumns="True" 
                                   CanUserAddRows="False" AutoGenerateColumns="False" materialDesign:DataGridAssist.CellPadding="13 8 8 8" 
-                                  materialDesign:DataGridAssist.ColumnHeaderPadding="8" IsReadOnly="True" Background="LightBlue">
+                                  materialDesign:DataGridAssist.ColumnHeaderPadding="8" IsReadOnly="True" Background="{DynamicResource PrimaryHueLightBrush}">
                             <DataGrid.Columns>
-                                <DataGridTextColumn Binding="{Binding Time ,StringFormat='{}{0:HH:mm:ss}'}" Header="  Time" Width="*" FontSize="18"
+                                <DataGridTextColumn Binding="{Binding Time ,StringFormat='{}{0:yyyy-MM-dd HH:mm:ss}'}" Header="  Time" Width="2*" FontSize="18"
                                             EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />
                                 <DataGridTextColumn Binding="{Binding Head}" Header="  Head" Width="1.5*" FontSize="18"
                                             EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />
@@ -59,6 +58,7 @@
                 </Grid>
 
             </Border>
+            
         </Grid>
 
         <Grid Grid.Row="1">
@@ -73,7 +73,7 @@
                     <Grid Grid.Row="0">
                         <StackPanel Orientation="Horizontal" Margin="10, 0,0,0">
                             <materialDesign:PackIcon Kind="DatabaseOutline" Height="32" Width="32" VerticalAlignment="Center" Foreground="White"/>
-                            <Button Style="{StaticResource MaterialDesignRaisedButton}" Command="{Binding ClearCommand}"  
+                            <Button Style="{StaticResource MaterialDesignRaisedButton}"   
                                                 HorizontalAlignment="Center" VerticalAlignment="Center" Background="{x:Null}" BorderThickness="0" >
                                 <TextBlock Margin="8,0,0,0" VerticalAlignment="Center" Style="{DynamicResource MaterialDesignSubtitle1TextBlock}" 
                                            Text="HeadPack2" Foreground="White"/>
@@ -84,9 +84,9 @@
                     <Grid Grid.Row="1">
                         <DataGrid Margin="0 8 0 0" ItemsSource="{Binding HeadPack2DataList}" CanUserSortColumns="True" 
                                   CanUserAddRows="False" AutoGenerateColumns="False" materialDesign:DataGridAssist.CellPadding="13 8 8 8" 
-                                  materialDesign:DataGridAssist.ColumnHeaderPadding="8" IsReadOnly="True" Background="LightBlue">
+                                  materialDesign:DataGridAssist.ColumnHeaderPadding="8" IsReadOnly="True" Background="{DynamicResource PrimaryHueLightBrush}">
                             <DataGrid.Columns>
-                                <DataGridTextColumn Binding="{Binding Time ,StringFormat='{}{0:HH:mm:ss}'}" Header="  Time" Width="*" FontSize="18"
+                                <DataGridTextColumn Binding="{Binding Time ,StringFormat='{}{0:yyyy-MM-dd HH:mm:ss}'}" Header="  Time" Width="2*" FontSize="18"
                                             EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />
                                 <DataGridTextColumn Binding="{Binding Head}" Header="  Head" Width="1.5*" FontSize="18"
                                             EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />
@@ -101,6 +101,7 @@
                 </Grid>
 
             </Border>
+            
         </Grid>
 
         <Grid Grid.Row="2">
@@ -115,7 +116,7 @@
                     <Grid Grid.Row="0">
                         <StackPanel Orientation="Horizontal" Margin="10, 0,0,0">
                             <materialDesign:PackIcon Kind="DatabaseOutline" Height="32" Width="32" VerticalAlignment="Center" Foreground="White"/>
-                            <Button Style="{StaticResource MaterialDesignRaisedButton}" Command="{Binding ClearCommand}"  
+                            <Button Style="{StaticResource MaterialDesignRaisedButton}" 
                                                 HorizontalAlignment="Center" VerticalAlignment="Center" Background="{x:Null}" BorderThickness="0" >
                                 <TextBlock Margin="8,0,0,0" VerticalAlignment="Center" Style="{DynamicResource MaterialDesignSubtitle1TextBlock}" 
                                            Text="HeadPack3" Foreground="White"/>
@@ -127,9 +128,9 @@
                     <Grid Grid.Row="1">
                         <DataGrid Margin="0 8 0 0" ItemsSource="{Binding HeadPack3DataList}" CanUserSortColumns="True" 
                                   CanUserAddRows="False" AutoGenerateColumns="False" materialDesign:DataGridAssist.CellPadding="13 8 8 8" 
-                                  materialDesign:DataGridAssist.ColumnHeaderPadding="8" IsReadOnly="True" Background="LightBlue">
+                                  materialDesign:DataGridAssist.ColumnHeaderPadding="8" IsReadOnly="True" Background="{DynamicResource PrimaryHueLightBrush}">
                             <DataGrid.Columns>
-                                <DataGridTextColumn Binding="{Binding Time ,StringFormat='{}{0:HH:mm:ss}'}" Header="  Time" Width="*" FontSize="18"
+                                <DataGridTextColumn Binding="{Binding Time ,StringFormat='{}{0:yyyy-MM-dd HH:mm:ss}'}" Header="  Time" Width="2*" FontSize="18"
                                             EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />
                                 <DataGridTextColumn Binding="{Binding Head}" Header="  Head" Width="1.5*" FontSize="18"
                                             EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />

+ 6 - 26
InkjetScale/InkjetScale.GUI.LogViews/Views/RegisteredWeightViewModel.cs

@@ -2,16 +2,11 @@
 using InkjetScale.Common.Events;
 using Prism.Events;
 using Prism.Mvvm;
-using System;
-using System.Collections.Generic;
 using System.Collections.ObjectModel;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 
 namespace InkjetScale.GUI.LogViews.Views
 {
-    internal class RegisteredWeightViewModel : BindableBase
+    public class RegisteredWeightViewModel : BindableBase
     {
 
         private ObservableCollection<ViewLogArgs> headPack1DataList;
@@ -33,25 +28,13 @@ namespace InkjetScale.GUI.LogViews.Views
             HeadPack2DataList = new ObservableCollection<ViewLogArgs>();
             HeadPack3DataList = new ObservableCollection<ViewLogArgs>();
 
-            this.ea.GetEvent<ViewLogEvent>().Subscribe(ViewLogSubEvent, ThreadOption.UIThread);
+            this.ea.GetEvent<ViewLogEvent>().Subscribe(ViewLogSubEvent, ThreadOption.UIThread); 
         }
 
+
         internal void Init()
         {
-            for(eHeadList head = eHeadList.HeadPack1Head1; head <= eHeadList.HeadPack1Head4; head++)
-            {
-                HeadPack1DataList.Add(new ViewLogArgs() { Head = head, Time = DateTime.Now, Weight = 0, pl = 0 });
-            }
-
-            for (eHeadList head = eHeadList.HeadPack2Head1; head <= eHeadList.HeadPack2Head4; head++)
-            {
-                HeadPack2DataList.Add(new ViewLogArgs() { Head = head, Time = DateTime.Now, Weight = 0, pl = 0 });
-            }
 
-            for (eHeadList head = eHeadList.HeadPack3Head1; head <= eHeadList.HeadPack3Head4; head++)
-            {
-                HeadPack3DataList.Add(new ViewLogArgs() { Head = head, Time = DateTime.Now, Weight = 0, pl = 0 });
-            }
         }
 
         private void ViewLogSubEvent(ViewLogArgs obj)
@@ -61,10 +44,10 @@ namespace InkjetScale.GUI.LogViews.Views
 
             int i = 0;
 
-            if ((obj.Head < eHeadList.HeadPack2Head1))
+            if (obj.Head < eHeadList.HeadPack2Head1)
             {
                 if(HeadPack1DataList.Count > 0)
-                {
+                {                    
                     foreach (ViewLogArgs data in HeadPack1DataList)
                     {
                         if (obj.Head == data.Head)
@@ -75,10 +58,9 @@ namespace InkjetScale.GUI.LogViews.Views
                         i++;
                     }
                 }
-                    
                 HeadPack1DataList.Add(new ViewLogArgs() { Time = obj.Time, Head = obj.Head, Weight = obj.Weight, pl = obj.pl });
             }
-            else if ((obj.Head < eHeadList.HeadPack3Head1))
+            else if (obj.Head < eHeadList.HeadPack3Head1)
             {
                 if (HeadPack2DataList.Count > 0)
                 {
@@ -92,7 +74,6 @@ namespace InkjetScale.GUI.LogViews.Views
                         i++;
                     }
                 }
-
                 HeadPack2DataList.Add(new ViewLogArgs() { Time = obj.Time, Head = obj.Head, Weight = obj.Weight, pl = obj.pl });
             }
             else
@@ -109,7 +90,6 @@ namespace InkjetScale.GUI.LogViews.Views
                         i++;
                     }
                 }
-
                 HeadPack3DataList.Add(new ViewLogArgs() { Time = obj.Time, Head = obj.Head, Weight = obj.Weight, pl = obj.pl });
             }
 

+ 1 - 1
InkjetScale/InkjetScale.GUI.LogViews/Views/ScaleLogView.xaml

@@ -41,7 +41,7 @@
 
             <Grid Grid.Row="1">
                 <DataGrid Margin="0 8 0 0" ItemsSource="{Binding MeasurementList}" SelectedItem="{Binding SelectedValues}" CanUserSortColumns="True" CanUserAddRows="False" AutoGenerateColumns="False" 
-                                      materialDesign:DataGridAssist.CellPadding="13 8 8 8" materialDesign:DataGridAssist.ColumnHeaderPadding="8" IsReadOnly="True" Background="LightBlue" Grid.ColumnSpan="2">
+                                      materialDesign:DataGridAssist.CellPadding="13 8 8 8" materialDesign:DataGridAssist.ColumnHeaderPadding="8" IsReadOnly="True" Background="{DynamicResource PrimaryHueLightBrush}" Grid.ColumnSpan="2">
                     <DataGrid.Columns>
                         <DataGridTextColumn Binding="{Binding Time ,StringFormat='{}{0:HH:mm:ss}'}" Header="  Time" Width="*" FontSize="18"
                                             EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />

+ 20 - 2
InkjetScale/InkjetScale.GUI.LogViews/Views/ScaleLogViewModel.cs

@@ -1,5 +1,6 @@
 using InkjetScale.Common;
 using InkjetScale.Common.Events;
+using InkjetScale.DataAccess.Sqlite;
 using Prism.Commands;
 using Prism.Events;
 using Prism.Mvvm;
@@ -21,15 +22,21 @@ namespace InkjetScale.GUI.LogViews.Views
         private ViewLogArgs selectedValues;
         public ViewLogArgs SelectedValues { get => this.selectedValues; set => SetProperty(ref this.selectedValues, value); }
 
+        #region Command
         public ICommand RegisterCommand { get; set; }
         public ICommand ClearCommand { get; set; }
+        #endregion
+
         IEventAggregator eventAggregator = null;
+        SqlManager sql = null;
 
-        public ScaleLogViewModel(IEventAggregator eventAggregator)
+        public ScaleLogViewModel(IEventAggregator eventAggregator, SqlManager sqlManager)
         {
+            this.sql = sqlManager;
+            this.eventAggregator = eventAggregator;
+
             this.RegisterCommand = new DelegateCommand(ExecuteRegister);
             this.ClearCommand = new DelegateCommand(ExecuteClear);
-            this.eventAggregator = eventAggregator;
 
             this.MeasurementList = new ObservableCollection<ViewLogArgs>();
             this.eventAggregator.GetEvent<ViewLogEvent>().Subscribe(ViewLogSubEvent, ThreadOption.UIThread);
@@ -56,9 +63,20 @@ namespace InkjetScale.GUI.LogViews.Views
                     pl = SelectedValues.pl,
                 };
                 this.eventAggregator.GetEvent<ViewLogEvent>().Publish(d);
+                SaveData(d);
             }
         }
 
+        private void SaveData(ViewLogArgs args)
+        {
+            var nozzleDataList = this.sql.NozzleDataEntity.GetAll();
+            var nozzleData = nozzleDataList.Where(x => x.Head == args.Head).FirstOrDefault();
+            nozzleData.Weight = args.Weight;
+            nozzleData.Pl = args.pl;
+            nozzleData.Time = args.Time;
+            this.sql.NozzleDataEntity.Edit(nozzleData);
+        }
+
         private void ExecuteClear()
         {
             MeasurementList.Clear();

+ 4 - 0
InkjetScale/InkjetScale.GUI.MainViews/InkjetScale.GUI.MainViews.csproj

@@ -124,6 +124,10 @@
       <Project>{BC7536F1-00FA-4970-8460-22B63D280108}</Project>
       <Name>InkjetScale.Common</Name>
     </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.DataAccess.Sqlite\InkjetScale.DataAccess.Sqlite.csproj">
+      <Project>{44603B31-78B6-4057-BB0D-E4A5D1992647}</Project>
+      <Name>InkjetScale.DataAccess.Sqlite</Name>
+    </ProjectReference>
     <ProjectReference Include="..\InkjetScale.GUI.LogViews\InkjetScale.GUI.LogViews.csproj">
       <Project>{799D6601-8F88-4C27-8952-7760BAE9DA0C}</Project>
       <Name>InkjetScale.GUI.LogViews</Name>

+ 6 - 6
InkjetScale/InkjetScale.GUI.MainViews/Views/ScaleMainView.xaml

@@ -43,7 +43,7 @@
             </Grid.RowDefinitions>
 
             <Grid Grid.Row="0">
-                <Border CornerRadius="10" Background="LightBlue" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5"  >
+                <Border CornerRadius="10" Background="{DynamicResource PrimaryHueLightBrush}" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5"  >
                     <Grid>
 
                         <Grid.RowDefinitions>
@@ -69,7 +69,7 @@
 
             <Grid Grid.Row="1">
 
-                <Border CornerRadius="10" Background="LightBlue" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
+                <Border CornerRadius="10" Background="{DynamicResource PrimaryHueLightBrush}" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
 
                     <Grid>
 
@@ -94,7 +94,7 @@
 
             <Grid Grid.Row="2" >
 
-                <Border CornerRadius="10" Background="LightBlue" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
+                <Border CornerRadius="10" Background="{DynamicResource PrimaryHueLightBrush}" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
 
                     <Grid>
 
@@ -159,7 +159,7 @@
 
             <Grid Grid.Row="3" >
 
-                <Border CornerRadius="10" Background="LightBlue" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
+                <Border CornerRadius="10" Background="{DynamicResource PrimaryHueLightBrush}" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
 
                     <Grid>
 
@@ -203,7 +203,7 @@
 
             <Grid Grid.Row="4">
 
-                <Border CornerRadius="10" Background="LightBlue" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
+                <Border CornerRadius="10" Background="{DynamicResource PrimaryHueLightBrush}" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
 
                     <Grid>
 
@@ -250,7 +250,7 @@
             </Grid>
 
             <Grid Grid.Row="5">
-                <Border CornerRadius="10" Background="LightBlue" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
+                <Border CornerRadius="10" Background="{DynamicResource PrimaryHueLightBrush}" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
 
                     <Grid>
 

+ 27 - 8
InkjetScale/InkjetScale.GUI.MainViews/Views/ScaleMainViewModel.cs

@@ -2,6 +2,8 @@
 using InkjetScale.BusinessLogic.Scale;
 using InkjetScale.Common;
 using InkjetScale.Common.Events;
+using InkjetScale.Common.Model;
+using InkjetScale.DataAccess.Sqlite;
 using InkjetScale.GUI.LogViews.Views;
 using InkjetScale.GUI.ScaleControlViews.Views;
 using Prism.Commands;
@@ -73,10 +75,12 @@ namespace InkjetScale.GUI.MainViews.Views
         public ICommand RunCommand { get; set; }
         IEventAggregator ea = null;
         IContainerProvider provider = null;
-        ScaleManager scaleManager;
+        ScaleManager scaleManager = null;
+        SqlManager sql = null;
 
-        public ScaleMainViewModel(IEventAggregator eventAggregator, IContainerProvider proVider, ScaleManager scaleManager)
+        public ScaleMainViewModel(IEventAggregator eventAggregator, IContainerProvider proVider, ScaleManager scaleManager, SqlManager sqlManager)
         {
+            this.sql = sqlManager;
             this.scaleManager = scaleManager;
             this.ea = eventAggregator;
             this.provider = proVider;
@@ -93,27 +97,43 @@ namespace InkjetScale.GUI.MainViews.Views
         {
             if (!isInit)
             {
+                isInit = true;
                 DropCount = "2000";
-                //this.ControlView = this.provider.Resolve<ScaleControlView>();
                 this.RegisterView = this.provider.Resolve<RegisteredWeightView>();
                 this.LogView = this.provider.Resolve<ScaleLogView>();
+                LoadData();
 
                 for (eHeadList head = eHeadList.HeadPack1Head1; head <= eHeadList.HeadPack3Head4; head++)
                 {
                     this.HeadList.Add(head);
                 }
-
                 this.SelectedHead = this.HeadList[(int)eHeadList.HeadPack1Head1 - 1];
+
                 if(this.scaleManager.Open())
                     IsAuto = true;
             }
         }
 
+        private void LoadData()
+        {
+            var nozzleDataList = this.sql.NozzleDataEntity.GetAll().ToList();
+            nozzleDataList.ForEach(x =>
+            {
+                var nozzleData = new NozzleData();
+                nozzleData.Id = x.Id;
+                nozzleData.Time = x.Time;
+                nozzleData.Head = x.Head;
+                nozzleData.Weight = x.Weight;
+                nozzleData.Pl = x.Pl;
+                this.scaleManager.LoadNozzleData(nozzleData);
+            });
+        }
+
         private void ExecuteRunModeChange(string obj)
         {
             var mode = eSerialRunMode.AUTO;
-            if (obj != null)
-                Enum.TryParse(obj, out mode);
+            if (!Enum.TryParse(obj, out mode))
+                return;                
 
             if (mode == eSerialRunMode.AUTO)
                 IsAuto = true;
@@ -125,8 +145,7 @@ namespace InkjetScale.GUI.MainViews.Views
 
         private void ScaleMessageSubEvent(ReceiveMessageEventArgs obj)
         {
-            var runMode = eSerialRunMode.AUTO;
-            runMode = obj.RunMode;
+            var runMode = obj.RunMode;
 
             try
             {

+ 9 - 17
InkjetScale/InkjetScale.sln

@@ -27,61 +27,52 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkjetScale.GUI.LogViews",
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkjetScale.BusinessLogic.Scale", "InkjetScale.BusinessLogic.Scale\InkjetScale.BusinessLogic.Scale.csproj", "{577C09AA-94AB-4F4F-9398-A93586049D1D}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataAccess", "DataAccess", "{3A8E8454-72ED-4930-AB23-4EBFC205A627}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkjetScale.DataAccess.Sqlite", "InkjetScale.DataAccess.Sqlite\InkjetScale.DataAccess.Sqlite.csproj", "{44603B31-78B6-4057-BB0D-E4A5D1992647}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Release|Any CPU = Release|Any CPU
-		Remote_LAB|Any CPU = Remote_LAB|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Release|Any CPU.Build.0 = Release|Any CPU
-		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
-		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
 		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Release|Any CPU.Build.0 = Release|Any CPU
-		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
-		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
 		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Release|Any CPU.Build.0 = Release|Any CPU
-		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
-		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
 		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Release|Any CPU.Build.0 = Release|Any CPU
-		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
-		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
 		{BC7536F1-00FA-4970-8460-22B63D280108}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{BC7536F1-00FA-4970-8460-22B63D280108}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{BC7536F1-00FA-4970-8460-22B63D280108}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{BC7536F1-00FA-4970-8460-22B63D280108}.Release|Any CPU.Build.0 = Release|Any CPU
-		{BC7536F1-00FA-4970-8460-22B63D280108}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
-		{BC7536F1-00FA-4970-8460-22B63D280108}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
 		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Release|Any CPU.Build.0 = Release|Any CPU
-		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
-		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
 		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Release|Any CPU.Build.0 = Release|Any CPU
-		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
-		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
 		{577C09AA-94AB-4F4F-9398-A93586049D1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{577C09AA-94AB-4F4F-9398-A93586049D1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{577C09AA-94AB-4F4F-9398-A93586049D1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{577C09AA-94AB-4F4F-9398-A93586049D1D}.Release|Any CPU.Build.0 = Release|Any CPU
-		{577C09AA-94AB-4F4F-9398-A93586049D1D}.Remote_LAB|Any CPU.ActiveCfg = Remote_Lab|Any CPU
-		{577C09AA-94AB-4F4F-9398-A93586049D1D}.Remote_LAB|Any CPU.Build.0 = Remote_Lab|Any CPU
+		{44603B31-78B6-4057-BB0D-E4A5D1992647}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{44603B31-78B6-4057-BB0D-E4A5D1992647}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{44603B31-78B6-4057-BB0D-E4A5D1992647}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{44603B31-78B6-4057-BB0D-E4A5D1992647}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -95,6 +86,7 @@ Global
 		{3DDA8868-7FC0-4014-AA47-9375E608BD0C} = {96A2A34C-DFF8-484E-A6BC-349EEC2B8C76}
 		{799D6601-8F88-4C27-8952-7760BAE9DA0C} = {27AC19C6-C633-4862-A69E-42681B82C011}
 		{577C09AA-94AB-4F4F-9398-A93586049D1D} = {96A2A34C-DFF8-484E-A6BC-349EEC2B8C76}
+		{44603B31-78B6-4057-BB0D-E4A5D1992647} = {3A8E8454-72ED-4930-AB23-4EBFC205A627}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {4CA81647-D0FF-4C4A-AAA8-BF923044E336}

+ 29 - 4
InkjetScale/InkjetScale/App.config

@@ -1,6 +1,31 @@
-<?xml version="1.0" encoding="utf-8" ?>
+<?xml version="1.0" encoding="utf-8"?>
 <configuration>
-    <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
-    </startup>
+  <configSections>
+    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
+    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+  </configSections>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+  </startup>
+  <connectionStrings>
+    <add name="InkjetScale_Db" connectionString="data source=D:\DB\InkjetScale\InkjetScaleDb.sqlite;foreign keys=true" providerName="System.Data.SQLite" />
+  </connectionStrings>
+  <entityFramework>
+	  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
+		  <parameters>
+			  <parameter value="mssqllocaldb" />
+		  </parameters>
+	  </defaultConnectionFactory>
+    <providers>
+      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
+		<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
+      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
+    </providers>
+  </entityFramework>
+  <system.data>
+    <DbProviderFactories>
+      <remove invariant="System.Data.SQLite.EF6" />
+      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
+    <remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /></DbProviderFactories>
+  </system.data>
 </configuration>

+ 19 - 3
InkjetScale/InkjetScale/App.xaml.cs

@@ -1,5 +1,6 @@
-
-using InkjetScale.BusinessLogic.Scale;
+using InkjetScale.BusinessLogic.Scale;
+using InkjetScale.Common.Model;
+using InkjetScale.DataAccess.Sqlite;
 using InkjetScale.GUI.LogViews;
 using InkjetScale.GUI.MainViews;
 using InkjetScale.GUI.ScaleControlViews;
@@ -44,11 +45,26 @@ namespace InkjetScale
             containerRegistry.RegisterInstance(this.Container);
             containerRegistry.RegisterInstance(containerRegistry);
 
+            if (!containerRegistry.IsRegistered<SqlManager>())
+                containerRegistry.RegisterSingleton<SqlManager>();
+
             if (!containerRegistry.IsRegistered<ScaleManager>())
                 containerRegistry.RegisterSingleton<ScaleManager>();
 
+            var sql = this.Container.Resolve<SqlManager>();
+            sql.Init("InkjetScale_Db");
+
             var scaleManager = this.Container.Resolve<ScaleManager>();
-            scaleManager.InitSerial();
+
+            var serialData = sql.SerialConfigEntity.GetAll().FirstOrDefault();
+            var config = new SerialConfig();
+            config.PortNo = serialData.PortNo;
+            config.BaudRate = serialData.BaudRate;
+            config.DataBits = serialData.DataBits;
+            config.pParity = serialData.pParity;
+            config.StopBits = serialData.StopBits;
+            scaleManager.InitSerial(config);
+
         }
 
         protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)

+ 34 - 1
InkjetScale/InkjetScale/InkjetScale.csproj

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.props" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" />
   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -53,6 +54,12 @@
     <Reference Include="DynamicExpresso.Core, Version=2.3.1.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\packages\DynamicExpresso.Core.2.3.1\lib\net461\DynamicExpresso.Core.dll</HintPath>
     </Reference>
+    <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
+    </Reference>
+    <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath>
+    </Reference>
     <Reference Include="MaterialDesignColors, Version=2.0.6.0, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
       <HintPath>..\packages\MaterialDesignColors.2.0.6\lib\net452\MaterialDesignColors.dll</HintPath>
     </Reference>
@@ -71,9 +78,26 @@
     <Reference Include="Prism.Wpf, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
       <HintPath>..\packages\Prism.Wpf.8.1.97\lib\net47\Prism.Wpf.dll</HintPath>
     </Reference>
+    <Reference Include="SQLite.CodeFirst, Version=1.7.0.34, Culture=neutral, PublicKeyToken=eb96ba0a78d831a7, processorArchitecture=MSIL">
+      <HintPath>..\packages\SQLite.CodeFirst.1.7.0.34\lib\net45\SQLite.CodeFirst.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
+    <Reference Include="System.CodeDom, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.CodeDom.6.0.0\lib\net461\System.CodeDom.dll</HintPath>
+    </Reference>
+    <Reference Include="System.ComponentModel.DataAnnotations" />
     <Reference Include="System.Configuration" />
     <Reference Include="System.Data" />
+    <Reference Include="System.Data.SQLite, Version=1.0.116.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.116.0\lib\net46\System.Data.SQLite.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.EF6, Version=1.0.116.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Data.SQLite.EF6.1.0.116.0\lib\net46\System.Data.SQLite.EF6.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.Linq, Version=1.0.116.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Data.SQLite.Linq.1.0.116.0\lib\net46\System.Data.SQLite.Linq.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Management" />
     <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
     </Reference>
@@ -157,9 +181,13 @@
       <Name>InkjetScale.BusinessLogic.Scale</Name>
     </ProjectReference>
     <ProjectReference Include="..\InkjetScale.Common\InkjetScale.Common.csproj">
-      <Project>{bc7536f1-00fa-4970-8460-22b63d280108}</Project>
+      <Project>{BC7536F1-00FA-4970-8460-22B63D280108}</Project>
       <Name>InkjetScale.Common</Name>
     </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.DataAccess.Sqlite\InkjetScale.DataAccess.Sqlite.csproj">
+      <Project>{44603B31-78B6-4057-BB0D-E4A5D1992647}</Project>
+      <Name>InkjetScale.DataAccess.Sqlite</Name>
+    </ProjectReference>
     <ProjectReference Include="..\InkjetScale.GUI.LogViews\InkjetScale.GUI.LogViews.csproj">
       <Project>{799D6601-8F88-4C27-8952-7760BAE9DA0C}</Project>
       <Name>InkjetScale.GUI.LogViews</Name>
@@ -180,5 +208,10 @@
       <ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
     </PropertyGroup>
     <Error Condition="!Exists('..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets'))" />
+    <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.props'))" />
+    <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" />
+    <Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.116.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.116.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
   </Target>
+  <Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" />
+  <Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.116.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.116.0\build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
 </Project>

+ 3 - 3
InkjetScale/InkjetScale/Shell.xaml

@@ -74,7 +74,7 @@
                     </Grid.ColumnDefinitions>
 
                     <Grid Grid.Column="0">
-                        <TextBlock Text="SON.220617" Margin="10,5,0,0" Background="{x:Null}" FontSize="15" Foreground="White" VerticalAlignment="Top" HorizontalAlignment="Left"/>
+                        <TextBlock Text="SON.220711" Margin="10,5,0,0" Background="{x:Null}" FontSize="15" Foreground="White" VerticalAlignment="Top" HorizontalAlignment="Left"/>
                     </Grid>
 
                     <Grid Grid.Column="1">
@@ -277,7 +277,7 @@
 
             </Grid>
 
-            <Grid Grid.Row="2" Background="{DynamicResource PrimaryHueLightBrush}">
+            <Grid Grid.Row="2" >
                 <Grid.ColumnDefinitions>
                     <!--<ColumnDefinition Width="*"/>-->
                     <ColumnDefinition Width="6*"/>
@@ -364,7 +364,7 @@
                                     </Grid>
 
                                     <Grid Grid.Row="2">
-                                        <TextBlock Grid.Row="2" FontSize="25" Text="Manual Align" Style="{DynamicResource MaterialDesignBody2TextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="{DynamicResource PrimaryHueMidBrush}" FontWeight="Bold"/>
+                                        <TextBlock Grid.Row="2" FontSize="25" Text="Scale" Style="{DynamicResource MaterialDesignBody2TextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="{DynamicResource PrimaryHueMidBrush}" FontWeight="Bold"/>
                                     </Grid>
 
                                 </Grid>

+ 44 - 24
InkjetScale/InkjetScale/ShellViewModel.cs

@@ -1,6 +1,9 @@
 using InkjetScale.BusinessLogic.Admin;
+using InkjetScale.BusinessLogic.Scale;
 using InkjetScale.Common.Events;
+using InkjetScale.Common.Model;
 using InkjetScale.Common.StringNames;
+using InkjetScale.DataAccess.Sqlite;
 using Prism.Commands;
 using Prism.Events;
 using Prism.Ioc;
@@ -68,28 +71,53 @@ namespace InkjetScale
         #region PrismInterface
         IRegionManager regionmanager = null;
         IEventAggregator eventAggregator = null;
+        IContainerProvider provider = null;
         #endregion
 
         public Shell View { get; set; }
         DispatcherTimer Systemtimer = null;
+        SqlManager sql = null;
+        ScaleManager scaleManager = null;
 
-        public ShellViewModel(IEventAggregator ea, IRegionManager regionManager)
+        public ShellViewModel(IEventAggregator ea, IRegionManager regionManager, IContainerProvider provider, SqlManager sqlManager, ScaleManager scaleManager)
         {
-            #region InitCommand
-            this.MinCommand = new DelegateCommand(ExecuteMin);
-            this.NavigateCommand = new DelegateCommand<string>(ExecuteNavigate);
-            this.ExitCommand = new DelegateCommand(ExecuteExit);
-            #endregion
-
             this.eventAggregator = ea;
             this.regionmanager = regionManager;
+            this.provider = provider;
+            this.sql = sqlManager;
+            this.scaleManager = scaleManager;
 
             this.HDDDriveList = new List<listBoxTemplate>();
             this.CPUUsage = new listBoxTemplate() { Tag = "CPU" };
             this.RAMUsage = new listBoxTemplate() { Tag = "RAM" };
-
             this.Systemtimer = new DispatcherTimer();
-            #region time
+
+            InitCommand();
+            InitTimer();
+            InitSystem();
+        }
+
+        #region Init
+        internal void Init()
+        {
+            #region SystemInfo Timer
+            Systemtimer.Interval = TimeSpan.FromMilliseconds(1000);
+            Systemtimer.Tick += Timer_Tick;
+            Systemtimer.Start();
+            #endregion
+
+            regionmanager.RequestNavigate(RegionNames.MainRegion, nameof(ViewNames.ScaleMainView));
+        }
+
+        private void InitCommand()
+        {
+            this.MinCommand = new DelegateCommand(ExecuteMin);
+            this.NavigateCommand = new DelegateCommand<string>(ExecuteNavigate);
+            this.ExitCommand = new DelegateCommand(ExecuteExit);
+        }
+
+        private void InitTimer()
+        {
             DispatcherTimer dateTimer = new DispatcherTimer();
             dateTimer.Tick += (object sender, EventArgs e) =>
             {
@@ -97,9 +125,10 @@ namespace InkjetScale
             };
             dateTimer.Interval = TimeSpan.FromMilliseconds(500);
             dateTimer.Start();
-            #endregion
+        }
 
-            #region system
+        private void InitSystem()
+        {
             var dl = AdminManager.GetDriveList();
             dl.ForEach(d =>
             {
@@ -109,11 +138,13 @@ namespace InkjetScale
 
                 this.HDDDriveList.Add(hdd);
             });
-            #endregion
         }
+
         
+        #endregion
+
         #region Execute
-        
+
         private void ExecuteMin()
         {
             View.WindowState = System.Windows.WindowState.Minimized;
@@ -132,17 +163,6 @@ namespace InkjetScale
         }
         #endregion
 
-        internal void Init()
-        {
-            #region SystemInfo Timer
-            Systemtimer.Interval = TimeSpan.FromMilliseconds(1000);
-            Systemtimer.Tick += Timer_Tick;
-            Systemtimer.Start();
-            #endregion
-
-            regionmanager.RequestNavigate(RegionNames.MainRegion, nameof(ViewNames.ScaleMainView));
-        }
-
         private void Timer_Tick(object sender, EventArgs e)
         {
             SystemInfoLoad();

+ 9 - 0
InkjetScale/InkjetScale/packages.config

@@ -2,12 +2,21 @@
 <packages>
   <package id="CalcBinding" version="2.5.2" targetFramework="net472" />
   <package id="DynamicExpresso.Core" version="2.3.1" targetFramework="net472" />
+  <package id="EntityFramework" version="6.4.4" targetFramework="net472" />
   <package id="MaterialDesignColors" version="2.0.6" targetFramework="net472" />
   <package id="MaterialDesignThemes" version="4.5.0" targetFramework="net472" />
   <package id="Microsoft.Xaml.Behaviors.Wpf" version="1.1.31" targetFramework="net472" />
   <package id="Prism.Core" version="8.1.97" targetFramework="net472" />
   <package id="Prism.Unity" version="8.1.97" targetFramework="net472" />
   <package id="Prism.Wpf" version="8.1.97" targetFramework="net472" />
+  <package id="SQLite.CodeFirst" version="1.7.0.34" targetFramework="net472" />
+  <package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.116.0" targetFramework="net472" />
+  <package id="System.CodeDom" version="6.0.0" targetFramework="net472" />
+  <package id="System.Data.SQLite" version="1.0.116.0" targetFramework="net472" />
+  <package id="System.Data.SQLite.Core" version="1.0.116.0" targetFramework="net472" />
+  <package id="System.Data.SQLite.EF6" version="1.0.116.0" targetFramework="net472" />
+  <package id="System.Data.SQLite.Linq" version="1.0.116.0" targetFramework="net472" />
+  <package id="System.Management" version="6.0.0" targetFramework="net472" />
   <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
   <package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net472" />
   <package id="Unity.Abstractions" version="5.11.7" targetFramework="net472" />