Compare commits
260 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 125532639a | |||
| fac2b5fa8d | |||
| 928c0d20f9 | |||
| 685c77e721 | |||
| 808e3f1223 | |||
| 3c2bc0a48e | |||
| ef98320bdc | |||
| 9094d3eb50 | |||
| a4c704fad6 | |||
| 7915adfc3c | |||
| be7f268d2f | |||
| 5064d30221 | |||
| f0ceb42b92 | |||
| a135ad689a | |||
| 29020bb948 | |||
| e0bd76d0b7 | |||
| 3a18b0e5d3 | |||
| 87703058ac | |||
| 6776a4894d | |||
| cd478f16e4 | |||
| 695d6841f0 | |||
| 6f81be6ebe | |||
| 41563cc332 | |||
| 2493f0117e | |||
| 8370141583 | |||
| 7fe7539fe8 | |||
| 8f7c780edd | |||
| 040eed1fcd | |||
| f5f41e4c65 | |||
| 2043417668 | |||
| 579fa79bb6 | |||
| d482a7551b | |||
| d3a9de2a3b | |||
| 9347ed95b7 | |||
| 90e03e2160 | |||
| ec6ba38e8b | |||
| 6de2453bb4 | |||
| 935d7879e7 | |||
| c0306d9644 | |||
| 80e67bb793 | |||
| ebd0921753 | |||
| fa54e5d1e9 | |||
| 55e1961cf2 | |||
| 1f110b009b | |||
| 6fafed419f | |||
| 4c5a61d69f | |||
| cd18c6a9d3 | |||
| 23df0dbc24 | |||
| fbe3f68397 | |||
| 0a1400389f | |||
| ae6767a89d | |||
| d3f48fdcdd | |||
| 903f1a9638 | |||
| 1155cf1680 | |||
| 6f51ff274a | |||
| 4030919f9e | |||
| e56a5daefc | |||
| 6d2ffff97b | |||
| 134aaf31d4 | |||
| 7b76ea602e | |||
| 108cd688cd | |||
| 06eb1a4bc8 | |||
| 08dd11701e | |||
| 2f5eaed707 | |||
| 7d072f9bd6 | |||
| cb72e13724 | |||
| 6e5bf0888f | |||
| 4fa253fd3b | |||
| 169c07fc1a | |||
| fbe619e498 | |||
| e3f9a09063 | |||
| 097de061bf | |||
| 1c623cf512 | |||
| cbaa4bb359 | |||
| 1e5fd252d4 | |||
| d8580afd77 | |||
| ce5869f90a | |||
| dd8793a31d | |||
| 5c17d598bb | |||
| 82a25ae070 | |||
| 614105c35a | |||
| fd6648432f | |||
| 4a17830c07 | |||
| 0b5a49122d | |||
| 407d95e8e3 | |||
| 6032712414 | |||
| 1fb1bba657 | |||
| 75b4337c75 | |||
| 40664d6136 | |||
| 73d5b93c59 | |||
| bb80dc5a38 | |||
| e070a6be6e | |||
| 34779f5a31 | |||
| c80cdb8644 | |||
| 50d0c4a948 | |||
| a5436bb717 | |||
| 2f9dbd8111 | |||
| 8abc6f00c0 | |||
| a282429e3c | |||
| 49c85f347a | |||
| f58068b4f7 | |||
| 11fb2c2355 | |||
| ba3a340815 | |||
| 8a1b28020e | |||
| 00dcc638fc | |||
| cd2f21fe01 | |||
| ebbaa76054 | |||
| 8324bcf297 | |||
| f9de12a971 | |||
| 2f8c6d643a | |||
| b14d506eb2 | |||
| ccf8cd265e | |||
| 82e400b08d | |||
| dd6f280c96 | |||
| ade296ce56 | |||
| 8dd26f73d1 | |||
| a03571793e | |||
| 1d77adc01c | |||
| 73be1bb58b | |||
| a5a76d35c4 | |||
| 782caef28a | |||
| 61a5c50476 | |||
| 9fac539cfd | |||
| d0276438a4 | |||
| 4f947f0b65 | |||
| c7b96e4d78 | |||
| 3a17e13224 | |||
| f28cbfe2ec | |||
| 3efcfef9d8 | |||
| e5961d7685 | |||
| 01ac4b071e | |||
| 06f85a3e3e | |||
| 2a51a1535d | |||
| d987cef604 | |||
| 5400408355 | |||
| 78c046f117 | |||
| 339c9e1220 | |||
| c3b211fa01 | |||
| eca0787248 | |||
| 0bda8aa748 | |||
| 2f8277924a | |||
| 1862fe641b | |||
| fd0c51a72d | |||
| 4a3dba9399 | |||
| eaff5729dc | |||
| aa2bd2d1a1 | |||
| 6586840f27 | |||
| 8b447ade4a | |||
| 20a864bfb5 | |||
| 819051002e | |||
| d2e0a4eb15 | |||
| c6a108d29a | |||
| 133bec82e4 | |||
| 9aff944b49 | |||
| d51c900173 | |||
| a87b2623e0 | |||
| 6d98d185f7 | |||
| 8743f1f924 | |||
| 0d042b8698 | |||
| e29358c4ef | |||
| 44bb957508 | |||
| 5f7941f479 | |||
| d21efcb78f | |||
| 6d52ccdc9c | |||
| c857cffbe5 | |||
| d71bfe36ba | |||
| b52c2d740f | |||
| 2fd2012dd3 | |||
| d7859a61fa | |||
| 835ba31638 | |||
| 1ea2f3182a | |||
| bdc0ce1aa5 | |||
| 31519c303b | |||
| 0cfbbe069a | |||
| 04f9a8155e | |||
| de8daee8f9 | |||
| 8ccd5fc06b | |||
| d653391253 | |||
| 7ba5090dd3 | |||
| 698fd47177 | |||
| 08c6ca521a | |||
| 8d661f0bda | |||
| a44813c8a4 | |||
| f48ee73ede | |||
| 3dedafd43f | |||
| 020d8304a5 | |||
| 2a66160e84 | |||
| a52d76bb5b | |||
| 112f6ed697 | |||
| 9798b5a993 | |||
| c28c77bec9 | |||
| 9232597888 | |||
| f3b3028167 | |||
| 6dc2678ecb | |||
| 99ea0958cd | |||
| 2c578a7944 | |||
| 2237e78dd0 | |||
| 71e16325b9 | |||
| 5f2540210f | |||
| 42d162c029 | |||
| 3b1528fd07 | |||
| ef2f3d7874 | |||
| 16782271a4 | |||
| 955d52b977 | |||
| 439c70f70d | |||
| d86e6b053a | |||
| 36099630a9 | |||
| e42266ffc2 | |||
| d0fabaac69 | |||
| 22310fa8a7 | |||
| 0365bfd7b2 | |||
| 786a0b234d | |||
| 7a52c9ffa5 | |||
| eeded21849 | |||
| 414d8ab889 | |||
| a353a0f628 | |||
| 5ed8386e2b | |||
| 74c85acd2b | |||
| a39cefbfba | |||
| 328d5f618e | |||
| ada12efca2 | |||
| 20a271290d | |||
| 74a998696f | |||
| 2e8f0f6066 | |||
| 2199c86229 | |||
| e93711fc96 | |||
| f4223d6de0 | |||
| 61ad9a934f | |||
| fcab3a8e3d | |||
| 769699a130 | |||
| 02a8dc4ef7 | |||
| 8efdf51863 | |||
| bbec4b5306 | |||
| 06d4dc316d | |||
| 1bf5534380 | |||
| 1fb1445677 | |||
| 39bd0a2eb8 | |||
| b41417da56 | |||
| 7d496ee811 | |||
| 1a3f7972a1 | |||
| 535082d311 | |||
| ead2383084 | |||
| 627fd320ae | |||
| c14e24caa2 | |||
| 492836c2eb | |||
| fe3374c16a | |||
| 69767cf627 | |||
| f46e818d18 | |||
| 4b3b0b6228 | |||
| 2a030da24a | |||
| 98ecbe05de | |||
| 0c48eec85c | |||
| eb631908bf | |||
| a2fa132ee2 | |||
| 92380255a6 | |||
| 3532ef89f5 | |||
| 9a21aae816 | |||
| 4830160763 | |||
| 821f0276c7 | |||
| 4b2553056c |
@@ -14,6 +14,7 @@
|
||||
<xs:element name="name" type="xs:string" />
|
||||
<xs:element name="description" type="xs:string" />
|
||||
<xs:element name="format" type="xs:string" />
|
||||
<xs:element name="scaleFactor" type="xs:int" default="1"/>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Thermo.Active.Config
|
||||
{
|
||||
/// <summary>
|
||||
/// Live data for Thermo Active
|
||||
/// </summary>
|
||||
public class LiveData
|
||||
{
|
||||
/// <summary>
|
||||
/// Current loaded recipe
|
||||
/// </summary>
|
||||
public string RecipeName = "current.json";
|
||||
/// <summary>
|
||||
/// Dictionary of all parameters and values
|
||||
/// </summary>
|
||||
public Dictionary<string, double> RecipeParameters;
|
||||
/// <summary>
|
||||
/// Dictionary of all channels and relative setpoints
|
||||
/// </summary>
|
||||
public Dictionary<int, int> ChannelSetpoints;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -32,10 +32,8 @@ namespace Thermo.Active.Config
|
||||
public static List<NcSoftKeysModel> NcSoftKeysConfig;
|
||||
public static List<AlarmsConfigModel> InitialAlarmsConfig;
|
||||
public static List<HeadsConfigModel> HeadsConfig;
|
||||
public static List<RecipeConfigModel> RecipeConfig;
|
||||
public static List<ModBlockConfigModel> ModBlockConfig;
|
||||
public static List<RiskResistModel> RiskResistConfig;
|
||||
public static List<RiskChannelModel> RiskChannelConfig;
|
||||
|
||||
|
||||
public static CmsConnectConfigModel CmsConnectConfig;
|
||||
|
||||
public static AreasConfigModel ProductionConfig;
|
||||
@@ -55,5 +53,16 @@ namespace Thermo.Active.Config
|
||||
public static List<string> MacrosConfig;
|
||||
|
||||
public static string CMSMainProgramContent;
|
||||
|
||||
|
||||
// Thermo
|
||||
public static List<RecipeConfigModel> RecipeConfig;
|
||||
public static List<ModBlockConfigModel> ModBlockConfig;
|
||||
public static List<RiskResistModel> RiskResistConfig;
|
||||
public static List<RiskChannelModel> RiskChannelConfig;
|
||||
public static List<RiskBoardModel> RiskBoardConfig;
|
||||
|
||||
public static LiveData RecipeLiveData = new LiveData();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,6 +15,7 @@ using System.Xml.Serialization;
|
||||
using static Thermo.Active.Config.ServerConfig;
|
||||
using static Thermo.Active.Model.Constants;
|
||||
using static Thermo.Active.Utils.SupportFunctions;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Thermo.Active.Config
|
||||
{
|
||||
@@ -39,7 +40,28 @@ namespace Thermo.Active.Config
|
||||
// ReadCMSConnectConfig();
|
||||
ReadMacros();
|
||||
ReadScadaFile();
|
||||
//ReadMainProgram();
|
||||
}
|
||||
catch (XmlException ex)
|
||||
{
|
||||
ExceptionManager.ManageError(ERROR_LEVEL.FATAL,
|
||||
"Error while reading file: " + ex.SourceUri +
|
||||
"\n Error: " + ex.Message,
|
||||
true
|
||||
);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = ex.Message;
|
||||
if (ex.InnerException != null)
|
||||
message += "\n" + ex.InnerException.Message;
|
||||
ExceptionManager.ManageError(ERROR_LEVEL.FATAL, message, true);
|
||||
}
|
||||
}
|
||||
public static void ReadLastRecipe()
|
||||
{
|
||||
try
|
||||
{
|
||||
ReadLiveData();
|
||||
}
|
||||
catch (XmlException ex)
|
||||
{
|
||||
@@ -594,7 +616,8 @@ namespace Thermo.Active.Config
|
||||
SubCategory_2 = x.Element("subCategory_2").Value,
|
||||
Name = x.Element("name").Value,
|
||||
Description = x.Element("description").Value,
|
||||
Format = x.Element("format").Value
|
||||
Format = x.Element("format").Value,
|
||||
ScaleFactor = Convert.ToInt16(x.Element("scaleFactor").Value)
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
@@ -644,7 +667,8 @@ namespace Thermo.Active.Config
|
||||
{
|
||||
Id = Convert.ToInt16(x.Value),
|
||||
Dimensione = Convert.ToInt16(x.Attribute("dimensione").Value),
|
||||
Potenza = Convert.ToInt16(x.Attribute("potenza").Value)
|
||||
Potenza = Convert.ToInt16(x.Attribute("potenza").Value),
|
||||
Modello = x.Attribute("modello").Value
|
||||
})
|
||||
.ToList();
|
||||
|
||||
@@ -671,23 +695,52 @@ namespace Thermo.Active.Config
|
||||
int numCol = -1;
|
||||
int ResistId = 0;
|
||||
int oldRow = 0;
|
||||
int currRow = 0;
|
||||
RiskChannelConfig = new List<RiskChannelModel>();
|
||||
int currIdBoard = 0;
|
||||
RiskBoardConfig = new List<RiskBoardModel>();
|
||||
RiskResistConfig = new List<RiskResistModel>();
|
||||
RiskChannelConfig = new List<RiskChannelModel>();
|
||||
|
||||
// inizializzo le 64 schede a 0 canali...
|
||||
for (int idxBoard = 0; idxBoard < 64; idxBoard++)
|
||||
{
|
||||
RiskBoardConfig.Add(new RiskBoardModel()
|
||||
{
|
||||
IdBoard = idxBoard,
|
||||
NumChannels = 0
|
||||
});
|
||||
}
|
||||
|
||||
// ciclo x calcolare i canali
|
||||
foreach (var riflettore in Riflettori)
|
||||
{
|
||||
// ciclo sulle resistente
|
||||
// ciclo sulle resistenze
|
||||
foreach (var resistenza in riflettore.Resistenze)
|
||||
{
|
||||
// cerco la scheda dato il canale... 16 ch x ogni scheda
|
||||
currIdBoard = (resistenza.Canale - 1) / 16;
|
||||
// cerco se ho già la scheda
|
||||
var boardFound = RiskBoardConfig.Find(item => item.IdBoard == currIdBoard);
|
||||
if (boardFound == null)
|
||||
{
|
||||
RiskBoardConfig.Add(new RiskBoardModel()
|
||||
{
|
||||
IdBoard = currIdBoard,
|
||||
NumChannels = 1
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
boardFound.NumChannels += 1;
|
||||
}
|
||||
|
||||
|
||||
// cerco se ho già il canale
|
||||
var found = RiskChannelConfig.Find(item => item.IdChannel == resistenza.Canale);
|
||||
if (found == null)
|
||||
var chanFound = RiskChannelConfig.Find(item => item.IdChannel == resistenza.Canale);
|
||||
if (chanFound == null)
|
||||
{
|
||||
// cerco il TIPO...
|
||||
var riferimento = Riferimenti.Find(x => x.Id == resistenza.Tipo);
|
||||
if(riferimento!=null)
|
||||
if (riferimento != null)
|
||||
{
|
||||
RiskChannelConfig.Add(new RiskChannelModel()
|
||||
{
|
||||
@@ -695,10 +748,15 @@ namespace Thermo.Active.Config
|
||||
IdReflector = riflettore.Tipo,
|
||||
SetpointRecipe = 0,
|
||||
SetpointThermo = 0,
|
||||
MaxPower = riferimento.Potenza
|
||||
MaxPower = riferimento.Potenza,
|
||||
NumResist = 1,
|
||||
CalcIchMin = riferimento.Modello.Contains("Quarzo")
|
||||
});
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
chanFound.NumResist += 1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -790,15 +848,189 @@ namespace Thermo.Active.Config
|
||||
.Select(x => x.Value)
|
||||
.ToList();
|
||||
}
|
||||
/// <summary>
|
||||
/// Try to load live data from json persistence file
|
||||
/// </summary>
|
||||
public static bool ReadLiveData()
|
||||
{
|
||||
bool answ = false;
|
||||
if (File.Exists(LIVE_RECIPE_PATH))
|
||||
{
|
||||
// load all text data
|
||||
var rawData = File.ReadAllText(LIVE_RECIPE_PATH);
|
||||
try
|
||||
{
|
||||
// deserialize to object
|
||||
RecipeLiveData = JsonConvert.DeserializeObject<LiveData>(rawData);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
answ = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// reload from template...
|
||||
var rawData = File.ReadAllText(RECIPE_TEMPLATE_PATH);
|
||||
try
|
||||
{
|
||||
// deserialize to object
|
||||
RecipeLiveData = JsonConvert.DeserializeObject<LiveData>(rawData);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
// write template to current data...
|
||||
File.WriteAllText(LIVE_RECIPE_PATH, rawData);
|
||||
answ = true;
|
||||
}
|
||||
// rendo se fatto
|
||||
return answ;
|
||||
}
|
||||
/// <summary>
|
||||
/// Try to load selected recipe to live data (memory and json persistence file)
|
||||
/// </summary>
|
||||
public static bool LoadRecipe(string filePath)
|
||||
{
|
||||
bool answ = false;
|
||||
|
||||
// check file extension
|
||||
string fileName = Path.GetFileName(filePath);
|
||||
if (!fileName.EndsWith(".json"))
|
||||
{
|
||||
fileName += ".json";
|
||||
filePath += ".json";
|
||||
}
|
||||
|
||||
// check filePath...
|
||||
if (!filePath.Contains(RECIPE_DIRECTORY) && filePath != RECIPE_TEMPLATE_PATH)
|
||||
{
|
||||
// aggiungo base path!
|
||||
filePath = RECIPE_DIRECTORY + filePath;
|
||||
}
|
||||
if (File.Exists(filePath))
|
||||
{
|
||||
answ = true;
|
||||
|
||||
// load all text data
|
||||
var rawData = File.ReadAllText(filePath);
|
||||
try
|
||||
{
|
||||
// deserialize to object
|
||||
RecipeLiveData = JsonConvert.DeserializeObject<LiveData>(rawData);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
// update current live data!
|
||||
SaveRecipeCurrent();
|
||||
}
|
||||
// rendo se fatto
|
||||
return answ;
|
||||
}
|
||||
/// <summary>
|
||||
/// Try to load template recipe
|
||||
/// </summary>
|
||||
public static bool LoadTemplate()
|
||||
{
|
||||
bool answ = false;
|
||||
// check filePath...
|
||||
if (File.Exists(RECIPE_TEMPLATE_PATH))
|
||||
{
|
||||
answ = true;
|
||||
|
||||
// load all text data
|
||||
var rawData = File.ReadAllText(RECIPE_TEMPLATE_PATH);
|
||||
try
|
||||
{
|
||||
// deserialize to object
|
||||
RecipeLiveData = JsonConvert.DeserializeObject<LiveData>(rawData);
|
||||
// update NAME
|
||||
RecipeLiveData.RecipeName = $"{DateTime.Now:yyyyMMss_HHmmss}.json";
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
// update current live data!
|
||||
SaveRecipeCurrent();
|
||||
}
|
||||
// rendo se fatto
|
||||
return answ;
|
||||
}
|
||||
/// <summary>
|
||||
/// Try to write live data to json persistence file
|
||||
/// </summary>
|
||||
public static bool SaveRecipeCurrent()
|
||||
{
|
||||
bool answ = false;
|
||||
try
|
||||
{
|
||||
answ = true;
|
||||
// serialize
|
||||
string rawData = JsonConvert.SerializeObject(RecipeLiveData);
|
||||
// save live!
|
||||
var dir = Path.GetDirectoryName(LIVE_RECIPE_PATH);
|
||||
if (!Directory.Exists(dir))
|
||||
{
|
||||
Directory.CreateDirectory(dir);
|
||||
}
|
||||
File.WriteAllText(LIVE_RECIPE_PATH, rawData);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
// rendo se fatto
|
||||
return answ;
|
||||
}
|
||||
/// <summary>
|
||||
/// Try to save live recipe as NEW template
|
||||
/// </summary>
|
||||
public static bool SaveRecipeTemplate()
|
||||
{
|
||||
|
||||
RecipeLiveData.RecipeName = "template.json";
|
||||
return SaveRecipe(RECIPE_TEMPLATE_PATH);
|
||||
}
|
||||
/// <summary>
|
||||
/// Try to save live recipe to selected filePath
|
||||
/// </summary>
|
||||
public static bool SaveRecipe(string filePath)
|
||||
{
|
||||
bool answ = false;
|
||||
try
|
||||
{
|
||||
answ = true;
|
||||
string fileName = Path.GetFileName(filePath);
|
||||
if (!fileName.EndsWith(".json"))
|
||||
{
|
||||
fileName += ".json";
|
||||
filePath += ".json";
|
||||
}
|
||||
// fix name!
|
||||
RecipeLiveData.RecipeName = fileName;
|
||||
// serialize
|
||||
string rawData = JsonConvert.SerializeObject(RecipeLiveData);
|
||||
// save live!
|
||||
File.WriteAllText(LIVE_RECIPE_PATH, rawData);
|
||||
// check filePath...
|
||||
if (!filePath.Contains(RECIPE_DIRECTORY) && filePath != RECIPE_TEMPLATE_PATH)
|
||||
{
|
||||
// aggiungo base path!
|
||||
filePath = RECIPE_DIRECTORY + filePath;
|
||||
}
|
||||
// save!
|
||||
File.WriteAllText(filePath, rawData);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
// rendo se fatto
|
||||
return answ;
|
||||
}
|
||||
|
||||
#if false
|
||||
public static void ReadMainProgram()
|
||||
{
|
||||
if (File.Exists(MAIN_PROGRAM_CONFIG_PATH))
|
||||
{
|
||||
CMSMainProgramContent = File.ReadAllText(MAIN_PROGRAM_CONFIG_PATH);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
public static string CalculateHash(string filename)
|
||||
{
|
||||
|
||||
@@ -32,6 +32,9 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
@@ -52,9 +55,13 @@
|
||||
<SubType>Designer</SubType>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Compile Include="LiveData.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ServerConfig.cs" />
|
||||
<Compile Include="ServerConfigController.cs" />
|
||||
<Content Include="Recipes\.placeholder.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<EmbeddedResource Include="Report\Programs.xml">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
@@ -175,5 +182,12 @@
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<ItemGroup>
|
||||
<Content Include="Config\Recipes\template.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net462" />
|
||||
</packages>
|
||||
@@ -27,6 +27,7 @@ using Thermo.Active.Model.DTOModels.Recipe;
|
||||
public static class ThreadsFunctions
|
||||
{
|
||||
public static int recipeRtCounter = 0;
|
||||
public static int modulesRtCounter = 0;
|
||||
public static bool reconnectionIsRunning = false;
|
||||
|
||||
private static ConcurrentDictionary<string, long> Timers = new ConcurrentDictionary<string, long>();
|
||||
@@ -51,11 +52,6 @@ public static class ThreadsFunctions
|
||||
{
|
||||
sw.Restart();
|
||||
|
||||
//if(errorCounter == MAX_NUM_OF_WATCHDOG_ERROR)
|
||||
//{
|
||||
|
||||
//}
|
||||
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
{
|
||||
@@ -87,6 +83,132 @@ public static class ThreadsFunctions
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Manage status/command words for actions
|
||||
/// </summary>
|
||||
public static void ManageStatusCommand()
|
||||
{
|
||||
NcAdapter ncAdapter = new NcAdapter();
|
||||
Stopwatch sw = new Stopwatch();
|
||||
try
|
||||
{
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
while (true)
|
||||
{
|
||||
sw.Restart();
|
||||
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
{
|
||||
// Manage status command
|
||||
libraryError = ncAdapter.ManageStatusCommand();
|
||||
}
|
||||
else
|
||||
RestoreConnection();
|
||||
|
||||
sw.Stop();
|
||||
|
||||
//Update thread timer
|
||||
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
|
||||
|
||||
// Wait
|
||||
Thread.Sleep(CalcSleepTime(250, (int)sw.ElapsedMilliseconds));
|
||||
}
|
||||
}
|
||||
catch (ThreadAbortException ex)
|
||||
{
|
||||
ncAdapter.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Manage action for conf request
|
||||
/// </summary>
|
||||
public static void ManageConfRequest()
|
||||
{
|
||||
NcAdapter ncAdapter = new NcAdapter();
|
||||
Stopwatch sw = new Stopwatch();
|
||||
try
|
||||
{
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
while (true)
|
||||
{
|
||||
sw.Restart();
|
||||
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
{
|
||||
// Manage status command
|
||||
libraryError = ncAdapter.ManageConfRequest();
|
||||
if (libraryError.errorCode != 0)
|
||||
ManageLibraryError(libraryError);
|
||||
}
|
||||
else
|
||||
RestoreConnection();
|
||||
|
||||
sw.Stop();
|
||||
|
||||
//Update thread timer
|
||||
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
|
||||
|
||||
// Wait
|
||||
Thread.Sleep(CalcSleepTime(2000, (int)sw.ElapsedMilliseconds));
|
||||
}
|
||||
}
|
||||
catch (ThreadAbortException ex)
|
||||
{
|
||||
ncAdapter.Dispose();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Manage action for conf request
|
||||
/// </summary>
|
||||
public static void ManageProdUpdate()
|
||||
{
|
||||
NcAdapter ncAdapter = new NcAdapter();
|
||||
Stopwatch sw = new Stopwatch();
|
||||
try
|
||||
{
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
while (true)
|
||||
{
|
||||
sw.Restart();
|
||||
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
{
|
||||
// Manage status command
|
||||
libraryError = ncAdapter.ManageProdUpdate();
|
||||
if (libraryError.errorCode != 0)
|
||||
ManageLibraryError(libraryError);
|
||||
}
|
||||
else
|
||||
RestoreConnection();
|
||||
|
||||
sw.Stop();
|
||||
|
||||
//Update thread timer
|
||||
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
|
||||
|
||||
// Wait
|
||||
Thread.Sleep(CalcSleepTime(1000, (int)sw.ElapsedMilliseconds));
|
||||
}
|
||||
}
|
||||
catch (ThreadAbortException ex)
|
||||
{
|
||||
ncAdapter.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public static void ReadAlarms()
|
||||
{
|
||||
NcAdapter ncAdapter = new NcAdapter();
|
||||
@@ -694,12 +816,94 @@ public static class ThreadsFunctions
|
||||
ncAdapter.Dispose();
|
||||
}
|
||||
}
|
||||
public static void ReadRecipeData()
|
||||
public static void ReadProdInfoData()
|
||||
{
|
||||
NcAdapter ncAdapter = new NcAdapter();
|
||||
Stopwatch sw = new Stopwatch();
|
||||
|
||||
try
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
while (true)
|
||||
{
|
||||
sw.Restart();
|
||||
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
{
|
||||
// Get new data from PLC
|
||||
libraryError = ncAdapter.ReadProdInfoData(out ThermoModels.ProdInfoModel prodInfoData);
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
MessageServices.Current.Publish(SEND_THERMO_PROD_INFO_DATA, null, prodInfoData);
|
||||
}
|
||||
else
|
||||
RestoreConnection();
|
||||
|
||||
sw.Stop();
|
||||
|
||||
//Update thread timer
|
||||
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
|
||||
// Wait
|
||||
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
|
||||
}
|
||||
}
|
||||
catch (ThreadAbortException)
|
||||
{
|
||||
ncAdapter.Dispose();
|
||||
}
|
||||
}
|
||||
public static void ReadProdCycleData()
|
||||
{
|
||||
NcAdapter ncAdapter = new NcAdapter();
|
||||
Stopwatch sw = new Stopwatch();
|
||||
|
||||
try
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
while (true)
|
||||
{
|
||||
sw.Restart();
|
||||
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
{
|
||||
// Get new data from PLC
|
||||
libraryError = ncAdapter.ReadProdCycleData(out ThermoModels.ProdCycleModel prodCycleData);
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
MessageServices.Current.Publish(SEND_THERMO_PROD_CYCLE_DATA, null, prodCycleData);
|
||||
}
|
||||
else
|
||||
RestoreConnection();
|
||||
|
||||
sw.Stop();
|
||||
|
||||
//Update thread timer
|
||||
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
|
||||
// Wait
|
||||
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
|
||||
}
|
||||
}
|
||||
catch (ThreadAbortException)
|
||||
{
|
||||
ncAdapter.Dispose();
|
||||
}
|
||||
}
|
||||
public static void ReadRecipeData()
|
||||
{
|
||||
NcAdapter ncAdapter = new NcAdapter();
|
||||
Stopwatch sw = new Stopwatch();
|
||||
try
|
||||
{
|
||||
// Try connection
|
||||
@@ -713,7 +917,7 @@ public static class ThreadsFunctions
|
||||
recipeRtCounter--;
|
||||
bool onlyRt = recipeRtCounter > 0;
|
||||
//check reset...
|
||||
recipeRtCounter = recipeRtCounter < 0 ? 5 : recipeRtCounter;
|
||||
recipeRtCounter = recipeRtCounter < 0 ? 4 : recipeRtCounter;
|
||||
|
||||
sw.Restart();
|
||||
|
||||
@@ -735,7 +939,7 @@ public static class ThreadsFunctions
|
||||
// Update thread timer
|
||||
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
|
||||
// Wait
|
||||
Thread.Sleep(CalcSleepTime(250, (int)sw.ElapsedMilliseconds));
|
||||
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
|
||||
}
|
||||
}
|
||||
catch (ThreadAbortException)
|
||||
@@ -745,11 +949,8 @@ public static class ThreadsFunctions
|
||||
}
|
||||
public static void ReadWarmersData()
|
||||
{
|
||||
// TODO FIXME
|
||||
#if false
|
||||
NcAdapter ncAdapter = new NcAdapter();
|
||||
Stopwatch sw = new Stopwatch();
|
||||
|
||||
try
|
||||
{
|
||||
// Try connection
|
||||
@@ -764,21 +965,60 @@ public static class ThreadsFunctions
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
{
|
||||
List<ScadaSchemaModel> scadaToRead = ProductionScadaSchema.Concat(SubscribedScada).ToList();
|
||||
|
||||
// Get new data from PLC
|
||||
libraryError = ncAdapter.ReadScadasData(scadaToRead, out List<DTOScadaModel> scadas);
|
||||
libraryError = ncAdapter.ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers);
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
MessageServices.Current.Publish(SEND_SCADA_DATA, null, scadas);
|
||||
// pubblico
|
||||
MessageServices.Current.Publish(SEND_THERMO_WARMERS_DATA, null, currWarmers);
|
||||
}
|
||||
else
|
||||
RestoreConnection();
|
||||
|
||||
sw.Stop();
|
||||
|
||||
//Update thread timer
|
||||
// Update thread timer
|
||||
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
|
||||
// Wait
|
||||
Thread.Sleep(CalcSleepTime(1000, (int)sw.ElapsedMilliseconds));
|
||||
}
|
||||
}
|
||||
catch (ThreadAbortException)
|
||||
{
|
||||
ncAdapter.Dispose();
|
||||
}
|
||||
}
|
||||
public static void ReadAreaData()
|
||||
{
|
||||
NcAdapter ncAdapter = new NcAdapter();
|
||||
Stopwatch sw = new Stopwatch();
|
||||
try
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
while (true)
|
||||
{
|
||||
sw.Restart();
|
||||
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
{
|
||||
// Get new data from PLC... info x area lastra... la % di X / Y
|
||||
libraryError = ncAdapter.GetWarmMaterialArea(out Dictionary<string, double> currAreaPerc);
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
// pubblico
|
||||
MessageServices.Current.Publish(SEND_THERMO_AREA_DATA, null, currAreaPerc);
|
||||
}
|
||||
else
|
||||
RestoreConnection();
|
||||
|
||||
sw.Stop();
|
||||
|
||||
// Update thread timer
|
||||
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
|
||||
// Wait
|
||||
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
|
||||
@@ -787,16 +1027,12 @@ public static class ThreadsFunctions
|
||||
catch (ThreadAbortException)
|
||||
{
|
||||
ncAdapter.Dispose();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
public static void ReadModulesData()
|
||||
{
|
||||
// TODO FIXME
|
||||
#if false
|
||||
NcAdapter ncAdapter = new NcAdapter();
|
||||
Stopwatch sw = new Stopwatch();
|
||||
|
||||
try
|
||||
{
|
||||
// Try connection
|
||||
@@ -811,31 +1047,28 @@ public static class ThreadsFunctions
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
{
|
||||
List<ScadaSchemaModel> scadaToRead = ProductionScadaSchema.Concat(SubscribedScada).ToList();
|
||||
|
||||
// Get new data from PLC
|
||||
libraryError = ncAdapter.ReadScadasData(scadaToRead, out List<DTOScadaModel> scadas);
|
||||
libraryError = ncAdapter.ReadModulesBlock(out Dictionary<int, DTOModulesBlock> currModules);
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
MessageServices.Current.Publish(SEND_SCADA_DATA, null, scadas);
|
||||
MessageServices.Current.Publish(SEND_THERMO_MODULE_DATA, null, currModules);
|
||||
}
|
||||
else
|
||||
RestoreConnection();
|
||||
|
||||
sw.Stop();
|
||||
|
||||
//Update thread timer
|
||||
// Update thread timer
|
||||
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
|
||||
// Wait
|
||||
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
|
||||
Thread.Sleep(CalcSleepTime(250, (int)sw.ElapsedMilliseconds));
|
||||
}
|
||||
}
|
||||
catch (ThreadAbortException)
|
||||
{
|
||||
ncAdapter.Dispose();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
public static void ReadM154Data()
|
||||
{
|
||||
@@ -1191,7 +1424,7 @@ public static class ThreadsFunctions
|
||||
{
|
||||
if (ThreadsHandler.RunningThreadStatus.ContainsKey(value.Key) && Counter[value.Key] != 0)
|
||||
{
|
||||
ThreadsHandler.RunningThreadStatus[value.Key] = (Timers[value.Key] / Counter[value.Key]) + " mS";
|
||||
ThreadsHandler.RunningThreadStatus[value.Key] = $"{(Timers[value.Key] / Counter[value.Key])} ms x {Counter[value.Key]}";
|
||||
Timers[value.Key] = 0;
|
||||
Counter[value.Key] = 0;
|
||||
}
|
||||
|
||||
@@ -11,25 +11,31 @@ namespace Thermo.Active.Core
|
||||
private static List<Action> ThreadsFunctionsList = new List<Action>
|
||||
{
|
||||
ThreadsFunctions.ManageWatchdog,
|
||||
ThreadsFunctions.ManageStatusCommand,
|
||||
ThreadsFunctions.ManageConfRequest,
|
||||
ThreadsFunctions.ManageProdUpdate,
|
||||
ThreadsFunctions.ReadAlarms,
|
||||
ThreadsFunctions.ReadPowerOnData,
|
||||
ThreadsFunctions.StatThread,
|
||||
ThreadsFunctions.ReadProcessesPPStatus,
|
||||
//ThreadsFunctions.ReadProcessesPPStatus,
|
||||
ThreadsFunctions.ReadEnabledFunctionality,
|
||||
ThreadsFunctions.ReadExpiredMaintenances,
|
||||
ThreadsFunctions.ReadAxesPositionsData,
|
||||
//ThreadsFunctions.ReadAxesPositionsData,
|
||||
ThreadsFunctions.ReadUserSoftKeysData,
|
||||
//ThreadsFunctions.ReadHeadsData,
|
||||
ThreadsFunctions.ReadAxesNamesData,
|
||||
//ThreadsFunctions.ReadAxesNamesData,
|
||||
//ThreadsFunctions.ReadActiveProgramData,
|
||||
//ThreadsFunctions.ReadPartProgramQueueData,
|
||||
ThreadsFunctions.ReadScadaData,
|
||||
ThreadsFunctions.ReadM154Data, // levare?
|
||||
// ThreadsFunctions.ReadNcSoftKeysData,
|
||||
ThreadsFunctions.ReadGaugeData,
|
||||
ThreadsFunctions.ReadProdInfoData,
|
||||
ThreadsFunctions.ReadProdCycleData,
|
||||
ThreadsFunctions.ReadRecipeData,
|
||||
ThreadsFunctions.ReadWarmersData,
|
||||
ThreadsFunctions.ReadModulesData
|
||||
ThreadsFunctions.ReadAreaData,
|
||||
ThreadsFunctions.ReadModulesData,
|
||||
ThreadsFunctions.ReadScadaData,
|
||||
ThreadsFunctions.ReadM154Data // levare?
|
||||
};
|
||||
private static Action ThreadSetupCmsConnect = ThreadsFunctions.SetupCmsConnect;
|
||||
|
||||
|
||||
@@ -12,5 +12,6 @@ namespace Thermo.Active.Model.ConfigModels
|
||||
public string Name { get; set; }
|
||||
public string Description { get; set; }
|
||||
public string Format { get; set; }
|
||||
public int ScaleFactor { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ namespace Thermo.Active.Model.ConfigModels
|
||||
public int Id;
|
||||
public int Potenza;
|
||||
public int Dimensione;
|
||||
public string Modello;
|
||||
}
|
||||
public class RiskResistModel
|
||||
{
|
||||
@@ -35,5 +36,12 @@ namespace Thermo.Active.Model.ConfigModels
|
||||
public int SetpointRecipe;
|
||||
public int SetpointThermo;
|
||||
public int MaxPower;
|
||||
public int NumResist;
|
||||
public bool CalcIchMin;
|
||||
}
|
||||
public class RiskBoardModel
|
||||
{
|
||||
public int IdBoard;
|
||||
public int NumChannels;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,6 +210,9 @@ namespace Thermo.Active.Model
|
||||
public static string WEBSITE_DIRECTORY = BASE_PATH + "\\view";
|
||||
#endif
|
||||
public const string CONFIG_DIRECTORY = "Config\\";
|
||||
public const string RECIPE_DIRECTORY = "Recipes\\";
|
||||
public const string RECIPE_TEMPLATE_PATH = CONFIG_DIRECTORY + RECIPE_DIRECTORY + "template.json";
|
||||
public const string LIVE_RECIPE_PATH = TEMP_FOLDER + RECIPE_DIRECTORY + "current.json";
|
||||
public const string RESOURCE_DIRECTORY = @"Thermo.Active.Config.Config.";
|
||||
public const string SERVER_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + @"serverConfigValidator.xsd";
|
||||
public const string SERVER_CONFIG_PATH = CONFIG_DIRECTORY + "serverConfig.xml";
|
||||
@@ -252,6 +255,7 @@ namespace Thermo.Active.Model
|
||||
|
||||
public const string MAIN_PROGRAM_CONFIG_PATH = CONFIG_DIRECTORY + "customMainProgram.txt";
|
||||
|
||||
|
||||
public static string LANGUAGE_PACK_DIRECTORY = BASE_PATH + "\\languages\\";
|
||||
public static string LANGUAGE_SCHEMA_PATH = BASE_PATH + "\\LanguageValidator.xsd";
|
||||
|
||||
@@ -294,7 +298,10 @@ namespace Thermo.Active.Model
|
||||
public const string SEND_THERMO_RECIPE_OVERWIEW = "SEND_THERMO_RECIPE_OVERWIEW";
|
||||
public const string SEND_THERMO_MODULE_DATA = "SEND_THERMO_MODULE_DATA";
|
||||
public const string SEND_THERMO_WARMERS_DATA = "SEND_THERMO_WARMERS_DATA";
|
||||
public const string SEND_THERMO_AREA_DATA = "SEND_THERMO_AREA_DATA";
|
||||
public const string SEND_THERMO_GAUGE_DATA = "SEND_THERMO_GAUGE_DATA";
|
||||
public const string SEND_THERMO_PROD_INFO_DATA = "SEND_THERMO_PROD_INFO_DATA";
|
||||
public const string SEND_THERMO_PROD_CYCLE_DATA = "SEND_THERMO_PROD_CYCLE_DATA";
|
||||
|
||||
public const string BROADCAST_DATA = "BROADCAST_DATA";
|
||||
|
||||
|
||||
@@ -3,18 +3,28 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static Thermo.Active.Model.Constants;
|
||||
|
||||
namespace Thermo.Active.Model.DTOModels.Recipe
|
||||
{
|
||||
public class DTOModulesBlock
|
||||
{
|
||||
public int Id { get; set; } = 0;
|
||||
public double SetpointHMI { get; set; } = 0;
|
||||
public double SetpointPLC { get; set; } = 0;
|
||||
//public RPRange Range { get; set; }
|
||||
//public RPStatus Status { get; set; }
|
||||
public string UnitMeasure { get; set; }
|
||||
public double ValueAct { get; set; }
|
||||
public string LocalizedLabel { get; set; } = "";
|
||||
public TACT_MBLOCK_TYPE Type { get; set; } = TACT_MBLOCK_TYPE.ND;
|
||||
public TACT_MBLOCK_SECTION Section { get; set; } = TACT_MBLOCK_SECTION.ND;
|
||||
public int IdParam { get; set; } = 0;
|
||||
public bool ShowDelay { get; set; } = false;
|
||||
public int Priority { get; set; } = 0;
|
||||
public int ActualDelay { get; set; } = 0;
|
||||
public int ActualDuration { get; set; } = 0;
|
||||
public int EstimatedDelay { get; set; } = 0;
|
||||
public int EstimatedDuration { get; set; } = 0;
|
||||
public List<short> PrecedingId { get; set; } = new List<short>();
|
||||
public bool Visible { get; set; } = false;
|
||||
public bool Running { get; set; } = false;
|
||||
public bool HasError { get; set; } = false;
|
||||
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
@@ -23,17 +33,33 @@ namespace Thermo.Active.Model.DTOModels.Recipe
|
||||
|
||||
if (Id!= item.Id)
|
||||
return false;
|
||||
if (SetpointHMI != item.SetpointHMI)
|
||||
if (LocalizedLabel != item.LocalizedLabel)
|
||||
return false;
|
||||
if (SetpointPLC != item.SetpointPLC)
|
||||
if (Type != item.Type)
|
||||
return false;
|
||||
//if (!Range.Equals(item.Range))
|
||||
// return false;
|
||||
//if (!Status.Equals(item.Status))
|
||||
// return false;
|
||||
if (UnitMeasure != item.UnitMeasure)
|
||||
if (Section != item.Section)
|
||||
return false;
|
||||
if (ValueAct != item.ValueAct)
|
||||
if (IdParam != item.IdParam)
|
||||
return false;
|
||||
if (ShowDelay != item.ShowDelay)
|
||||
return false;
|
||||
if (Priority != item.Priority)
|
||||
return false;
|
||||
if (ActualDelay != item.ActualDelay)
|
||||
return false;
|
||||
if (ActualDuration != item.ActualDuration)
|
||||
return false;
|
||||
if (EstimatedDelay != item.EstimatedDelay)
|
||||
return false;
|
||||
if (EstimatedDuration != item.EstimatedDuration)
|
||||
return false;
|
||||
if (!Enumerable.SequenceEqual(PrecedingId,item.PrecedingId))
|
||||
return false;
|
||||
if (Visible != item.Visible)
|
||||
return false;
|
||||
if (Running != item.Running)
|
||||
return false;
|
||||
if (HasError != item.HasError)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
||||
@@ -13,5 +13,6 @@ namespace Thermo.Active.Model.DTOModels.Recipe
|
||||
public string Description;
|
||||
public string Format;
|
||||
public string Label;
|
||||
public int ScaleFactor;
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ namespace Thermo.Active.Model.DTOModels.Recipe
|
||||
public RPStatus Status { get; set; }
|
||||
public string UnitMeasure { get; set; }
|
||||
public double ValueAct { get; set; }
|
||||
public int ScaleFactor { get; set; }
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
@@ -35,6 +36,8 @@ namespace Thermo.Active.Model.DTOModels.Recipe
|
||||
return false;
|
||||
if (ValueAct != item.ValueAct)
|
||||
return false;
|
||||
if (ScaleFactor != item.ScaleFactor)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -8,32 +8,39 @@ namespace Thermo.Active.Model.DTOModels.Recipe
|
||||
{
|
||||
public class DTOWarmers
|
||||
{
|
||||
public int Id { get; set; } = 0;
|
||||
public double SetpointHMI { get; set; } = 0;
|
||||
public double SetpointPLC { get; set; } = 0;
|
||||
//public RPRange Range { get; set; }
|
||||
//public RPStatus Status { get; set; }
|
||||
public string UnitMeasure { get; set; }
|
||||
public double ValueAct { get; set; }
|
||||
public int IdChannel { get; set; } = 0;
|
||||
public int IdReflector { get; set; } = 0;
|
||||
public int SetpointHMI { get; set; } = 0;
|
||||
public int SetpointTermocam { get; set; } = 0;
|
||||
public int SetpointPLC { get; set; } = 0;
|
||||
public int ChannelStatus { get; set; } = 0;
|
||||
public double ActualCurrent { get; set; } = 0;
|
||||
public int ActualPerc { get; set; } = 0;
|
||||
public int MaxPower { get; set; } = 0;
|
||||
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (!(obj is DTOWarmers item))
|
||||
return false;
|
||||
|
||||
if (Id!= item.Id)
|
||||
if (IdChannel != item.IdChannel)
|
||||
return false;
|
||||
if (IdReflector != item.IdReflector)
|
||||
return false;
|
||||
if (SetpointHMI != item.SetpointHMI)
|
||||
return false;
|
||||
if (SetpointTermocam != item.SetpointTermocam)
|
||||
return false;
|
||||
if (SetpointPLC != item.SetpointPLC)
|
||||
return false;
|
||||
//if (!Range.Equals(item.Range))
|
||||
// return false;
|
||||
//if (!Status.Equals(item.Status))
|
||||
// return false;
|
||||
if (UnitMeasure != item.UnitMeasure)
|
||||
if (ChannelStatus != item.ChannelStatus)
|
||||
return false;
|
||||
if (ValueAct != item.ValueAct)
|
||||
if (ActualCurrent != item.ActualCurrent)
|
||||
return false;
|
||||
if (ActualPerc != item.ActualPerc)
|
||||
return false;
|
||||
if (MaxPower != item.MaxPower)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@@ -45,53 +52,4 @@ namespace Thermo.Active.Model.DTOModels.Recipe
|
||||
}
|
||||
}
|
||||
|
||||
#if false
|
||||
public struct RPRange
|
||||
{
|
||||
public double Min { get; set; }
|
||||
public double Max { get; set; }
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (!(obj is RPRange item))
|
||||
return false;
|
||||
|
||||
if (Min != item.Min)
|
||||
return false;
|
||||
if (Max != item.Max)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return base.GetHashCode();
|
||||
}
|
||||
}
|
||||
public struct RPStatus
|
||||
{
|
||||
public bool Visible { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
public bool HasError { get; set; }
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (!(obj is RPStatus item))
|
||||
return false;
|
||||
|
||||
if (Visible != item.Visible)
|
||||
return false;
|
||||
if (Enabled != item.Enabled)
|
||||
return false;
|
||||
if (HasError != item.HasError)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return base.GetHashCode();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Thermo.Active.Model.DTOModels.ThermoProd
|
||||
{
|
||||
|
||||
public enum Status
|
||||
{
|
||||
ND = 0,
|
||||
IDLE,
|
||||
RUNNING,
|
||||
HOLD,
|
||||
ALARM
|
||||
}
|
||||
public enum Mode
|
||||
{
|
||||
ND = -1,
|
||||
NOT_READY,
|
||||
MANUAL,
|
||||
AUTO,
|
||||
SETUP
|
||||
}
|
||||
public enum SubMode
|
||||
{
|
||||
ND = 0,
|
||||
SHEET,
|
||||
CYCLE_EMPTY,
|
||||
PRE_WARM
|
||||
}
|
||||
|
||||
|
||||
public class DTOProdCycle
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -142,6 +142,7 @@
|
||||
<Compile Include="DTOModels\MaintenanceModels\DTOMaintenanceNoteModel.cs" />
|
||||
<Compile Include="DTOModels\MaintenanceModels\DTONewMaintenanceModel.cs" />
|
||||
<Compile Include="DatabaseModels\MaintenanceNoteModel.cs" />
|
||||
<Compile Include="DTOModels\ThermoProd\DTOProdCycle.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="DatabaseModels\UserModel.cs">
|
||||
<Generator>DtsGenerator</Generator>
|
||||
@@ -166,6 +167,11 @@
|
||||
<Name>CMS_CORE_Library</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="DTOModels\ThermoModules\" />
|
||||
<Folder Include="DTOModels\ThermoRecipe\" />
|
||||
<Folder Include="DTOModels\ThermoWarmers\" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>
|
||||
|
||||
@@ -28,6 +28,7 @@ namespace Thermo.Active.NC
|
||||
{
|
||||
public class NcAdapter : IDisposable
|
||||
{
|
||||
|
||||
public NcThermo numericalControl;
|
||||
|
||||
public NcAdapter() =>
|
||||
@@ -66,6 +67,92 @@ namespace Thermo.Active.NC
|
||||
return null;
|
||||
}
|
||||
|
||||
#region StatusCommand words
|
||||
|
||||
|
||||
// variabili delle richieste da PLC: tutte nella status command
|
||||
private static List<ushort> statusCmd = new List<ushort>();
|
||||
/// <summary>
|
||||
/// Check bit on word
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="numBit"></param>
|
||||
/// <returns></returns>
|
||||
protected static bool checkBitOnWord(ushort value, int numBit)
|
||||
{
|
||||
bool answ = false;
|
||||
try
|
||||
{
|
||||
ushort pow = (ushort)(1 << numBit);
|
||||
answ = (value & pow) == pow;
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
return answ;
|
||||
}
|
||||
private static bool ThermoReqConfWarmerStr
|
||||
{
|
||||
get
|
||||
{
|
||||
bool answ = false;
|
||||
if (statusCmd.Count > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
answ = checkBitOnWord(statusCmd[0], 7);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
private static bool ThermoReqConfRecipeStr
|
||||
{
|
||||
get
|
||||
{
|
||||
bool answ = false;
|
||||
if (statusCmd.Count > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
answ = checkBitOnWord(statusCmd[0], 8);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
private static bool ThermoProdUpdatedStr
|
||||
{
|
||||
get
|
||||
{
|
||||
bool answ = false;
|
||||
if (statusCmd != null)
|
||||
{
|
||||
if (statusCmd.Count > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
answ = checkBitOnWord(statusCmd[0], 3);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region cached data
|
||||
|
||||
protected static Dictionary<string, DTORecipeParam> lastRecipe = new Dictionary<string, DTORecipeParam>();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Read Data
|
||||
|
||||
#region Axes
|
||||
@@ -168,6 +255,93 @@ namespace Thermo.Active.NC
|
||||
return numericalControl.PLC_RWManageWatchdog();
|
||||
}
|
||||
|
||||
public CmsError ManageStatusCommand()
|
||||
{
|
||||
CmsError cmsError = NO_ERROR;
|
||||
// recupero i dati
|
||||
//statusCmd = new List<ushort>();
|
||||
cmsError = numericalControl.PLC_RStatusCommand(ref statusCmd);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// restituisco errore
|
||||
return cmsError;
|
||||
}
|
||||
public CmsError ManageConfRequest()
|
||||
{
|
||||
CmsError cmsError = NO_ERROR;
|
||||
if (RecipeLiveData != null)
|
||||
{
|
||||
// controllo SE HO richieste di configurazione
|
||||
if (ThermoReqConfWarmerStr)
|
||||
{
|
||||
if (RecipeLiveData.ChannelSetpoints != null)
|
||||
{
|
||||
// se si in questo caso scrivo configurazione...
|
||||
WriteRecipeWarmConfig();
|
||||
// Ack !
|
||||
cmsError = numericalControl.PLC_WAckConfRiskRequest();
|
||||
}
|
||||
}
|
||||
if (ThermoReqConfRecipeStr)
|
||||
{
|
||||
if (RecipeLiveData.RecipeParameters != null)
|
||||
{
|
||||
// copy data to PLC
|
||||
cmsError = ReadFullRecipe(out Dictionary<string, DTORecipeParam> prevRecipe);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// save parameters to PLC!!!
|
||||
Dictionary<string, DTORecipeParam> updtRecipe = new Dictionary<string, DTORecipeParam>();
|
||||
foreach (var item in RecipeLiveData.RecipeParameters)
|
||||
{
|
||||
if (prevRecipe.ContainsKey(item.Key))
|
||||
{
|
||||
// aggiorno il valore HMI nel parametro
|
||||
var currParam = prevRecipe[item.Key];
|
||||
currParam.SetpointHMI = item.Value;
|
||||
// salvo (1 parametro, potrei fare N...)
|
||||
updtRecipe.Add(item.Key, currParam);
|
||||
}
|
||||
else
|
||||
{
|
||||
return NOT_FOUND_ERROR;
|
||||
}
|
||||
}
|
||||
// se si in questo caso scrivo configurazione attuale...
|
||||
WriteRecipeParams(updtRecipe);
|
||||
// Ack !
|
||||
cmsError = numericalControl.PLC_WAckConfRecipeRequest();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
public CmsError ManageProdUpdate()
|
||||
{
|
||||
CmsError cmsError = NO_ERROR;
|
||||
// controllo SE HO segnalazioni produzione
|
||||
if (ThermoProdUpdatedStr)
|
||||
{
|
||||
// se si in questo caso leggo il record produzione...
|
||||
|
||||
/// e quindi lo gestisco (salvataggio su DB)
|
||||
|
||||
// do il bit di ack
|
||||
cmsError = numericalControl.PLC_WAckProdUpdate();
|
||||
}
|
||||
else
|
||||
{
|
||||
// se è zero e il mio ack fosse 1 --> resetto il mio!
|
||||
|
||||
}
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public CmsError GetNcGenericData(out DTONcGenericDataModel genericData)
|
||||
{
|
||||
genericData = new DTONcGenericDataModel(MachineConfig.Model);
|
||||
@@ -901,6 +1075,7 @@ namespace Thermo.Active.NC
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
#if false
|
||||
// !!!FARE!!! è copia delle heads
|
||||
public CmsError GetRecipeData(out List<DTOHeadModel> heads)
|
||||
{
|
||||
@@ -973,6 +1148,7 @@ namespace Thermo.Active.NC
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
#endif
|
||||
public CmsError GetM155Data(out List<DTOM155InputModel> data)
|
||||
{
|
||||
data = new List<DTOM155InputModel>();
|
||||
@@ -1063,6 +1239,20 @@ namespace Thermo.Active.NC
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
public CmsError ReadProdInfoData(out ThermoModels.ProdInfoModel prodInfoData)
|
||||
{
|
||||
prodInfoData = new ThermoModels.ProdInfoModel();
|
||||
CmsError cmsError = numericalControl.PLC_RProdInfo(ref prodInfoData);
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
public CmsError ReadProdCycleData(out ThermoModels.ProdCycleModel prodCycleData)
|
||||
{
|
||||
prodCycleData = new ThermoModels.ProdCycleModel();
|
||||
CmsError cmsError = numericalControl.PLC_RProdCycle(ref prodCycleData);
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
/// <summary>
|
||||
/// Vero metodo lettura ricetta da 2 aree memoria PLC
|
||||
/// </summary>
|
||||
@@ -1081,15 +1271,18 @@ namespace Thermo.Active.NC
|
||||
{
|
||||
Dictionary<int, ThermoModels.RecipeParam> currPlcRecipe = new Dictionary<int, ThermoModels.RecipeParam>();
|
||||
CmsError cmsError = NO_ERROR;
|
||||
if (useLastRead)
|
||||
if (useLastRead && lastRecipe.Count > 0)
|
||||
{
|
||||
cmsError = numericalControl.PLC_RRecipeParamList(false, ref currPlcRecipe);
|
||||
currentRecipe = lastRecipe;
|
||||
return cmsError;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmsError = numericalControl.PLC_RRecipeParamList(refreshOnlyRT, ref currPlcRecipe);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
@@ -1098,6 +1291,7 @@ namespace Thermo.Active.NC
|
||||
List<DTORecipeConfigModel> recipeConfig = RecipeConfig.Select(x => new DTORecipeConfigModel()
|
||||
{
|
||||
Id = x.Id,
|
||||
ScaleFactor = x.ScaleFactor,
|
||||
Category = x.Category.ToString(),
|
||||
SubCategory_1 = x.SubCategory_1,
|
||||
SubCategory_2 = x.SubCategory_2,
|
||||
@@ -1115,8 +1309,8 @@ namespace Thermo.Active.NC
|
||||
ThermoModels.RecipeParam paramPLC = currPlcRecipe[item.Id];
|
||||
currRange = new RPRange()
|
||||
{
|
||||
Min = paramPLC.ValMin,
|
||||
Max = paramPLC.ValMax
|
||||
Min = paramPLC.ValMin / item.ScaleFactor,
|
||||
Max = paramPLC.ValMax / item.ScaleFactor
|
||||
};
|
||||
currStatus = new RPStatus()
|
||||
{
|
||||
@@ -1131,9 +1325,10 @@ namespace Thermo.Active.NC
|
||||
Range = currRange,
|
||||
Status = currStatus,
|
||||
UnitMeasure = "",
|
||||
ValueAct = paramPLC.ValueAct,
|
||||
SetpointHMI = paramPLC.SetpointHMI,
|
||||
SetpointPLC = paramPLC.SetpointPLC
|
||||
ValueAct = paramPLC.ValueAct / item.ScaleFactor,
|
||||
SetpointHMI = paramPLC.SetpointHMI / item.ScaleFactor,
|
||||
SetpointPLC = paramPLC.SetpointPLC / item.ScaleFactor,
|
||||
ScaleFactor = item.ScaleFactor
|
||||
};
|
||||
}
|
||||
else
|
||||
@@ -1156,45 +1351,64 @@ namespace Thermo.Active.NC
|
||||
Range = currRange,
|
||||
Status = currStatus,
|
||||
UnitMeasure = "",
|
||||
ValueAct = 0
|
||||
ValueAct = 0,
|
||||
ScaleFactor = 1
|
||||
};
|
||||
}
|
||||
currentRecipe.Add(item.Label, currParam);
|
||||
}
|
||||
// salvo!
|
||||
lastRecipe = currentRecipe;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentRecipe = new Dictionary<string, DTORecipeParam>();
|
||||
lastRecipe = currentRecipe;
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
/// SCrittura memoria (SOLO SetpointHMI invero)
|
||||
/// Recipe Parameters write to PLC (only SetpointHMI)
|
||||
/// </summary>
|
||||
/// <param name="updtRecipe"></param>
|
||||
/// <returns></returns>
|
||||
public CmsError WriteRecipeData(Dictionary<string, DTORecipeParam> updtRecipe)
|
||||
public CmsError WriteRecipeParametersToPLC(Dictionary<string, DTORecipeParam> updtRecipe)
|
||||
{
|
||||
Dictionary<int, int> newParameters = new Dictionary<int, int>();
|
||||
// solo x S7...
|
||||
if (NcConfig.NcVendor == NC_VENDOR.S7NET)
|
||||
{
|
||||
// ciclo x ogni valore della ricetta aggiornata ricevuto
|
||||
ThermoModels.RecipeParam currParam;
|
||||
foreach (var item in updtRecipe)
|
||||
{
|
||||
// salvo SOLO il setpoint HMI...
|
||||
currParam = new ThermoModels.RecipeParam()
|
||||
{
|
||||
Id = (short)item.Value.Id,
|
||||
SetpointHMI = item.Value.SetpointHMI
|
||||
};
|
||||
// scrivo!
|
||||
CmsError cmsError = numericalControl.PLC_WRecipeParam(currParam);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
newParameters.Add(item.Value.Id, (int)(item.Value.SetpointHMI * item.Value.ScaleFactor));
|
||||
}
|
||||
|
||||
// scrivo!
|
||||
CmsError cmsError = numericalControl.PLC_WRecipeParameters(newParameters);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FUNCTION_NOT_ALLOWED_ERROR;
|
||||
}
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
/// Comando conferma dati ricetta
|
||||
/// </summary>
|
||||
/// <param name="confirmUpdate">true: HMI --> PLC, false: PLC --> HMI</param>
|
||||
/// <returns></returns>
|
||||
public CmsError ConfirmRecipeData(bool confirmUpdate)
|
||||
{
|
||||
// solo x S7...
|
||||
if (NcConfig.NcVendor == NC_VENDOR.S7NET)
|
||||
{
|
||||
// call NC for update
|
||||
CmsError cmsError = numericalControl.PLC_WRecipeEdit(confirmUpdate);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1203,6 +1417,70 @@ namespace Thermo.Active.NC
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
/// Vero metodo lettura Warmers data da memoria PLC
|
||||
/// </summary>
|
||||
/// <param name="currentWarmers"></param>
|
||||
/// <returns></returns>
|
||||
public CmsError ReadWarmersData(out Dictionary<int, DTOWarmers> currentWarmers)
|
||||
{
|
||||
// init obj
|
||||
currentWarmers = new Dictionary<int, DTOWarmers>();
|
||||
// solo x S7...
|
||||
if (NcConfig.NcVendor == NC_VENDOR.S7NET)
|
||||
{
|
||||
CmsError cmsError = NO_ERROR;
|
||||
|
||||
// leggo stato ricetta da PLC
|
||||
Dictionary<int, ThermoModels.WarmerChannel> currPlcWarmers = new Dictionary<int, ThermoModels.WarmerChannel>();
|
||||
cmsError = numericalControl.PLC_RWarmerChannelList(ref currPlcWarmers);
|
||||
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// compongo con il resto delle info da config... do x scontato di avere TUTIT i 1024 channels
|
||||
List<DTOWarmers> warmersConfig = RiskChannelConfig.Select(x => new DTOWarmers()
|
||||
{
|
||||
IdChannel = x.IdChannel,
|
||||
IdReflector = x.IdReflector,
|
||||
SetpointHMI = x.SetpointRecipe,
|
||||
SetpointTermocam = 0, // FIXME TODO x.SetpointTer,
|
||||
SetpointPLC = currPlcWarmers[x.IdChannel].SetpointPLC,
|
||||
ChannelStatus = currPlcWarmers[x.IdChannel].ChStatus,
|
||||
ActualCurrent = currPlcWarmers[x.IdChannel].CurrAct,
|
||||
ActualPerc = currPlcWarmers[x.IdChannel].PercAct,
|
||||
MaxPower = x.MaxPower
|
||||
}).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
currentWarmers = new Dictionary<int, DTOWarmers>();
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gestione strobe richiesta cambio modo
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public CmsError StrobeMode(Model.DTOModels.ThermoProd.Mode mode)
|
||||
{
|
||||
// solo x S7...
|
||||
if (NcConfig.NcVendor == NC_VENDOR.S7NET)
|
||||
{
|
||||
// call NC for update
|
||||
CmsError cmsError = numericalControl.PLC_WModeSel((int)mode);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FUNCTION_NOT_ALLOWED_ERROR;
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public CmsError ReadNcScada(ScadaSchemaModel scadaSchema, out DTOScadaModel scadaValue)
|
||||
@@ -1565,8 +1843,6 @@ namespace Thermo.Active.NC
|
||||
currRecipe = new Dictionary<string, DTORecipeParam>();
|
||||
|
||||
DTORecipeParam currParam = new DTORecipeParam();
|
||||
RPRange currRange = new RPRange();
|
||||
RPStatus currStatus = new RPStatus();
|
||||
|
||||
// gestione errore
|
||||
cmsError = ReadRecipeData(false, true, out currRecipe);
|
||||
@@ -1584,7 +1860,7 @@ namespace Thermo.Active.NC
|
||||
/// <returns></returns>
|
||||
public CmsError WriteRecipeParams(Dictionary<string, DTORecipeParam> updtRecipe)
|
||||
{
|
||||
CmsError cmsError = WriteRecipeData(updtRecipe);
|
||||
CmsError cmsError = WriteRecipeParametersToPLC(updtRecipe);
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
@@ -1599,20 +1875,17 @@ namespace Thermo.Active.NC
|
||||
CmsError cmsError = NO_ERROR;
|
||||
currOverview = new Dictionary<string, RecipeCatStatus>();
|
||||
|
||||
// !!!FARE davvero!!!
|
||||
#if false
|
||||
// gestione errore
|
||||
cmsError = ReadScadaData(schema, out currParam);
|
||||
// leggo la ricetta!
|
||||
var currRecipe = new Dictionary<string, DTORecipeParam>();
|
||||
cmsError = ReadFullRecipe(out currRecipe);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
#endif
|
||||
|
||||
// calcolo!
|
||||
return cmsError;
|
||||
|
||||
// leggo l'intero array delle DB... QUI FAKE sulle DB configurate...
|
||||
List<DTORecipeConfigModel> recipeConfig = RecipeConfig.Select(x => new DTORecipeConfigModel()
|
||||
{
|
||||
Id = x.Id,
|
||||
ScaleFactor = x.ScaleFactor,
|
||||
Category = x.Category.ToString(),
|
||||
SubCategory_1 = x.SubCategory_1,
|
||||
SubCategory_2 = x.SubCategory_2,
|
||||
@@ -1623,34 +1896,51 @@ namespace Thermo.Active.NC
|
||||
}).ToList();
|
||||
|
||||
RecipeCatStatus currStatus = RecipeCatStatus.Unchanged;
|
||||
int countCat = 0;
|
||||
|
||||
// percorro conf ricetta...
|
||||
foreach (var item in recipeConfig)
|
||||
{
|
||||
// ogni 20 incremento...
|
||||
if (countCat < 20)
|
||||
currStatus = RecipeCatStatus.Unchanged;
|
||||
// cerco SE ci sia già uno status...
|
||||
if (currOverview.ContainsKey(item.Category))
|
||||
{
|
||||
currStatus = RecipeCatStatus.Unchanged;
|
||||
currStatus = currOverview[item.Category];
|
||||
}
|
||||
else if (countCat < 40)
|
||||
|
||||
// se lo stato è errore --> esco...
|
||||
if (currStatus == RecipeCatStatus.HasError)
|
||||
{
|
||||
currStatus = RecipeCatStatus.ChangedOk;
|
||||
continue;
|
||||
}
|
||||
// altrimenti controllo
|
||||
else
|
||||
{
|
||||
currStatus = RecipeCatStatus.HasError;
|
||||
// se in errore --> registro...
|
||||
if (currRecipe[item.Label].Status.HasError)
|
||||
{
|
||||
currStatus = RecipeCatStatus.HasError;
|
||||
}
|
||||
// FARE verificare il significato di questo changed (se è da file o da HMI/PLC)
|
||||
else if (currRecipe[item.Label].SetpointHMI != currRecipe[item.Label].SetpointPLC)
|
||||
{
|
||||
currStatus = RecipeCatStatus.ChangedOk;
|
||||
}
|
||||
else
|
||||
{
|
||||
currStatus = RecipeCatStatus.Unchanged;
|
||||
}
|
||||
}
|
||||
// se non c'è aggiungo
|
||||
|
||||
// ora verifico overview finale: se non c'è aggiungo
|
||||
if (!currOverview.ContainsKey(item.Category))
|
||||
{
|
||||
currOverview.Add(item.Category, currStatus);
|
||||
countCat = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// se il valore è maggiore --> aggiorno
|
||||
currOverview[item.Category] = (int)currStatus > (int)currOverview[item.Category] ? currStatus : currOverview[item.Category];
|
||||
}
|
||||
countCat++;
|
||||
}
|
||||
|
||||
// restituisco cod errore se trovato
|
||||
@@ -1667,48 +1957,257 @@ namespace Thermo.Active.NC
|
||||
CmsError cmsError = NO_ERROR;
|
||||
currModules = new Dictionary<int, DTOModulesBlock>();
|
||||
|
||||
// FIXME TODO
|
||||
#if false
|
||||
DTORecipeParam currParam = new DTORecipeParam();
|
||||
RPRange currRange = new RPRange();
|
||||
RPStatus currStatus = new RPStatus();
|
||||
// gestione errore
|
||||
cmsError = ReadModBlock(out currModules);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// restituisco cod errore se trovato
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
public CmsError ReadModBlock(out Dictionary<int, DTOModulesBlock> currModules)
|
||||
{
|
||||
|
||||
CmsError cmsError = NO_ERROR;
|
||||
currModules = new Dictionary<int, DTOModulesBlock>();
|
||||
DTOModulesBlock currVal = new DTOModulesBlock();
|
||||
|
||||
// read and return warmers data
|
||||
if (NcConfig.NcVendor == NC_VENDOR.S7NET)
|
||||
{
|
||||
Dictionary<int, ThermoModels.ModuleBlock> currModBlock = new Dictionary<int, ThermoModels.ModuleBlock>();
|
||||
cmsError = numericalControl.PLC_RModulesBlockList(false, ref currModBlock);
|
||||
|
||||
foreach (var item in ModBlockConfig)
|
||||
{
|
||||
try
|
||||
{
|
||||
ThermoModels.ModuleBlock currModule = currModBlock[item.Id];
|
||||
currVal = new DTOModulesBlock()
|
||||
{
|
||||
Id = item.Id,
|
||||
LocalizedLabel = item.LocalizedLabels["it"], // FIXME TODO check come gestire traduzione!!!
|
||||
Type = item.Type,
|
||||
Section = item.Section,
|
||||
IdParam = item.IdParam,
|
||||
ShowDelay = item.ShowDelay,
|
||||
Priority = item.Priority,
|
||||
ActualDelay = currModule.ActualDelay,
|
||||
ActualDuration = currModule.ActualDuration,
|
||||
EstimatedDelay = currModule.EstimatedDelay,
|
||||
EstimatedDuration = currModule.EstimatedDuration,
|
||||
PrecedingId = currModule.PrecedingId,
|
||||
Visible = currModule.Visible,
|
||||
Running = currModule.Running,
|
||||
HasError = currModule.HasError
|
||||
};
|
||||
currModules.Add(item.Id, currVal);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
// FIXME TODO...
|
||||
}
|
||||
}
|
||||
}
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// GEt all warmers data by channel
|
||||
/// </summary>
|
||||
/// <param name="currWarmers">List of <= 1024 warmers channels</param>
|
||||
/// <returns></returns>
|
||||
public CmsError ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers)
|
||||
{
|
||||
CmsError cmsError = NO_ERROR;
|
||||
currWarmers = new Dictionary<int, DTOWarmers>();
|
||||
DTOWarmers currVal = new DTOWarmers();
|
||||
|
||||
// read and return warmers data
|
||||
if (NcConfig.NcVendor == NC_VENDOR.S7NET)
|
||||
{
|
||||
Dictionary<int, ThermoModels.WarmerChannel> currPlcWarmChan = new Dictionary<int, ThermoModels.WarmerChannel>();
|
||||
cmsError = numericalControl.PLC_RWarmerChannelList(ref currPlcWarmChan);
|
||||
|
||||
foreach (var item in RiskChannelConfig)
|
||||
{
|
||||
try
|
||||
{
|
||||
ThermoModels.WarmerChannel currWarm = currPlcWarmChan[item.IdChannel];
|
||||
currVal = new DTOWarmers()
|
||||
{
|
||||
IdChannel = item.IdChannel,
|
||||
IdReflector = item.IdReflector,
|
||||
SetpointHMI = currWarm.SetpointHMI,
|
||||
SetpointTermocam = currWarm.SetpointThermoCam,
|
||||
SetpointPLC = currWarm.SetpointPLC,
|
||||
ChannelStatus = currWarm.ChStatus,
|
||||
ActualCurrent = currWarm.CurrAct,
|
||||
ActualPerc = currWarm.PercAct,
|
||||
MaxPower = item.MaxPower
|
||||
};
|
||||
currWarmers.Add(item.IdChannel, currVal);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
}
|
||||
|
||||
// gestione errore
|
||||
cmsError = ReadRecipeData(false, true, out currModules);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
#endif
|
||||
return cmsError;
|
||||
|
||||
// restituisco cod errore se trovato
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Legge tutti i parametri della ricetta
|
||||
/// Returns resistances configuration
|
||||
/// </summary>
|
||||
/// <param name="currWarmers">Oggetto elenco 1024 ch riscaldi</param>
|
||||
/// <param name="currWarmersResistances">List of configured resistances</param>
|
||||
/// <returns></returns>
|
||||
public CmsError ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers)
|
||||
public CmsError GetWarmersResistances(out Dictionary<int, Model.ConfigModels.RiskResistModel> currWarmersResistances)
|
||||
{
|
||||
CmsError cmsError = NO_ERROR;
|
||||
currWarmers = new Dictionary<int, DTOWarmers>();
|
||||
currWarmersResistances = new Dictionary<int, Model.ConfigModels.RiskResistModel>();
|
||||
|
||||
// FIXME TODO
|
||||
#if false
|
||||
// read and return config
|
||||
if (NcConfig.NcVendor == NC_VENDOR.S7NET)
|
||||
{
|
||||
foreach (var item in RiskResistConfig)
|
||||
{
|
||||
currWarmersResistances.Add(item.Id, item);
|
||||
}
|
||||
}
|
||||
|
||||
// restituisco cod errore se trovato
|
||||
return cmsError;
|
||||
}
|
||||
/// <summary>
|
||||
/// Get area for material from parameters list
|
||||
/// </summary>
|
||||
/// <param name="currAreaPerc">dictionary X/Y and double value</param>
|
||||
/// <returns></returns>
|
||||
public CmsError GetWarmMaterialArea(out Dictionary<string, double> currAreaPerc)
|
||||
{
|
||||
CmsError cmsError = NO_ERROR;
|
||||
currAreaPerc = new Dictionary<string, double>();
|
||||
DTORecipeParam currParam = new DTORecipeParam();
|
||||
RPRange currRange = new RPRange();
|
||||
RPStatus currStatus = new RPStatus();
|
||||
var currRecipe = new Dictionary<string, DTORecipeParam>();
|
||||
|
||||
// gestione errore
|
||||
cmsError = ReadRecipeData(false, true, out currModules);
|
||||
// read recipe
|
||||
cmsError = ReadRecipeData(false, true, out currRecipe);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
#endif
|
||||
return cmsError;
|
||||
|
||||
// use 2 fixed data for calculus: general_sizes_sheet_dim_x / general_sizes_sheet_dim_y
|
||||
currAreaPerc.Add("X", getDimRatio(currRecipe["general_sizes_sheet_dim_x"]));
|
||||
currAreaPerc.Add("Y", getDimRatio(currRecipe["general_sizes_sheet_dim_y"]));
|
||||
|
||||
// restituisco cod errore se trovato
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
protected double getDimRatio(DTORecipeParam singlePar)
|
||||
{
|
||||
double ratio = 1;
|
||||
if (singlePar != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (singlePar.Range.Max > 0)
|
||||
ratio = singlePar.SetpointPLC / singlePar.Range.Max;
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
return ratio;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write all warmers load for recipe
|
||||
/// </summary>
|
||||
/// <param name="updtSetpHmi">Oggetto parametri da aggiornare (from HMI)</param>
|
||||
/// <returns></returns>
|
||||
public CmsError WriteRecipeWarmChSetpHMI(Dictionary<int, int> updtSetpHmi)
|
||||
{
|
||||
CmsError cmsError = numericalControl.PLC_WWarmerChSetpHmi(updtSetpHmi);
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
/// <summary>
|
||||
/// Write all warmers termocam data for recipe
|
||||
/// </summary>
|
||||
/// <param name="updtSetpTCam">Oggetto parametri da aggiornare (from HMI)</param>
|
||||
/// <returns></returns>
|
||||
public CmsError WriteRecipeWarmChSetpTermoCam(Dictionary<int, int> updtSetpTCam)
|
||||
{
|
||||
CmsError cmsError = numericalControl.PLC_WWarmerChSetpTCam(updtSetpTCam);
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
/// <summary>
|
||||
/// Write all warmers CONFIG data
|
||||
/// </summary>
|
||||
/// <param name="updtSetpTCam">Oggetto parametri da aggiornare (from HMI)</param>
|
||||
/// <returns></returns>
|
||||
public CmsError WriteRecipeWarmConfig()
|
||||
{
|
||||
Dictionary<int, int> newData = new Dictionary<int, int>();
|
||||
CmsError cmsError = NO_ERROR;
|
||||
|
||||
// scrivo l'abilitazione dei canali...
|
||||
foreach (var item in RiskBoardConfig)
|
||||
{
|
||||
newData.Add(item.IdBoard, item.NumChannels > 0 ? 1 : 0);
|
||||
}
|
||||
cmsError = numericalControl.PLC_WWarmerConfBoardEnabl(newData);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// processo riflettori...
|
||||
newData = new Dictionary<int, int>();
|
||||
foreach (var item in RiskChannelConfig)
|
||||
{
|
||||
newData.Add(item.IdChannel, item.IdReflector);
|
||||
}
|
||||
cmsError = numericalControl.PLC_WWarmerConfRefl(newData);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// recupero parametro VUMin...
|
||||
ushort VUMin = 1;
|
||||
cmsError = numericalControl.PLC_RWarmerConfVUMin(ref VUMin);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// check div0!
|
||||
if (VUMin == 0)
|
||||
{
|
||||
VUMin = 1;
|
||||
}
|
||||
|
||||
// processo corrente minima!
|
||||
var newFloatTData = new Dictionary<int, double>();
|
||||
double minICh = 0;
|
||||
int calcPower = 0;
|
||||
foreach (var item in RiskChannelConfig)
|
||||
{
|
||||
minICh = 0;
|
||||
if (item.CalcIchMin)
|
||||
{
|
||||
calcPower = (item.NumResist - 1) + item.MaxPower + item.MaxPower / 2;
|
||||
minICh = (double)calcPower / VUMin;
|
||||
}
|
||||
newFloatTData.Add(item.IdChannel, minICh);
|
||||
}
|
||||
cmsError = numericalControl.PLC_WWarmerConfMinCurr(newFloatTData);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
#endregion Read Data
|
||||
|
||||
|
||||
@@ -19,6 +19,61 @@ namespace Thermo.Active.NC
|
||||
{
|
||||
public class NcFileAdapter : NcAdapter
|
||||
{
|
||||
/// <summary>
|
||||
/// Read file from local devices ad give back string content
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
/// <param name="fileContent"></param>
|
||||
/// <returns></returns>
|
||||
public CmsError ReadFileContent(string path, out string fileContent)
|
||||
{
|
||||
// init
|
||||
fileContent = "";
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
// check existing
|
||||
if (File.Exists(path))
|
||||
{
|
||||
// read all lines as string
|
||||
fileContent = File.ReadAllText(path);
|
||||
}
|
||||
else
|
||||
{
|
||||
return FILE_NOT_FOUND_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return FILE_NOT_FOUND_ERROR;
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
/// Save string content to file
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
/// <param name="fileContent"></param>
|
||||
/// <returns></returns>
|
||||
public CmsError WriteFileContent(string path, string fileContent)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(fileContent))
|
||||
{
|
||||
File.WriteAllText(path, fileContent);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return FILE_NOT_FOUND_ERROR;
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public CmsError GetFileList(string path, out List<PreviewFileModel> fileList)
|
||||
{
|
||||
fileList = new List<PreviewFileModel>();
|
||||
@@ -41,8 +96,8 @@ namespace Thermo.Active.NC
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
string [] names = fileInfo.Name.Split('/');
|
||||
if(names.Length > 0)
|
||||
string[] names = fileInfo.Name.Split('/');
|
||||
if (names.Length > 0)
|
||||
{
|
||||
string name = names.Last();
|
||||
if (!String.IsNullOrWhiteSpace(name))
|
||||
|
||||
@@ -40,6 +40,7 @@ namespace Thermo.Active.UI
|
||||
this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.resetSpindleHoursToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.resetCountersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.resetMachineWorkingHoursToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.StopServerItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.TXTstatus = new System.Windows.Forms.TextBox();
|
||||
@@ -67,7 +68,6 @@ namespace Thermo.Active.UI
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.resetSpindleHoursToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.resetCountersToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.resetMachineWorkingHoursToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.resetMachineWorkingHoursToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.NotifyIconMenu.SuspendLayout();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
@@ -146,6 +146,14 @@ namespace Thermo.Active.UI
|
||||
this.resetCountersToolStripMenuItem.Visible = false;
|
||||
this.resetCountersToolStripMenuItem.Click += new System.EventHandler(this.resetCountersToolStripMenuItem_Click);
|
||||
//
|
||||
// resetMachineWorkingHoursToolStripMenuItem
|
||||
//
|
||||
this.resetMachineWorkingHoursToolStripMenuItem.Name = "resetMachineWorkingHoursToolStripMenuItem";
|
||||
this.resetMachineWorkingHoursToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
|
||||
this.resetMachineWorkingHoursToolStripMenuItem.Text = "Reset Machine Working Hours";
|
||||
this.resetMachineWorkingHoursToolStripMenuItem.Visible = false;
|
||||
this.resetMachineWorkingHoursToolStripMenuItem.Click += new System.EventHandler(this.resetMachineWorkingHoursToolStripMenuItem_Click);
|
||||
//
|
||||
// toolStripSeparator3
|
||||
//
|
||||
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||
@@ -315,6 +323,7 @@ namespace Thermo.Active.UI
|
||||
this.columnHeader2});
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.LISTThreadStatus, 2);
|
||||
this.LISTThreadStatus.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.LISTThreadStatus.HideSelection = false;
|
||||
this.LISTThreadStatus.Location = new System.Drawing.Point(3, 3);
|
||||
this.LISTThreadStatus.Name = "LISTThreadStatus";
|
||||
this.LISTThreadStatus.Size = new System.Drawing.Size(438, 283);
|
||||
@@ -355,14 +364,14 @@ namespace Thermo.Active.UI
|
||||
// closeCMSServerToolStripMenuItem
|
||||
//
|
||||
this.closeCMSServerToolStripMenuItem.Name = "closeCMSServerToolStripMenuItem";
|
||||
this.closeCMSServerToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
|
||||
this.closeCMSServerToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
|
||||
this.closeCMSServerToolStripMenuItem.Text = "Close Active Server";
|
||||
this.closeCMSServerToolStripMenuItem.Click += new System.EventHandler(this.closeCMSServerToolStripMenuItem_Click);
|
||||
//
|
||||
// toolStripSeparator2
|
||||
//
|
||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
||||
this.toolStripSeparator2.Size = new System.Drawing.Size(177, 6);
|
||||
this.toolStripSeparator2.Size = new System.Drawing.Size(171, 6);
|
||||
//
|
||||
// serviceToolStripMenuItem
|
||||
//
|
||||
@@ -374,7 +383,7 @@ namespace Thermo.Active.UI
|
||||
this.resetCountersToolStripMenuItem1,
|
||||
this.resetMachineWorkingHoursToolStripMenuItem1});
|
||||
this.serviceToolStripMenuItem.Name = "serviceToolStripMenuItem";
|
||||
this.serviceToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
|
||||
this.serviceToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
|
||||
this.serviceToolStripMenuItem.Text = "Service";
|
||||
//
|
||||
// passwordToolStripMenuItem1
|
||||
@@ -416,14 +425,6 @@ namespace Thermo.Active.UI
|
||||
this.resetCountersToolStripMenuItem1.Visible = false;
|
||||
this.resetCountersToolStripMenuItem1.Click += new System.EventHandler(this.resetCountersToolStripMenuItem1_Click);
|
||||
//
|
||||
// resetMachineWorkingHoursToolStripMenuItem
|
||||
//
|
||||
this.resetMachineWorkingHoursToolStripMenuItem.Name = "resetMachineWorkingHoursToolStripMenuItem";
|
||||
this.resetMachineWorkingHoursToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
|
||||
this.resetMachineWorkingHoursToolStripMenuItem.Text = "Reset Machine Working Hours";
|
||||
this.resetMachineWorkingHoursToolStripMenuItem.Visible = false;
|
||||
this.resetMachineWorkingHoursToolStripMenuItem.Click += new System.EventHandler(this.resetMachineWorkingHoursToolStripMenuItem_Click);
|
||||
//
|
||||
// resetMachineWorkingHoursToolStripMenuItem1
|
||||
//
|
||||
this.resetMachineWorkingHoursToolStripMenuItem1.Name = "resetMachineWorkingHoursToolStripMenuItem1";
|
||||
@@ -440,7 +441,6 @@ namespace Thermo.Active.UI
|
||||
this.Controls.Add(this.menuStrip1);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MainMenuStrip = this.menuStrip1;
|
||||
this.Margin = new System.Windows.Forms.Padding(2);
|
||||
|
||||
@@ -6,7 +6,7 @@ using System.Windows.Forms;
|
||||
using Thermo.Active.Model;
|
||||
using TeamDev.SDK.MVVM;
|
||||
using static Thermo.Active.Model.Constants;
|
||||
using static Thermo.Active.Utils.StepLogger;
|
||||
using static Thermo.Active.Utils.ThermoActiveLogger;
|
||||
|
||||
namespace Thermo.Active.Utils
|
||||
{
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
<Compile Include="ExceptionManager.cs" />
|
||||
<Compile Include="LanguageController.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="StepLogger.cs" />
|
||||
<Compile Include="ThermoActiveLogger.cs" />
|
||||
<Compile Include="SupportFunctions.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -4,7 +4,7 @@ using static Thermo.Active.Model.Constants;
|
||||
|
||||
namespace Thermo.Active.Utils
|
||||
{
|
||||
public static class StepLogger
|
||||
public static class ThermoActiveLogger
|
||||
{
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace Thermo.Active
|
||||
// hold additional metadata for an API. Version and title are required but you can also provide
|
||||
// additional fields by chaining methods off SingleApiVersion.
|
||||
//
|
||||
c.SingleApiVersion("v1", "Step");
|
||||
c.SingleApiVersion("v1", "ThermoActive");
|
||||
|
||||
// If you want the output Swagger docs to be indented properly, enable the "PrettyPrint" option.
|
||||
//
|
||||
|
||||
@@ -109,6 +109,7 @@ namespace Thermo.Active.Controllers.WebApi
|
||||
List<DTORecipeConfigModel> recipeConfig = RecipeConfig.Select(x => new DTORecipeConfigModel()
|
||||
{
|
||||
Id = x.Id,
|
||||
ScaleFactor = x.ScaleFactor,
|
||||
Category = x.Category.ToString(),
|
||||
SubCategory_1 = x.SubCategory_1,
|
||||
SubCategory_2 = x.SubCategory_2,
|
||||
|
||||
@@ -13,6 +13,7 @@ using static CMS_CORE_Library.Models.DataStructures;
|
||||
using static Thermo.Active.Config.ServerConfig;
|
||||
using static Thermo.Active.Model.Constants;
|
||||
using Thermo.Active.Model.DTOModels.Recipe;
|
||||
using Thermo.Active.Utils;
|
||||
|
||||
namespace Thermo.Active.Controllers.WebApi
|
||||
{
|
||||
@@ -27,11 +28,17 @@ namespace Thermo.Active.Controllers.WebApi
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
return NotFound();
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentModules | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
CmsError cmsError = ncAdapter.ReadModulesBlock(out Dictionary<int, DTOModulesBlock> currModules);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"GetRecipeOverview error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
return Ok(currModules);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
using CMS_CORE_Library.Models;
|
||||
using Thermo.Active.Model.DTOModels;
|
||||
using Thermo.Active.NC;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web.Http;
|
||||
using static CMS_CORE_Library.Models.DataStructures;
|
||||
using static Thermo.Active.Config.ServerConfig;
|
||||
using static Thermo.Active.Model.Constants;
|
||||
using Thermo.Active.Model.DTOModels.Recipe;
|
||||
using Thermo.Active.Config;
|
||||
using Thermo.Active.Utils;
|
||||
|
||||
namespace Thermo.Active.Controllers.WebApi
|
||||
{
|
||||
[RoutePrefix("api/prod")]
|
||||
public class ProdController : ApiController
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Request mode SETUP
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("mode/manual"), HttpPut]
|
||||
public IHttpActionResult RequestManual()
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | RequestManual | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// scrivo sul PLC il comando strobe richiesta AUTO!
|
||||
CmsError cmsError = ncAdapter.StrobeMode(Model.DTOModels.ThermoProd.Mode.MANUAL);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"RequestManual error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Request mode AUTO
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("mode/auto"), HttpPut]
|
||||
public IHttpActionResult RequestAuto()
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | RequestAuto | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// scrivo sul PLC il comando strobe richiesta AUTO!
|
||||
CmsError cmsError = ncAdapter.StrobeMode(Model.DTOModels.ThermoProd.Mode.AUTO);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"RequestAuto error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Request mode SETUP
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("mode/setup"), HttpPut]
|
||||
public IHttpActionResult RequestSetup()
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | RequestSetup | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// scrivo sul PLC il comando strobe richiesta AUTO!
|
||||
CmsError cmsError = ncAdapter.StrobeMode(Model.DTOModels.ThermoProd.Mode.SETUP);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"RequestSetup error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Request start production
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("prod/start"), HttpPut]
|
||||
public IHttpActionResult StartProd(int requestQty, bool newWorkOrder)
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | StartProd | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
//// scrivo sul PLC il comando strobe richiesta AUTO!
|
||||
//CmsError cmsError = ncAdapter.StrobeMode(Model.DTOModels.ThermoProd.Mode.SETUP);
|
||||
//if (cmsError.IsError())
|
||||
//{
|
||||
// ThermoActiveLogger.LogError($"RequestSetup error | {cmsError.exception}");
|
||||
// return BadRequest(cmsError.localizationKey);
|
||||
//}
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Request production data from indexStart record for numRecord items (DESCENDING)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("prod/get"), HttpPut]
|
||||
public IHttpActionResult GetProd(int indexStart, int numRecord)
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | StartProd | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
//// scrivo sul PLC il comando strobe richiesta AUTO!
|
||||
//CmsError cmsError = ncAdapter.StrobeMode(Model.DTOModels.ThermoProd.Mode.SETUP);
|
||||
//if (cmsError.IsError())
|
||||
//{
|
||||
// ThermoActiveLogger.LogError($"RequestSetup error | {cmsError.exception}");
|
||||
// return BadRequest(cmsError.localizationKey);
|
||||
//}
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,8 @@ using static CMS_CORE_Library.Models.DataStructures;
|
||||
using static Thermo.Active.Config.ServerConfig;
|
||||
using static Thermo.Active.Model.Constants;
|
||||
using Thermo.Active.Model.DTOModels.Recipe;
|
||||
using Thermo.Active.Config;
|
||||
using Thermo.Active.Utils;
|
||||
|
||||
namespace Thermo.Active.Controllers.WebApi
|
||||
{
|
||||
@@ -27,11 +29,17 @@ namespace Thermo.Active.Controllers.WebApi
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
return NotFound();
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | GetOverview | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
CmsError cmsError = ncAdapter.GetRecipeOverview(out Dictionary<string, RecipeCatStatus> currOverview);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"GetRecipeOverview error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
return Ok(currOverview);
|
||||
}
|
||||
@@ -44,33 +52,425 @@ namespace Thermo.Active.Controllers.WebApi
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
return NotFound();
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentParameters | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
CmsError cmsError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"GetRecipeOverview error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
return Ok(currRecipe);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Route("update"), HttpPut]
|
||||
public IHttpActionResult WriteParameters(Dictionary<string, double> parametersList)
|
||||
{
|
||||
if (parametersList != null)
|
||||
{
|
||||
if (RecipeLiveData != null)
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | WriteParameters | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// read recipe!
|
||||
CmsError cmsError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> prevRecipe);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"GetRecipeOverview error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
Dictionary<string, DTORecipeParam> updtRecipe = new Dictionary<string, DTORecipeParam>();
|
||||
foreach (var item in parametersList)
|
||||
{
|
||||
if (prevRecipe.ContainsKey(item.Key))
|
||||
{
|
||||
// aggiorno il valore HMI nel parametro
|
||||
var currParam = prevRecipe[item.Key];
|
||||
currParam.SetpointHMI = item.Value;
|
||||
// salvo (1 parametro, potrei fare N...)
|
||||
updtRecipe.Add(item.Key, currParam);
|
||||
}
|
||||
else
|
||||
{
|
||||
ThermoActiveLogger.LogError($"WriteParameters error | key not found: {item.Key}");
|
||||
return NotFound();
|
||||
}
|
||||
}
|
||||
|
||||
// scrivo sul PLC
|
||||
ncAdapter.WriteRecipeParams(updtRecipe);
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// non pronto!
|
||||
ThermoActiveLogger.LogError($"RecipeLiveData null | WriteParameters");
|
||||
return InternalServerError();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ThermoActiveLogger.LogError($"RecipeLiveData null | Empty Parameters");
|
||||
return BadRequest();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Confirm recipe modification (parameters: HMI --> PLC)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("confirm"), HttpPut]
|
||||
public IHttpActionResult ConfirmEdit()
|
||||
{
|
||||
if (RecipeLiveData != null)
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | Recipe ConfirmEdit | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// scrivo sul PLC il comando conferma!
|
||||
CmsError cmsError = ncAdapter.ConfirmRecipeData(true);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"ConfirmEdit error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// recupero i dati LIVE dei parametri HMI della ricetta...
|
||||
cmsError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"ConfirmEdit error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// rileggo la ricetta
|
||||
var currParams = new Dictionary<string, double>();
|
||||
foreach (var item in currRecipe)
|
||||
{
|
||||
currParams.Add(item.Key, item.Value.SetpointHMI);
|
||||
}
|
||||
|
||||
SaveCurrentRecipeParams(currParams);
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// non pronto!
|
||||
ThermoActiveLogger.LogError($"RecipeLiveData null | Empty");
|
||||
return InternalServerError();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cancel recipe modification (parameters: PLC --> HMI)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("cancel"), HttpPut]
|
||||
public IHttpActionResult CancelEdit()
|
||||
{
|
||||
if (RecipeLiveData != null)
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | Recipe CancelEdit | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// scrivo sul PLC il comando annula!
|
||||
CmsError cmsError = ncAdapter.ConfirmRecipeData(false);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"ConfirmEdit error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// recupero i dati LIVE dei parametri HMI della ricetta...
|
||||
cmsError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"ConfirmEdit error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
var currParams = new Dictionary<string, double>();
|
||||
foreach (var item in currRecipe)
|
||||
{
|
||||
currParams.Add(item.Key, item.Value.SetpointPLC);
|
||||
}
|
||||
|
||||
// ora salvo ANCHE i dati live...
|
||||
SaveCurrentRecipeParams(currParams);
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// non pronto!
|
||||
ThermoActiveLogger.LogError($"RecipeLiveData null | Empty");
|
||||
return InternalServerError();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// load recipe from file and send to PLC
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("load"), HttpPut]
|
||||
public IHttpActionResult Load(string newName)
|
||||
{
|
||||
using (NcFileAdapter ncAdapter = new NcFileAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | Load | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// chiamo metodo di lettura...
|
||||
//CmsError cmsError = ServerConfigController.LoadRecipe(newName);
|
||||
bool fatto = ServerConfigController.LoadRecipe(newName);
|
||||
if (!fatto)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"LoadRecipe error");
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
CmsError cmsError = WriteCurrentRecipeToPlc();
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"ConfirmEdit error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Load tempalte recipe from file and save as new current...
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("new"), HttpPut]
|
||||
public IHttpActionResult NewRecipe()
|
||||
{
|
||||
using (NcFileAdapter ncAdapter = new NcFileAdapter())
|
||||
{
|
||||
// chiamo metodo di lettura...
|
||||
bool fatto = ServerConfigController.LoadTemplate();
|
||||
|
||||
if (!fatto)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"LoadRecipe error");
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
CmsError cmsError = WriteCurrentRecipeToPlc();
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"ConfirmEdit error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
}
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save current recipe from PLC to default
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("save"), HttpPut]
|
||||
public IHttpActionResult Save()
|
||||
{
|
||||
using (NcFileAdapter ncAdapter = new NcFileAdapter())
|
||||
{
|
||||
|
||||
// recupero i dati LIVE dei parametri HMI della ricetta...
|
||||
CmsError cmsError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
|
||||
if (cmsError.IsError())
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
|
||||
var currParams = new Dictionary<string, double>();
|
||||
foreach (var item in currRecipe)
|
||||
{
|
||||
currParams.Add(item.Key, item.Value.SetpointPLC);
|
||||
}
|
||||
|
||||
// ora salvo ANCHE i dati live...
|
||||
SaveCurrentRecipeParams(currParams);
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Save current recipe from PLC with new name
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("saveAs"), HttpPut]
|
||||
public IHttpActionResult SaveAs(string newName)
|
||||
{
|
||||
using (NcFileAdapter ncAdapter = new NcFileAdapter())
|
||||
{
|
||||
// recupero i dati LIVE dei parametri HMI della ricetta...
|
||||
CmsError cmsError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"SaveAs error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
var currParams = new Dictionary<string, double>();
|
||||
foreach (var item in currRecipe)
|
||||
{
|
||||
currParams.Add(item.Key, item.Value.SetpointPLC);
|
||||
}
|
||||
|
||||
// ora salvo ANCHE i dati live...
|
||||
RecipeLiveData.RecipeParameters = currParams;
|
||||
// e salvo su disco
|
||||
ServerConfigController.SaveRecipe(newName);
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Save current recipe from PLC to Template
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("saveTemplate"), HttpPut]
|
||||
public IHttpActionResult SaveTemplate()
|
||||
{
|
||||
using (NcFileAdapter ncAdapter = new NcFileAdapter())
|
||||
{
|
||||
// recupero i dati LIVE dei parametri HMI della ricetta...
|
||||
CmsError cmsError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"SaveTemplate error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
|
||||
// recupero i dati LIVE dei carichi load dei cahnnels di riscaldo...
|
||||
cmsError = ncAdapter.ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"ReadWarmers error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// uso i valopri HMI...
|
||||
var currParams = new Dictionary<string, double>();
|
||||
foreach (var item in currRecipe)
|
||||
{
|
||||
currParams.Add(item.Key, item.Value.SetpointHMI);
|
||||
}
|
||||
|
||||
// ora salvo nei dati live...
|
||||
RecipeLiveData.RecipeParameters = currParams;
|
||||
|
||||
// carico i dati dei riscaldi...
|
||||
var currChSet = new Dictionary<int, int>();
|
||||
foreach (var item in currWarmers)
|
||||
{
|
||||
currChSet.Add(item.Key, item.Value.SetpointHMI);
|
||||
}
|
||||
RecipeLiveData.ChannelSetpoints = currChSet;
|
||||
|
||||
|
||||
// e salvo su disco
|
||||
ServerConfigController.SaveRecipeTemplate();
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Do actual recipe parameters FileSave
|
||||
/// </summary>
|
||||
/// <param name="currParams"></param>
|
||||
private static void SaveCurrentRecipeParams(Dictionary<string, double> currParams)
|
||||
{
|
||||
try
|
||||
{
|
||||
// ora salvo ANCHE i dati live...
|
||||
RecipeLiveData.RecipeParameters = currParams;
|
||||
// e salvo su disco
|
||||
ServerConfigController.SaveRecipeCurrent();
|
||||
}
|
||||
catch(Exception exc)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"Recipe | SaveCurrentRecipeParams exception | {exc}");
|
||||
}
|
||||
}
|
||||
|
||||
public static CmsError WriteCurrentRecipeToPlc()
|
||||
{
|
||||
CmsError checkError = NO_ERROR;
|
||||
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | Load | {libraryError.exception}");
|
||||
return libraryError;
|
||||
}
|
||||
|
||||
CmsError cmsError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> prevRecipe);
|
||||
if (cmsError.IsError())
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
|
||||
// copy data to PLC
|
||||
checkError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> prevRecipe);
|
||||
if (checkError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"WriteCurrentRecipeToPlc | ReadFullRecipe error | {checkError.exception}");
|
||||
return checkError;
|
||||
}
|
||||
|
||||
// save parameters to PLC!!!
|
||||
Dictionary<string, DTORecipeParam> updtRecipe = new Dictionary<string, DTORecipeParam>();
|
||||
|
||||
foreach (var item in parametersList)
|
||||
foreach (var item in RecipeLiveData.RecipeParameters)
|
||||
{
|
||||
if (prevRecipe.ContainsKey(item.Key))
|
||||
{
|
||||
@@ -82,17 +482,44 @@ namespace Thermo.Active.Controllers.WebApi
|
||||
}
|
||||
else
|
||||
{
|
||||
return NotFound();
|
||||
ThermoActiveLogger.LogError($"prevRecipe not found | key: {item.Key}");
|
||||
return NOT_FOUND_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
// scrivo sul PLC
|
||||
ncAdapter.WriteRecipeParams(updtRecipe);
|
||||
// write to PLC
|
||||
checkError = ncAdapter.WriteRecipeParams(updtRecipe);
|
||||
if (checkError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"WriteCurrentRecipeToPlc | WriteRecipeParams error | {checkError.exception}");
|
||||
return checkError;
|
||||
}
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
|
||||
// process ch load setup...
|
||||
Dictionary<int, int> newRisk = new Dictionary<int, int>();
|
||||
foreach (var item in RecipeLiveData.ChannelSetpoints)
|
||||
{
|
||||
newRisk.Add(item.Key, item.Value);
|
||||
}
|
||||
|
||||
// write to PLC
|
||||
checkError = ncAdapter.WriteRecipeWarmChSetpHMI(newRisk);
|
||||
if (checkError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"WriteCurrentRecipeToPlc | WriteRecipeWarmChSetpHMI error | {checkError.exception}");
|
||||
return checkError;
|
||||
}
|
||||
|
||||
// enable recipe! scrivo sul PLC il comando conferma!
|
||||
CmsError cmsError = ncAdapter.ConfirmRecipeData(true);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"ReadWarmers error | {cmsError.exception}");
|
||||
return checkError;
|
||||
}
|
||||
}
|
||||
return checkError;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -42,7 +42,7 @@ namespace Thermo.Active.Controllers.WebApi
|
||||
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
|
||||
context.Clients.All.logout(new { id = userId.Value });
|
||||
|
||||
StepLogger.LogMessage("Logout: " + userId.Value + "Date:" + DateTime.Now, ERROR_LEVEL.INFO);
|
||||
ThermoActiveLogger.LogMessage("Logout: " + userId.Value + "Date:" + DateTime.Now, ERROR_LEVEL.INFO);
|
||||
|
||||
return Ok();
|
||||
}
|
||||
|
||||
@@ -13,71 +13,260 @@ using static CMS_CORE_Library.Models.DataStructures;
|
||||
using static Thermo.Active.Config.ServerConfig;
|
||||
using static Thermo.Active.Model.Constants;
|
||||
using Thermo.Active.Model.DTOModels.Recipe;
|
||||
using Thermo.Active.Config;
|
||||
using Thermo.Active.Utils;
|
||||
|
||||
namespace Thermo.Active.Controllers.WebApi
|
||||
{
|
||||
[RoutePrefix("api/warmers")]
|
||||
public class WarmersController : ApiController
|
||||
{
|
||||
[Route("current"), HttpGet]
|
||||
public IHttpActionResult GetCurrentWarmers()
|
||||
[Route("channels"), HttpGet]
|
||||
public IHttpActionResult GetCurrentWarmersChannels()
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
return NotFound();
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentWarmersChannels | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
CmsError cmsError = ncAdapter.ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"GetRecipeOverview error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
return Ok(currWarmers);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// FIXME TODO determinare IN PRIMIS nel modello COSA e come aggiornare...
|
||||
#if false
|
||||
[Route("update"), HttpPut]
|
||||
public IHttpActionResult WriteWarmers(Dictionary<string, double> parametersList)
|
||||
[Route("resistances"), HttpGet]
|
||||
public IHttpActionResult GetCurrentWarmersResistances()
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
|
||||
CmsError cmsError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> prevRecipe);
|
||||
if (cmsError.IsError())
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
|
||||
Dictionary<string, DTORecipeParam> updtRecipe = new Dictionary<string, DTORecipeParam>();
|
||||
|
||||
foreach (var item in parametersList)
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
if (prevRecipe.ContainsKey(item.Key))
|
||||
{
|
||||
// aggiorno il valore HMI nel parametro
|
||||
var currParam = prevRecipe[item.Key];
|
||||
currParam.SetpointHMI = item.Value;
|
||||
// salvo (1 parametro, potrei fare N...)
|
||||
updtRecipe.Add(item.Key, currParam);
|
||||
}
|
||||
else
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentWarmersResistances | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// scrivo sul PLC
|
||||
ncAdapter.WriteRecipeParams(updtRecipe);
|
||||
CmsError cmsError = ncAdapter.GetWarmersResistances(out Dictionary<int, Model.ConfigModels.RiskResistModel> currWarmers);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"GetCurrentWarmersResistances error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
return Ok(currWarmers);
|
||||
}
|
||||
}
|
||||
|
||||
[Route("area"), HttpGet]
|
||||
public IHttpActionResult GetCurrentAreaPerc()
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentAreaPerc | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// recupera aree % X / Y
|
||||
CmsError cmsError = ncAdapter.GetWarmMaterialArea(out Dictionary<string, double> currAreaPerc);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"GetCurrentAreaPerc error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
return Ok(currAreaPerc);
|
||||
}
|
||||
}
|
||||
|
||||
[Route("update"), HttpPut]
|
||||
public IHttpActionResult WriteSetpoints(Dictionary<int, int> channelsLoad)
|
||||
{
|
||||
// scrive su CHp da ricetta oppure da override x parametri utente...
|
||||
if (channelsLoad != null)
|
||||
{
|
||||
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | WriteSetpoints | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
// scrivo sul PLC
|
||||
CmsError cmsError = ncAdapter.WriteRecipeWarmChSetpHMI(channelsLoad);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"WriteSetpoints error | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Confirm recipe modification (parameters: HMI --> PLC)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("confirm"), HttpPut]
|
||||
public IHttpActionResult ConfirmEdit()
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | Warmers ConfirmEdit | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// scrivo sul PLC il comando conferma!
|
||||
CmsError cmsError = ncAdapter.ConfirmRecipeData(true);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"Warmers ConfirmEdit error | ConfirmRecipeData | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// recupero i dati LIVE dei parametri HMI dei riscaldi...
|
||||
cmsError = ncAdapter.ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"Warmers ConfirmEdit error | ReadWarmers | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// rileggo la ricetta
|
||||
var currParams = new Dictionary<int, int>();
|
||||
foreach (var item in currWarmers)
|
||||
{
|
||||
currParams.Add(item.Key, item.Value.SetpointHMI);
|
||||
}
|
||||
|
||||
saveCurrentRecipeWarmers(currParams);
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cancel recipe modification (parameters: PLC --> HMI)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("cancel"), HttpPut]
|
||||
public IHttpActionResult CancelEdit()
|
||||
{
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | Recipe CancelEdit | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// scrivo sul PLC il comando annula!
|
||||
CmsError cmsError = ncAdapter.ConfirmRecipeData(false);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"Warmers CancelEdit error | ConfirmRecipeData | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// recupero i dati LIVE dei parametri HMI dei riscaldi...
|
||||
cmsError = ncAdapter.ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers);
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"Warmers ConfirmEdit error | ReadWarmers | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// rileggo la ricetta
|
||||
var currParams = new Dictionary<int, int>();
|
||||
foreach (var item in currWarmers)
|
||||
{
|
||||
currParams.Add(item.Key, item.Value.SetpointHMI);
|
||||
}
|
||||
|
||||
saveCurrentRecipeWarmers(currParams);
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
|
||||
[Route("setConfig"), HttpPut]
|
||||
public IHttpActionResult SetConfig()
|
||||
{
|
||||
// scrive configurazioni RISK
|
||||
|
||||
using (NcAdapter ncAdapter = new NcAdapter())
|
||||
{
|
||||
// Try connection
|
||||
CmsError libraryError = ncAdapter.Connect();
|
||||
if (libraryError.errorCode != 0)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"NC Not connected! | SetConfig | {libraryError.exception}");
|
||||
return InternalServerError();
|
||||
}
|
||||
|
||||
// scrivo sul PLC
|
||||
CmsError cmsError = ncAdapter.WriteRecipeWarmConfig();
|
||||
if (cmsError.IsError())
|
||||
{
|
||||
ThermoActiveLogger.LogError($"Warmers SetConfig error | WriteRecipeWarmConfig | {cmsError.exception}");
|
||||
return BadRequest(cmsError.localizationKey);
|
||||
}
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Do actual recipe warmers setpoints FileSave
|
||||
/// </summary>
|
||||
/// <param name="chSetpoints"></param>
|
||||
private static void saveCurrentRecipeWarmers(Dictionary<int, int> chSetpoints)
|
||||
{
|
||||
try
|
||||
{
|
||||
// ora salvo ANCHE i dati live...
|
||||
RecipeLiveData.ChannelSetpoints = chSetpoints;
|
||||
// e salvo su disco
|
||||
ServerConfigController.SaveRecipeCurrent();
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
ThermoActiveLogger.LogError($"Warmers | SaveCurrentRecipeParams exception | {exc}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -109,14 +109,22 @@ namespace Thermo.Active.Listeners
|
||||
{
|
||||
SignalRListener.SendThermoWarmersData(a);
|
||||
}));
|
||||
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_AREA_DATA, (a, b) =>
|
||||
{
|
||||
SignalRListener.SendThermoAreaData(a);
|
||||
}));
|
||||
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_GAUGE_DATA, (a, b) =>
|
||||
{
|
||||
SignalRListener.SendThermoGaugeData(a);
|
||||
}));
|
||||
|
||||
// FIXME TODO ADD ProdCycle
|
||||
|
||||
// FIXME TODO ADD ProdInfo
|
||||
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_PROD_INFO_DATA, (a, b) =>
|
||||
{
|
||||
SignalRListener.SendThermoProdInfoData(a);
|
||||
}));
|
||||
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_PROD_CYCLE_DATA, (a, b) =>
|
||||
{
|
||||
SignalRListener.SendThermoProdCycleData(a);
|
||||
}));
|
||||
|
||||
// Broadcast
|
||||
infos.Add(MessageServices.Current.Subscribe(BROADCAST_DATA, (a, b) =>
|
||||
|
||||
@@ -256,44 +256,22 @@ namespace Thermo.Active.Listeners.SignalR
|
||||
public static void SendThermoRecipeFullData(object recipeFull)
|
||||
{
|
||||
Dictionary<string, DTORecipeParam> currRecipeFull = recipeFull as Dictionary<string, DTORecipeParam>;
|
||||
|
||||
Dictionary<string, DTORecipeParam> diffData = new Dictionary<string, DTORecipeParam>();
|
||||
|
||||
// calcola ed invia SOLO le differenze...
|
||||
if (false)
|
||||
foreach (var item in currRecipeFull)
|
||||
{
|
||||
Parallel.ForEach(currRecipeFull, item =>
|
||||
if (!LastRecipeFullData.ContainsKey(item.Key))
|
||||
{
|
||||
if (!LastRecipeFullData.ContainsKey(item.Key))
|
||||
{
|
||||
diffData.Add(item.Key, item.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// comparazione
|
||||
if (!item.Value.Equals(LastRecipeFullData[item.Key]))
|
||||
{
|
||||
diffData[item.Key] = item.Value;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var item in currRecipeFull)
|
||||
diffData.Add(item.Key, item.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!LastRecipeFullData.ContainsKey(item.Key))
|
||||
// comparazione
|
||||
if (!item.Value.Equals(LastRecipeFullData[item.Key]))
|
||||
{
|
||||
//diffData[item.Key] = item.Value;
|
||||
diffData.Add(item.Key, item.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// comparazione
|
||||
if (!item.Value.Equals(LastRecipeFullData[item.Key]))
|
||||
{
|
||||
diffData[item.Key] = item.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -306,7 +284,6 @@ namespace Thermo.Active.Listeners.SignalR
|
||||
context.Clients.Group("ncData").recipeFullData(diffData);
|
||||
}
|
||||
}
|
||||
|
||||
public static void SendThermoRecipeOverviewData(object recipeOver)
|
||||
{
|
||||
Dictionary<string, RecipeCatStatus> currRecipeOver = recipeOver as Dictionary<string, RecipeCatStatus>;
|
||||
@@ -322,12 +299,28 @@ namespace Thermo.Active.Listeners.SignalR
|
||||
|
||||
public static void SendThermoModulesData(object modules)
|
||||
{
|
||||
Dictionary<string, DTORecipeParam> currModules = modules as Dictionary<string, DTORecipeParam>;
|
||||
|
||||
// FIXME TODO: usare un foreach comparer?
|
||||
if (!LastRecipeFullData.SequenceEqual(currModules))
|
||||
Dictionary<int, DTOModulesBlock> currModules = modules as Dictionary<int, DTOModulesBlock>;
|
||||
Dictionary<int, DTOModulesBlock> diffData = new Dictionary<int, DTOModulesBlock>();
|
||||
|
||||
foreach (var item in currModules)
|
||||
{
|
||||
LastRecipeFullData = currModules;
|
||||
if (!LastModulesData.ContainsKey(item.Key))
|
||||
{
|
||||
diffData.Add(item.Key, item.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// comparazione
|
||||
if (!item.Value.Equals(LastModulesData[item.Key]))
|
||||
{
|
||||
diffData[item.Key] = item.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (diffData.Count > 0)
|
||||
{
|
||||
LastModulesData = currModules;
|
||||
|
||||
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
|
||||
context.Clients.Group("ncData").modulesData(currModules);
|
||||
@@ -336,17 +329,65 @@ namespace Thermo.Active.Listeners.SignalR
|
||||
|
||||
public static void SendThermoWarmersData(object warmers)
|
||||
{
|
||||
Dictionary<string, DTORecipeParam> currWarmers = warmers as Dictionary<string, DTORecipeParam>;
|
||||
Dictionary<int, DTOWarmers> currWarmers = warmers as Dictionary<int, DTOWarmers>;
|
||||
Dictionary<int, DTOWarmers> diffData = new Dictionary<int, DTOWarmers>();
|
||||
|
||||
// FIXME TODO: usare un foreach comparer?
|
||||
if (!LastRecipeFullData.SequenceEqual(currWarmers))
|
||||
foreach (var item in currWarmers)
|
||||
{
|
||||
LastRecipeFullData = currWarmers;
|
||||
if (!LastWarmersData.ContainsKey(item.Key))
|
||||
{
|
||||
diffData.Add(item.Key, item.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// comparazione
|
||||
if (!item.Value.Equals(LastWarmersData[item.Key]))
|
||||
{
|
||||
diffData[item.Key] = item.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (diffData.Count > 0)
|
||||
{
|
||||
LastWarmersData = currWarmers;
|
||||
|
||||
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
|
||||
context.Clients.Group("ncData").warmersData(currWarmers);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void SendThermoAreaData(object area)
|
||||
{
|
||||
Dictionary<string, double> currArea = area as Dictionary<string, double>;
|
||||
Dictionary<string, double> diffData = new Dictionary<string, double>();
|
||||
|
||||
foreach (var item in currArea)
|
||||
{
|
||||
if (!LastAreaData.ContainsKey(item.Key))
|
||||
{
|
||||
diffData.Add(item.Key, item.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// comparazione
|
||||
if (!item.Value.Equals(LastAreaData[item.Key]))
|
||||
{
|
||||
diffData[item.Key] = item.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (diffData.Count > 0)
|
||||
{
|
||||
LastAreaData = currArea;
|
||||
|
||||
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
|
||||
context.Clients.Group("ncData").areaData(currArea);
|
||||
}
|
||||
}
|
||||
|
||||
public static void SendThermoGaugeData(object gaugeData)
|
||||
{
|
||||
GaugeModel currGauge = gaugeData as GaugeModel;
|
||||
@@ -359,6 +400,30 @@ namespace Thermo.Active.Listeners.SignalR
|
||||
context.Clients.Group("ncData").gaugeData(currGauge);
|
||||
}
|
||||
}
|
||||
public static void SendThermoProdInfoData(object prodInfoData)
|
||||
{
|
||||
ProdInfoModel currProdInfo = prodInfoData as ProdInfoModel;
|
||||
|
||||
if (!LastProdInfoData.Equals(currProdInfo))
|
||||
{
|
||||
LastProdInfoData = currProdInfo;
|
||||
|
||||
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
|
||||
context.Clients.Group("ncData").prodInfoData(currProdInfo);
|
||||
}
|
||||
}
|
||||
public static void SendThermoProdCycleData(object prodCycleData)
|
||||
{
|
||||
ProdCycleModel currProdCycle = prodCycleData as ProdCycleModel;
|
||||
|
||||
if (!LastProdCycleData.Equals(currProdCycle))
|
||||
{
|
||||
LastProdCycleData = currProdCycle;
|
||||
|
||||
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
|
||||
context.Clients.Group("ncData").prodCycleData(currProdCycle);
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetGatewayRebootStatus(object status)
|
||||
{
|
||||
@@ -428,11 +493,16 @@ namespace Thermo.Active.Listeners.SignalR
|
||||
group.recipeFullData(LastRecipeFullData);
|
||||
group.recipeOverData(LastRecipeOverData);
|
||||
// Send THERMO Modules data
|
||||
group.recipeModulesData(LastModulesData);
|
||||
group.modulesData(LastModulesData);
|
||||
// Send THERMO Warmers data
|
||||
group.recipeWarmersData(LastWarmersData);
|
||||
group.warmersData(LastWarmersData);
|
||||
group.areaData(LastAreaData);
|
||||
// THERMO Gauges
|
||||
group.gaugeData(LastGaugeData);
|
||||
// THERMO prod info data
|
||||
group.prodInfoData(LastProdInfoData);
|
||||
// THERMO prod cycle data
|
||||
group.prodCycleData(LastProdCycleData);
|
||||
|
||||
Debug.WriteLine(string.Format("{0} {1} Broadcast..completed", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), DateTime.Now.Millisecond));
|
||||
Monitor.Exit(_broadcastlock);
|
||||
|
||||
@@ -30,9 +30,14 @@ namespace Thermo.Active.Listeners
|
||||
// FIXME TODO inserire oggetti corretti per THERMO
|
||||
public static Dictionary<string, DTORecipeParam> LastRecipeFullData = new Dictionary<string, DTORecipeParam>();
|
||||
public static Dictionary<string, RecipeCatStatus> LastRecipeOverData = new Dictionary<string, RecipeCatStatus>();
|
||||
public static List<DTOScadaModel> LastModulesData = new List<DTOScadaModel>();
|
||||
public static List<DTOScadaModel> LastWarmersData = new List<DTOScadaModel>();
|
||||
public static Dictionary<int, DTOModulesBlock> LastModulesData = new Dictionary<int, DTOModulesBlock>();
|
||||
public static Dictionary<int, DTOWarmers> LastWarmersData = new Dictionary<int, DTOWarmers>();
|
||||
public static Dictionary<string, double> LastAreaData = new Dictionary<string, double>();
|
||||
public static ThermoModels.GaugeModel LastGaugeData = new ThermoModels.GaugeModel();
|
||||
public static ThermoModels.ProdCycleModel LastProdCycleData = new ThermoModels.ProdCycleModel();
|
||||
public static ThermoModels.ProdInfoModel LastProdInfoData = new ThermoModels.ProdInfoModel();
|
||||
|
||||
|
||||
|
||||
public static bool LastIsNcConnected = false;
|
||||
|
||||
|
||||
@@ -31,4 +31,4 @@ using System.Runtime.InteropServices;
|
||||
//
|
||||
// You can specify all the values or you can default the Revision and Build Numbers
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("0.3.2")]
|
||||
[assembly: AssemblyVersion("0.8.1")]
|
||||
|
||||
@@ -223,6 +223,7 @@
|
||||
<Compile Include="Controllers\SignalR\NcHub.cs" />
|
||||
<Compile Include="Controllers\WebApi\ApiAlarmController.cs" />
|
||||
<Compile Include="Controllers\WebApi\ModulesController.cs" />
|
||||
<Compile Include="Controllers\WebApi\ProdController.cs" />
|
||||
<Compile Include="Controllers\WebApi\WarmersController.cs" />
|
||||
<Compile Include="Controllers\WebApi\RecipeController.cs" />
|
||||
<Compile Include="Controllers\WebApi\AuthorizationController.cs" />
|
||||
|
||||
@@ -16,8 +16,9 @@ using System.Windows.Forms;
|
||||
using TeamDev.SDK.MVVM;
|
||||
using static Thermo.Active.Config.ServerConfig;
|
||||
using static Thermo.Active.Model.Constants;
|
||||
using static Thermo.Active.Utils.StepLogger;
|
||||
using static Thermo.Active.Utils.ThermoActiveLogger;
|
||||
using static Thermo.Active.Utils.ExceptionManager;
|
||||
using Thermo.Active.Controllers.WebApi;
|
||||
|
||||
namespace Thermo.Active
|
||||
{
|
||||
@@ -84,6 +85,11 @@ namespace Thermo.Active
|
||||
if (!string.IsNullOrWhiteSpace(ServerStartupConfig.ServerAddress.ToString()))
|
||||
opt.Urls.Add("http://" + ServerStartupConfig.ServerAddress.ToString() + ":" + ServerStartupConfig.ServerPort.ToString());
|
||||
|
||||
// read and save last CURRENT RECIPE data...
|
||||
ServerConfigController.ReadLastRecipe();
|
||||
RecipeController.WriteCurrentRecipeToPlc();
|
||||
|
||||
//starts threads
|
||||
using (WebApp.Start<App_Start.Startup>(opt))
|
||||
{
|
||||
if (databaseStatus)
|
||||
|
||||
|
After Width: | Height: | Size: 321 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 891 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 9.5 KiB |
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1210mm"
|
||||
height="395mm"
|
||||
viewBox="0 0 1210 395"
|
||||
version="1.1"
|
||||
id="svg837"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="svg-dashboard.svg">
|
||||
<defs
|
||||
id="defs831" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.175"
|
||||
inkscape:cx="2014.3602"
|
||||
inkscape:cy="807.48659"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="-9"
|
||||
inkscape:window-y="-9"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata834">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Livello 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,98)">
|
||||
<path
|
||||
style="fill:#99cfff;fill-opacity:1;stroke:#0000ff;stroke-width:17.45055199;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 141.52222,272.36505 C 94.580005,264.01354 52.798415,227.68959 30.964914,176.24941 16.635779,142.48946 11.117361,90.23297 17.884451,52.385032 c 6.837198,-38.240097 20.372985,-69.021254 40.570884,-92.260626 14.9277,-17.175622 28.66517,-26.878813 50.573525,-35.722393 l 16.78008,-6.77341 103.18759,-1.00415 c 56.75329,-0.55393 279.02426,-0.60988 493.9358,-0.1278 214.91118,0.48292 361.44767,-2.04651 423.23837,-0.38138 l 20.3048,0.17827 v 0 0 0 C 991.70053,16.313901 958.98623,139.33213 936.88307,266.17661 v 0 c -5.14363,9.27342 32.42106,7.85482 -459.6572,8.23526 -279.43676,0.21596 -320.03499,0.74215 -335.70457,-2.0336 z"
|
||||
id="path1456"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccsccccccccccccscc" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1206mm"
|
||||
height="395mm"
|
||||
viewBox="0 0 1206 395"
|
||||
version="1.1"
|
||||
id="svg860"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="svg-dashboard2.svg">
|
||||
<defs
|
||||
id="defs854">
|
||||
<inkscape:path-effect
|
||||
effect="bspline"
|
||||
id="path-effect1493-1"
|
||||
is_visible="true"
|
||||
weight="33.333333"
|
||||
steps="2"
|
||||
helper_size="0"
|
||||
apply_no_weight="true"
|
||||
apply_with_weight="true"
|
||||
only_selected="false" />
|
||||
<inkscape:path-effect
|
||||
effect="bspline"
|
||||
id="path-effect1435-1"
|
||||
is_visible="true"
|
||||
weight="33.333333"
|
||||
steps="2"
|
||||
helper_size="0"
|
||||
apply_no_weight="true"
|
||||
apply_with_weight="true"
|
||||
only_selected="false" />
|
||||
<inkscape:path-effect
|
||||
effect="bspline"
|
||||
id="path-effect1493-1-2"
|
||||
is_visible="true"
|
||||
weight="33.333333"
|
||||
steps="2"
|
||||
helper_size="0"
|
||||
apply_no_weight="true"
|
||||
apply_with_weight="true"
|
||||
only_selected="false" />
|
||||
<inkscape:path-effect
|
||||
effect="bspline"
|
||||
id="path-effect1435-1-6"
|
||||
is_visible="true"
|
||||
weight="33.333333"
|
||||
steps="2"
|
||||
helper_size="0"
|
||||
apply_no_weight="true"
|
||||
apply_with_weight="true"
|
||||
only_selected="false" />
|
||||
<inkscape:path-effect
|
||||
effect="bspline"
|
||||
id="path-effect1493-1-3"
|
||||
is_visible="true"
|
||||
weight="33.333333"
|
||||
steps="2"
|
||||
helper_size="0"
|
||||
apply_no_weight="true"
|
||||
apply_with_weight="true"
|
||||
only_selected="false" />
|
||||
<inkscape:path-effect
|
||||
effect="bspline"
|
||||
id="path-effect1435-1-4"
|
||||
is_visible="true"
|
||||
weight="33.333333"
|
||||
steps="2"
|
||||
helper_size="0"
|
||||
apply_no_weight="true"
|
||||
apply_with_weight="true"
|
||||
only_selected="false" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.12374369"
|
||||
inkscape:cx="-141.5134"
|
||||
inkscape:cy="518.4563"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="-9"
|
||||
inkscape:window-y="-9"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata857">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Livello 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,98)">
|
||||
<path
|
||||
style="fill:#99cfff;fill-opacity:1;stroke:#0000ff;stroke-width:17.42772102;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 143.24538,-73.855172 C 96.293637,-65.52689 54.503637,-29.303801 32.665745,21.993484 18.333725,55.659659 12.81419,107.77106 19.582647,145.51389 c 6.838563,38.13392 20.377099,68.82957 40.579052,92.0044 14.930725,17.12793 28.670954,26.80415 50.583741,35.62318 l 16.78352,6.7546 103.20833,1.00137 c 56.76476,0.5524 279.08053,0.60816 494.03542,0.12727 214.9545,-0.48157 361.52059,2.04088 423.32369,0.38037 l 20.3092,-0.1778 v 0 0 0 C 993.59512,181.48484 960.87422,58.808234 938.76657,-67.68394 v 0 c 0,0 16.26609,-4.018334 -459.74984,-8.21239 -279.48083,-2.462432 -320.09952,-0.7401 -335.77228,2.027933 z"
|
||||
id="path1456"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccsccccccccccccscc" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="svg-dashboard3.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
id="svg2161"
|
||||
version="1.1"
|
||||
viewBox="0 0 920 94"
|
||||
height="94mm"
|
||||
width="920mm">
|
||||
<defs
|
||||
id="defs2155">
|
||||
<inkscape:path-effect
|
||||
only_selected="false"
|
||||
apply_with_weight="true"
|
||||
apply_no_weight="true"
|
||||
helper_size="0"
|
||||
steps="2"
|
||||
weight="33.333333"
|
||||
is_visible="true"
|
||||
id="path-effect1493-1"
|
||||
effect="bspline" />
|
||||
<inkscape:path-effect
|
||||
only_selected="false"
|
||||
apply_with_weight="true"
|
||||
apply_no_weight="true"
|
||||
helper_size="0"
|
||||
steps="2"
|
||||
weight="33.333333"
|
||||
is_visible="true"
|
||||
id="path-effect1435-1"
|
||||
effect="bspline" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="-9"
|
||||
inkscape:window-x="-9"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-width="1920"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:cy="-169.24053"
|
||||
inkscape:cx="1863.1839"
|
||||
inkscape:zoom="0.30578698"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base" />
|
||||
<metadata
|
||||
id="metadata2158">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(0,-203)"
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Livello 1">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path844"
|
||||
d="m 6.125405,210.10492 c 54.690648,31.20908 66.397365,63.57562 72.109211,81.27882 v 0"
|
||||
style="fill:none;stroke:#0000ff;stroke-width:8.69768238;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path846"
|
||||
d="m 74.797676,291.49749 c 274.379674,-1.68455 569.282634,0.0693 853.718824,0.0851"
|
||||
style="fill:none;stroke:#0000ff;stroke-width:8.69768238;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path848"
|
||||
d="M 4.4387748,209.64992 924.86717,210.86705"
|
||||
style="fill:none;stroke:#0000ff;stroke-width:8.69768238;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path852"
|
||||
d="m 64.831554,253.9737 c -17.389756,-21.62927 -7.539172,-11.26644 -50.667108,-42.06328 3.521079,-0.0839 907.899034,1.79363 909.257894,2.88249 0.60108,0.48165 4.06725,56.6157 4.27366,69.82023 l 0.07,4.50521 -423.39903,-0.26844 c -141.05057,-0.11751 -280.12534,-0.6218 -422.634623,0.54985 -0.01626,-0.0709 0.592478,-0.79198 0.592478,-0.79198 -2.535322,-9.70363 -11.44174,-25.39396 -11.44174,-25.39396 z"
|
||||
style="fill:#b6d6f3;fill-rule:evenodd;stroke:none;stroke-width:0.43488413;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
sodipodi:nodetypes="cccccccscc" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
@@ -1,305 +1,72 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "colors.less";
|
||||
|
||||
.kW {
|
||||
width: 16px;
|
||||
height: 11px;
|
||||
font-family: WorkSans;
|
||||
font-size: 12px;
|
||||
font-weight: 800;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
margin-left:20px ;
|
||||
color: @color-darkish-blue;
|
||||
|
||||
}
|
||||
.Potenza {
|
||||
width: 65px;
|
||||
height: 65px;
|
||||
font-family: WorkSans;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
margin-left: -8px;
|
||||
color: @color-darkish-blue;
|
||||
}
|
||||
// }
|
||||
// #SecondArchInfo
|
||||
// .Combined-Shape {
|
||||
// width: 68px;
|
||||
// height: 50px;
|
||||
// box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.5);
|
||||
// background-color: var(--light-grey-blue);
|
||||
// }
|
||||
// .Combined-Shape-Copy-3 {
|
||||
// width: 55px;
|
||||
// height: 21px;
|
||||
// background-color: var(--darkish-blue);
|
||||
// }
|
||||
|
||||
// .Valor2{
|
||||
// width: 27px;
|
||||
// height: 23px;
|
||||
// font-family: WorkSans;
|
||||
// font-size: 18.9px;
|
||||
// font-weight: 500;
|
||||
// font-stretch: normal;
|
||||
// font-style: normal;
|
||||
// line-height: normal;
|
||||
// letter-spacing: normal;
|
||||
// text-align: center;
|
||||
// color: var(--darkish-blue);
|
||||
// }
|
||||
.Bar {
|
||||
width: 16px;
|
||||
height: 11px;
|
||||
font-family: WorkSans;
|
||||
font-size: 9.7px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: @color-darkish-blue;
|
||||
}
|
||||
.Aria {
|
||||
width: 23px;
|
||||
height: 14px;
|
||||
font-family: WorkSans;
|
||||
font-size: 10px;
|
||||
font-weight: normal;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: end;
|
||||
color: @color-darkish-blue;
|
||||
}
|
||||
// #ThirdArchInfo
|
||||
// .Combined-Shape-Copy-3 {
|
||||
// width: 64px;
|
||||
// height: 49px;
|
||||
// background-color: var(--darkish-blue);
|
||||
// }
|
||||
// .Valor3{
|
||||
// width: 50px;
|
||||
// height: 23px;
|
||||
// font-family: WorkSans;
|
||||
// font-size: 18.9px;
|
||||
// font-weight: 500;
|
||||
// font-stretch: normal;
|
||||
// font-style: normal;
|
||||
// line-height: normal;
|
||||
// letter-spacing: normal;
|
||||
// text-align: center;
|
||||
// color: @color-darkish-blue;
|
||||
// }
|
||||
// .bar {
|
||||
// width: 16px;
|
||||
// height: 11px;
|
||||
// font-family: WorkSans;
|
||||
// font-size: 9.7px;
|
||||
// font-weight: 500;
|
||||
// font-stretch: normal;
|
||||
// font-style: normal;
|
||||
// line-height: normal;
|
||||
// letter-spacing: normal;
|
||||
// text-align: center;
|
||||
// color: @color-darkish-blue;
|
||||
// }
|
||||
// .Vuoto {
|
||||
// width: 35px;
|
||||
// height: 14px;
|
||||
// font-family: WorkSans;
|
||||
// font-size: 12px;
|
||||
// font-weight: normal;
|
||||
// font-stretch: normal;
|
||||
// font-style: normal;
|
||||
// line-height: normal;
|
||||
// letter-spacing: normal;
|
||||
// text-align: center;
|
||||
// color: @color-darkish-blue;
|
||||
// }
|
||||
// .divider-columnt {
|
||||
// width: 2px;
|
||||
// height: 48px;
|
||||
// // background-color: @color-light-grey-blue;
|
||||
// }
|
||||
|
||||
// .wrapper {
|
||||
// position: relative;
|
||||
// margin: auto;
|
||||
// }
|
||||
//da scommentare
|
||||
// .wrapper{
|
||||
// width: 90px;
|
||||
// height: 90px;
|
||||
// display:flex;
|
||||
// }
|
||||
// .meter {
|
||||
// width: 50%; height: 50%;
|
||||
// transform: rotateX(180deg);
|
||||
// }
|
||||
// //da scommentare
|
||||
// .meter{
|
||||
// width: 50%; height: 50%;
|
||||
// margin-top:200px;
|
||||
// // width: 300%;
|
||||
// // height: 100%;
|
||||
// transform: rotateX(180deg);
|
||||
@import "colors.less";
|
||||
|
||||
// }
|
||||
.arch {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex: 1;
|
||||
|
||||
// .outline, #mask {
|
||||
// stroke: white;
|
||||
// stroke-width: 65;
|
||||
// }
|
||||
// .range {
|
||||
// stroke-width: 60;
|
||||
// }
|
||||
// .lbl {
|
||||
// background-color: #4B4C51;
|
||||
// border-radius: 2px;
|
||||
// color: white;
|
||||
// font-family: 'courier new';
|
||||
// font-size: 15pt;
|
||||
// font-weight: bold;
|
||||
// padding: 4px 4px 2px 4px;
|
||||
// right: -48px;
|
||||
// top: 57%;
|
||||
// }
|
||||
// .meter_needle {
|
||||
// height: 40%;
|
||||
// left: 0;
|
||||
// margin: auto;
|
||||
// position: absolute;
|
||||
// right: 0;
|
||||
// top: 10%;
|
||||
// transform-origin: bottom center;
|
||||
// /*orientation fix*/
|
||||
// transform: rotate(270deg);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// .backgound-circle{
|
||||
// stroke-width: 10;
|
||||
// fill: none;
|
||||
// stroke-dasharray: 145,80;
|
||||
// stroke:gray ;
|
||||
// }
|
||||
// .value-circle{
|
||||
// stroke-width: 10;
|
||||
// stroke-dasharray: 145,80;
|
||||
// fill: none;
|
||||
// stroke:blue ;
|
||||
// }
|
||||
// //da scommentare
|
||||
// path {
|
||||
// stroke-width: 7;
|
||||
// stroke-dasharray: none;
|
||||
// fill: none;
|
||||
// }
|
||||
|
||||
// #background-circle {
|
||||
// stroke: grey;
|
||||
.box-gauge {
|
||||
width: 68px;
|
||||
|
||||
// }
|
||||
div {
|
||||
|
||||
// #value-circle {
|
||||
// stroke: blue;
|
||||
// }
|
||||
&:last-of-type {
|
||||
margin-top: -25px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
|
||||
body {
|
||||
// background-color: rgba(0,0,0,0.8);
|
||||
color:@color-darkish-blue;
|
||||
font-family: Hevletica, sans-serif;
|
||||
}
|
||||
label {
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: @color-darkish-blue;
|
||||
}
|
||||
}
|
||||
|
||||
.info {
|
||||
clear: both;
|
||||
padding: 10px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
}
|
||||
|
||||
/* ------ Default Style ---------- */
|
||||
.gauge-container {
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
display: block;
|
||||
float: left;
|
||||
padding: -130px;
|
||||
// background-color: rgb(167, 154, 154); background container
|
||||
margin: 56px;
|
||||
border-radius: 3px;
|
||||
position: relative;
|
||||
margin-top:60px;
|
||||
margin-left: -10px;
|
||||
}
|
||||
.label {
|
||||
// display: inline-block;
|
||||
color:@color-darkish-blue;
|
||||
font-family: monospace;
|
||||
font-size: 1.5em;
|
||||
// padding: 5px 10px;
|
||||
margin-left:10px;
|
||||
}
|
||||
.gauge-container > .gauge > .dial {
|
||||
stroke:@color-darkish-blue;
|
||||
stroke-width: 2;
|
||||
// fill: rgba(0,0,0,0);
|
||||
}
|
||||
.gauge-container > .gauge > .value {
|
||||
stroke:@color-darkish-blue;
|
||||
stroke-width: 2;
|
||||
// fill: rgba(0,0,0,0);
|
||||
}
|
||||
.gauge-container > .gauge > .value-text { //valore sotto l'arco
|
||||
color:@color-darkish-blue;
|
||||
font-family: sans-serif;
|
||||
font-weight: bold;
|
||||
font-size: 3.9px;
|
||||
margin-top:10px;
|
||||
.gauge-container {
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
display: block;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
}
|
||||
.gauge-container>.gauge>.dial {
|
||||
stroke: @color-darkish-blue;
|
||||
stroke-width: 2;
|
||||
}
|
||||
|
||||
/* ------- Alternate Style ------- */
|
||||
.wrapper {
|
||||
height: 20px;
|
||||
float: left;
|
||||
margin: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.wrapper > .gauge-container {
|
||||
margin: 0;
|
||||
}
|
||||
.gauge-container>.gauge>.value {
|
||||
stroke: @color-darkish-blue;
|
||||
stroke-width: 2;
|
||||
}
|
||||
|
||||
.gauge-container.three > .gauge > .dial {
|
||||
stroke:@color-silver;
|
||||
stroke-width: 4;
|
||||
}
|
||||
.gauge-container.three > .gauge > .value {
|
||||
stroke: @color-darkish-blue;
|
||||
stroke-width: 5;
|
||||
}
|
||||
.gauge-container.three > .gauge > .value-text {
|
||||
fill: color-darkish-blue;
|
||||
}
|
||||
.labels{
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
margin-left: 19px;
|
||||
margin-top:-94px;
|
||||
}
|
||||
.arch{
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
}
|
||||
.gauge-container>.gauge>.value-text {
|
||||
color: @color-darkish-blue;
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.gauge-container.three>.gauge>.dial {
|
||||
stroke: @color-silver;
|
||||
stroke-width: 4;
|
||||
}
|
||||
|
||||
.gauge-container.three>.gauge>.value {
|
||||
stroke: @color-darkish-blue;
|
||||
stroke-width: 5;
|
||||
}
|
||||
|
||||
.gauge-container.three>.gauge>.value-text {
|
||||
fill: @color-darkish-blue;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
.@{modal}.estrazione-info {
|
||||
width: 560px;
|
||||
height: 411px;
|
||||
}
|
||||
@@ -2,33 +2,33 @@
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
.@{modal}.avvio-produzione-info {
|
||||
margin-top: 100px;
|
||||
width: 653px;
|
||||
height: 616px;
|
||||
|
||||
section.body{
|
||||
.modal.avvio-produzione-info {
|
||||
margin-top: 100px;
|
||||
width: 653px;
|
||||
height: 616px;
|
||||
|
||||
section{
|
||||
justify-content: center;
|
||||
section.body {
|
||||
|
||||
.specific{
|
||||
section {
|
||||
justify-content: center;
|
||||
|
||||
.disabled{
|
||||
width: 420px;
|
||||
height: 330px;
|
||||
}
|
||||
.specific {
|
||||
|
||||
.tast{
|
||||
margin-left: 25%;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.disabled {
|
||||
width: 420px;
|
||||
height: 330px;
|
||||
}
|
||||
|
||||
.tast {
|
||||
margin-left: 25%;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,495 +8,502 @@
|
||||
@button-machine-color-to : #404040;
|
||||
|
||||
button:focus {
|
||||
outline: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
button {
|
||||
cursor: pointer;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
cursor: pointer;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
button[disabled] {
|
||||
cursor: not-allowed !important;
|
||||
cursor: not-allowed !important;
|
||||
|
||||
* {
|
||||
cursor: not-allowed !important;
|
||||
}
|
||||
* {
|
||||
cursor: not-allowed !important;
|
||||
}
|
||||
}
|
||||
|
||||
button.btn[disabled] {
|
||||
border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
background-color: #dddddd;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
color: @color-warm-grey;
|
||||
border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
background-color: #dddddd;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
color: @color-warm-grey;
|
||||
|
||||
&:hover {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
&:hover {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-demo {
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.button.btn {
|
||||
max-height: 48px;
|
||||
display: inline-flex;
|
||||
padding: 12px 20px !important;
|
||||
min-height: 48px;
|
||||
max-height: 48px;
|
||||
display: inline-flex;
|
||||
padding: 12px 20px !important;
|
||||
min-height: 48px;
|
||||
}
|
||||
|
||||
|
||||
button.btn,
|
||||
.button.btn {
|
||||
height: @button-height;
|
||||
box-sizing: border-box;
|
||||
border-radius: 2px;
|
||||
margin: 0 8px;
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
box-shadow: @button-shadow;
|
||||
padding: 0 20px;
|
||||
border: none;
|
||||
background-image: linear-gradient(to bottom, @color-white2, @color-silver);
|
||||
color: @color-darkish-blue;
|
||||
height: @button-height;
|
||||
box-sizing: border-box;
|
||||
border-radius: 2px;
|
||||
margin: 0 8px;
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
box-shadow: @button-shadow;
|
||||
padding: 0 20px;
|
||||
border: none;
|
||||
background-image: linear-gradient(to bottom, @color-white2, @color-silver);
|
||||
color: @color-darkish-blue;
|
||||
|
||||
// display: inline-block;
|
||||
// align-items: flex-start;
|
||||
&:active:not([disabled]) {
|
||||
background-image: linear-gradient(to bottom, @color-silver, @color-white2);
|
||||
border: none !important;
|
||||
box-shadow: inset @button-shadow !important;
|
||||
}
|
||||
// display: inline-block;
|
||||
// align-items: flex-start;
|
||||
&:active:not([disabled]) {
|
||||
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;
|
||||
}
|
||||
&:hover {
|
||||
box-shadow: inset 0px 0px 0px 2px #8eb5e2;
|
||||
}
|
||||
|
||||
&.dark-blue {
|
||||
background-color: @color-blue;
|
||||
color: white;
|
||||
}
|
||||
|
||||
&.btn-danger {
|
||||
color: @color-scarlet;
|
||||
}
|
||||
|
||||
&.dark-blue:active {
|
||||
background-color: @color-darkish-blue-two !important;
|
||||
}
|
||||
|
||||
&.pressed {
|
||||
background-image: linear-gradient(to bottom, @color-silver, @color-white2);
|
||||
border: none !important;
|
||||
box-shadow: inset @button-shadow !important;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
button.btn.btn-success {
|
||||
background-image: linear-gradient(to bottom, @button-success-color-from, @button-success-color-to);
|
||||
&.dark-blue {
|
||||
background-color: @color-blue;
|
||||
color: white;
|
||||
border: #001e48 1px solid;
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-image: linear-gradient(to bottom, @button-success-color-to, @button-success-color-from) !important;
|
||||
box-shadow: inset @button-shadow;
|
||||
border: #001e48 1px solid !important;
|
||||
color: #8eb5e2
|
||||
}
|
||||
}
|
||||
&.btn-danger {
|
||||
color: @color-scarlet;
|
||||
}
|
||||
|
||||
button.btn.btn-success[disabled] {
|
||||
border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
box-shadow: none;
|
||||
color: @color-warm-grey;
|
||||
border: none;
|
||||
&.dark-blue:active {
|
||||
background-color: @color-darkish-blue-two !important;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
box-shadow: none !important;
|
||||
background-image: linear-gradient(to bottom, @button-success-color-from, @button-success-color-to) !important;
|
||||
}
|
||||
}
|
||||
&.pressed {
|
||||
background-image: linear-gradient(to bottom, @color-silver, @color-white2);
|
||||
border: none !important;
|
||||
box-shadow: inset @button-shadow !important;
|
||||
}
|
||||
|
||||
button.under {
|
||||
width: 208px;
|
||||
height: 45px;
|
||||
object-fit: contain;
|
||||
border-radius: 100px;
|
||||
background-image: linear-gradient(to bottom, @button-machine-color-from, @button-machine-color-to);
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.4);
|
||||
border: none;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
|
||||
img {
|
||||
max-width: 178px;
|
||||
max-height: 45px;
|
||||
}
|
||||
|
||||
&.pressed:active,
|
||||
&:active {
|
||||
background-image: none;
|
||||
background-color: @button-machine-color-to;
|
||||
}
|
||||
|
||||
&.pressed {
|
||||
background-image: linear-gradient(to bottom, @button-machine-color-to, @button-machine-color-from);
|
||||
box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
}
|
||||
|
||||
button.square {
|
||||
// width: @button-height;
|
||||
// height: @button-height;
|
||||
border-radius: 2px !important; // background-color: #4b4b4b;
|
||||
height: @button-height;
|
||||
width: @button-height;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: @button-success-color-to;
|
||||
}
|
||||
button.btn.btn-success {
|
||||
background-image: linear-gradient(to bottom, @button-success-color-from, @button-success-color-to);
|
||||
color: white;
|
||||
border: #001e48 1px solid;
|
||||
|
||||
&:active {
|
||||
background-image: linear-gradient(to bottom, @button-success-color-to, @button-success-color-from) !important;
|
||||
box-shadow: inset @button-shadow;
|
||||
border: #001e48 1px solid !important;
|
||||
color: #8eb5e2
|
||||
}
|
||||
}
|
||||
|
||||
button.btn.btn-success[disabled] {
|
||||
border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
box-shadow: none;
|
||||
color: @color-warm-grey;
|
||||
border: none;
|
||||
|
||||
&:hover {
|
||||
box-shadow: none !important;
|
||||
background-image: linear-gradient(to bottom, @button-success-color-from, @button-success-color-to) !important;
|
||||
}
|
||||
}
|
||||
|
||||
button.under {
|
||||
width: 208px;
|
||||
height: 45px;
|
||||
object-fit: contain;
|
||||
border-radius: 100px;
|
||||
background-image: linear-gradient(to bottom, @button-machine-color-from, @button-machine-color-to);
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.4);
|
||||
border: none;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
|
||||
img {
|
||||
max-width: 178px;
|
||||
max-height: 45px;
|
||||
}
|
||||
|
||||
&.pressed:active,
|
||||
&:active {
|
||||
background-image: none;
|
||||
background-color: @button-machine-color-to;
|
||||
}
|
||||
|
||||
&.pressed {
|
||||
background-image: linear-gradient(to bottom, @button-machine-color-to, @button-machine-color-from);
|
||||
box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
}
|
||||
|
||||
button.square {
|
||||
// width: @button-height;
|
||||
// height: @button-height;
|
||||
border-radius: 2px !important; // background-color: #4b4b4b;
|
||||
|
||||
&:hover {
|
||||
background-color: @button-success-color-to;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-spacer {
|
||||
margin: 0 8px;
|
||||
padding: 0 4px;
|
||||
display: flex;
|
||||
margin: 0 8px;
|
||||
padding: 0 4px;
|
||||
display: flex;
|
||||
|
||||
&.collapsed {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
&.collapsed {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
button.modal-close {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
padding: none;
|
||||
border-radius: 50%;
|
||||
border: none;
|
||||
background-color: #002680;
|
||||
color: #fff;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
padding: none;
|
||||
border-radius: 50%;
|
||||
border: none;
|
||||
background-color: #002680;
|
||||
color: #fff;
|
||||
|
||||
i {
|
||||
font-size: 18px;
|
||||
}
|
||||
i {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-group {
|
||||
margin: 0 8px;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
margin: 0 8px;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
|
||||
button {
|
||||
border-radius: 0 !important;
|
||||
margin-left: 0 !important;
|
||||
margin-right: 0 !important;
|
||||
button {
|
||||
border-radius: 0 !important;
|
||||
margin-left: 0 !important;
|
||||
margin-right: 0 !important;
|
||||
|
||||
&:first-child {
|
||||
border-top-left-radius: 2px !important;
|
||||
border-bottom-left-radius: 2px !important;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-top-right-radius: 2px !important;
|
||||
border-bottom-right-radius: 2px !important;
|
||||
}
|
||||
&:first-child {
|
||||
border-top-left-radius: 2px !important;
|
||||
border-bottom-left-radius: 2px !important;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-top-right-radius: 2px !important;
|
||||
border-bottom-right-radius: 2px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
button.soft {
|
||||
width: 96px;
|
||||
height: 48px;
|
||||
margin: 4px;
|
||||
background-image: linear-gradient(to bottom, #f1f1f1, @color-silver);
|
||||
box-sizing: border-box;
|
||||
border: none;
|
||||
box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.5);
|
||||
color: @color-darkish-blue;
|
||||
font-size: 14px;
|
||||
border-radius: 2px;
|
||||
width: 96px;
|
||||
height: 48px;
|
||||
margin: 4px;
|
||||
background-image: linear-gradient(to bottom, #f1f1f1, @color-silver);
|
||||
box-sizing: border-box;
|
||||
border: none;
|
||||
box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.5);
|
||||
color: @color-darkish-blue;
|
||||
font-size: 14px;
|
||||
border-radius: 2px;
|
||||
|
||||
|
||||
&.icon {
|
||||
display: flex;
|
||||
padding: 1px 12px;
|
||||
align-items: center;
|
||||
text-align: left;
|
||||
}
|
||||
&.icon {
|
||||
display: flex;
|
||||
padding: 1px 12px;
|
||||
align-items: center;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
&.axes {
|
||||
width: 54px;
|
||||
font-size: 1.8em;
|
||||
display: block;
|
||||
font-weight: 600;
|
||||
padding: 0px;
|
||||
text-align: center;
|
||||
}
|
||||
&.axes {
|
||||
width: 54px;
|
||||
font-size: 1.8em;
|
||||
display: block;
|
||||
font-weight: 600;
|
||||
padding: 0px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
img {
|
||||
image-rendering: -webkit-optimize-contrast;
|
||||
display: inline;
|
||||
vertical-align: bottom;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-image: linear-gradient(to bottom, @color-cerulean, @color-clear-blue) !important;
|
||||
color: white !important;
|
||||
box-shadow: inset 0px 0px 3px 0px rgba(0, 0, 0, 0.5);
|
||||
|
||||
img {
|
||||
width: 18px;
|
||||
image-rendering: -webkit-optimize-contrast;
|
||||
display: inline;
|
||||
vertical-align: bottom;
|
||||
margin-right: 6px;
|
||||
filter: grayscale(100%) invert(100) saturate(200);
|
||||
}
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-image: linear-gradient(to bottom, @color-cerulean, @color-clear-blue) !important;
|
||||
color: white !important;
|
||||
box-shadow: inset 0px 0px 3px 0px rgba(0, 0, 0, 0.5);
|
||||
&:active {
|
||||
background-image: linear-gradient(to bottom, @color-silver, #f1f1f1);
|
||||
box-shadow: inset 0px 0px 3px 0px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
img {
|
||||
filter: grayscale(100%) invert(100) saturate(200);
|
||||
}
|
||||
&.spaced {
|
||||
margin: 4px 8px;
|
||||
}
|
||||
|
||||
&[disabled]:not(.readonly) {
|
||||
background-color: #dddddd !important;
|
||||
// background-image: none !important;
|
||||
box-shadow: none !important;
|
||||
color: @color-warm-grey;
|
||||
|
||||
img {
|
||||
filter: grayscale(100%) invert(44%);
|
||||
}
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-image: linear-gradient(to bottom, @color-silver, #f1f1f1);
|
||||
box-shadow: inset 0px 0px 3px 0px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
&.square {
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
&.spaced {
|
||||
margin: 4px 8px;
|
||||
}
|
||||
&.incremental {
|
||||
padding: 0px 2px;
|
||||
margin-right: 0px;
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
&[disabled]:not(.readonly) {
|
||||
background-color: #dddddd !important;
|
||||
// background-image: none !important;
|
||||
box-shadow: none !important;
|
||||
color: @color-warm-grey;
|
||||
&.firstIncr {
|
||||
margin-left: 4px;
|
||||
border-radius: 2px 0px 0px 2px !important
|
||||
}
|
||||
|
||||
img {
|
||||
filter: grayscale(100%) invert(44%);
|
||||
}
|
||||
}
|
||||
&.middleIncr {
|
||||
border-radius: 0px !important
|
||||
}
|
||||
|
||||
&.square {
|
||||
width: 60px;
|
||||
}
|
||||
&.lastIncr {
|
||||
border-radius: 0px 2px 2px 0px !important
|
||||
}
|
||||
|
||||
&.incremental {
|
||||
padding: 0px 2px;
|
||||
margin-right: 0px;
|
||||
margin-left: 0px;
|
||||
}
|
||||
i.fa {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
&.firstIncr {
|
||||
margin-left: 4px;
|
||||
border-radius: 2px 0px 0px 2px !important
|
||||
}
|
||||
&.readonly {
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
border: 3px solid #4e585e;
|
||||
color: #ddd;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
&.middleIncr {
|
||||
border-radius: 0px !important
|
||||
}
|
||||
|
||||
&.lastIncr {
|
||||
border-radius: 0px 2px 2px 0px !important
|
||||
}
|
||||
|
||||
i.fa {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
&.readonly {
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
border: 3px solid #4e585e;
|
||||
color: #ddd;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
&.inverter {
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
border: 3px solid #657178;
|
||||
color: white
|
||||
}
|
||||
&.inverter {
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
border: 3px solid #657178;
|
||||
color: white
|
||||
}
|
||||
}
|
||||
|
||||
.togglebutton {
|
||||
vertical-align: middle;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
vertical-align: middle;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
.togglebutton,
|
||||
.togglebutton label,
|
||||
.togglebutton input,
|
||||
.togglebutton .toggle {
|
||||
user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.togglebutton label {
|
||||
cursor: pointer;
|
||||
color: rgba(0, 0, 0, 0.26);
|
||||
cursor: pointer;
|
||||
color: rgba(0, 0, 0, 0.26);
|
||||
}
|
||||
|
||||
.form-group.is-focused .togglebutton label {
|
||||
color: rgba(0, 0, 0, 0.26);
|
||||
color: rgba(0, 0, 0, 0.26);
|
||||
}
|
||||
|
||||
.form-group.is-focused .togglebutton label:hover,
|
||||
.form-group.is-focused .togglebutton label:focus {
|
||||
color: rgba(0, 0, 0, .54);
|
||||
color: rgba(0, 0, 0, .54);
|
||||
}
|
||||
|
||||
fieldset[disabled] .form-group.is-focused .togglebutton label {
|
||||
color: rgba(0, 0, 0, 0.26);
|
||||
color: rgba(0, 0, 0, 0.26);
|
||||
}
|
||||
|
||||
.togglebutton label input[type=checkbox] {
|
||||
opacity: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
opacity: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.togglebutton label .toggle {
|
||||
text-align: left;
|
||||
margin-left: 5px;
|
||||
text-align: left;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.togglebutton label .toggle,
|
||||
.togglebutton label input[type=checkbox][disabled]+.toggle {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 70px;
|
||||
height: 24px;
|
||||
background-color: #ddd;
|
||||
border-radius: 15px;
|
||||
margin-right: 15px;
|
||||
transition: background 0.3s ease;
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.5);
|
||||
line-height: 24px;
|
||||
text-align: center;
|
||||
color: #979797;
|
||||
font-size: 10px;
|
||||
text-transform: uppercase;
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 70px;
|
||||
height: 24px;
|
||||
background-color: #ddd;
|
||||
border-radius: 15px;
|
||||
margin-right: 15px;
|
||||
transition: background 0.3s ease;
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.5);
|
||||
line-height: 24px;
|
||||
text-align: center;
|
||||
color: #979797;
|
||||
font-size: 10px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.togglebutton label .toggle:after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background-image: linear-gradient(to bottom, #1756ad, #002680);
|
||||
border-radius: 20px;
|
||||
position: relative;
|
||||
box-shadow: 0 1px 1px 0px rgba(0, 0, 0, 0.4);
|
||||
left: 1px;
|
||||
top: 2px;
|
||||
position: absolute;
|
||||
border: none;
|
||||
transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease;
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background-image: linear-gradient(to bottom, #1756ad, #002680);
|
||||
border-radius: 20px;
|
||||
position: relative;
|
||||
box-shadow: 0 1px 1px 0px rgba(0, 0, 0, 0.4);
|
||||
left: 1px;
|
||||
top: 2px;
|
||||
position: absolute;
|
||||
border: none;
|
||||
transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease;
|
||||
}
|
||||
|
||||
.togglebutton label input[type=checkbox][disabled]+.toggle:after,
|
||||
.togglebutton label input[type=checkbox][disabled]:checked+.toggle:after {
|
||||
background-color: #BDBDBD;
|
||||
background-color: #BDBDBD;
|
||||
}
|
||||
|
||||
.togglebutton label input[type=checkbox]+.toggle:active:after,
|
||||
.togglebutton label input[type=checkbox][disabled]+.toggle:active:after {
|
||||
box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.6), 0 0 0 20px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.6), 0 0 0 20px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.togglebutton label input[type=checkbox]:checked+.toggle:after {
|
||||
left: 48px;
|
||||
left: 48px;
|
||||
}
|
||||
|
||||
.togglebutton label input[type=checkbox]:checked+.toggle {
|
||||
content: "";
|
||||
background-image: linear-gradient(to bottom, #3fa4ff, #1791ff);
|
||||
color: #fff;
|
||||
content: "";
|
||||
background-image: linear-gradient(to bottom, #3fa4ff, #1791ff);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.togglebutton.big {
|
||||
span.toggle {
|
||||
height: 40px;
|
||||
width: 112px;
|
||||
border-radius: 20px;
|
||||
font-size: 17px;
|
||||
line-height: 40px;
|
||||
font-weight: bold;
|
||||
span.toggle {
|
||||
height: 40px;
|
||||
width: 112px;
|
||||
border-radius: 20px;
|
||||
font-size: 17px;
|
||||
line-height: 40px;
|
||||
font-weight: bold;
|
||||
|
||||
&:after {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
}
|
||||
&:after {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
}
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked+.toggle:after {
|
||||
left: 74px;
|
||||
}
|
||||
input[type=checkbox]:checked+.toggle:after {
|
||||
left: 74px;
|
||||
}
|
||||
}
|
||||
|
||||
.custom-checkbox {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
display: flex;
|
||||
// margin-left: 16px;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
display: flex;
|
||||
// margin-left: 16px;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.custom-checkbox label {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: @color-white2;
|
||||
box-shadow: inset 0 1px 3px @color-black-50;
|
||||
border-radius: 2px;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: @color-white2;
|
||||
box-shadow: inset 0 1px 3px @color-black-50;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.custom-checkbox label:after {
|
||||
opacity: 0;
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 16px;
|
||||
height: 9px;
|
||||
background: transparent;
|
||||
top: 3px;
|
||||
left: 2px;
|
||||
border: 5px solid #1791ff;
|
||||
border-top: none;
|
||||
border-right: none;
|
||||
transform: rotate(-48deg);
|
||||
opacity: 0;
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 16px;
|
||||
height: 9px;
|
||||
background: transparent;
|
||||
top: 3px;
|
||||
left: 2px;
|
||||
border: 5px solid #1791ff;
|
||||
border-top: none;
|
||||
border-right: none;
|
||||
transform: rotate(-48deg);
|
||||
}
|
||||
|
||||
.custom-checkbox input[type=checkbox]:checked+label {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: @color-white2;
|
||||
border: solid 1px @color-clear-blue;
|
||||
border-radius: 2px;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: @color-white2;
|
||||
border: solid 1px @color-clear-blue;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.custom-checkbox input[type=checkbox]:checked+label:after {
|
||||
opacity: 1;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.custom-checkbox-label {
|
||||
display: flex;
|
||||
margin-left: 8px;
|
||||
font-size: 18px;
|
||||
line-height: 1.11;
|
||||
color: @color-greyish-brown;
|
||||
display: flex;
|
||||
margin-left: 8px;
|
||||
font-size: 18px;
|
||||
line-height: 1.11;
|
||||
color: @color-greyish-brown;
|
||||
}
|
||||
|
||||
// .togglebutton label input[type=checkbox]:checked+.toggle:after {
|
||||
|
||||
@@ -1,96 +0,0 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
.@{modal}.ciclo-info {
|
||||
|
||||
section{
|
||||
|
||||
.specific{
|
||||
padding: 0 10px;
|
||||
|
||||
.caricatore-buttons{
|
||||
|
||||
button{
|
||||
margin-right: 15px;
|
||||
margin-left: 5px;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
object-fit: contain;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.5);
|
||||
border: none;
|
||||
background-image: linear-gradient(to bottom, #f1f1f1 0%, #bbbcbc 98%);
|
||||
|
||||
&:last-of-type{
|
||||
border: solid 1px #001e48;
|
||||
background-image: linear-gradient(to bottom, #1756ad, #002680);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.svg-area{
|
||||
|
||||
.disegnoCaricatore{
|
||||
flex-shrink: 0;
|
||||
width: 1137px;
|
||||
height: 707px;
|
||||
}
|
||||
|
||||
.input-circles{
|
||||
|
||||
label{
|
||||
object-fit: contain;
|
||||
background-color: #979797;
|
||||
}
|
||||
|
||||
.circle1{
|
||||
position: relative;
|
||||
top: 200px;
|
||||
right: 25px;
|
||||
}
|
||||
|
||||
.circle2{
|
||||
position: relative;
|
||||
top: 400px;
|
||||
right: 25px;
|
||||
}
|
||||
|
||||
.circle3{
|
||||
width: 135px;
|
||||
position: relative;
|
||||
top: 545px;
|
||||
right: 410px;
|
||||
}
|
||||
|
||||
.circle4{
|
||||
position: relative;
|
||||
top: 585px;
|
||||
right: 200px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.box {
|
||||
margin-bottom: 10px;
|
||||
width: 500px;
|
||||
|
||||
.body{
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
.@{modal}.controstamposetup-info {
|
||||
width: 1820px;
|
||||
height: 980px;
|
||||
|
||||
section{
|
||||
|
||||
.controstampo-cycle{
|
||||
margin-left: 37%;
|
||||
}
|
||||
|
||||
.specific{
|
||||
padding-left: 5px;
|
||||
|
||||
.box {
|
||||
margin-bottom: 5px;
|
||||
background-color: #e5f3ff;
|
||||
|
||||
&:first-of-type{
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
&:last-of-type{
|
||||
background-color: #b3dbff;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.input-area{
|
||||
width: 480px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,487 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
|
||||
|
||||
.dashboard {
|
||||
height : 100%;
|
||||
width : 100%;
|
||||
background-image: url("../../assets/icons/png/bg.png");
|
||||
position : fixed;
|
||||
z-index : 1001;
|
||||
display : flex;
|
||||
flex-direction : column;
|
||||
justify-content : flex-start;
|
||||
|
||||
.header {
|
||||
width : 100%;
|
||||
display: flex;
|
||||
|
||||
.ribbon-container {
|
||||
height : 80px;
|
||||
z-index: 900;
|
||||
}
|
||||
|
||||
.box-date {
|
||||
display : flex;
|
||||
width : 70%;
|
||||
margin-left: 100px;
|
||||
|
||||
div {
|
||||
flex-shrink: 0;
|
||||
font-size : 47px;
|
||||
text-align : right;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
time {
|
||||
flex-shrink: 0;
|
||||
transition : color 200ms ease-in-out;
|
||||
margin-left: 28px;
|
||||
display : flex;
|
||||
font-size : 120px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.arch {
|
||||
width: 100%;
|
||||
|
||||
.box-gauge {
|
||||
height: 150px;
|
||||
width : 150px;
|
||||
|
||||
.gauge-container,
|
||||
.three {
|
||||
width : 126px;
|
||||
height: 92px;
|
||||
|
||||
.gauge {
|
||||
|
||||
.value {
|
||||
stroke: #1791ff;
|
||||
}
|
||||
|
||||
.value-text {
|
||||
fill: #4b4b4b;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
div {
|
||||
|
||||
&:last-of-type {
|
||||
margin-top: -10px;
|
||||
|
||||
label {
|
||||
|
||||
&:first-of-type {
|
||||
font-size : 18px;
|
||||
font-weight : 300;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : normal;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
font-size : 26px;
|
||||
font-weight : 500;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : 1.96;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.header-buttons {
|
||||
display: inline-block;
|
||||
|
||||
.box-close-dashboard {
|
||||
height : 70px;
|
||||
text-align: right;
|
||||
|
||||
button.modal-close {
|
||||
background-color: #4B4B4B;
|
||||
margin : 23px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.user-info {
|
||||
margin-top : 10px;
|
||||
display : flex;
|
||||
font-size : 25px;
|
||||
color : @color-input-light;
|
||||
flex-grow : 1;
|
||||
justify-content: flex-end;
|
||||
margin-right : 21px;
|
||||
|
||||
button.profile {
|
||||
width : 48px;
|
||||
height : 48px;
|
||||
background-image: url("../profile.png");
|
||||
color : #000;
|
||||
background-size : cover;
|
||||
border : none;
|
||||
background-color: transparent;
|
||||
|
||||
&.colorWhite {
|
||||
color: #FFF;
|
||||
}
|
||||
}
|
||||
|
||||
div {
|
||||
align-self : center;
|
||||
margin-right: 10px;
|
||||
font-size : 18px;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
section {
|
||||
margin-top : -400px;
|
||||
height : 722px;
|
||||
display : flex;
|
||||
justify-content: flex-end;
|
||||
padding-right : 15px;
|
||||
padding-bottom : 50px;
|
||||
|
||||
.specific {
|
||||
display : flex;
|
||||
flex-direction : column;
|
||||
justify-content: flex-end;
|
||||
|
||||
div {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
//inizio sezione style del primo specific
|
||||
&:first-of-type {
|
||||
margin-right: 15%;
|
||||
|
||||
div {
|
||||
|
||||
&:first-of-type {
|
||||
|
||||
img {
|
||||
flex-shrink: 0;
|
||||
width : 41px;
|
||||
height : 41px;
|
||||
object-fit : contain;
|
||||
}
|
||||
|
||||
label {
|
||||
flex-shrink : 0;
|
||||
font-size : 54px;
|
||||
font-weight : normal;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : normal;
|
||||
letter-spacing: normal;
|
||||
text-align : right;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
margin: unset;
|
||||
|
||||
button {
|
||||
flex-shrink : 0;
|
||||
width : 65px;
|
||||
height : 65px;
|
||||
box-shadow : 0 2px 10px 0 rgba(0, 0, 0, 0.5);
|
||||
border : solid 3px #4b4b4b;
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
border-radius : 50%;
|
||||
color : #4b4b4b;
|
||||
font-size : 50px;
|
||||
text-align : center;
|
||||
}
|
||||
|
||||
label {
|
||||
flex-shrink: 0;
|
||||
|
||||
&:first-of-type {
|
||||
|
||||
font-size : 12px;
|
||||
font-weight : 500;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : 1;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
|
||||
font-size : 25px;
|
||||
font-weight : 500;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : 1;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//inizio sezione style del secondo specific
|
||||
label {
|
||||
flex-shrink: 0;
|
||||
|
||||
&:first-of-type {
|
||||
|
||||
font-size : 26px;
|
||||
font-weight : 500;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : 1.96;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
|
||||
font-size : 120px;
|
||||
font-weight : 300;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : normal;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//inizio sezione style del terzo specific
|
||||
&:last-of-type {
|
||||
margin-left: 15%;
|
||||
|
||||
div {
|
||||
flex-shrink : 0;
|
||||
width : 542px;
|
||||
height : 71px;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.actual {
|
||||
background-color: unset;
|
||||
width : unset;
|
||||
height : unset;
|
||||
|
||||
.specific {
|
||||
background-color: unset;
|
||||
width : unset;
|
||||
height : unset;
|
||||
margin : unset;
|
||||
|
||||
label {
|
||||
flex-shrink: 0;
|
||||
|
||||
&:first-of-type {
|
||||
font-size : 26px;
|
||||
font-weight : 500;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : 1.96;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
font-size : 120px;
|
||||
font-weight : 300;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : normal;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
aside {
|
||||
margin-top: 5px;
|
||||
width : 641px;
|
||||
height : 100%;
|
||||
overflow-x: hidden;
|
||||
|
||||
.component {
|
||||
width : 621px;
|
||||
height: 77px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.component-info {
|
||||
width : unset;
|
||||
height : unset;
|
||||
background-color: unset;
|
||||
display : flex;
|
||||
flex-direction : column;
|
||||
|
||||
section {
|
||||
margin : unset;
|
||||
padding : unset;
|
||||
height : unset;
|
||||
width : unset;
|
||||
display : flex;
|
||||
justify-content: flex-end;
|
||||
|
||||
section {
|
||||
margin : unset;
|
||||
padding : unset;
|
||||
height : unset;
|
||||
width : unset;
|
||||
display : flex;
|
||||
flex-direction: column;
|
||||
|
||||
.component {
|
||||
width : 478px;
|
||||
height : 60px;
|
||||
background-color: #e8e8e8;
|
||||
|
||||
div {
|
||||
flex-shrink: unset;
|
||||
|
||||
button {
|
||||
border-color : black;
|
||||
width : 50PX;
|
||||
height : 50px;
|
||||
border-radius : 50%;
|
||||
background-color: unset;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.component {
|
||||
width : 641px;
|
||||
height : 84px;
|
||||
background-color: #e8e8e8;
|
||||
display : flex;
|
||||
flex-direction : column;
|
||||
justify-content : flex-end;
|
||||
|
||||
div {
|
||||
flex-shrink : 0;
|
||||
margin : auto;
|
||||
padding : 0px 15px;
|
||||
width : unset;
|
||||
height : unset;
|
||||
background-color: unset;
|
||||
|
||||
|
||||
label {
|
||||
flex-shrink : 0;
|
||||
font-size : 54px;
|
||||
font-weight : 500;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : normal;
|
||||
letter-spacing: normal;
|
||||
text-align : right;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
.specific {
|
||||
height : unset;
|
||||
width : unset;
|
||||
background-color: unset;
|
||||
margin : unset;
|
||||
|
||||
label {
|
||||
flex-shrink: 0;
|
||||
|
||||
&:first-of-type {
|
||||
font-size : 12px;
|
||||
font-weight : 500;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : 1;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
font-size : 25px;
|
||||
font-weight : 500;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : 1;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
button {
|
||||
height : 20px;
|
||||
width : 20px;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
span {
|
||||
flex-shrink : 0;
|
||||
width : 100%;
|
||||
height : 1px;
|
||||
background-color: #676767;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
.@{modal}.estrazione-info {
|
||||
width: 1820px;
|
||||
height: 785px;
|
||||
|
||||
section.body{
|
||||
|
||||
section{
|
||||
|
||||
.specific {
|
||||
justify-content: flex-end;
|
||||
padding-left: 10px;
|
||||
|
||||
.box{
|
||||
margin:0;
|
||||
background-color: #e5f3ff;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -126,7 +126,10 @@ footer {
|
||||
background-image: url(../icons/png/SCADA-big.png);
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
button.ricetta{
|
||||
background-image: url(../icons/png/gestione-programmi-BIG.png);
|
||||
background-size: cover;
|
||||
}
|
||||
button.jobeditor{
|
||||
background-image: url(../icons/png/editor-BIG.png);
|
||||
background-size: cover;
|
||||
@@ -135,6 +138,14 @@ footer {
|
||||
background-image: url(../icons/png/users-BIG.png);
|
||||
background-size: cover;
|
||||
}
|
||||
button.progrprerisc{
|
||||
background-image: url(../icons/png/programmazione.png);
|
||||
background-size: cover;
|
||||
}
|
||||
button.clock{
|
||||
background-image: url(../icons/png/dashboard.png);
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
button:active{
|
||||
box-shadow: 0px 0px 1px 1px #FFF;
|
||||
|
||||
@@ -1,212 +0,0 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
|
||||
.@{modal}.formato-info {
|
||||
|
||||
.radio-buttons{
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
|
||||
input{
|
||||
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
object-fit: contain;
|
||||
border-radius: 12px;
|
||||
background-color: #f1f1f1;
|
||||
|
||||
}
|
||||
|
||||
label{
|
||||
|
||||
font-size: 18px;
|
||||
font-weight: normal;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: 1.11;
|
||||
letter-spacing: normal;
|
||||
text-align: right;
|
||||
color: #4b4b4b;
|
||||
|
||||
&:first-of-type{
|
||||
font-size: 24px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: @color-darkish-blue;
|
||||
padding-right: 200px;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.specific{
|
||||
margin-left: 5px;
|
||||
width: 1271px;
|
||||
height: 825px;
|
||||
|
||||
.svg-area{
|
||||
margin-left: 120px;
|
||||
margin-top: 70px;
|
||||
width: 999px;
|
||||
height: 527px;
|
||||
|
||||
.disegnoStampo {
|
||||
height: 473px;
|
||||
width: 723px;
|
||||
}
|
||||
|
||||
.disegnoLastra {
|
||||
height: 468px;
|
||||
width: 854px;
|
||||
}
|
||||
|
||||
.disegnoPiastra {
|
||||
height: 468px;
|
||||
width: 751px;
|
||||
}
|
||||
|
||||
.disegnoCornice {
|
||||
height: 468px;
|
||||
width: 744px;
|
||||
}
|
||||
|
||||
.disegnoControstampo {
|
||||
height: 468px;
|
||||
width: 692px;
|
||||
}
|
||||
|
||||
.border-cornice {
|
||||
|
||||
.circle1{
|
||||
position: relative;
|
||||
right: 730px;
|
||||
top: 300px;
|
||||
}
|
||||
|
||||
.circle2{
|
||||
position: relative;
|
||||
right: 180px;
|
||||
top: 230px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.border-piastra {
|
||||
|
||||
.circle1{
|
||||
position: relative;
|
||||
right: 800px;
|
||||
top: 310px;
|
||||
}
|
||||
|
||||
.circle2{
|
||||
position: relative;
|
||||
right: 180px;
|
||||
top: 220px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.border-lastra {
|
||||
|
||||
.circle1{
|
||||
position: relative;
|
||||
right: 820px;
|
||||
top: 100px;
|
||||
}
|
||||
|
||||
.circle2{
|
||||
position: relative;
|
||||
right: 800px;
|
||||
top: 240px;
|
||||
}
|
||||
|
||||
.circle3{
|
||||
position: relative;
|
||||
right: 200px;
|
||||
top: 180px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.border-stampo {
|
||||
|
||||
.circle1{
|
||||
position: relative;
|
||||
right: 780px;
|
||||
top: 80px;
|
||||
}
|
||||
|
||||
.circle2{
|
||||
position: relative;
|
||||
right: 870px;
|
||||
top: 130px;
|
||||
}
|
||||
|
||||
.circle3{
|
||||
position: relative;
|
||||
right: 720px;
|
||||
top: 240px;
|
||||
}
|
||||
|
||||
.circle4{
|
||||
position: relative;
|
||||
right: 150px;
|
||||
top: 190px;
|
||||
}
|
||||
|
||||
.circle5{
|
||||
position: relative;
|
||||
top: -50px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.border-controstampo {
|
||||
|
||||
.circle1{
|
||||
position: relative;
|
||||
right: 730px;
|
||||
top: 140px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.slides {
|
||||
margin-top: 45px;
|
||||
margin-left: 20px;
|
||||
width: 1241px;
|
||||
height: 160px;
|
||||
display: flex;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
|
||||
img {
|
||||
flex-shrink: 0;
|
||||
width: 215px;
|
||||
height: 140px;
|
||||
margin-right: 25px;
|
||||
border: 1px solid #bbbcbc;
|
||||
}
|
||||
|
||||
.imgborder {
|
||||
border: 1px solid @color-darkish-blue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "colors.less";
|
||||
|
||||
@gauge-h: 800px;
|
||||
@gauge-w: 800px;
|
||||
|
||||
@smallgauge-h: @gauge-h - 30px;
|
||||
@smallgauge-w: @gauge-w - 30px;
|
||||
|
||||
.box-graph-dashboard {
|
||||
height : 610px;
|
||||
display : flex;
|
||||
align-items : center;
|
||||
justify-content: flex-end;
|
||||
|
||||
.svg-dashboard {
|
||||
background-repeat: no-repeat;
|
||||
display : flex;
|
||||
flex-direction : column;
|
||||
justify-content : center;
|
||||
|
||||
&.dashboard3 {
|
||||
margin-left: -150px;
|
||||
margin-bottom : 250px;
|
||||
height : 100px;
|
||||
width : 900px;
|
||||
background-size : 900px;
|
||||
background-image: url(/assets/icons/svg/svg-dashboard3.svg);
|
||||
|
||||
label {
|
||||
margin : unset;
|
||||
font-size : 35px;
|
||||
font-weight : 500;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : normal;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.time-box {
|
||||
display : flex;
|
||||
flex-direction : column;
|
||||
justify-content: center;
|
||||
height : 100%;
|
||||
margin-top: 200px;
|
||||
margin-right: -150px;
|
||||
|
||||
.svg-dashboard {
|
||||
|
||||
label {
|
||||
margin-top : 8px;
|
||||
font-size : 26px;
|
||||
font-weight : 500;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : 1.96;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
time {
|
||||
font-size : 120px;
|
||||
font-weight : 300;
|
||||
font-stretch : normal;
|
||||
font-style : normal;
|
||||
line-height : normal;
|
||||
letter-spacing: normal;
|
||||
text-align : center;
|
||||
color : #4b4b4b;
|
||||
}
|
||||
|
||||
&.dashboard {
|
||||
background-image: url(/assets/icons/svg/svg-dashboard.svg);
|
||||
height : 178px;
|
||||
width : 545px;
|
||||
background-size : 545px;
|
||||
position : relative;
|
||||
}
|
||||
|
||||
&.dashboard2 {
|
||||
height : 178px;
|
||||
background-size : 545px;
|
||||
width : 545px;
|
||||
background-image: url(/assets/icons/svg/svg-dashboard2.svg);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.box-time-passed {
|
||||
height : 117px;
|
||||
margin : 40px 0px;
|
||||
text-align : center;
|
||||
display : flex;
|
||||
justify-content: center;
|
||||
flex-direction : column;
|
||||
|
||||
label {
|
||||
|
||||
&:first-of-type {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
font-size: 54px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.box-circle-piece {
|
||||
margin-top: 200px;
|
||||
display : flex;
|
||||
align-items: center;
|
||||
position : relative;
|
||||
height : @gauge-h;
|
||||
width : @gauge-w;
|
||||
|
||||
hr {
|
||||
margin : auto;
|
||||
height : 5px;
|
||||
width : calc(@gauge-w/2);
|
||||
background-color: gray;
|
||||
z-index : 1;
|
||||
border : none;
|
||||
}
|
||||
|
||||
.gauge-container-dashboard {
|
||||
width : @gauge-w;
|
||||
height : @gauge-h;
|
||||
border-radius: 5px;
|
||||
position : absolute;
|
||||
top : calc(~"50%" - (@gauge-h/2));
|
||||
left: calc(~"50%" - (@gauge-w/2));
|
||||
|
||||
&.gauge1 {
|
||||
width : @smallgauge-w;
|
||||
height: @smallgauge-h;
|
||||
top : calc(~"50%" - (@smallgauge-h/2));
|
||||
left : calc(~"50%" - (@smallgauge-w/2));
|
||||
|
||||
.gauge {
|
||||
.dial {
|
||||
fill : #99CFFF;
|
||||
stroke: #91A2B1;
|
||||
}
|
||||
|
||||
.value {
|
||||
stroke: #4DAAFF;
|
||||
}
|
||||
|
||||
.value-text {
|
||||
fill : black;
|
||||
alignment-baseline: before-edge;
|
||||
font-size : 20px;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
&.gauge2 {
|
||||
|
||||
.gauge {
|
||||
|
||||
.value-text {
|
||||
fill : black;
|
||||
alignment-baseline: after-edge;
|
||||
font-size : 20px;
|
||||
}
|
||||
|
||||
.dial {
|
||||
stroke: #003264;
|
||||
}
|
||||
|
||||
.value {
|
||||
stroke : #90C03D;
|
||||
stroke-width: 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,37 +1,54 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@row: row;
|
||||
@col: col;
|
||||
|
||||
.@{row} {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
flex-direction: row;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.@{col} {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.relative {
|
||||
position: relative;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.absolute {
|
||||
position: absolute;
|
||||
position: absolute;
|
||||
|
||||
&.bottom {
|
||||
bottom: 1rem;
|
||||
}
|
||||
|
||||
&.left {
|
||||
left: 1rem;
|
||||
}
|
||||
|
||||
&.right {
|
||||
right: 1rem;
|
||||
}
|
||||
|
||||
&.top {
|
||||
top: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.full-height {
|
||||
height: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.full-width {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.pull-right {
|
||||
float: right;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.pull-left {
|
||||
float: left;
|
||||
}
|
||||
float: left;
|
||||
}
|
||||
@@ -4,196 +4,195 @@
|
||||
@header-button-size: 44px;
|
||||
|
||||
#app>header {
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
align-items: center;
|
||||
height: @header-height;
|
||||
width: calc(~"100% - 152px");
|
||||
position: absolute;
|
||||
z-index: 801;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
|
||||
button {
|
||||
font-size: 28px;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: @header-height;
|
||||
width: calc(~"100% - 152px");
|
||||
position: absolute;
|
||||
z-index: 801;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
margin: 0 9px;
|
||||
background-color: @color-header-button-background-color;
|
||||
box-shadow: @color-header-button-box-shadow;
|
||||
border-radius: @header-button-size /2;
|
||||
border: none;
|
||||
height: @header-button-size;
|
||||
min-width: @header-button-size;
|
||||
cursor: pointer;
|
||||
color: @color-darkish-blue;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
button {
|
||||
font-size: 28px;
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
margin: 0 9px;
|
||||
background-color: @color-header-button-background-color;
|
||||
box-shadow: @color-header-button-box-shadow;
|
||||
border-radius: @header-button-size /2;
|
||||
border: none;
|
||||
height: @header-button-size;
|
||||
min-width: @header-button-size;
|
||||
cursor: pointer;
|
||||
color: @color-darkish-blue;
|
||||
z-index: 1;
|
||||
button.save-circle {
|
||||
background-image: url("../../assets/icons/png/circle@2x.png");
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
button.dot-circle {
|
||||
background-image: url("../../assets/icons/png/circledot@2x.png");
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
button:disabled {
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
button>img {
|
||||
margin: auto;
|
||||
height: @header-button-size/2;
|
||||
margin: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
button>img.h-20 {
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
button>img.h-24 {
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
button .machine-info small {
|
||||
display: block;
|
||||
text-align: left;
|
||||
margin-left: 5px;
|
||||
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
button.red {
|
||||
background-color: @color-scarlet;
|
||||
color: white;
|
||||
box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.4), inset 0 1px 3px 0 rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
button.blue {
|
||||
background-color: @color-clear-blue;
|
||||
color: white;
|
||||
}
|
||||
|
||||
button.dark-blue {
|
||||
background-color: @color-darkish-blue;
|
||||
color: white;
|
||||
}
|
||||
|
||||
button.dark-blue:active {
|
||||
background-color: @color-clear-blue;
|
||||
}
|
||||
|
||||
button.gray {
|
||||
background-color: @color-greyish-brown;
|
||||
color: white;
|
||||
}
|
||||
|
||||
button.profile {
|
||||
width: @header-button-size;
|
||||
background-image: url("../profile.png");
|
||||
color: #000;
|
||||
background-size: cover;
|
||||
|
||||
&.colorWhite {
|
||||
color: #FFF;
|
||||
}
|
||||
}
|
||||
|
||||
button.save-circle {
|
||||
background-image: url("../../assets/icons/png/circle@2x.png");
|
||||
background-size: cover;
|
||||
button.unclickable {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
&.turn-up .user-info time {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.user-info {
|
||||
display: flex;
|
||||
right: 12px;
|
||||
font-size: 25px;
|
||||
color: @color-input-light;
|
||||
justify-content: flex-end;
|
||||
|
||||
.window-buttons,
|
||||
time {
|
||||
transition: color 200ms ease-in-out;
|
||||
margin-left: 10px;
|
||||
padding: 0 18px;
|
||||
border-left: 2px solid #bbbcbc;
|
||||
border-right: 2px solid #bbbcbc;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
i {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
button.dot-circle {
|
||||
background-image: url("../../assets/icons/png/circledot@2x.png");
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
button:disabled {
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
button>img {
|
||||
margin: auto;
|
||||
height: @header-button-size/2;
|
||||
margin: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
button>img.h-20 {
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
button>img.h-24 {
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
button .machine-info small {
|
||||
display: block;
|
||||
text-align: left;
|
||||
margin-left: 5px;
|
||||
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
button.red {
|
||||
background-color: @color-scarlet;
|
||||
color: white;
|
||||
box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.4), inset 0 1px 3px 0 rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
button.blue {
|
||||
background-color: @color-clear-blue;
|
||||
color: white;
|
||||
}
|
||||
|
||||
button.dark-blue {
|
||||
background-color: @color-darkish-blue;
|
||||
color: white;
|
||||
}
|
||||
|
||||
button.dark-blue:active {
|
||||
background-color: @color-clear-blue;
|
||||
}
|
||||
|
||||
button.gray {
|
||||
background-color: @color-greyish-brown;
|
||||
color: white;
|
||||
}
|
||||
|
||||
button.profile {
|
||||
width: @header-button-size;
|
||||
background-image: url("../profile.png");
|
||||
color: #000;
|
||||
background-size: cover;
|
||||
|
||||
&.colorWhite {
|
||||
color: #FFF;
|
||||
}
|
||||
}
|
||||
|
||||
button.unclickable {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
&.turn-up .user-info time {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.user-info {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
right: 12px;
|
||||
font-size: 25px;
|
||||
color: @color-input-light;
|
||||
flex-grow: 1;
|
||||
justify-content: flex-end;
|
||||
|
||||
.window-buttons,
|
||||
time {
|
||||
transition: color 200ms ease-in-out;
|
||||
margin-left: 10px;
|
||||
padding: 0 18px;
|
||||
border-left: 2px solid #bbbcbc;
|
||||
border-right: 2px solid #bbbcbc;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
i {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.machine-info {
|
||||
min-width: 60px;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.machine-info {
|
||||
min-width: 60px;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.colorWhite {
|
||||
color: #fff !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.window-buttons {
|
||||
height: 80px;
|
||||
height: 80px;
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
align-items: center;
|
||||
-webkit-user-select: none;
|
||||
|
||||
button {
|
||||
font-size: 28px;
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
align-items: center;
|
||||
-webkit-user-select: none;
|
||||
margin: 0 9px;
|
||||
background-color: @color-header-button-background-color;
|
||||
box-shadow: @color-header-button-box-shadow;
|
||||
border-radius: @header-button-size /2;
|
||||
border: none;
|
||||
height: @header-button-size;
|
||||
min-width: @header-button-size;
|
||||
cursor: pointer;
|
||||
color: @color-darkish-blue;
|
||||
}
|
||||
|
||||
button {
|
||||
font-size: 28px;
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
margin: 0 9px;
|
||||
background-color: @color-header-button-background-color;
|
||||
box-shadow: @color-header-button-box-shadow;
|
||||
border-radius: @header-button-size /2;
|
||||
border: none;
|
||||
height: @header-button-size;
|
||||
min-width: @header-button-size;
|
||||
cursor: pointer;
|
||||
color: @color-darkish-blue;
|
||||
}
|
||||
button.gray {
|
||||
background-color: @color-greyish-brown;
|
||||
color: white;
|
||||
}
|
||||
|
||||
button.gray {
|
||||
background-color: @color-greyish-brown;
|
||||
color: white;
|
||||
}
|
||||
position: fixed;
|
||||
z-index: 1000;
|
||||
top: 0;
|
||||
right: 0;
|
||||
display: flex;
|
||||
padding-right: 8px !important;
|
||||
|
||||
position: fixed;
|
||||
z-index: 1000;
|
||||
top: 0;
|
||||
right: 0;
|
||||
display: flex;
|
||||
padding-right: 8px !important;
|
||||
i {
|
||||
margin: auto !important;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
i {
|
||||
margin: auto !important;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
}
|
||||
.close {
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
.close {
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
.close:hover {
|
||||
background-color: @button-success-color-to;
|
||||
}
|
||||
.close:hover {
|
||||
background-color: @button-success-color-to;
|
||||
}
|
||||
}
|
||||
@@ -3,25 +3,20 @@
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
|
||||
.@{modal}.imbutitura-info {
|
||||
width: 1820px;
|
||||
height: 980px;
|
||||
.modal.imbutitura-info {
|
||||
section {
|
||||
|
||||
section{
|
||||
.specific {
|
||||
padding-left: 5px;
|
||||
justify-content: flex-end;
|
||||
|
||||
.specific{
|
||||
padding-left: 5px;
|
||||
justify-content: flex-end;
|
||||
|
||||
.box {
|
||||
margin-bottom: 5px;
|
||||
background-color: #e5f3ff;
|
||||
}
|
||||
|
||||
.box {
|
||||
margin-bottom: 5px;
|
||||
background-color: #e5f3ff;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@font-family: 'Work Sans',
|
||||
sans-serif;
|
||||
sans-serif;
|
||||
@font-size: 18px;
|
||||
@font-size-small: 14px;
|
||||
@input-height: 48px;
|
||||
@@ -10,97 +10,266 @@
|
||||
|
||||
|
||||
.form-group {
|
||||
display: block;
|
||||
margin-bottom: 33px;
|
||||
|
||||
label {
|
||||
display: block;
|
||||
margin-bottom: 33px;
|
||||
color: @color-label-grey;
|
||||
font-size: @font-size;
|
||||
line-height: 1;
|
||||
font-family: @font-family;
|
||||
text-align: left;
|
||||
margin-bottom: 13px;
|
||||
}
|
||||
|
||||
label {
|
||||
display: block;
|
||||
color: @color-label-grey;
|
||||
font-size: @font-size;
|
||||
line-height: 1;
|
||||
font-family: @font-family;
|
||||
text-align: left;
|
||||
margin-bottom: 13px;
|
||||
}
|
||||
input,
|
||||
select {
|
||||
display: block;
|
||||
border-radius: 2px;
|
||||
border: solid 1px #dfdfdf;
|
||||
height: @input-height;
|
||||
line-height: 1.1;
|
||||
font-family: @font-family;
|
||||
color: @color-input-light;
|
||||
font-size: @font-size;
|
||||
background-color: @color-input-background;
|
||||
margin: 0 0px;
|
||||
padding-right: 0;
|
||||
padding-left: 20px;
|
||||
width: calc(~'100% - 20px');
|
||||
}
|
||||
|
||||
input,
|
||||
select {
|
||||
display: block;
|
||||
border-radius: 2px;
|
||||
border: solid 1px #dfdfdf;
|
||||
height: @input-height;
|
||||
line-height: 1.1;
|
||||
font-family: @font-family;
|
||||
color: @color-input-light;
|
||||
font-size: @font-size;
|
||||
background-color: @color-input-background;
|
||||
margin: 0 0px;
|
||||
padding-right: 0;
|
||||
padding-left: 20px;
|
||||
width: calc(~'100% - 20px');
|
||||
}
|
||||
textarea {
|
||||
box-sizing: border-box;
|
||||
resize: none;
|
||||
display: block;
|
||||
border-radius: 2px;
|
||||
border: solid 1px #dfdfdf;
|
||||
height: 120px;
|
||||
font-family: @font-family;
|
||||
color: @color-input-light;
|
||||
font-size: 16px;
|
||||
background-color: @color-input-background;
|
||||
margin: 0 0px;
|
||||
padding-right: 0;
|
||||
width: 100%;
|
||||
padding: 10px 5px;
|
||||
}
|
||||
|
||||
textarea {
|
||||
box-sizing: border-box;
|
||||
resize: none;
|
||||
display: block;
|
||||
border-radius: 2px;
|
||||
border: solid 1px #dfdfdf;
|
||||
height: 120px;
|
||||
font-family: @font-family;
|
||||
color: @color-input-light;
|
||||
font-size: 16px;
|
||||
background-color: @color-input-background;
|
||||
margin: 0 0px;
|
||||
padding-right: 0;
|
||||
width: 100%;
|
||||
padding: 10px 5px;
|
||||
}
|
||||
select {
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
select {
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
input.invalid:not([readonly]),
|
||||
input[aria-invalid="true"]:not([readonly]) {
|
||||
box-shadow: inset 0px 0px 0px 1px @color-scarlet !important;
|
||||
}
|
||||
|
||||
input.invalid:not([readonly]),
|
||||
input[aria-invalid="true"]:not([readonly]) {
|
||||
box-shadow: inset 0px 0px 0px 1px @color-scarlet !important;
|
||||
}
|
||||
|
||||
small.error {
|
||||
text-align: left;
|
||||
display: block;
|
||||
color: @color-scarlet;
|
||||
font-size: @font-size-small;
|
||||
font-family: @font-family;
|
||||
line-height: 1;
|
||||
padding-left: 16px;
|
||||
margin: 2px 0;
|
||||
}
|
||||
small.error {
|
||||
text-align: left;
|
||||
display: block;
|
||||
color: @color-scarlet;
|
||||
font-size: @font-size-small;
|
||||
font-family: @font-family;
|
||||
line-height: 1;
|
||||
padding-left: 16px;
|
||||
margin: 2px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.block {
|
||||
display: block;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.block-center {
|
||||
margin: auto !important;
|
||||
margin: auto !important;
|
||||
}
|
||||
|
||||
input.invalid:not([readonly]),
|
||||
input[aria-invalid="true"]:not([readonly]) {
|
||||
box-shadow: inset 0px 0px 0px 1px @color-scarlet !important;
|
||||
box-shadow: inset 0px 0px 0px 1px @color-scarlet !important;
|
||||
}
|
||||
|
||||
|
||||
input:focus {
|
||||
outline: 5px #1791ff auto;
|
||||
outline: 5px #1791ff auto;
|
||||
}
|
||||
|
||||
select:focus {
|
||||
outline: 5px #1791ff auto;
|
||||
outline: 5px #1791ff auto;
|
||||
}
|
||||
|
||||
|
||||
.radio-buttons {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
|
||||
input {
|
||||
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
object-fit: contain;
|
||||
border-radius: 12px;
|
||||
background-color: #f1f1f1;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
label {
|
||||
|
||||
font-size: 18px;
|
||||
|
||||
line-height: 1.11;
|
||||
color: #4b4b4b;
|
||||
|
||||
&:first-of-type {
|
||||
font-size: 24px;
|
||||
font-weight: 500;
|
||||
color: @color-darkish-blue;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
.input-area {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-flow: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
&.grid {
|
||||
display: grid;
|
||||
grid-template-rows: 1fr;
|
||||
grid-template-columns: repeat(2, auto);
|
||||
grid-column-gap: 1rem;
|
||||
|
||||
>button {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&.grid-4 {
|
||||
grid-template-columns: repeat(4, auto);
|
||||
}
|
||||
|
||||
&.grid-5 {
|
||||
grid-template-columns: repeat(5, auto);
|
||||
}
|
||||
|
||||
&.grid-6 {
|
||||
grid-template-columns: repeat(6, auto);
|
||||
}
|
||||
|
||||
&.grid-7 {
|
||||
grid-template-columns: repeat(7, auto);
|
||||
}
|
||||
|
||||
&.grid-8 {
|
||||
grid-template-columns: repeat(8, auto);
|
||||
}
|
||||
|
||||
&.grid-9 {
|
||||
grid-template-columns: repeat(9, auto);
|
||||
}
|
||||
|
||||
&.grid-10 {
|
||||
grid-template-columns: repeat(10, auto);
|
||||
}
|
||||
}
|
||||
|
||||
&.left {
|
||||
justify-content: flex-start;
|
||||
width: auto;
|
||||
justify-self: left;
|
||||
}
|
||||
|
||||
span.toggle {
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
|
||||
&.col {
|
||||
flex-flow: column;
|
||||
align-items: flex-start;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
h3 {
|
||||
color: #002680;
|
||||
margin: 18px 0;
|
||||
}
|
||||
|
||||
.buttons {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-flow: row;
|
||||
margin-bottom: 18px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
color: #002680;
|
||||
font-size: 24px;
|
||||
font-weight: 500;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.numeric {
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
color: #6d6d6d;
|
||||
|
||||
width: 100px;
|
||||
height: 48px;
|
||||
border-radius: 2px;
|
||||
box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.5);
|
||||
border: none;
|
||||
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
padding: 0 4px;
|
||||
align-items: center;
|
||||
justify-content: stretch;
|
||||
|
||||
input {
|
||||
border: none;
|
||||
font-size: 16px;
|
||||
text-align: right;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
outline: none !important;
|
||||
background-color: transparent;
|
||||
|
||||
&[type=number]::-webkit-inner-spin-button,
|
||||
&[type=number]::-webkit-outer-spin-button {
|
||||
-webkit-appearance: none;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
span {
|
||||
padding: 0 3px;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
min-width: 150px;
|
||||
height: 48px;
|
||||
background-color: #fff;
|
||||
padding: 0 20px;
|
||||
font-size: 1rem;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -2,26 +2,20 @@
|
||||
@import "setup.less";
|
||||
@import "colors.less";
|
||||
@import "modals.less";
|
||||
@import "pirometro.less";
|
||||
@import "graph-dashboard.less";
|
||||
@import "dashboard.less";
|
||||
@import "riscaldi.less";
|
||||
@import "formato.less";
|
||||
@import "slider.less";
|
||||
@import "tastierino.less";
|
||||
@import "preriscaldo-dashboard.less";
|
||||
@import "circlegantt.less";
|
||||
@import "paddle.less";
|
||||
@import "arretramento-riscaldi.less";
|
||||
@import "arch-interface.less";
|
||||
@import "avvio-prod.less";
|
||||
@import "ciclo.less";
|
||||
@import "raffreddamento.less";
|
||||
@import "processo.less";
|
||||
@import "progrprerisc.less";
|
||||
@import "controstamposetup.less";
|
||||
@import "quote-velocita.less";
|
||||
@import "opzioni.less";
|
||||
@import "imbutitura.less";
|
||||
@import "estrazione.less";
|
||||
@import "scheda.less";
|
||||
@import "vuoto.less";
|
||||
@import "popups.less";
|
||||
@import "grid-system.less";
|
||||
@import "input.less";
|
||||
@@ -58,7 +52,6 @@
|
||||
@import "users.less";
|
||||
@import "tooltip.less";
|
||||
|
||||
|
||||
@background-color: rgb(216, 216, 216);
|
||||
@handle-width: 48px;
|
||||
@handle-height: 32px;
|
||||
@@ -131,6 +124,12 @@ body {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#main-view>.container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#app {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
@@ -266,4 +265,20 @@ body {
|
||||
|
||||
.smooth-dnd-no-user-select * {
|
||||
cursor: move !important;
|
||||
}
|
||||
|
||||
.mb-10 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.mt-10 {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.mr-10 {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.ml-10 {
|
||||
margin-left: 10px;
|
||||
}
|
||||
@@ -1038,7 +1038,7 @@
|
||||
overflow: hidden;
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
background-color: @color-backdrop;
|
||||
z-index: 900;
|
||||
z-index: 1001;
|
||||
|
||||
&.nc {
|
||||
z-index: 700;
|
||||
|
||||
@@ -2,93 +2,90 @@
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
.@{modal}.opzioni-info {
|
||||
width: 1820px;
|
||||
height: 980px;
|
||||
.modal.opzioni-info {
|
||||
|
||||
hr {
|
||||
width: 2px;
|
||||
height: 830px;
|
||||
background-color: #979797;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
section.body{
|
||||
hr {
|
||||
width: 2px;
|
||||
height: 830px;
|
||||
background-color: #979797;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
section{
|
||||
padding: 0px;
|
||||
section.body {
|
||||
|
||||
.specific{
|
||||
section {
|
||||
padding: 0px;
|
||||
|
||||
&:last-of-type{
|
||||
margin-left: 100px;
|
||||
width: 471px;
|
||||
}
|
||||
|
||||
&:first-of-type{
|
||||
|
||||
.box-color{
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
button{
|
||||
background-color: #dddddd;
|
||||
display: block;
|
||||
color: #000000;
|
||||
padding: 22px 16px;
|
||||
width: 550px;
|
||||
height: 64px;
|
||||
border: none;
|
||||
text-align: left;
|
||||
cursor: pointer;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.active{
|
||||
background-color: rgba(23, 145, 255, 0.75);
|
||||
color:#ffffff;
|
||||
}
|
||||
|
||||
label{
|
||||
font-size: 14px;
|
||||
width: 60px;
|
||||
margin-left: 5px;
|
||||
margin-right: 30px;
|
||||
}
|
||||
|
||||
}
|
||||
.specific {
|
||||
|
||||
&:last-of-type {
|
||||
margin-left: 100px;
|
||||
width: 471px;
|
||||
}
|
||||
|
||||
aside{
|
||||
&:first-of-type {
|
||||
|
||||
button{
|
||||
.box-color {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
button {
|
||||
background-color: #dddddd;
|
||||
display: block;
|
||||
background-color: #bbbcbc;
|
||||
color: #002680;
|
||||
color: #000000;
|
||||
padding: 22px 16px;
|
||||
margin: 2px 0;
|
||||
width: 547px;
|
||||
height: 70px;
|
||||
width: 550px;
|
||||
height: 64px;
|
||||
border: none;
|
||||
text-align: left;
|
||||
cursor: pointer;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.active{
|
||||
background-color: #fff;
|
||||
font-weight: bold;
|
||||
border-top: 2px solid #002680;
|
||||
.active {
|
||||
background-color: rgba(23, 145, 255, 0.75);
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
label {
|
||||
font-size: 14px;
|
||||
width: 60px;
|
||||
margin-left: 5px;
|
||||
margin-right: 30px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
aside {
|
||||
|
||||
button {
|
||||
display: block;
|
||||
background-color: #bbbcbc;
|
||||
color: #002680;
|
||||
padding: 22px 16px;
|
||||
margin: 2px 0;
|
||||
width: 547px;
|
||||
height: 70px;
|
||||
border: none;
|
||||
text-align: left;
|
||||
cursor: pointer;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.active {
|
||||
background-color: #fff;
|
||||
font-weight: bold;
|
||||
border-top: 2px solid #002680;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,185 +4,185 @@
|
||||
@import "fonts.less";
|
||||
|
||||
html {
|
||||
height: 100%;
|
||||
overflow:hidden;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
body {
|
||||
border: 0; margin: 0; padding: 0;
|
||||
height: 100%;
|
||||
|
||||
body {
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.main-nav {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 0;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.container {
|
||||
|
||||
#app {
|
||||
|
||||
nav {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 0;
|
||||
|
||||
|
||||
.active button {
|
||||
transform: translate(-761px, 0px);
|
||||
}
|
||||
|
||||
div {
|
||||
|
||||
button {
|
||||
position: relative;
|
||||
height: 30px;
|
||||
width: 32px;
|
||||
display: block;
|
||||
z-index: 1000;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
pointer-events: all;
|
||||
background: #dddddd;
|
||||
border-bottom-left-radius: 90px;
|
||||
border-top-left-radius: 90px;
|
||||
height: 90px;
|
||||
width: 45px;
|
||||
box-shadow: -3px 0 3px rgba(0, 0, 0, .2);
|
||||
|
||||
div {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-rows: 1fr 1fr;
|
||||
align-items: center;
|
||||
justify-items: center;
|
||||
padding: 5px;
|
||||
|
||||
|
||||
div {
|
||||
width: 2px;
|
||||
height: 2px;
|
||||
border-radius: 10px;
|
||||
margin: 2px;
|
||||
background: #002680;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
.sidebar {
|
||||
|
||||
.sidebar-backdrop {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.sidebar-panel {
|
||||
|
||||
overflow-y: auto;
|
||||
background-color: #130f40;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
top: 141px;
|
||||
height: 100vh;
|
||||
z-index: 900;
|
||||
padding: 3rem 20px 2rem 20px;
|
||||
width: 721px;
|
||||
height: 920px;
|
||||
border-radius: 4px;
|
||||
box-shadow: 2px 10px 15px 0 rgba(0, 0, 0, 0.5);
|
||||
background-color: #dddddd;
|
||||
|
||||
.text-head-sidebar {
|
||||
margin: 10px auto;
|
||||
font-size: 24px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: #002680;
|
||||
}
|
||||
|
||||
.box-sidebar-panel {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
align-items: center;
|
||||
justify-items: center;
|
||||
|
||||
.sidebar-panel-nav {
|
||||
width: 286px;
|
||||
height: 100px;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);
|
||||
background-color: #808e96;
|
||||
margin: 10px 30px;
|
||||
|
||||
.text-box-paddle {
|
||||
display: flex;
|
||||
width: 268px;
|
||||
height: 78px;
|
||||
font-family: WorkSans;
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
color: #ffffff;
|
||||
margin: 10px;
|
||||
|
||||
i {
|
||||
text-align: end;
|
||||
width: 50px;
|
||||
color: #bbbcbc;
|
||||
}
|
||||
|
||||
label {
|
||||
width: 117px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.text-box-paddle.text-soft {
|
||||
label {
|
||||
width: 100%;
|
||||
align-self: center;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.hidden {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.container{
|
||||
|
||||
#app{
|
||||
|
||||
nav {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 0;
|
||||
|
||||
.active button{
|
||||
transform: translate(-761px, 0px);
|
||||
}
|
||||
|
||||
div{
|
||||
|
||||
button {
|
||||
position: relative;
|
||||
height: 30px;
|
||||
width: 32px;
|
||||
display: block;
|
||||
z-index: 9999;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
pointer-events: all;
|
||||
background: #dddddd;
|
||||
border-bottom-left-radius: 90px;
|
||||
border-top-left-radius: 90px;
|
||||
height: 90px;
|
||||
width: 45px;
|
||||
|
||||
div{
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-rows: 1fr 1fr;
|
||||
align-items: center;
|
||||
justify-items: center;
|
||||
padding: 5px;
|
||||
|
||||
|
||||
div {
|
||||
width: 2px;
|
||||
height: 2px;
|
||||
border-radius: 10px;
|
||||
margin: 2px;
|
||||
background: #002680;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// .slide-enter-active,
|
||||
// .slide-leave-active
|
||||
// {
|
||||
// transition: left,right 0s ease-in-out;
|
||||
// }
|
||||
|
||||
// .slide-enter,
|
||||
// .slide-leave-to {
|
||||
// transition: right,left 0s ease-in-out
|
||||
// }
|
||||
|
||||
.sidebar{
|
||||
|
||||
.sidebar-backdrop{
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.sidebar-panel{
|
||||
|
||||
overflow-y: auto;
|
||||
background-color: #130f40;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
top: 141px;
|
||||
height: 100vh;
|
||||
z-index: 900;
|
||||
padding: 3rem 20px 2rem 20px;
|
||||
width: 721px;
|
||||
height: 920px;
|
||||
border-radius: 4px;
|
||||
box-shadow: 2px 10px 15px 0 rgba(0, 0, 0, 0.5);
|
||||
background-color: #dddddd;
|
||||
|
||||
.text-head-sidebar{
|
||||
margin: 10px auto;
|
||||
font-size: 24px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: #002680;
|
||||
}
|
||||
|
||||
.box-sidebar-panel{
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
align-items: center;
|
||||
justify-items: center;
|
||||
|
||||
.sidebar-panel-nav{
|
||||
width: 286px;
|
||||
height: 100px;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);
|
||||
background-color: #808e96;
|
||||
margin: 10px 30px;
|
||||
|
||||
.text-box-paddle{
|
||||
display: flex;
|
||||
width: 268px;
|
||||
height: 78px;
|
||||
font-family: WorkSans;
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
color: #ffffff;
|
||||
margin: 10px;
|
||||
|
||||
i{
|
||||
text-align: end;
|
||||
width: 50px;
|
||||
color: #bbbcbc;
|
||||
}
|
||||
|
||||
label{
|
||||
width: 117px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.text-box-paddle.text-soft{
|
||||
label{
|
||||
width: 100%;
|
||||
align-self: center;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,97 +0,0 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@import "setup.less";
|
||||
@modal: modal;
|
||||
@pirometro-margin: margin-left;
|
||||
|
||||
.@{modal}.pirometro-info {
|
||||
width: 1820px;
|
||||
height: 980px;
|
||||
|
||||
section.body{
|
||||
|
||||
section{
|
||||
|
||||
.specific{
|
||||
width: 470px;
|
||||
@{pirometro-margin}:37%;
|
||||
}
|
||||
|
||||
.termospecific{
|
||||
@{pirometro-margin}:0%;
|
||||
|
||||
.svg-area{
|
||||
padding-left: 90px;
|
||||
width: 1270px;
|
||||
height: 800px;
|
||||
|
||||
.disegnoTermoSuperiore{
|
||||
flex-shrink: 0;
|
||||
width: 1100px;
|
||||
height: 750px;
|
||||
}
|
||||
|
||||
.border-termo-superiore{
|
||||
|
||||
.circle1{
|
||||
position: relative;
|
||||
top: 135px;
|
||||
right: 1150px;
|
||||
}
|
||||
|
||||
.circle2{
|
||||
position: relative;
|
||||
top: 355px;
|
||||
right: 1150px;
|
||||
}
|
||||
|
||||
.circle3{
|
||||
position: relative;
|
||||
top: 425px;
|
||||
right: 1150px;
|
||||
}
|
||||
|
||||
.circle4{
|
||||
position: relative;
|
||||
top: 470px;
|
||||
right: 635px;
|
||||
}
|
||||
|
||||
.circle5{
|
||||
position: relative;
|
||||
top: 400px;
|
||||
right: 255px;
|
||||
}
|
||||
|
||||
.circle6{
|
||||
width: 100px;
|
||||
background-color: #c03d58;
|
||||
position: relative;
|
||||
top: 87px;
|
||||
right: 150px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
button{
|
||||
margin-left: 5px;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
object-fit: contain;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.5);
|
||||
border: solid 1px #001e48;
|
||||
background-image: linear-gradient(to bottom, #1756ad, #002680);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,166 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
|
||||
.preriscaldodashboard{
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
background-image: url("../../assets/icons/png/bg.png");
|
||||
position: fixed;
|
||||
z-index: 1001;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
|
||||
.header{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
|
||||
|
||||
.ribbon-container{
|
||||
height: 80px;
|
||||
z-index: 900;
|
||||
}
|
||||
|
||||
.box-date{
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
|
||||
div{
|
||||
flex-shrink: 0;
|
||||
font-size: 47px;
|
||||
text-align: right;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
time {
|
||||
flex-shrink: 0;
|
||||
transition: color 200ms ease-in-out;
|
||||
margin-left: 28px;
|
||||
display: flex;
|
||||
font-size: 120px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.header-buttons{
|
||||
display: inline-block;
|
||||
|
||||
.box-close-dashboard{
|
||||
height: 70px;
|
||||
text-align: right;
|
||||
|
||||
button.modal-close{
|
||||
background-color: #4B4B4B;
|
||||
margin: 23px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.user-info {
|
||||
margin-top: 10px;
|
||||
display: flex;
|
||||
font-size: 25px;
|
||||
color: @color-input-light;
|
||||
flex-grow: 1;
|
||||
justify-content: flex-end;
|
||||
margin-right: 21px;
|
||||
|
||||
button.profile {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
background-image: url("../profile.png");
|
||||
color: #000;
|
||||
background-size: cover;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
|
||||
&.colorWhite {
|
||||
color: #FFF;
|
||||
}
|
||||
}
|
||||
|
||||
div{
|
||||
align-self: center;
|
||||
margin-right: 10px;
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
section{
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-evenly;
|
||||
|
||||
label{
|
||||
|
||||
&:first-of-type{
|
||||
font-size: 67px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: 0.76;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: #4b4b4b;
|
||||
}
|
||||
|
||||
&:last-of-type{
|
||||
font-size: 26px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: 1.96;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: #4b4b4b;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
div{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
|
||||
div{
|
||||
margin: 0px 70px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
label{
|
||||
|
||||
&:first-of-type{
|
||||
font-size: 250px;
|
||||
font-weight: 200;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: #4b4b4b;
|
||||
}
|
||||
|
||||
&:last-of-type{
|
||||
font-size: 50px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: #4b4b4b;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,59 +2,56 @@
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
.@{modal}.processo-info {
|
||||
width: 1820px;
|
||||
height: 980px;
|
||||
margin-top: 50px;
|
||||
|
||||
header{
|
||||
font-size: 22px;
|
||||
.modal.processo-info {
|
||||
|
||||
header {
|
||||
font-size: 22px;
|
||||
color: #4b4b4b;
|
||||
|
||||
.tab-header {
|
||||
padding: 10px 0px;
|
||||
|
||||
button {
|
||||
padding: 0;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
margin-right: 10px;
|
||||
width: 149px;
|
||||
height: 48px;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.5);
|
||||
background-image: linear-gradient(to bottom, #f1f1f1 0%, #bbbcbc 98%);
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: 1.15;
|
||||
letter-spacing: normal;
|
||||
color: #4b4b4b;
|
||||
|
||||
.tab-header{
|
||||
padding: 10px 0px;
|
||||
|
||||
button{
|
||||
padding: 0;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
margin-right: 10px;
|
||||
width: 149px;
|
||||
height: 48px;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.5);
|
||||
background-image: linear-gradient(to bottom, #f1f1f1 0%, #bbbcbc 98%);
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: 1.15;
|
||||
letter-spacing: normal;
|
||||
color: #4b4b4b;
|
||||
|
||||
img{
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
label{
|
||||
width: 106px;
|
||||
height: 32px;
|
||||
font-size: 32px;
|
||||
font-weight: 600;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: 1;
|
||||
letter-spacing: normal;
|
||||
text-align: right;
|
||||
color: #545454;
|
||||
}
|
||||
|
||||
img {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
label {
|
||||
width: 106px;
|
||||
height: 32px;
|
||||
font-size: 32px;
|
||||
font-weight: 600;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: 1;
|
||||
letter-spacing: normal;
|
||||
text-align: right;
|
||||
color: #545454;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,267 +2,264 @@
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
@heightmeridian:300px;
|
||||
|
||||
.@{modal}.progr-preriscaldo-info {
|
||||
width: 1639px;
|
||||
height: 565px;
|
||||
margin-top: 220px;
|
||||
@heightmeridian: 300px;
|
||||
|
||||
header {
|
||||
padding-left: 31px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
color: darkblue;
|
||||
}
|
||||
.modal.progr-preriscaldo-info {
|
||||
|
||||
section.body{
|
||||
overflow: hidden;
|
||||
header {
|
||||
padding-left: 31px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
color: darkblue;
|
||||
}
|
||||
|
||||
section{
|
||||
padding: 0px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
section.body {
|
||||
overflow: hidden;
|
||||
|
||||
hr{
|
||||
border: none;
|
||||
section {
|
||||
padding: 0px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
hr {
|
||||
border: none;
|
||||
}
|
||||
|
||||
aside {
|
||||
margin: 14px;
|
||||
|
||||
button {
|
||||
width: 197px;
|
||||
height: 48px;
|
||||
object-fit: contain;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.5);
|
||||
border: solid 1px #001e48;
|
||||
background-image: linear-gradient(to bottom, #1756ad, #002680);
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: white;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.specific {
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #bbbcbc;
|
||||
|
||||
div {
|
||||
display: flex;
|
||||
margin-bottom: 50px;
|
||||
|
||||
.clock {
|
||||
border-radius: 50%;
|
||||
background-color: white;
|
||||
height: @heightmeridian;
|
||||
width: @heightmeridian;
|
||||
|
||||
span {
|
||||
flex-shrink: 0;
|
||||
border-radius: 50%;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background-color: @color-darkish-blue;
|
||||
position: relative;
|
||||
top: 140px;
|
||||
right: 460px;
|
||||
}
|
||||
|
||||
aside{
|
||||
margin: 14px;
|
||||
button {
|
||||
flex-shrink: 0;
|
||||
border-radius: 50%;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
background-color: white;
|
||||
color: black;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
button{
|
||||
width: 197px;
|
||||
height: 48px;
|
||||
object-fit: contain;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.5);
|
||||
border: solid 1px #001e48;
|
||||
background-image: linear-gradient(to bottom, #1756ad, #002680);
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: white;
|
||||
margin: auto;
|
||||
.selected {
|
||||
background-color: @color-darkish-blue;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn1 {
|
||||
position: relative;
|
||||
top: 22px;
|
||||
right: -188px;
|
||||
}
|
||||
|
||||
.btn2 {
|
||||
position: relative;
|
||||
top: 68px;
|
||||
right: -179px;
|
||||
}
|
||||
|
||||
.btn3 {
|
||||
position: relative;
|
||||
top: 125px;
|
||||
right: -149px;
|
||||
}
|
||||
|
||||
.btn4 {
|
||||
position: relative;
|
||||
top: 182px;
|
||||
right: -79px;
|
||||
}
|
||||
|
||||
.btn5 {
|
||||
position: relative;
|
||||
top: 227px;
|
||||
right: 12px;
|
||||
}
|
||||
|
||||
.btn6 {
|
||||
position: relative;
|
||||
top: 248.5px;
|
||||
right: 125px;
|
||||
}
|
||||
|
||||
.btn7 {
|
||||
position: relative;
|
||||
top: 227px;
|
||||
right: 238px;
|
||||
}
|
||||
|
||||
.btn8 {
|
||||
position: relative;
|
||||
top: 182px;
|
||||
right: 329px;
|
||||
}
|
||||
|
||||
.btn9 {
|
||||
position: relative;
|
||||
top: 125px;
|
||||
right: 399px;
|
||||
}
|
||||
|
||||
.btn10 {
|
||||
position: relative;
|
||||
top: 68px;
|
||||
right: 429px;
|
||||
}
|
||||
|
||||
.btn11 {
|
||||
position: relative;
|
||||
top: 22px;
|
||||
right: 438px;
|
||||
}
|
||||
|
||||
.btn12 {
|
||||
position: relative;
|
||||
top: 0.5px;
|
||||
right: 425px;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
div {
|
||||
|
||||
&:first-of-type {
|
||||
flex-direction: column;
|
||||
margin-right: 20px;
|
||||
width: 180px;
|
||||
height: @heightmeridian;
|
||||
background-image: linear-gradient(to bottom, #1756ad, @color-darkish-blue);
|
||||
|
||||
label {
|
||||
color: #ADD8E6;
|
||||
margin: auto;
|
||||
|
||||
&:first-of-type {
|
||||
font-size: 67px;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
font-size: 20px;
|
||||
margin-top: -50px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.specific{
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
&:last-child {
|
||||
margin-left: -50px;
|
||||
height: @heightmeridian;
|
||||
flex-direction: column;
|
||||
|
||||
button {
|
||||
width: 50px;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
background-color: #bbbcbc;
|
||||
color: @color-darkish-blue;
|
||||
font-size: 20px;
|
||||
|
||||
div{
|
||||
display: flex;
|
||||
margin-bottom: 50px;
|
||||
|
||||
.clock{
|
||||
border-radius: 50%;
|
||||
background-color: white;
|
||||
height: @heightmeridian;
|
||||
width: @heightmeridian;
|
||||
|
||||
span{
|
||||
flex-shrink: 0;
|
||||
border-radius: 50%;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background-color: @color-darkish-blue;
|
||||
position: relative;
|
||||
top: 140px;
|
||||
right: 460px;
|
||||
}
|
||||
|
||||
button{
|
||||
flex-shrink: 0;
|
||||
border-radius: 50%;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
background-color: white;
|
||||
color: black;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.selected{
|
||||
background-color: @color-darkish-blue;
|
||||
color:white;
|
||||
}
|
||||
|
||||
.btn1{
|
||||
position: relative;
|
||||
top: 22px;
|
||||
right: -188px;
|
||||
}
|
||||
|
||||
.btn2{
|
||||
position: relative;
|
||||
top: 68px;
|
||||
right: -179px;
|
||||
}
|
||||
|
||||
.btn3{
|
||||
position: relative;
|
||||
top: 125px;
|
||||
right: -149px;
|
||||
}
|
||||
|
||||
.btn4{
|
||||
position: relative;
|
||||
top: 182px;
|
||||
right: -79px;
|
||||
}
|
||||
|
||||
.btn5{
|
||||
position: relative;
|
||||
top: 227px;
|
||||
right: 12px;
|
||||
}
|
||||
|
||||
.btn6{
|
||||
position: relative;
|
||||
top: 248.5px;
|
||||
right: 125px;
|
||||
}
|
||||
|
||||
.btn7{
|
||||
position: relative;
|
||||
top: 227px;
|
||||
right: 238px;
|
||||
}
|
||||
|
||||
.btn8{
|
||||
position: relative;
|
||||
top: 182px;
|
||||
right: 329px;
|
||||
}
|
||||
|
||||
.btn9{
|
||||
position: relative;
|
||||
top: 125px;
|
||||
right: 399px;
|
||||
}
|
||||
|
||||
.btn10{
|
||||
position: relative;
|
||||
top: 68px;
|
||||
right: 429px;
|
||||
}
|
||||
|
||||
.btn11{
|
||||
position: relative;
|
||||
top: 22px;
|
||||
right: 438px;
|
||||
}
|
||||
|
||||
.btn12{
|
||||
position: relative;
|
||||
top: 0.5px;
|
||||
right: 425px;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
div{
|
||||
|
||||
&:first-of-type{
|
||||
flex-direction: column;
|
||||
margin-right: 20px;
|
||||
width: 180px;
|
||||
height: @heightmeridian;
|
||||
background-image: linear-gradient(to bottom, #1756ad, @color-darkish-blue);
|
||||
|
||||
label{
|
||||
color: #ADD8E6;
|
||||
margin: auto;
|
||||
|
||||
&:first-of-type{
|
||||
font-size: 67px;
|
||||
}
|
||||
|
||||
&:last-of-type{
|
||||
font-size: 20px;
|
||||
margin-top: -50px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
&:last-child{
|
||||
margin-left: -50px;
|
||||
height: @heightmeridian;
|
||||
flex-direction: column;
|
||||
|
||||
button{
|
||||
width: 50px;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
background-color: #bbbcbc;
|
||||
color: @color-darkish-blue;
|
||||
font-size: 20px;
|
||||
|
||||
&:first-of-type{
|
||||
margin-bottom: @heightmeridian - 50px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
button{
|
||||
border: none;
|
||||
width: 130px;
|
||||
height: 45px;
|
||||
border-radius: 22.5px;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.4);
|
||||
background-image: linear-gradient(to bottom, #818a8f 0%, #42494e 98%);
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.active{
|
||||
box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.43);
|
||||
background-image: linear-gradient(to bottom, #42494e 0%, #818a8f 98%);
|
||||
}
|
||||
|
||||
&:first-of-type {
|
||||
margin-bottom: @heightmeridian - 50px;
|
||||
}
|
||||
|
||||
label{
|
||||
margin-bottom: 20px;
|
||||
font-size: 24px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
color: @color-darkish-blue;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
button {
|
||||
border: none;
|
||||
width: 130px;
|
||||
height: 45px;
|
||||
border-radius: 22.5px;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.4);
|
||||
background-image: linear-gradient(to bottom, #818a8f 0%, #42494e 98%);
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.active {
|
||||
box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.43);
|
||||
background-image: linear-gradient(to bottom, #42494e 0%, #818a8f 98%);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
label {
|
||||
margin-bottom: 20px;
|
||||
font-size: 24px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
color: @color-darkish-blue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,247 +0,0 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
|
||||
.@{modal}.quote-velocita-info {
|
||||
width: 1820px;
|
||||
height: 980px;
|
||||
|
||||
section{
|
||||
|
||||
aside{
|
||||
|
||||
.box{
|
||||
|
||||
.body{
|
||||
padding:4.5px;
|
||||
|
||||
.input-area{
|
||||
margin: 5px auto;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.specific{
|
||||
|
||||
.svg-area{
|
||||
width: 750px;
|
||||
height: 750px;
|
||||
|
||||
.disegnoQuoteVelocita{
|
||||
flex-shrink: 0;
|
||||
margin-left: 500px;
|
||||
width: 800px;
|
||||
height: 800px;
|
||||
}
|
||||
|
||||
.disegnoStampo{
|
||||
flex-shrink: 0;
|
||||
margin-left: 680px;
|
||||
width: 1200px;
|
||||
height: 795px;
|
||||
}
|
||||
|
||||
.disegnoControstampoQuoteVelocita{
|
||||
flex-shrink: 0;
|
||||
margin-left: 600px;
|
||||
width: 1156px;
|
||||
height: 800px;
|
||||
}
|
||||
|
||||
.input-circles{
|
||||
|
||||
.circle{
|
||||
width: 147px;
|
||||
height: 60px;
|
||||
flex-direction: column;
|
||||
|
||||
div{
|
||||
margin: auto;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.circle1{
|
||||
position: relative;
|
||||
top: 120px;
|
||||
right: 500px;
|
||||
}
|
||||
|
||||
.circle2{
|
||||
position: relative;
|
||||
top: 140px;
|
||||
right: 750px;
|
||||
}
|
||||
|
||||
.circle3{
|
||||
position: relative;
|
||||
top: 140px;
|
||||
right: 300px;
|
||||
}
|
||||
|
||||
.circle4{
|
||||
position: relative;
|
||||
top: 395px;
|
||||
right: 400px;
|
||||
}
|
||||
|
||||
.circle5{
|
||||
position: relative;
|
||||
top: 240px;
|
||||
right: 650px;
|
||||
}
|
||||
|
||||
.circle6{
|
||||
position: relative;
|
||||
top: 305px;
|
||||
right: 550px;
|
||||
}
|
||||
|
||||
.circle7{
|
||||
position: relative;
|
||||
bottom: 380px;
|
||||
right: 250px;
|
||||
}
|
||||
|
||||
.circle8{
|
||||
position: relative;
|
||||
top: 320px;
|
||||
right: 220px;
|
||||
}
|
||||
|
||||
.circle-stampo-1{
|
||||
position: relative;
|
||||
top: 115px;
|
||||
right: 1212px;
|
||||
}
|
||||
|
||||
.circle-stampo-2{
|
||||
position: relative;
|
||||
top: 140px;
|
||||
right: 1130px;
|
||||
}
|
||||
|
||||
.circle-stampo-3{
|
||||
position: relative;
|
||||
top: 4px;
|
||||
right: 730px;
|
||||
}
|
||||
|
||||
.circle-stampo-4{
|
||||
position: relative;
|
||||
top: -64px;
|
||||
right: 925px;
|
||||
}
|
||||
|
||||
.circle-stampo-5{
|
||||
position: relative;
|
||||
top: -10px;
|
||||
right: 740px;
|
||||
}
|
||||
|
||||
.circle-stampo-6{
|
||||
position: relative;
|
||||
top: 205px;
|
||||
right: 1115px;
|
||||
}
|
||||
|
||||
.circle-stampo-7{
|
||||
position: relative;
|
||||
top: 50px;
|
||||
right: 125px;
|
||||
}
|
||||
|
||||
.circle-stampo-8{
|
||||
position: relative;
|
||||
top: -210px;
|
||||
right: 550px;
|
||||
}
|
||||
|
||||
.circle-stampo-9{
|
||||
position: relative;
|
||||
top: -90px;
|
||||
right: 560px;
|
||||
}
|
||||
|
||||
.circle-stampo-10{
|
||||
position: relative;
|
||||
bottom: 560px;
|
||||
right: 769px;
|
||||
}
|
||||
|
||||
.circle-stampo-11{
|
||||
position: relative;
|
||||
top: 35px;
|
||||
right: 781px;
|
||||
}
|
||||
|
||||
.circle-controstampo-1{
|
||||
position: relative;
|
||||
top: 300px;
|
||||
right: 1090px;
|
||||
}
|
||||
|
||||
.circle-controstampo-2{
|
||||
position: relative;
|
||||
top: 570px;
|
||||
right: 990px;
|
||||
}
|
||||
|
||||
.circle-controstampo-3{
|
||||
position: relative;
|
||||
top: 475px;
|
||||
right: 770px;
|
||||
}
|
||||
|
||||
.circle-controstampo-4{
|
||||
position: relative;
|
||||
right: 650px;
|
||||
}
|
||||
|
||||
.circle-controstampo-5{
|
||||
position: relative;
|
||||
top: 45px;
|
||||
right: 480px;
|
||||
}
|
||||
|
||||
.circle-controstampo-6{
|
||||
position: relative;
|
||||
top: -335px;
|
||||
right: 650px;
|
||||
}
|
||||
|
||||
.circle-controstampo-7{
|
||||
position: relative;
|
||||
top: 400px;
|
||||
right: 650px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
button{
|
||||
margin-left: 10px;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
object-fit: contain;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.5);
|
||||
border: solid 1px #001e48;
|
||||
background-image: linear-gradient(to bottom, #1756ad, @color-darkish-blue);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
.@{modal}.raffreddamento-info {
|
||||
margin-top: 200px;
|
||||
width: 626px;
|
||||
height: 569px;
|
||||
|
||||
section{
|
||||
|
||||
.specific{
|
||||
margin-left: 50px;
|
||||
width: 480px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,7 +13,7 @@
|
||||
border-top-right-radius: @header-height /2;
|
||||
border-bottom-right-radius: @header-height /2;
|
||||
margin-right: 5px;
|
||||
z-index: 10;
|
||||
z-index: 801;
|
||||
.app-ribbon {
|
||||
justify-content: space-between; // background-image: @color-alarm-background-image;
|
||||
background-image: @color-ribbon-opened;
|
||||
|
||||
@@ -2,29 +2,35 @@
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
|
||||
.@{modal}.riscaldi-info {
|
||||
.presenter {
|
||||
position: relative;
|
||||
|
||||
.warmers {
|
||||
position: relative;
|
||||
|
||||
svg {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
.zoom {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
display: grid;
|
||||
grid-template-rows: 1fr 1fr;
|
||||
grid-row-gap: 10px;
|
||||
rect {
|
||||
fill: none;
|
||||
stroke: 1px solid blue;
|
||||
}
|
||||
|
||||
.btn {
|
||||
padding: 0;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
.resistance {
|
||||
width: calc(100% - 4px);
|
||||
height: calc(100% - 4px);
|
||||
background-color: #f40000;
|
||||
margin: 2px;
|
||||
border-radius: 4px;
|
||||
|
||||
}
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
|
||||
.scheda{
|
||||
|
||||
.body{
|
||||
padding: 0px;
|
||||
|
||||
.input-area{
|
||||
width: 480px;
|
||||
margin: 4px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,10 +2,9 @@
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
.setup {
|
||||
padding-top: 50px;
|
||||
padding-top: 25px;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
@@ -38,8 +37,8 @@
|
||||
justify-content: flex-start;
|
||||
width: calc(~'100% - 28px');
|
||||
height: calc(~'100% - 28px - 82px');
|
||||
|
||||
.auto{
|
||||
|
||||
.auto {
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
@@ -64,83 +63,89 @@
|
||||
|
||||
}
|
||||
|
||||
.specific {
|
||||
article {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
// align-items: center;
|
||||
position: relative;
|
||||
|
||||
.svg-area {
|
||||
&.shrink {
|
||||
flex-shrink: 2;
|
||||
}
|
||||
|
||||
.slides {
|
||||
width: 100%;
|
||||
height: 160px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
justify-content: space-evenly;
|
||||
align-items: center;
|
||||
|
||||
.input-circles {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
span{
|
||||
object-fit: contain;
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: center;
|
||||
color: white;
|
||||
background-color: #979797;
|
||||
}
|
||||
|
||||
.circle {
|
||||
width: 141px;
|
||||
height: 60px;
|
||||
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.5);
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
object-fit: contain;
|
||||
border-radius: 40.5px;
|
||||
border: solid 4px #9b9b9b;
|
||||
}
|
||||
|
||||
input{
|
||||
width: 40px;
|
||||
height: 21px;
|
||||
margin: auto;
|
||||
object-fit: contain;
|
||||
font-size: 20px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
color: #6d6d6d;
|
||||
border: none;
|
||||
}
|
||||
|
||||
label {
|
||||
margin: auto;
|
||||
object-fit: contain;
|
||||
font-size: 20px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
color: #6d6d6d;
|
||||
}
|
||||
|
||||
img {
|
||||
margin: auto;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
object-fit: contain;
|
||||
}
|
||||
img {
|
||||
flex-shrink: 0;
|
||||
width: 215px;
|
||||
height: 140px;
|
||||
border: 1px solid #bbbcbc;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.imgborder {
|
||||
border: 1px solid @color-darkish-blue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
.svg-area {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
min-height: 50%;
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
|
||||
.borded_label {
|
||||
cursor: pointer;
|
||||
min-width: 100px;
|
||||
height: 60px;
|
||||
border-radius: 40px;
|
||||
border: solid 4px #9b9b9b;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
padding: 0 1rem;
|
||||
position: absolute;
|
||||
background-color: white;
|
||||
|
||||
div {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr auto;
|
||||
|
||||
img {
|
||||
grid-column: 1;
|
||||
width: unset;
|
||||
height: unset;
|
||||
}
|
||||
|
||||
span {
|
||||
grid-column: 2;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
small {
|
||||
text-align: center;
|
||||
grid-column: 3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
footer {
|
||||
@@ -164,6 +169,67 @@
|
||||
align-items: stretch;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.divider {
|
||||
width: 100%;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
|
||||
.modal-footer-navigator {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: calc(~"100vw - 2rem");
|
||||
display: grid;
|
||||
grid-template-rows: 48px;
|
||||
flex-flow: row nowrap;
|
||||
grid-template-columns: repeat(auto-fit, minmax(30px, 1fr));
|
||||
grid-column-gap: 1rem;
|
||||
padding: 0 1rem;
|
||||
|
||||
.setup-button {
|
||||
height: 48px;
|
||||
width: 100%;
|
||||
grid-template-columns: 40px 1fr;
|
||||
|
||||
&.current {
|
||||
|
||||
.background-top,
|
||||
.background-bottom {
|
||||
background-color: #d3d3d3;
|
||||
|
||||
&:after {
|
||||
background: #979797;
|
||||
}
|
||||
}
|
||||
|
||||
.background-top {
|
||||
box-shadow: -3px 5px 5px rgba(0, 0, 0, .2) inset;
|
||||
}
|
||||
|
||||
.background-bottom {
|
||||
box-shadow: -3px -5px 5px rgba(0, 0, 0, .2) inset;
|
||||
}
|
||||
}
|
||||
|
||||
span,
|
||||
label {
|
||||
grid-row-start: 1;
|
||||
grid-row-end: -1;
|
||||
padding: 0;
|
||||
align-items: center;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
;
|
||||
}
|
||||
|
||||
label {
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.modal.setup-info {
|
||||
@@ -181,6 +247,7 @@
|
||||
|
||||
.tab-header {
|
||||
display: flex;
|
||||
|
||||
flex-flow: row;
|
||||
align-items: stretch;
|
||||
justify-content: flex-start;
|
||||
@@ -203,12 +270,13 @@
|
||||
}
|
||||
}
|
||||
|
||||
.@{modal}.setup-info {
|
||||
.modal.setup-info {
|
||||
width: 1639px;
|
||||
height: 695px;
|
||||
background-color: #fff;
|
||||
margin: 150px 193px;
|
||||
margin: 150px auto;
|
||||
box-shadow: none;
|
||||
position: relative;
|
||||
|
||||
section {
|
||||
height: 100%;
|
||||
@@ -236,6 +304,9 @@
|
||||
grid-template-columns: 50px 1fr;
|
||||
grid-template-rows: 1fr 50px;
|
||||
|
||||
* {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
span,
|
||||
label {
|
||||
@@ -266,23 +337,20 @@
|
||||
|
||||
|
||||
i {
|
||||
grid-column: 2;
|
||||
grid-column-start: -1;
|
||||
grid-column-end: 1;
|
||||
grid-row: 2;
|
||||
z-index: 2;
|
||||
margin: auto;
|
||||
transform: scale(1.5);
|
||||
font-size: 36px;
|
||||
|
||||
&.fa-check-circle{
|
||||
&.fa-check-circle {
|
||||
color: #90BF3D;
|
||||
}
|
||||
|
||||
&.fa-check-circle.undone-step{
|
||||
&.fa-check-circle.undone-step {
|
||||
color: #1791FF;
|
||||
}
|
||||
|
||||
// &.fa-minus-circle{
|
||||
// color: #7A7C74;
|
||||
// }
|
||||
}
|
||||
|
||||
position: relative;
|
||||
@@ -324,12 +392,41 @@
|
||||
|
||||
}
|
||||
|
||||
article {
|
||||
.box .body {
|
||||
border-width: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.box {
|
||||
margin-bottom: 30px;
|
||||
margin-bottom: 20px;
|
||||
box-sizing: border-box;
|
||||
clear: both;
|
||||
|
||||
&.transparent {
|
||||
.body {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
&.box-500 {
|
||||
width: 500px;
|
||||
}
|
||||
|
||||
&.color_2{
|
||||
background-color: #e5f3ff;
|
||||
}
|
||||
|
||||
&.color_3{
|
||||
background-color: #b3dbff;
|
||||
}
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -343,16 +440,16 @@
|
||||
}
|
||||
|
||||
.body {
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
padding: 1rem;
|
||||
display: grid;
|
||||
grid-row-gap: 1rem;
|
||||
flex-flow: column;
|
||||
justify-items: center;
|
||||
padding-bottom: 10px;
|
||||
padding-top: 5px;
|
||||
border: 2px solid #979797;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.submit {
|
||||
margin: auto;
|
||||
width: 90px;
|
||||
@@ -381,75 +478,6 @@
|
||||
|
||||
|
||||
|
||||
.input-area {
|
||||
margin: 10px auto;
|
||||
display: flex;
|
||||
flex-flow: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
height: 48px;
|
||||
|
||||
&.col {
|
||||
flex-flow: column;
|
||||
align-items: flex-start;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-weight: normal;
|
||||
color: #002680;
|
||||
margin: 18px 0;
|
||||
}
|
||||
|
||||
.buttons {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-flow: row;
|
||||
margin-bottom: 18px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
color: #002680;
|
||||
font-size: 24px;
|
||||
font-weight: 500;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.rect {
|
||||
// display: flex;
|
||||
// align-items: center;
|
||||
// justify-content: flex-end;
|
||||
// padding-inline-end: 20px;
|
||||
object-fit: contain;
|
||||
font-size: 20px;
|
||||
font-weight: 500;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
color: #6d6d6d;
|
||||
text-align: center;
|
||||
width: 98px;
|
||||
height: 48px;
|
||||
border-radius: 2px;
|
||||
box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
select {
|
||||
min-width: 150px;
|
||||
height: 48px;
|
||||
background-color: #fff;
|
||||
padding: 0 20px;
|
||||
font-size: 1rem;
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.setup-play {
|
||||
cursor: pointer;
|
||||
|
||||
@@ -4,13 +4,16 @@
|
||||
@import "fonts.less";
|
||||
|
||||
.slider {
|
||||
display: flex;
|
||||
display: grid;
|
||||
grid-template-columns: 48px 1fr 48px;
|
||||
grid-column-gap: 1rem;
|
||||
width: 100%;
|
||||
flex-flow: row wrap;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
|
||||
.control {
|
||||
margin: 0 10px;
|
||||
position: relative;
|
||||
flex: 1;
|
||||
|
||||
@@ -101,6 +104,5 @@
|
||||
border: none;
|
||||
box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.5);
|
||||
background-image: linear-gradient(to bottom, #fff 0%, #bbbcbc 98%);
|
||||
margin: 16px;
|
||||
}
|
||||
}
|
||||
@@ -3,104 +3,110 @@
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
|
||||
.tast{
|
||||
height: 261px;
|
||||
width: 293px;
|
||||
background-color:@color-silver;
|
||||
.keyboard {
|
||||
height: 262px;
|
||||
width: 262px;
|
||||
background-color: @color-silver;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 9000;
|
||||
box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.5);
|
||||
|
||||
.mask{
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 52px);
|
||||
grid-template-rows: repeat(4, 52px);
|
||||
grid-gap: 5px 8px;
|
||||
margin-top: 7%;
|
||||
margin-left: 10%;
|
||||
|
||||
button{
|
||||
border:none;
|
||||
background-image: linear-gradient(to bottom, #f1f1f1 0%, #bbbcbc 98%);
|
||||
box-shadow: 2px 10px 15px 0 rgba(0, 0, 0, 0.5);
|
||||
color:@color-darkish-blue;
|
||||
font-size:20px;
|
||||
}
|
||||
.zero{
|
||||
grid-column: 1/span 2;
|
||||
grid-row: 4/5;
|
||||
border:none;
|
||||
background-image: linear-gradient(to bottom, #f1f1f1 0%, #bbbcbc 98%);
|
||||
box-shadow: 2px 10px 15px 0 rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.submit{
|
||||
grid-column-start: 4;
|
||||
grid-column-end: 5;
|
||||
grid-row-start: 3;
|
||||
grid-row-end: 5;
|
||||
border:none;
|
||||
background-image: linear-gradient(to bottom, #000080 0%, #191970 98%);
|
||||
box-shadow: 2px 10px 15px 0 rgba(0, 0, 0, 0.5);
|
||||
.mask {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 52px);
|
||||
grid-template-rows: repeat(4, 52px);
|
||||
grid-gap: 5px 8px;
|
||||
margin-top: 7%;
|
||||
|
||||
img{
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
}
|
||||
.bCanc{
|
||||
grid-column: 4/5;
|
||||
grid-row: 2/3;
|
||||
|
||||
img{
|
||||
width: 30px;
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
}
|
||||
.b1{
|
||||
grid-column: 1/2;
|
||||
grid-row: 3/4;
|
||||
}
|
||||
.b2{
|
||||
grid-column: 2/3;
|
||||
grid-row: 3/4;
|
||||
}
|
||||
.b3{
|
||||
grid-column: 3/4;
|
||||
grid-row: 3/4;
|
||||
}
|
||||
.b4{
|
||||
grid-column: 1/2;
|
||||
grid-row: 2/3;
|
||||
}
|
||||
.b5{
|
||||
grid-column: 2/3;
|
||||
grid-row: 2/3;
|
||||
}
|
||||
.b6{
|
||||
grid-column: 3/4;
|
||||
grid-row: 2/3;
|
||||
}
|
||||
.b7{
|
||||
grid-column: 1/2;
|
||||
grid-row: 1/2;
|
||||
}
|
||||
.b8{
|
||||
grid-column: 2/3;
|
||||
grid-row: 1/2;
|
||||
}
|
||||
.b9{
|
||||
grid-column: 3/4;
|
||||
grid-row: 1/2;
|
||||
}
|
||||
|
||||
.bPunto{
|
||||
grid-column: 3/4;
|
||||
grid-row: 4/5;
|
||||
}
|
||||
.bDel{
|
||||
grid-column: 4/5;
|
||||
grid-row: 1/2;
|
||||
}
|
||||
|
||||
button {
|
||||
border: none;
|
||||
background-image: linear-gradient(to bottom, #f1f1f1 0%, #bbbcbc 98%);
|
||||
box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.5);
|
||||
color: @color-darkish-blue;
|
||||
font-size: 20px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
}
|
||||
.zero {
|
||||
grid-column: 1/span 2;
|
||||
grid-row: 4/5;
|
||||
}
|
||||
|
||||
.submit {
|
||||
grid-column-start: 4;
|
||||
grid-column-end: 5;
|
||||
grid-row-start: 3;
|
||||
grid-row-end: 5;
|
||||
background-size: 54px;
|
||||
background-position-x: -1px;
|
||||
background-image: url(/assets/icons/png/submit.png);
|
||||
}
|
||||
|
||||
.bCanc {
|
||||
grid-column: 4/5;
|
||||
grid-row: 2/3;
|
||||
background-size: 54px;
|
||||
background-image: url(/assets/icons/png/canc.png);
|
||||
|
||||
}
|
||||
|
||||
.b1 {
|
||||
grid-column: 1/2;
|
||||
grid-row: 3/4;
|
||||
}
|
||||
|
||||
.b2 {
|
||||
grid-column: 2/3;
|
||||
grid-row: 3/4;
|
||||
}
|
||||
|
||||
.b3 {
|
||||
grid-column: 3/4;
|
||||
grid-row: 3/4;
|
||||
}
|
||||
|
||||
.b4 {
|
||||
grid-column: 1/2;
|
||||
grid-row: 2/3;
|
||||
}
|
||||
|
||||
.b5 {
|
||||
grid-column: 2/3;
|
||||
grid-row: 2/3;
|
||||
}
|
||||
|
||||
.b6 {
|
||||
grid-column: 3/4;
|
||||
grid-row: 2/3;
|
||||
}
|
||||
|
||||
.b7 {
|
||||
grid-column: 1/2;
|
||||
grid-row: 1/2;
|
||||
}
|
||||
|
||||
.b8 {
|
||||
grid-column: 2/3;
|
||||
grid-row: 1/2;
|
||||
}
|
||||
|
||||
.b9 {
|
||||
grid-column: 3/4;
|
||||
grid-row: 1/2;
|
||||
}
|
||||
|
||||
.bPunto {
|
||||
grid-column: 3/4;
|
||||
grid-row: 4/5;
|
||||
}
|
||||
|
||||
.bDel {
|
||||
grid-column: 4/5;
|
||||
grid-row: 1/2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
// out: false, sourceMap: false, main: ../style.less
|
||||
@import "grid-system.less";
|
||||
@import "colors.less";
|
||||
@import "fonts.less";
|
||||
@modal: modal;
|
||||
|
||||
.@{modal}.vuoto-info {
|
||||
width: 1820px;
|
||||
height: 980px;
|
||||
|
||||
section{
|
||||
|
||||
.specific{
|
||||
padding-left: 5px;
|
||||
|
||||
.box {
|
||||
margin-bottom: 5px;
|
||||
background-color: #e5f3ff;
|
||||
|
||||
&:first-of-type{
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
&:last-of-type{
|
||||
background-color: #b3dbff;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.input-area{
|
||||
width: 480px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1186mm"
|
||||
height="707mm"
|
||||
viewBox="0 0 1186 707"
|
||||
width="1292"
|
||||
height="707"
|
||||
viewBox="0 0 1292 707"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
@@ -25,9 +25,9 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.26"
|
||||
inkscape:cx="1903.0535"
|
||||
inkscape:cy="1303.7306"
|
||||
inkscape:zoom="2.08"
|
||||
inkscape:cx="844.36256"
|
||||
inkscape:cy="95.563833"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
@@ -281,13 +281,15 @@
|
||||
cy="-304.69699" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009706px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009701px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872"
|
||||
x="140.59659"
|
||||
y="-269.10074"
|
||||
id="text872-0"
|
||||
transform="scale(0.89929967,1.1119764)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1144">A2</tspan></text>
|
||||
id="tspan1144"
|
||||
x="140.59659"
|
||||
y="-269.10074">A2</tspan></text>
|
||||
<circle
|
||||
r="18.442383"
|
||||
style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#000000;stroke-width:3.11523533;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
@@ -296,13 +298,15 @@
|
||||
cy="-304.69699" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009706px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009701px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872"
|
||||
x="207.31517"
|
||||
y="-269.10071"
|
||||
id="text872-0-5"
|
||||
transform="scale(0.89929967,1.1119764)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1146">A3</tspan></text>
|
||||
id="tspan1146"
|
||||
x="207.31517"
|
||||
y="-269.10071">A3</tspan></text>
|
||||
<circle
|
||||
r="18.442383"
|
||||
style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#000000;stroke-width:3.11523533;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
@@ -311,13 +315,15 @@
|
||||
cy="-304.69699" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009706px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009701px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872"
|
||||
x="274.03372"
|
||||
y="-269.10071"
|
||||
id="text872-0-5-7"
|
||||
transform="scale(0.89929967,1.1119764)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1148">A4</tspan></text>
|
||||
id="tspan1148"
|
||||
x="274.03372"
|
||||
y="-269.10071">A4</tspan></text>
|
||||
<circle
|
||||
r="18.442383"
|
||||
style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#000000;stroke-width:3.11523533;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
@@ -326,13 +332,15 @@
|
||||
cy="-304.69699" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009706px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009701px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872"
|
||||
x="340.75235"
|
||||
y="-269.10068"
|
||||
id="text872-0-5-3"
|
||||
transform="scale(0.89929967,1.1119764)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1150">A5</tspan></text>
|
||||
id="tspan1150"
|
||||
x="340.75235"
|
||||
y="-269.10068">A5</tspan></text>
|
||||
<circle
|
||||
r="18.442383"
|
||||
style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#000000;stroke-width:3.11523533;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
@@ -341,13 +349,15 @@
|
||||
cy="-304.69699" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009706px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009701px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872"
|
||||
x="407.47095"
|
||||
y="-269.10068"
|
||||
id="text872-0-5-3-4"
|
||||
transform="scale(0.89929967,1.1119764)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1152">A6</tspan></text>
|
||||
id="tspan1152"
|
||||
x="407.47095"
|
||||
y="-269.10068">A6</tspan></text>
|
||||
<circle
|
||||
r="18.442383"
|
||||
style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#000000;stroke-width:3.11523533;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
@@ -356,13 +366,15 @@
|
||||
cy="-304.69699" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009706px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009701px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872"
|
||||
x="474.18954"
|
||||
y="-269.10071"
|
||||
id="text872-0-5-3-4-9"
|
||||
transform="scale(0.89929967,1.1119764)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1154">A7</tspan></text>
|
||||
id="tspan1154"
|
||||
x="474.18954"
|
||||
y="-269.10071">A7</tspan></text>
|
||||
<circle
|
||||
r="18.442383"
|
||||
style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#000000;stroke-width:3.11523533;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
@@ -371,13 +383,15 @@
|
||||
cy="-304.69699" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009706px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009701px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872"
|
||||
x="540.9082"
|
||||
y="-269.10071"
|
||||
id="text872-0-5-3-4-9-6"
|
||||
transform="scale(0.89929967,1.1119764)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1156">A8</tspan></text>
|
||||
id="tspan1156"
|
||||
x="540.9082"
|
||||
y="-269.10071">A8</tspan></text>
|
||||
<circle
|
||||
r="18.442383"
|
||||
style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#000000;stroke-width:3.11523533;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
@@ -386,13 +400,15 @@
|
||||
cy="-304.69699" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009706px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009701px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872"
|
||||
x="607.62683"
|
||||
y="-269.10071"
|
||||
id="text872-0-5-3-4-9-6-8"
|
||||
transform="scale(0.89929967,1.1119764)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1158">A9</tspan></text>
|
||||
id="tspan1158"
|
||||
x="607.62683"
|
||||
y="-269.10071">A9</tspan></text>
|
||||
<circle
|
||||
r="18.442383"
|
||||
style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#000000;stroke-width:3.11523533;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
@@ -504,13 +520,15 @@
|
||||
cy="-304.69699" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009706px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009701px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872"
|
||||
x="1003.379"
|
||||
y="-269.10071"
|
||||
id="text872-0-5-3-4-9-6-8-2-3-5-7-8-6"
|
||||
transform="scale(0.89929967,1.1119764)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1338">A15</tspan></text>
|
||||
id="tspan1338"
|
||||
x="1003.379"
|
||||
y="-269.10071">A15</tspan></text>
|
||||
<circle
|
||||
r="18.442383"
|
||||
style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#000000;stroke-width:3.11523533;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
@@ -519,13 +537,15 @@
|
||||
cy="-304.69699" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009706px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009701px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872"
|
||||
x="1070.0977"
|
||||
y="-269.10068"
|
||||
id="text872-0-5-3-4-9-6-8-2-3-5-7-8-9"
|
||||
transform="scale(0.89929967,1.1119764)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1340">A16</tspan></text>
|
||||
id="tspan1340"
|
||||
x="1070.0977"
|
||||
y="-269.10068">A16</tspan></text>
|
||||
<circle
|
||||
r="18.442383"
|
||||
style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#000000;stroke-width:3.11523533;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
@@ -534,13 +554,15 @@
|
||||
cy="-304.69699" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009706px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872;"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.03009701px;line-height:1.25;font-family:Lato;-inkscape-font-specification:'Lato, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.3042872"
|
||||
x="1136.8162"
|
||||
y="-269.10065"
|
||||
id="text872-0-5-3-4-9-6-8-2-3-5-7-8-9-8"
|
||||
transform="scale(0.89929967,1.1119764)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1342">A17</tspan></text>
|
||||
id="tspan1342"
|
||||
x="1136.8162"
|
||||
y="-269.10065">A17</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:1.26154959;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0"
|
||||
id="rect912-2"
|
||||
@@ -1451,32 +1473,94 @@
|
||||
x="1136.8162"
|
||||
y="141.87759">D17</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#bbbcbc;fill-opacity:0.74509805;stroke:#979797;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="opacity:1;fill:#bbbcbc;fill-opacity:0.74509804;stroke:#979797;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect849-4-6"
|
||||
width="1055.1869"
|
||||
height="24.186996"
|
||||
x="25.179001"
|
||||
y="-316.08398" />
|
||||
<rect
|
||||
style="opacity:1;fill:#bbbcbc;fill-opacity:0.74509805;stroke:#979797;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="opacity:1;fill:#bbbcbc;fill-opacity:0.74509804;stroke:#979797;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect849-4-2-8"
|
||||
width="1055.1869"
|
||||
height="24.186996"
|
||||
x="25.179001"
|
||||
y="-137.636" />
|
||||
<rect
|
||||
style="opacity:1;fill:#bbbcbc;fill-opacity:0.74509805;stroke:#979797;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="opacity:1;fill:#bbbcbc;fill-opacity:0.74509804;stroke:#979797;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect849-4-4-7"
|
||||
width="1055.1869"
|
||||
height="24.186996"
|
||||
x="25.179001"
|
||||
y="-34.331997" />
|
||||
<rect
|
||||
style="opacity:1;fill:#bbbcbc;fill-opacity:0.74509805;stroke:#979797;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="opacity:1;fill:#bbbcbc;fill-opacity:0.74509804;stroke:#979797;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect849-4-7-8"
|
||||
width="1055.1869"
|
||||
height="24.186996"
|
||||
x="25.179001"
|
||||
y="139.914" />
|
||||
<rect
|
||||
style="opacity:1;fill:#979797;fill-opacity:1;stroke:#b3b3b3;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect865"
|
||||
width="86"
|
||||
height="25"
|
||||
x="1159.0815"
|
||||
y="-206.39528" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.33333333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:0.97397766;stroke:none;stroke-width:0.99999994;"
|
||||
x="1167.4969"
|
||||
y="-187.75352"
|
||||
id="text869"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4167">610 mm</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#979797;fill-opacity:1;stroke:#b3b3b3;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect865-7"
|
||||
width="86"
|
||||
height="25"
|
||||
x="1157.7295"
|
||||
y="17.975136" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.33333333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:0.97397766;stroke:none;stroke-width:0.99999994;"
|
||||
x="1166.1448"
|
||||
y="36.61689"
|
||||
id="text869-1"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4169">610 mm</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#979797;fill-opacity:1;stroke:#b3b3b3;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect865-4"
|
||||
width="97.53846"
|
||||
height="25"
|
||||
x="997.9389"
|
||||
y="267.72534" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.33333397px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.97397766;stroke:none;stroke-width:0.99999994"
|
||||
x="1006.3546"
|
||||
y="286.36713"
|
||||
id="text869-8"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4171"
|
||||
x="1006.3546"
|
||||
y="286.36713">1360 mm</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#979797;fill-opacity:1;stroke:#b3b3b3;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect865-1"
|
||||
width="134.07692"
|
||||
height="25"
|
||||
x="782.41119"
|
||||
y="206.99022" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.33333333px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:0.97397766;stroke:none;stroke-width:0.99999994;"
|
||||
x="790.82654"
|
||||
y="225.63197"
|
||||
id="text869-5"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4173"><= 1030 mm</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 86 KiB |
@@ -9,8 +9,8 @@
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1156mm"
|
||||
height="800mm"
|
||||
width="1156"
|
||||
height="800"
|
||||
viewBox="0 0 1156 800"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
@@ -25,9 +25,9 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.125"
|
||||
inkscape:cx="1119.1458"
|
||||
inkscape:cy="2036.4307"
|
||||
inkscape:zoom="0.5"
|
||||
inkscape:cx="-79.558604"
|
||||
inkscape:cy="84.479602"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
@@ -44,7 +44,7 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
@@ -236,5 +236,39 @@
|
||||
inkscape:transform-center-x="0.0055839671"
|
||||
inkscape:transform-center-y="3.1811632"
|
||||
transform="matrix(0.94139126,0.3373166,0.3373166,-0.94139126,390.09685,-690.78395)" />
|
||||
<rect
|
||||
style="opacity:1;fill:#979797;fill-opacity:1;stroke:#b3b3b3;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect865"
|
||||
width="79.260559"
|
||||
height="22.521017"
|
||||
x="560.28442"
|
||||
y="-492.82922" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.16533258px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:0.97397766;stroke:none;stroke-width:0.87494218;"
|
||||
x="580.72296"
|
||||
y="-462.35043"
|
||||
id="text869"
|
||||
transform="scale(0.97125081,1.0296002)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3048">1410 mm</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#979797;fill-opacity:1;stroke:#b3b3b3;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect865-8"
|
||||
width="79.260559"
|
||||
height="22.521017"
|
||||
x="575.86975"
|
||||
y="260.2395" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.16533279px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.97397766;stroke:none;stroke-width:0.87494218"
|
||||
x="611.16852"
|
||||
y="269.06815"
|
||||
id="text869-9"
|
||||
transform="scale(0.97125079,1.0296002)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3071"
|
||||
x="611.16852"
|
||||
y="269.06815">0 mm</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
@@ -7,26 +7,26 @@
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0beta2 (2b71d25, 2019-12-03)"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="disegno-quote-velocita-stampo.svg"
|
||||
id="svg8"
|
||||
version="1.1"
|
||||
viewBox="0 0 297 210"
|
||||
height="210mm"
|
||||
width="297mm">
|
||||
height="210"
|
||||
width="297">
|
||||
<sodipodi:namedview
|
||||
inkscape:object-nodes="false"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="23"
|
||||
inkscape:window-x="1280"
|
||||
inkscape:cy="394.22754"
|
||||
inkscape:cx="520.21224"
|
||||
inkscape:zoom="1.4623514"
|
||||
inkscape:window-y="-9"
|
||||
inkscape:window-x="-9"
|
||||
inkscape:cy="161.66741"
|
||||
inkscape:cx="130.79682"
|
||||
inkscape:zoom="8.2723087"
|
||||
showgrid="false"
|
||||
id="namedview907"
|
||||
inkscape:window-height="1311"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
@@ -325,8 +325,9 @@
|
||||
style="fill:#979797;fill-opacity:1;stroke:#979797;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path965"
|
||||
d="M 146.1459,0.54430501 Z"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
d="M 138.7719,177.76207 Z"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.26458299px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path967"
|
||||
@@ -545,5 +546,41 @@
|
||||
id="path32784-3-24"
|
||||
d="m 31.481836,185.27239 -1.99023,-3.6186 h 3.98046 z"
|
||||
style="fill:#bbbcbc;fill-opacity:1;stroke:none;stroke-width:0.278897px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<rect
|
||||
style="opacity:1;fill:#979797;fill-opacity:1;stroke:#b3b3b3;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect865"
|
||||
width="23.260561"
|
||||
height="6.021019"
|
||||
x="122.85455"
|
||||
y="14.358868" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.24800014px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.97397766;stroke:none;stroke-width:0.24507663"
|
||||
x="121.8107"
|
||||
y="19.180067"
|
||||
id="text869"
|
||||
transform="scale(1.0175879,0.98271609)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2434"
|
||||
x="121.8107"
|
||||
y="19.180067">1059 mm</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#979797;fill-opacity:1;stroke:#b3b3b3;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect865-8"
|
||||
width="21.447283"
|
||||
height="6.021019"
|
||||
x="120.07418"
|
||||
y="178.33969" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.24800014px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.97397766;stroke:none;stroke-width:0.24507663"
|
||||
x="122.61649"
|
||||
y="186.04497"
|
||||
id="text869-2"
|
||||
transform="scale(1.0175879,0.98271609)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2432"
|
||||
x="122.61649"
|
||||
y="186.04497">0 mm</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 23 KiB |
@@ -25,9 +25,9 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.5325"
|
||||
inkscape:cx="-212.68016"
|
||||
inkscape:cy="598.57363"
|
||||
inkscape:zoom="2.13"
|
||||
inkscape:cx="472.77738"
|
||||
inkscape:cy="49.172206"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
@@ -45,7 +45,7 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
@@ -244,5 +244,40 @@
|
||||
inkscape:transform-center-y="-0.48678734"
|
||||
transform="matrix(0.92838376,0,0,-1.0738472,15.707629,417.51225)"
|
||||
inkscape:transform-center-x="-2.0583999e-06" />
|
||||
<rect
|
||||
style="opacity:1;fill:#979797;fill-opacity:1;stroke:#b3b3b3;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect865"
|
||||
width="22.754166"
|
||||
height="6.6145835"
|
||||
x="126.58702"
|
||||
y="93.443863" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.58611107px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.97397768;stroke:none;stroke-width:0.26458332;"
|
||||
x="128.81358"
|
||||
y="98.37616"
|
||||
id="text869"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan867"
|
||||
x="128.81358"
|
||||
y="98.37616"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.58611107px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332;fill:#ffffff;fill-opacity:0.97397768;">810 mm</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#979797;fill-opacity:1;stroke:#b3b3b3;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect865-3"
|
||||
width="22.754168"
|
||||
height="6.6145835"
|
||||
x="129.36137"
|
||||
y="286.06741" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.58611107px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.97397766;stroke:none;stroke-width:0.26458332"
|
||||
x="133.70467"
|
||||
y="290.99969"
|
||||
id="text869-8"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan892"
|
||||
x="133.70467"
|
||||
y="290.99969">0 mm</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 13 KiB |