diff --git a/Client/Client.csproj b/Client/Client.csproj
index b0a48572..1a24cfe8 100644
--- a/Client/Client.csproj
+++ b/Client/Client.csproj
@@ -127,8 +127,8 @@
..\packages\Microsoft.WindowsAPICodePack-Shell.1.1.0.0\lib\Microsoft.WindowsAPICodePack.ShellExtensions.dll
-
- ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll
+
+ ..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll
diff --git a/Client/packages.config b/Client/packages.config
index b31b7df6..32649df5 100644
--- a/Client/packages.config
+++ b/Client/packages.config
@@ -3,5 +3,5 @@
-
+
\ No newline at end of file
diff --git a/Step.Database/Controllers/NcToolManagerController.cs b/Step.Database/Controllers/NcToolManagerController.cs
index e7cd125f..8b4eb34b 100644
--- a/Step.Database/Controllers/NcToolManagerController.cs
+++ b/Step.Database/Controllers/NcToolManagerController.cs
@@ -549,5 +549,49 @@ namespace Step.Database.Controllers
dbCtx.SaveChanges();
}
+
+ public DTOExportToolTableModel GetExportData()
+ {
+ return new DTOExportToolTableModel
+ {
+ Tools = FindTools(),
+ Families = FindFamilies(),
+ Shanks = FindShanks()
+ };
+ }
+
+ public void ImportData(DTOExportToolTableModel data)
+ {
+ List tools = FindTools();
+ List families = FindFamilies();
+ List shanks = FindShanks();
+
+ // loop thought new families
+ foreach (var family in data.Families)
+ {
+ // Check if not exist
+ if (families.FirstOrDefault(x => x.FamilyId == family.FamilyId) == null)
+ dbCtx.Families.Add(family);
+ }
+
+ // loop thought new shanks
+ foreach (var shank in data.Shanks)
+ {
+ // Check if not exist
+ if (shanks.FirstOrDefault(x => x.ShankId == shank.ShankId) == null)
+ dbCtx.Shanks.Add(shank);
+ }
+
+ // loop thought new tools
+ foreach (var tool in data.Tools)
+ {
+ // Check if not exist
+ if (tools.FirstOrDefault(x => x.ToolId == tool.ToolId) == null)
+ dbCtx.Tools.Add(tool);
+ }
+
+ // Save
+ dbCtx.SaveChanges();
+ }
}
}
\ No newline at end of file
diff --git a/Step.Model/DTOModels/AlarmModels/DTOAlarmHistoricModel.cs b/Step.Model/DTOModels/AlarmModels/DTOAlarmHistoricModel.cs
index b13ff223..f8c3773d 100644
--- a/Step.Model/DTOModels/AlarmModels/DTOAlarmHistoricModel.cs
+++ b/Step.Model/DTOModels/AlarmModels/DTOAlarmHistoricModel.cs
@@ -56,6 +56,7 @@ namespace Step.Model.DTOModels.AlarmModels
Users = obj.Users.Select(x => x.UserId).ToList()
};
}
+
public string ToCsvString(String alarm)
{
var alarmCode = 0;
diff --git a/Step.Model/DTOModels/Scada/ScadaSchemaModel.cs b/Step.Model/DTOModels/Scada/ScadaSchemaModel.cs
index 06b31061..55e98f1d 100644
--- a/Step.Model/DTOModels/Scada/ScadaSchemaModel.cs
+++ b/Step.Model/DTOModels/Scada/ScadaSchemaModel.cs
@@ -193,6 +193,9 @@ namespace Step.Model.DTOModels.Scada
public class ScadaSchemaImgClickModel
{
+ [XmlAttribute("negate")]
+ public bool Negate { get; set; }
+
[XmlElement("memVisibleIndex")]
public string MemVisibleIndex { get; set; }
diff --git a/Step.Model/DTOModels/ToolModels/DTOExportToolTableModel.cs b/Step.Model/DTOModels/ToolModels/DTOExportToolTableModel.cs
new file mode 100644
index 00000000..19b7f1e0
--- /dev/null
+++ b/Step.Model/DTOModels/ToolModels/DTOExportToolTableModel.cs
@@ -0,0 +1,16 @@
+using Step.Model.DatabaseModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Step.Model.DTOModels.ToolModels
+{
+ public class DTOExportToolTableModel
+ {
+ public List Tools { get; set; }
+ public List Families { get; set; }
+ public List Shanks { get; set; }
+ }
+}
diff --git a/Step.Model/DatabaseModels/NcFamilyModel.cs b/Step.Model/DatabaseModels/NcFamilyModel.cs
index e98e4fa6..6b50ceab 100644
--- a/Step.Model/DatabaseModels/NcFamilyModel.cs
+++ b/Step.Model/DatabaseModels/NcFamilyModel.cs
@@ -1,7 +1,9 @@
using CMS_CORE_Library.Models;
+using Newtonsoft.Json;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
namespace Step.Model.DatabaseModels
{
@@ -67,6 +69,8 @@ namespace Step.Model.DatabaseModels
[Column("revive_delta")]
public int ReviveDelta { get; set; }
+ [JsonIgnore]
+ [IgnoreDataMember]
public List Tools { get; set; }
public static explicit operator NcFamilyModel(DbNcFamilyModel obj)
diff --git a/Step.Model/DatabaseModels/NcShankModel.cs b/Step.Model/DatabaseModels/NcShankModel.cs
index 4684751e..efbc4534 100644
--- a/Step.Model/DatabaseModels/NcShankModel.cs
+++ b/Step.Model/DatabaseModels/NcShankModel.cs
@@ -2,7 +2,9 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
using CMS_CORE_Library.Models;
+using Newtonsoft.Json;
namespace Step.Model.DatabaseModels
{
@@ -33,8 +35,13 @@ namespace Step.Model.DatabaseModels
public int? OriginPositionId { get; set; }
+ [JsonIgnore]
+ [IgnoreDataMember]
public DbNcMagazinePositionModel MagazinePosition { get; set; }
+
+ [JsonIgnore]
+ [IgnoreDataMember]
public List Tools { get; set; }
public static explicit operator NcShankModel(DbNcShankModel obj)
diff --git a/Step.Model/DatabaseModels/NcToolModel.cs b/Step.Model/DatabaseModels/NcToolModel.cs
index b6c5e8d6..8f0c496c 100644
--- a/Step.Model/DatabaseModels/NcToolModel.cs
+++ b/Step.Model/DatabaseModels/NcToolModel.cs
@@ -1,6 +1,8 @@
using CMS_CORE_Library.Models;
+using Newtonsoft.Json;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
namespace Step.Model.DatabaseModels
{
@@ -44,7 +46,12 @@ namespace Step.Model.DatabaseModels
[Column("offsetId3")]
public short? OffsetId3 { get; set; }
+ [JsonIgnore]
+ [IgnoreDataMember]
public virtual DbNcFamilyModel Family { get; set; }
+
+ [JsonIgnore]
+ [IgnoreDataMember]
public virtual DbNcShankModel Shank { get; set; }
public static explicit operator NcToolModel(DbNcToolModel obj)
diff --git a/Step.Model/Step.Model.csproj b/Step.Model/Step.Model.csproj
index 5aa357fd..015ea471 100644
--- a/Step.Model/Step.Model.csproj
+++ b/Step.Model/Step.Model.csproj
@@ -48,6 +48,9 @@
..\packages\Microsoft.AspNet.Identity.EntityFramework.2.2.1\lib\net45\Microsoft.AspNet.Identity.EntityFramework.dll
+
+ ..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll
+
@@ -114,6 +117,7 @@
+
diff --git a/Step.Model/packages.config b/Step.Model/packages.config
index 847fed35..3d1459a4 100644
--- a/Step.Model/packages.config
+++ b/Step.Model/packages.config
@@ -3,4 +3,5 @@
+
\ No newline at end of file
diff --git a/Step.NC/NcHandler.cs b/Step.NC/NcHandler.cs
index ddf199cd..6079371c 100644
--- a/Step.NC/NcHandler.cs
+++ b/Step.NC/NcHandler.cs
@@ -1002,11 +1002,13 @@ namespace Step.NC
cmsError = numericalControl.PLC_RScadaValue(layer.Images[i].Status.MemVisibleIndex, SCADA_MEM_TYPE.BOOL, ref val);
if (cmsError.IsError())
return cmsError;
+
+ var negate = layer.Images[i].Status.Negate;
// Populate & add new object into scada model
scadaValue.Images.Add(new DTOScadaImageModel()
{
Id = layer.Images[i].Id,
- IsVisible = Convert.ToBoolean(val)
+ IsVisible = negate ? !Convert.ToBoolean(val) : Convert.ToBoolean(val)
});
}
diff --git a/Step.Utils/Step.Utils.csproj b/Step.Utils/Step.Utils.csproj
index 1463258c..593b3bee 100644
--- a/Step.Utils/Step.Utils.csproj
+++ b/Step.Utils/Step.Utils.csproj
@@ -39,8 +39,8 @@
..\packages\MySql.Data.6.10.4\lib\net452\MySql.Data.dll
-
- ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll
+
+ ..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll
..\packages\NLog.4.5.11\lib\net45\NLog.dll
diff --git a/Step.Utils/packages.config b/Step.Utils/packages.config
index 9ce80806..45860def 100644
--- a/Step.Utils/packages.config
+++ b/Step.Utils/packages.config
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/Step/App.config b/Step/App.config
index 2bc9b8f8..084004f0 100644
--- a/Step/App.config
+++ b/Step/App.config
@@ -34,7 +34,7 @@
-
+
diff --git a/Step/Controllers/WebApi/ApiAlarmController.cs b/Step/Controllers/WebApi/ApiAlarmController.cs
index 902900cd..1cd1c326 100644
--- a/Step/Controllers/WebApi/ApiAlarmController.cs
+++ b/Step/Controllers/WebApi/ApiAlarmController.cs
@@ -59,6 +59,7 @@ namespace Step.Controllers.WebApi
using (AlarmsController alarm = new AlarmsController())
{
+ // Get alarms from database
List alarms = alarm.GetPaginatedWithFilter(filter.Title, filter.Sources, 0, int.MaxValue, filter.StartDate.Value, filter.EndDate, filter.UserIds, plcMessages, out int pages);
Dictionary AlmPLCTras = LanguageController.GetPlcAlarmsTranslations(filter.Language);
@@ -68,7 +69,7 @@ namespace Step.Controllers.WebApi
{
var alm = "";
if(model.Source == ALARM_SOURCE.PLC)
- alm = AlmPLCTras["alarm_"+model.AlarmId];
+ alm = AlmPLCTras["alarm_" + model.AlarmId];
csv += model.ToCsvString(alm) + Environment.NewLine;
}
@@ -87,10 +88,7 @@ namespace Step.Controllers.WebApi
result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
return ResponseMessage(result);
-
-
}
-
}
[Route("data"), HttpPost]
diff --git a/Step/Controllers/WebApi/NcToolManagerController.cs b/Step/Controllers/WebApi/NcToolManagerController.cs
index 00fd3bc4..af22bcf5 100644
--- a/Step/Controllers/WebApi/NcToolManagerController.cs
+++ b/Step/Controllers/WebApi/NcToolManagerController.cs
@@ -1,6 +1,8 @@
using CMS_CORE_Library.Models;
+using Newtonsoft.Json;
using Step.Database.Controllers;
using Step.Model.DatabaseModels;
+using Step.Model.DTOModels;
using Step.Model.DTOModels.ToolModels;
using Step.NC;
using Step.Utils;
@@ -8,12 +10,17 @@ using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics;
+using System.IO;
using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web;
using System.Web.Http;
using static Step.Config.ServerConfig;
-using static Step.Model.Constants;
using static Step.Listeners.SignalRStaticObjects;
-using Step.Model.DTOModels;
+using static Step.Model.Constants;
namespace Step.Controllers.WebApi
{
@@ -152,12 +159,12 @@ namespace Step.Controllers.WebApi
[Route("tool/{toolId:int}/{familyId:int}"), HttpPost]
public IHttpActionResult AddToolWithId(short toolId, short familyId)
- {
+ {
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
// Check if exists a tool with the same id
DbNcToolModel dbTool = toolsManager.FindTool(toolId);
- if(dbTool != null)
+ if (dbTool != null)
return BadRequest(API_ERROR_KEYS.ID_ALREADY_EXIST);
// Create default family
@@ -177,8 +184,8 @@ namespace Step.Controllers.WebApi
// Check Family id
// 0 : Create new family
// N : Set tool familyId with input id
-
- if(familyId == 0)
+
+ if (familyId == 0)
// Add new family
dbFam = toolsManager.AddFamily(defaultFamily);
else
@@ -274,12 +281,12 @@ namespace Step.Controllers.WebApi
{
dtoToolWithFamily.Name = fam.Name;
}
- }
+ }
using (NcToolTableHandler ncHandler = new NcToolTableHandler())
{
ncHandler.Connect();
-
+
// Update
CmsError cmsError = ncHandler.UpdateTool(toolId, dtoToolWithFamily, out DTONcToolModel newTool, dtoToolWithFamily);
if (cmsError.IsError())
@@ -380,12 +387,12 @@ namespace Step.Controllers.WebApi
CmsError cmsError = ncHandler.UpdateToolOffsetId(toolId, positionId, offsetId, out DTONcToolModel tool);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
-
+
return Ok(tool);
}
}
- #endregion
+ #endregion Offsets
#region Shanks
@@ -551,7 +558,7 @@ namespace Step.Controllers.WebApi
}
}
- [Route("family/{familyId:int}"), HttpDelete]
+ [Route("family/{familyId:int}"), HttpDelete]
public IHttpActionResult DeleteFamily(int familyId)
{
using (NcToolManagerController toolsManager = new NcToolManagerController())
@@ -723,7 +730,6 @@ namespace Step.Controllers.WebApi
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
-
dtoShank = toolsManager.GetShank(shank.ShankId);
}
@@ -865,7 +871,7 @@ namespace Step.Controllers.WebApi
Stopwatch st = new Stopwatch();
st.Restart();
CmsError cmsError = ncHandler.StopEditTooling(magazineId);
- Console.WriteLine("TOOL TABLE WRITE TIME "+ st.ElapsedMilliseconds);
+ Console.WriteLine("TOOL TABLE WRITE TIME " + st.ElapsedMilliseconds);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
@@ -880,9 +886,9 @@ namespace Step.Controllers.WebApi
{
ncHandler.Connect();
- using(NcToolManagerController toolsManager = new NcToolManagerController())
+ using (NcToolManagerController toolsManager = new NcToolManagerController())
{
- var tool = toolsManager.FindTool(data.ToolId);
+ var tool = toolsManager.FindTool(data.ToolId);
if (tool == null)
return BadRequest();
@@ -897,9 +903,9 @@ namespace Step.Controllers.WebApi
private bool ToolIsInSpindle(int toolId)
{
- foreach(var head in LastHeadsData.ToList())
+ foreach (var head in LastHeadsData.ToList())
{
- if(head is DTOSpindleModel)
+ if (head is DTOSpindleModel)
{
var spindle = head as DTOSpindleModel;
if (spindle.MountedTool == toolId)
@@ -909,5 +915,48 @@ namespace Step.Controllers.WebApi
return false;
}
+
+ [Route("export"), HttpPost]
+ public IHttpActionResult ExportToolTable()
+ {
+ if (!ModelState.IsValid)
+ return BadRequest(ModelState);
+
+ using (NcToolManagerController toolsManager = new NcToolManagerController())
+ {
+ DTOExportToolTableModel expData = toolsManager.GetExportData();
+
+ return Ok(expData);
+ }
+ }
+
+ [Route("import"), HttpPost]
+ public async Task ImportToolTable()
+ {
+ // Check whether the POST operation is MultiPart?
+ if (!Request.Content.IsMimeMultipartContent())
+ throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
+
+ var filesReadToProvider = await Request.Content.ReadAsMultipartAsync();
+
+ var stream = filesReadToProvider.Contents.FirstOrDefault();
+ var fileBytes = await stream.ReadAsByteArrayAsync();
+
+ // Convert bytes into json string
+ string jsonString = Encoding.UTF8.GetString(fileBytes);
+ // Deserialize the string into DTO object
+ DTOExportToolTableModel importData = JsonConvert.DeserializeObject(jsonString);
+
+ using ( NcToolManagerController toolsManager = new NcToolManagerController())
+ {
+ Stopwatch st = new Stopwatch();
+ st.Start();
+ // Import data in the database
+ toolsManager.ImportData(importData);
+ Console.WriteLine(st.ElapsedMilliseconds);
+ }
+
+ return Ok();
+ }
}
}
\ No newline at end of file
diff --git a/Step/Step.csproj b/Step/Step.csproj
index 97d2f8cc..97be5ee9 100644
--- a/Step/Step.csproj
+++ b/Step/Step.csproj
@@ -101,8 +101,8 @@
..\packages\microsoft-web-helpers.2.1.20710.2\lib\net40\Microsoft.Web.Helpers.dll
-
- ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll
+
+ ..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll
..\packages\Owin.1.0\lib\net40\Owin.dll
@@ -127,6 +127,7 @@
+
..\packages\Microsoft.AspNet.WebPages.2.0.20505.0\lib\net40\System.Web.Helpers.dll
diff --git a/Step/packages.config b/Step/packages.config
index a22fd13a..4237e905 100644
--- a/Step/packages.config
+++ b/Step/packages.config
@@ -32,7 +32,7 @@
-
+
diff --git a/Step/wwwroot/assets/styles/base/tooling.less b/Step/wwwroot/assets/styles/base/tooling.less
index 4ba8cb95..c5ae8c5e 100644
--- a/Step/wwwroot/assets/styles/base/tooling.less
+++ b/Step/wwwroot/assets/styles/base/tooling.less
@@ -24,11 +24,56 @@
overflow: hidden;
.header{
font-size: 24px;
- font-weight: 600;
+ font-weight: 600;
color: @color-darkish-blue;
- margin-top: 18px;
- margin-left: 24px;
- margin-bottom:19px;
+ height: 65px;
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ .title {
+ margin-left: 24px;
+ }
+
+ .btn {
+ box-sizing: border-box;
+ border-radius: 2px;
+ margin: 0 8px;
+ text-align: center;
+ font-size: 18px;
+ font-weight: bold;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.4);
+ padding: 14px 17px;
+ border: none;
+ background-image: linear-gradient(to bottom, @color-white2, @color-silver);
+ color: @color-darkish-blue;
+
+ &:active {
+ background-image: linear-gradient(to bottom, @color-silver, @color-white2);
+ border: none !important;
+ box-shadow: inset @button-shadow !important;
+ }
+
+ &:hover {
+ box-shadow: inset 0px 0px 0px 2px #8eb5e2;
+ }
+
+ &.dark-blue {
+ background-color: @color-blue;
+ color: white;
+ }
+
+ &.btn-danger {
+ color: @color-scarlet;
+ }
+ }
+
+ .group-button-add-attach {
+ font-size: 18px;
+ line-height: 1;
+ // color: @color-greyish-brown;
+ color: @button-success-color-to;
+ }
}
.tooling-boxbody{
width: 100%;
diff --git a/Step/wwwroot/assets/styles/style.css b/Step/wwwroot/assets/styles/style.css
index 650ea952..2ee8b292 100644
--- a/Step/wwwroot/assets/styles/style.css
+++ b/Step/wwwroot/assets/styles/style.css
@@ -6744,9 +6744,47 @@ footer .container button.big:before {
font-size: 24px;
font-weight: 600;
color: #002680;
- margin-top: 18px;
+ height: 65px;
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+.tooling-container .tooling-box .header .title {
margin-left: 24px;
- margin-bottom: 19px;
+}
+.tooling-container .tooling-box .header .btn {
+ box-sizing: border-box;
+ border-radius: 2px;
+ margin: 0 8px;
+ text-align: center;
+ font-size: 18px;
+ font-weight: bold;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.4);
+ padding: 14px 17px;
+ border: none;
+ background-image: linear-gradient(to bottom, #f1f1f1, #bbbcbc);
+ color: #002680;
+}
+.tooling-container .tooling-box .header .btn:active {
+ background-image: linear-gradient(to bottom, #bbbcbc, #f1f1f1);
+ border: none !important;
+ box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.4) !important;
+}
+.tooling-container .tooling-box .header .btn:hover {
+ box-shadow: inset 0px 0px 0px 2px #8eb5e2;
+}
+.tooling-container .tooling-box .header .btn.dark-blue {
+ background-color: #002680;
+ color: white;
+}
+.tooling-container .tooling-box .header .btn.btn-danger {
+ color: #d0021b;
+}
+.tooling-container .tooling-box .header .group-button-add-attach {
+ font-size: 18px;
+ line-height: 1;
+ color: #002680;
}
.tooling-container .tooling-box .tooling-boxbody {
width: 100%;
diff --git a/Step/wwwroot/src/app_modules/tooling/components/tooling.ts b/Step/wwwroot/src/app_modules/tooling/components/tooling.ts
index f7abe6b9..10d144ab 100644
--- a/Step/wwwroot/src/app_modules/tooling/components/tooling.ts
+++ b/Step/wwwroot/src/app_modules/tooling/components/tooling.ts
@@ -8,6 +8,7 @@ import { Watch } from "vue-property-decorator";
import { DepotActionLoading, DepotActionUnloading, DepotActionTransfer, DepotActionGeneric } from "../";
import { awaiter } from "src/_base";
import { ModalHelper } from "src/components/modals";
+import { DepotService } from "src/services/depotService";
@Component({ name: "tooling", components: { card: card } })
@@ -81,4 +82,12 @@ export default class Tooling extends Vue {
public goTo = function (path: string) {
this.$router.push({ path: path });
}
+
+ public exportToolTable(){
+ new DepotService().exportMagazines()
+ }
+
+ async onChangeFile(e) {
+ new DepotService().sendImportFile(e.target.files[0]);
+ }
}
diff --git a/Step/wwwroot/src/app_modules/tooling/components/tooling.vue b/Step/wwwroot/src/app_modules/tooling/components/tooling.vue
index 11d4b60f..3b92062e 100644
--- a/Step/wwwroot/src/app_modules/tooling/components/tooling.vue
+++ b/Step/wwwroot/src/app_modules/tooling/components/tooling.vue
@@ -2,7 +2,14 @@