Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
Samuele E. Locatelli
2020-10-05 15:12:52 +02:00
23 changed files with 737 additions and 442 deletions
@@ -296,7 +296,6 @@ namespace Thermo.Active.Controllers.WebApi
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.RECIPE_MANAGER, Action = ACTIONS.READ)]
public IHttpActionResult Load(string newName)
{
// chiamo metodo di lettura...
var dataRead = NcFileAdapter.LoadRecipe(newName);
if (dataRead == null)
@@ -310,8 +309,6 @@ namespace Thermo.Active.Controllers.WebApi
// update current live data!
NcFileAdapter.SaveRecipeCurrent();
CmsError libraryError = WriteCurrentRecipeToPlc();
if (libraryError.IsError())
{
+1 -1
View File
@@ -30,4 +30,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.21.106")]
[assembly: AssemblyVersion("0.99.107")]
@@ -1,10 +1,36 @@
<svg xmlns="http://www.w3.org/2000/svg" width="575" height="468" viewBox="0 0 575 468">
<g fill="none" fill-rule="evenodd" stroke="#002680" stroke-linejoin="round" stroke-width="4">
<path fill="#99CFFF" d="M318.041 439.861L574.319 311.722 256.278 152.702 0 280.841z" transform="translate(0 20)"/>
<path fill="#99CFFF" d="M320.21 375.055L545.63 262.344 247.74 113.399 22.319 226.109zM0 288.841L318.319 448 318.319 440 0 280.841zM574.319 320L318.319 448 318.319 440 574.319 312zM318.319 432L318.319 376 22.319 228 22.319 284z" transform="translate(0 20)"/>
<path fill="#99CFFF" d="M318.319 432L318.319 376 545.63 262.344 545.63 318.344zM318.319 368L318.319 176 102.319 68 62.319 240zM318.319 368L318.319 176 462.319 104 502.319 276z" transform="translate(0 20)"/>
<path fill="#99CFFF" d="M318.319 368L318.319 176 462.319 104 502.319 276z" transform="translate(0 20)"/>
<path fill="#99CFFF" d="M318.319 176L462.319 104 238.319 0 102.319 68z" transform="translate(0 20)"/>
<path stroke-dasharray="8 8 0 0" d="M318.319 344v56l-216-108-8-60 224 112zM470.319 260l-216-108-160 80M318.319 344v56l152-76 4-62-156 82z" transform="translate(0 20)"/>
<g fill="none" fill-rule="evenodd">
<g>
<g>
<g>
<g>
<path fill="#CCE7FF" d="M296.683 316.683L520.683 204.683 224.683 56.683 0.683 168.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-linejoin="round" stroke-width="4" d="M296.683 316.683L520.683 204.683 224.683 56.683 0.683 168.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path fill="#CCE7FF" d="M296.683 372.683L296.683 316.683 0.683 168.683 0.683 224.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-linejoin="round" stroke-width="4" d="M296.683 372.683L296.683 316.683 0.683 168.683 0.683 224.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path fill="#CCE7FF" d="M296.683 372.683L296.683 316.683 520.683 204.683 520.683 260.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-linejoin="round" stroke-width="4" d="M296.683 372.683L296.683 316.683 520.683 204.683 520.683 260.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path fill="#99CFFF" d="M296.683 284.683L480.683 192.683 224.683 64.683 40.683 156.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-linejoin="round" stroke-width="4" d="M296.683 284.683L480.683 192.683 224.683 64.683 40.683 156.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path fill="#99CFFF" d="M40.683 164.683L296.683 292.683 296.683 284.683 40.683 156.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-linejoin="round" stroke-width="4" d="M40.683 164.683L296.683 292.683 296.683 284.683 40.683 156.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path fill="#99CFFF" d="M480.683 200.683L296.683 292.683 296.683 284.683 480.683 192.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-linejoin="round" stroke-width="4" d="M480.683 200.683L296.683 292.683 296.683 284.683 480.683 192.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path fill="#99CFFF" d="M296.683 268.683L296.683 164.683 96.683 64.683 72.683 156.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-linejoin="round" stroke-width="4" d="M296.683 268.683L296.683 164.683 96.683 64.683 72.683 156.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path fill="#99CFFF" d="M296.683 268.683L296.683 108.683 424.683 100.683 440.683 196.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-linejoin="round" stroke-width="4" d="M296.683 268.683L296.683 108.683 424.683 100.683 440.683 196.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path fill="#99CFFF" d="M296.683 164.683L424.683 100.683 224.683 0.683 96.683 64.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-linejoin="round" stroke-width="4" d="M296.683 164.683L424.683 100.683 224.683 0.683 96.683 64.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path fill="#99CFFF" d="M296.683 148.683L392.683 100.683 224.683 16.683 128.683 64.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-linejoin="round" stroke-width="4" d="M296.683 148.683L392.683 100.683 224.683 16.683 128.683 64.683z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-dasharray="4 4 0 0" stroke-linejoin="round" stroke-width="2" d="M296.683 148.683l-16 88-72-36-80-136 168 84z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-dasharray="4 4 0 0" stroke-linejoin="round" stroke-width="2" d="M312.683 220.683l-72-36-32 16M240.683 184.683L224.683 16.683" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-linejoin="round" stroke-width="4" d="M234.259 117.471L224.683 16.683" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
<path stroke="#002680" stroke-dasharray="4 4 0 0" stroke-linejoin="round" stroke-width="2" d="M296.683 148.683l-16 88 32-16 80-120-96 48z" transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"/>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

@@ -67,6 +67,10 @@
stroke-width: 2.5;
}
.errors {
stroke: #d0021b;
}
.value-text {
fill: black;
font-size: 20px;
@@ -254,12 +254,13 @@
align-items: center;
display: flex;
color: #4b4b4b;
&.pressed,
&:active:not([disabled]) {
background-color: #4b4b4baa;
}
&:hover{
&:hover {
border: 2px solid #1791ff;
}
}
@@ -336,6 +337,7 @@
}
.piece_time {
cursor: pointer;
display: grid;
grid-template-rows: repeat(2, auto);
grid-template-columns: repeat(2, auto);
@@ -352,6 +354,15 @@
grid-column: 2;
}
.piece_hours,
.time_cycle {
&.selected {
span {
color: #1791ff !important;
}
}
}
div {
display: flex;
flex-flow: column;
@@ -423,6 +434,11 @@
text-align: right;
font-size: 54px;
font-weight: 500;
&.red {
color: #d0021b;
}
}
.col {
@@ -456,12 +472,13 @@
height: 50px;
border: 2px solid #4b4b4b;
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.5);
&.pressed,
&:active:not([disabled]) {
background-color: #4b4b4baa;
}
&:hover{
&:hover {
border: 2px solid #1791ff;
}
}
@@ -4202,6 +4202,10 @@ article .box .body {
stroke: #90C03D;
stroke-width: 2.5;
}
.gauge-container .gauge1 .gauge .errors,
.gauge-container .gauge2 .gauge .errors {
stroke: #d0021b;
}
.gauge-container .gauge1 .gauge .value-text,
.gauge-container .gauge2 .gauge .value-text {
fill: black;
@@ -4493,6 +4497,7 @@ article .box .body {
z-index: 1;
}
.dashboard .third_col .piece_time {
cursor: pointer;
display: grid;
grid-template-rows: repeat(2, auto);
grid-template-columns: repeat(2, auto);
@@ -4507,6 +4512,10 @@ article .box .body {
grid-row: 1;
grid-column: 2;
}
.dashboard .third_col .piece_time .piece_hours.selected span,
.dashboard .third_col .piece_time .time_cycle.selected span {
color: #1791ff !important;
}
.dashboard .third_col .piece_time div {
display: flex;
flex-flow: column;
@@ -4564,6 +4573,9 @@ article .box .body {
font-size: 54px;
font-weight: 500;
}
.history-item label.red {
color: #d0021b;
}
.history-item .col {
display: flex;
flex-flow: column;
@@ -7,52 +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"
width="718.82501"
height="480"
viewBox="0 0 718.82501 480"
width="575"
height="468"
viewBox="0 0 575 468"
version="1.1"
id="svg851"
id="svg1888"
sodipodi:docname="disegno-stampo.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata857">
id="metadata1894">
<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>
<defs
id="defs855">
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="0,0.5"
is_visible="true"
id="path-effect6115"
effect="powerstroke" />
<inkscape:path-effect
end_linecap_type="zerowidth"
miter_limit="4"
linejoin_type="extrp_arc"
start_linecap_type="zerowidth"
interpolator_beta="0.2"
interpolator_type="CubicBezierJohan"
sort_points="true"
offset_points="0,0.5"
is_visible="true"
id="path-effect5981"
effect="powerstroke" />
</defs>
id="defs1892" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
@@ -63,309 +37,432 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1001"
id="namedview853"
inkscape:window-height="1056"
id="namedview1890"
showgrid="false"
inkscape:zoom="1.2208168"
inkscape:cx="306.33859"
inkscape:cy="226.42851"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:zoom="3.0230269"
inkscape:cx="56.105585"
inkscape:cy="362.46339"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg851" />
inkscape:current-layer="svg1888" />
<g
id="g849"
style="fill:none;fill-rule:evenodd;stroke:#002680;stroke-width:4;stroke-linejoin:round"
transform="translate(87.5,7.600124)">
<path
d="M 318.041,439.861 574.319,311.722 256.278,152.702 0,280.841 Z"
transform="translate(0,20)"
id="path837"
inkscape:connector-curvature="0"
style="fill:#99cfff" />
<path
d="M 320.21,375.055 545.63,262.344 247.74,113.399 22.319,226.109 Z M 0,288.841 318.319,448 v -8 L 0,280.841 Z M 574.319,320 l -256,128 v -8 l 256,-128 z m -256,112 v -56 l -296,-148 v 56 z"
transform="translate(0,20)"
id="path839"
inkscape:connector-curvature="0"
style="fill:#99cfff" />
<path
d="M 318.319,432 V 376 L 545.63,262.344 v 56 z m 0,-64 V 176 l -216,-108 -40,172 z m 0,0 V 176 l 144,-72 40,172 z"
transform="translate(0,20)"
id="path841"
inkscape:connector-curvature="0"
style="fill:#99cfff" />
<path
d="M 318.319,368 V 176 l 144,-72 40,172 z"
transform="translate(0,20)"
id="path843"
inkscape:connector-curvature="0"
style="fill:#99cfff" />
<path
d="m 318.319,176 144,-72 -224,-104 -136,68 z"
transform="translate(0,20)"
id="path845"
inkscape:connector-curvature="0"
style="fill:#99cfff" />
<path
d="m 318.319,344 v 56 l -216,-108 -8,-60 z m 152,-84 -216,-108 -160,80 m 224,112 v 56 l 152,-76 4,-62 z"
transform="translate(0,20)"
id="path847"
inkscape:connector-curvature="0"
style="stroke-dasharray:8, 8, 0, 0" />
</g>
<g
id="g4648"
transform="translate(-2.009,2.1581275)">
<path
inkscape:connector-curvature="0"
id="path5152"
d="M 191.39393,93.50018 6.1685338,1.6213041"
style="fill:#999999;fill-opacity:0.97397766;stroke:#b3b3b3;stroke-width:1.33899999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path5959"
d="M 150.96849,265.23417 6.0964176,191.63333"
style="fill:none;stroke:#b3b3b3;stroke-width:1.67535877px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path5963"
d="M 151.72433,265.08961 2.3712504,337.96298"
style="fill:none;stroke:#b3b3b3;stroke-width:2.16755867px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path5965"
d="M 111.20447,309.34123 7.4935235,257.95877"
style="fill:none;stroke:#b3b3b3;stroke-width:1.88999581px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path5967"
d="M 558.9491,349.46957 712.9812,273.81765"
style="fill:none;stroke:#b3b3b3;stroke-width:1.55846441px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path5969"
d="M 562.48191,287.32991 711.10346,212.95665"
style="fill:none;stroke:#b3b3b3;stroke-width:1.94814312px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path5971"
d="m 590.4967,300.64493 129.87918,62.80626"
style="fill:none;stroke:#b3b3b3;stroke-width:1.58355284px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path5975"
d="m 406.79193,392.57665 137.85288,66.98716"
style="fill:none;stroke:#b3b3b3;stroke-width:1.52806222px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path5977"
d="m 407.6012,392.64446 -151.55921,75.9675"
style="fill:none;stroke:#b3b3b3;stroke-width:1.75403559px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
transform="matrix(-0.955611,0.09787681,-0.09639817,-0.97026909,736.75428,403.08371)"
inkscape:transform-center-y="1.4884029"
inkscape:transform-center-x="0.011474512"
d="m 31.438688,45.00513 -5.298179,-0.513673 -5.298179,-0.513673 3.093944,-4.331521 3.093943,-4.331521 2.204235,4.845194 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.667447"
sodipodi:arg1="0.62024949"
sodipodi:r2="3.0732479"
sodipodi:r1="6.1464958"
sodipodi:cy="41.432552"
sodipodi:cx="26.437078"
sodipodi:sides="3"
id="path5983"
style="fill:#b3b3b3;fill-opacity:0.97397766;stroke:#b3b3b3;stroke-width:1.33899999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
transform="rotate(-5.85763,2189.065,-6457.2113)"
inkscape:transform-center-y="-1.5217337"
inkscape:transform-center-x="-0.017162938"
d="m 31.438688,45.00513 -5.298179,-0.513673 -5.298179,-0.513673 3.093944,-4.331521 3.093943,-4.331521 2.204235,4.845194 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.667447"
sodipodi:arg1="0.62024949"
sodipodi:r2="3.0732479"
sodipodi:r1="6.1464958"
sodipodi:cy="41.432552"
sodipodi:cx="26.437078"
sodipodi:sides="3"
id="path5983-9"
style="fill:#b3b3b3;fill-opacity:0.97397766;stroke:#b3b3b3;stroke-width:1.33899999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
transform="rotate(-5.85763,1623.9776,255.83164)"
inkscape:transform-center-y="-1.521738"
inkscape:transform-center-x="-0.017162165"
d="m 31.438688,45.00513 -5.298179,-0.513673 -5.298179,-0.513673 3.093944,-4.331521 3.093943,-4.331521 2.204235,4.845194 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.667447"
sodipodi:arg1="0.62024949"
sodipodi:r2="3.0732479"
sodipodi:r1="6.1464958"
sodipodi:cy="41.432552"
sodipodi:cx="26.437078"
sodipodi:sides="3"
id="path5983-4"
style="fill:#b3b3b3;fill-opacity:0.97397766;stroke:#b3b3b3;stroke-width:1.33899999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
transform="rotate(-5.85763,-250.77762,178.79696)"
inkscape:transform-center-y="-1.521738"
inkscape:transform-center-x="-0.017162904"
d="m 31.438688,45.00513 -5.298179,-0.513673 -5.298179,-0.513673 3.093944,-4.331521 3.093943,-4.331521 2.204235,4.845194 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.667447"
sodipodi:arg1="0.62024949"
sodipodi:r2="3.0732479"
sodipodi:r1="6.1464958"
sodipodi:cy="41.432552"
sodipodi:cx="26.437078"
sodipodi:sides="3"
id="path5983-8"
style="fill:#b3b3b3;fill-opacity:0.97397766;stroke:#b3b3b3;stroke-width:1.33899999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
transform="matrix(0.98069207,-0.09119396,0.0942268,0.94912704,222.08564,423.72848)"
inkscape:transform-center-y="-1.4629788"
inkscape:transform-center-x="0.0026033901"
d="m 31.438688,45.00513 -5.298179,-0.513673 -5.298179,-0.513673 3.093944,-4.331521 3.093943,-4.331521 2.204235,4.845194 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.667447"
sodipodi:arg1="0.62024949"
sodipodi:r2="3.0732479"
sodipodi:r1="6.1464958"
sodipodi:cy="41.432552"
sodipodi:cx="26.437078"
sodipodi:sides="3"
id="path5983-6"
style="fill:#b3b3b3;fill-opacity:0.97397766;stroke:#b3b3b3;stroke-width:1.33899999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
transform="matrix(0.40987628,-0.86706425,0.89590014,0.3966838,-35.478094,348.43167)"
inkscape:transform-center-y="1.4597681"
inkscape:transform-center-x="-0.0064373443"
d="m 31.438688,45.00513 -5.298179,-0.513673 -5.298179,-0.513673 3.093944,-4.331521 3.093943,-4.331521 2.204235,4.845194 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.667447"
sodipodi:arg1="0.62024949"
sodipodi:r2="3.0732479"
sodipodi:r1="6.1464958"
sodipodi:cy="41.432552"
sodipodi:cx="26.437078"
sodipodi:sides="3"
id="path5983-3"
style="fill:#b3b3b3;fill-opacity:0.97397766;stroke:#b3b3b3;stroke-width:1.33899999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
transform="matrix(-0.40302144,0.88518618,-0.87181346,-0.40920337,595.72149,446.76894)"
inkscape:transform-center-y="-1.4827395"
inkscape:transform-center-x="0.017899124"
d="m 31.438688,45.00513 -5.298179,-0.513673 -5.298179,-0.513673 3.093944,-4.331521 3.093943,-4.331521 2.204235,4.845194 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.667447"
sodipodi:arg1="0.62024949"
sodipodi:r2="3.0732479"
sodipodi:r1="6.1464958"
sodipodi:cy="41.432552"
sodipodi:cx="26.437078"
sodipodi:sides="3"
id="path5983-0"
style="fill:#b3b3b3;fill-opacity:0.97397766;stroke:#b3b3b3;stroke-width:1.33899999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
transform="rotate(174.14237,357.93647,171.72723)"
inkscape:transform-center-y="1.5217369"
inkscape:transform-center-x="0.017162576"
d="m 31.438688,45.00513 -5.298179,-0.513673 -5.298179,-0.513673 3.093944,-4.331521 3.093943,-4.331521 2.204235,4.845194 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.667447"
sodipodi:arg1="0.62024949"
sodipodi:r2="3.0732479"
sodipodi:r1="6.1464958"
sodipodi:cy="41.432552"
sodipodi:cx="26.437078"
sodipodi:sides="3"
id="path5983-30"
style="fill:#b3b3b3;fill-opacity:0.97397766;stroke:#b3b3b3;stroke-width:1.33899999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
transform="rotate(174.14237,14.337879,145.66204)"
inkscape:transform-center-y="1.5217369"
inkscape:transform-center-x="0.017162576"
d="m 31.438688,45.00513 -5.298179,-0.513673 -5.298179,-0.513673 3.093944,-4.331521 3.093943,-4.331521 2.204235,4.845194 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.667447"
sodipodi:arg1="0.62024949"
sodipodi:r2="3.0732479"
sodipodi:r1="6.1464958"
sodipodi:cy="41.432552"
sodipodi:cx="26.437078"
sodipodi:sides="3"
id="path5983-2"
style="fill:#b3b3b3;fill-opacity:0.97397766;stroke:#b3b3b3;stroke-width:1.33899999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
transform="rotate(174.14237,15.085249,112.17182)"
inkscape:transform-center-y="1.5217369"
inkscape:transform-center-x="0.017162576"
d="m 31.438688,45.00513 -5.298179,-0.513673 -5.298179,-0.513673 3.093944,-4.331521 3.093943,-4.331521 2.204235,4.845194 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.667447"
sodipodi:arg1="0.62024949"
sodipodi:r2="3.0732479"
sodipodi:r1="6.1464958"
sodipodi:cy="41.432552"
sodipodi:cx="26.437078"
sodipodi:sides="3"
id="path5983-22"
style="fill:#b3b3b3;fill-opacity:0.97397766;stroke:#b3b3b3;stroke-width:1.33899999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
inkscape:connector-curvature="0"
id="path6117"
d="M 11.081081,16.243243 V 181.10811"
style="fill:none;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path6119"
d="m 12.432432,248.40541 0.270271,-43.51352"
style="fill:none;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path6125"
d="M 700.99126,266.21904 V 229.14372"
style="fill:none;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path6129"
d="m 543.81494,456.18179 168.7828,-93.72838"
style="fill:none;stroke:#b3b3b3;stroke-width:0.96779901px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path6131"
d="M 257.158,463.57707 7.2394376,339.00351"
style="fill:none;stroke:#b3b3b3;stroke-width:0.96922356px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
fill="none"
fill-rule="evenodd"
id="g1886">
<g
id="g1884">
<g
id="g1882">
<g
id="g1880">
<g
id="g1878">
<path
fill="#CCE7FF"
d="M296.683 316.683L520.683 204.683 224.683 56.683 0.683 168.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1830" />
<path
stroke="#002680"
stroke-linejoin="round"
stroke-width="4"
d="M296.683 316.683L520.683 204.683 224.683 56.683 0.683 168.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1832" />
<path
fill="#CCE7FF"
d="M296.683 372.683L296.683 316.683 0.683 168.683 0.683 224.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1834" />
<path
stroke="#002680"
stroke-linejoin="round"
stroke-width="4"
d="M296.683 372.683L296.683 316.683 0.683 168.683 0.683 224.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1836" />
<path
fill="#CCE7FF"
d="M296.683 372.683L296.683 316.683 520.683 204.683 520.683 260.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1838" />
<path
stroke="#002680"
stroke-linejoin="round"
stroke-width="4"
d="M296.683 372.683L296.683 316.683 520.683 204.683 520.683 260.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1840" />
<path
fill="#99CFFF"
d="M296.683 284.683L480.683 192.683 224.683 64.683 40.683 156.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1842" />
<path
stroke="#002680"
stroke-linejoin="round"
stroke-width="4"
d="M296.683 284.683L480.683 192.683 224.683 64.683 40.683 156.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1844" />
<path
fill="#99CFFF"
d="M40.683 164.683L296.683 292.683 296.683 284.683 40.683 156.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1846" />
<path
stroke="#002680"
stroke-linejoin="round"
stroke-width="4"
d="M40.683 164.683L296.683 292.683 296.683 284.683 40.683 156.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1848" />
<path
fill="#99CFFF"
d="M480.683 200.683L296.683 292.683 296.683 284.683 480.683 192.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1850" />
<path
stroke="#002680"
stroke-linejoin="round"
stroke-width="4"
d="M480.683 200.683L296.683 292.683 296.683 284.683 480.683 192.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1852" />
<path
fill="#99CFFF"
d="M296.683 268.683L296.683 164.683 96.683 64.683 72.683 156.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1854" />
<path
stroke="#002680"
stroke-linejoin="round"
stroke-width="4"
d="M296.683 268.683L296.683 164.683 96.683 64.683 72.683 156.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1856" />
<path
fill="#99CFFF"
d="M296.683 268.683L296.683 108.683 424.683 100.683 440.683 196.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1858" />
<path
stroke="#002680"
stroke-linejoin="round"
stroke-width="4"
d="M296.683 268.683L296.683 108.683 424.683 100.683 440.683 196.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1860" />
<path
fill="#99CFFF"
d="M296.683 164.683L424.683 100.683 224.683 0.683 96.683 64.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1862" />
<path
stroke="#002680"
stroke-linejoin="round"
stroke-width="4"
d="M296.683 164.683L424.683 100.683 224.683 0.683 96.683 64.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1864" />
<path
fill="#99CFFF"
d="M296.683 148.683L392.683 100.683 224.683 16.683 128.683 64.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1866" />
<path
stroke="#002680"
stroke-linejoin="round"
stroke-width="4"
d="M296.683 148.683L392.683 100.683 224.683 16.683 128.683 64.683z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1868" />
<path
stroke="#002680"
stroke-dasharray="4 4 0 0"
stroke-linejoin="round"
stroke-width="2"
d="M296.683 148.683l-16 88-72-36-80-136 168 84z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1870" />
<path
stroke="#002680"
stroke-dasharray="4 4 0 0"
stroke-linejoin="round"
stroke-width="2"
d="M312.683 220.683l-72-36-32 16M240.683 184.683L224.683 16.683"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1872" />
<path
stroke="#002680"
stroke-linejoin="round"
stroke-width="4"
d="M234.259 117.471L224.683 16.683"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1874" />
<path
stroke="#002680"
stroke-dasharray="4 4 0 0"
stroke-linejoin="round"
stroke-width="2"
d="M296.683 148.683l-16 88 32-16 80-120-96 48z"
transform="translate(-946 -167) translate(719 167) translate(227) translate(22 85)"
id="path1876" />
</g>
</g>
</g>
</g>
</g>
<path
inkscape:connector-curvature="0"
id="path156"
d="m 318.76864,377.55836 170.943,81.67631"
style="fill:none;stroke:#b3b3b3;stroke-width:2.50929px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path156-7"
d="m 502.7651,285.56363 166.75619,79.65581"
style="fill:none;stroke:#b3b3b3;stroke-width:2.50929px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path152"
d="M 318.66554,377.65818 135.49569,468.8523"
style="fill:none;stroke:#b3b3b3;stroke-width:1.63572px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path152-4"
d="M 62.657909,249.64728 -114.29743,337.7302"
style="fill:none;stroke:#b3b3b3;stroke-width:1.63572px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path156-0"
d="M -118.27662,36.185076 118.66778,149.70513"
style="fill:none;stroke:#b3b3b3;stroke-width:2.50929px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path156-0-7"
d="M -120.97373,162.00098 62.616937,249.77905"
style="fill:none;stroke:#b3b3b3;stroke-width:2.50929px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path156-0-8"
d="M -119.33095,246.82303 22.558618,309.88545"
style="fill:none;stroke:#b3b3b3;stroke-width:2.50929px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path152-6"
d="M 533.99126,206.42637 334.69207,305.69591"
style="fill:none;stroke:#b3b3b3;stroke-width:1.63572px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path152-8"
d="M 533.77721,126.69689 414.74963,185.77785"
style="fill:none;stroke:#b3b3b3;stroke-width:1.63572px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path187"
d="m 491.67891,453.76054 171.84238,-86.5411"
style="fill:none;stroke:#b3b3b3;stroke-width:0.961689px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
transform="matrix(0.41166896,-0.86857177,0.86999321,0.41099635,158.05524,882.41734)"
inkscape:transform-center-y="0.97901651"
inkscape:transform-center-x="0.010241558"
d="m 711.04477,246.9809 -3.551,-0.27201 -3.55099,-0.27201 2.01106,-2.93925 2.01107,-2.93924 1.53993,3.21125 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.6472478"
sodipodi:arg1="0.60005021"
sodipodi:r2="2.0561731"
sodipodi:r1="4.1123462"
sodipodi:cy="244.65872"
sodipodi:cx="707.65082"
sodipodi:sides="3"
id="path158"
style="fill:#b3b3b3;fill-opacity:0.973978;stroke:#b3b3b3;stroke-width:1.339;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
transform="matrix(0.95969918,-0.07293537,0.07305473,0.95813117,-45.16715,172.7889)"
inkscape:transform-center-y="-0.98707767"
inkscape:transform-center-x="0.00094255263"
d="m 538.48654,334.9762 -3.55099,-0.27201 -3.551,-0.27201 2.01107,-2.93925 2.01106,-2.93924 1.53993,3.21125 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.6472478"
sodipodi:arg1="0.60005021"
sodipodi:r2="2.0561731"
sodipodi:r1="4.1123462"
sodipodi:cy="332.65402"
sodipodi:cx="535.09259"
sodipodi:sides="3"
id="path158-5"
style="fill:#b3b3b3;fill-opacity:0.973978;stroke:#b3b3b3;stroke-width:1.339;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
inkscape:connector-curvature="0"
id="path187-4"
d="M 148.0946,458.78059 -100.80097,334.3412"
style="fill:none;stroke:#b3b3b3;stroke-width:0.961689px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:#b3b3b3;stroke:#b3b3b3;stroke-width:1.99643;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -108.97373,171.95007 1.6e-4,75.73528"
id="path892"
inkscape:connector-curvature="0" />
<path
style="fill:#b3b3b3;stroke:#b3b3b3;stroke-width:1.99644;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -108.97389,44.894834 1.6e-4,118.215266"
id="path892-2"
inkscape:connector-curvature="0" />
<path
style="fill:#b3b3b3;stroke:#b3b3b3;stroke-width:1.99644;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 524.38642,135.90572 9e-5,70.19971"
id="path892-2-0"
inkscape:connector-curvature="0" />
<path
sodipodi:type="star"
style="opacity:1;fill:#b3b3b3;fill-opacity:1;stroke:#b3b3b3;stroke-width:3.17927;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path896-9"
sodipodi:sides="3"
sodipodi:cx="561.26599"
sodipodi:cy="-438.63263"
sodipodi:r1="12.744021"
sodipodi:r2="6.3720102"
sodipodi:arg1="0.8685394"
sodipodi:arg2="1.9157369"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 569.49789,-428.90402 -10.38654,-3.73194 -10.38653,-3.73194 8.42522,-7.12903 8.42522,-7.12904 1.96132,10.86098 z"
inkscape:transform-center-x="0.0017812504"
inkscape:transform-center-y="-0.9884065"
transform="matrix(0.29975774,-0.1048051,0.10740833,0.29249258,-230.10847,233.97476)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#b3b3b3;fill-opacity:1;stroke:#b3b3b3;stroke-width:2.99523;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path896-1"
sodipodi:sides="3"
sodipodi:cx="561.26599"
sodipodi:cy="-438.63263"
sodipodi:r1="12.744021"
sodipodi:r2="6.3720102"
sodipodi:arg1="0.8685394"
sodipodi:arg2="1.9157369"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 569.49789,-428.90402 -10.38654,-3.73194 -10.38653,-3.73194 8.42522,-7.12903 8.42522,-7.12904 1.96132,10.86098 z"
inkscape:transform-center-x="0.0018839633"
inkscape:transform-center-y="1.0498558"
transform="matrix(0.31795509,0.11132222,0.11392875,-0.3106807,-237.46201,-37.851786)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#b3b3b3;fill-opacity:1;stroke:#b3b3b3;stroke-width:2.99523;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path896-1-6"
sodipodi:sides="3"
sodipodi:cx="561.26599"
sodipodi:cy="-438.63263"
sodipodi:r1="12.744021"
sodipodi:r2="6.3720102"
sodipodi:arg1="0.8685394"
sodipodi:arg2="1.9157369"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 569.49789,-428.90402 -10.38654,-3.73194 -10.38653,-3.73194 8.42522,-7.12903 8.42522,-7.12904 1.96132,10.86098 z"
inkscape:transform-center-x="0.0018839633"
inkscape:transform-center-y="1.0498558"
transform="matrix(0.31795509,0.11132222,0.11392875,-0.3106807,-237.46185,46.723464)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#b3b3b3;fill-opacity:1;stroke:#b3b3b3;stroke-width:3.17927;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path896-9-8"
sodipodi:sides="3"
sodipodi:cx="561.26599"
sodipodi:cy="-438.63263"
sodipodi:r1="12.744021"
sodipodi:r2="6.3720102"
sodipodi:arg1="0.8685394"
sodipodi:arg2="1.9157369"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 569.49789,-428.90402 -10.38654,-3.73194 -10.38653,-3.73194 8.42522,-7.12903 8.42522,-7.12904 1.96132,10.86098 z"
inkscape:transform-center-x="0.0017812504"
inkscape:transform-center-y="-0.9884065"
transform="matrix(0.29975774,-0.1048051,0.10740833,0.29249258,-230.10831,361.03)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#b3b3b3;fill-opacity:1;stroke:#b3b3b3;stroke-width:3.17927;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path896-9-9"
sodipodi:sides="3"
sodipodi:cx="561.26599"
sodipodi:cy="-438.63263"
sodipodi:r1="12.744021"
sodipodi:r2="6.3720102"
sodipodi:arg1="0.8685394"
sodipodi:arg2="1.9157369"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 569.49789,-428.90402 -10.38654,-3.73194 -10.38653,-3.73194 8.42522,-7.12903 8.42522,-7.12904 1.96132,10.86098 z"
inkscape:transform-center-x="0.0017812504"
inkscape:transform-center-y="-0.9884065"
transform="matrix(0.29975774,-0.1048051,0.10740833,0.29249258,403.25184,324.98561)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#b3b3b3;fill-opacity:1;stroke:#b3b3b3;stroke-width:2.99523;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path896-1-6-2"
sodipodi:sides="3"
sodipodi:cx="561.26599"
sodipodi:cy="-438.63263"
sodipodi:r1="12.744021"
sodipodi:r2="6.3720102"
sodipodi:arg1="0.8685394"
sodipodi:arg2="1.9157369"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 569.49789,-428.90402 -10.38654,-3.73194 -10.38653,-3.73194 8.42522,-7.12903 8.42522,-7.12904 1.96132,10.86098 z"
inkscape:transform-center-x="0.0018839633"
inkscape:transform-center-y="1.0498558"
transform="matrix(0.31795509,0.11132222,0.11392875,-0.3106807,395.89823,5.8868538)" />
<path
transform="matrix(0.94299544,-0.07032979,0.07093357,0.93496879,12.625915,149.64543)"
inkscape:transform-center-y="-0.96165537"
inkscape:transform-center-x="0.0026663609"
d="m 119.90086,340.35431 -3.55099,-0.27201 -3.551,-0.27201 2.01107,-2.93924 2.01106,-2.93925 1.53993,3.21126 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.6472478"
sodipodi:arg1="0.60005021"
sodipodi:r2="2.0561731"
sodipodi:r1="4.1123462"
sodipodi:cy="338.03214"
sodipodi:cx="116.50691"
sodipodi:sides="3"
id="path158-6"
style="fill:#b3b3b3;fill-opacity:0.973978;stroke:#b3b3b3;stroke-width:1.339;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
transform="matrix(0.41299761,-0.84346738,0.85070849,0.40948224,-349.86365,230.62961)"
inkscape:transform-center-y="0.95589683"
inkscape:transform-center-x="-0.0093608417"
d="m 19.170891,289.32773 -3.550993,-0.27201 -3.550994,-0.27201 2.011064,-2.93924 2.011063,-2.93925 1.53993,3.21126 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="1.6472478"
sodipodi:arg1="0.60005021"
sodipodi:r2="2.0561731"
sodipodi:r1="4.1123462"
sodipodi:cy="287.00555"
sodipodi:cx="15.776942"
sodipodi:sides="3"
id="path158-8"
style="fill:#b3b3b3;fill-opacity:0.973978;stroke:#b3b3b3;stroke-width:1.339;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
</svg>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 20 KiB

@@ -2,7 +2,7 @@
"env": "development",
"api": {
"enabled": true,
"apiServerUrl": "http://localhost:9000/"
"apiServerUrl": "http://seriate.steamware.net:9000/"
},
"allUIVisible": false
}
+1 -1
View File
@@ -13,7 +13,7 @@
<script src="Scripts/jquery.mousewheel.js"></script>
<script src="Scripts/jquery.signalR-2.2.2.min.js"></script>
<script src="Scripts/raphael-2.1.4.min.js"></script>
<script src="http://localhost:9000/signalr/hubs" async></script>
<script src="http://seriate.steamware.net:9000/signalr/hubs" async></script>
<link href="assets/styles/style.css" rel="stylesheet" />
</head>
+1
View File
@@ -13,6 +13,7 @@ declare module Prod {
moldTemp: number;
vacuumReadVal: number;
mouldEnergyOUT: number;// Generated by https://quicktype.io
isScrap: boolean;
}
interface IProdPanel {
@@ -2,7 +2,7 @@ import Vue from "vue";
import Component from "vue-class-component";
import Gauge from "svg-gauge";
import { store } from "@/store";
import { Watch } from "vue-property-decorator";
import { Prop, Watch } from "vue-property-decorator";
@Component({})
export default class MainGauge extends Vue {
@@ -10,18 +10,10 @@ export default class MainGauge extends Vue {
gauge1: any = null;
gauge2: any = null;
mounted() {
this.gauge1 = Gauge(
this.$refs.gauge1, {
max: 100,
dialStartAngle: -90,
dialEndAngle: -90.001,
value: 0,
showValue: false,
viewBox: [8, 8, 84, 84]
}
);
@Prop({ default: [] })
scrapedItems: number[];
mounted() {
this.gauge2 = Gauge(
this.$refs.gauge2, {
max: 100,
@@ -34,7 +26,6 @@ export default class MainGauge extends Vue {
);
this.gaugeDataChanged(this.gaugeData, null);
this.gaugeChanged();
}
get gaugeData() {
@@ -44,17 +35,40 @@ export default class MainGauge extends Vue {
@Watch('gaugeData')
gaugeDataChanged(n, o) {
if (this.gauge2) {
if (this.gauge2 && n.timeAdv.maxVal - n.timeAdv.minVal > 0) {
this.gauge2.setValueAnimated((n.timeAdv.value - n.timeAdv.minVal) * 100 / (n.timeAdv.maxVal - n.timeAdv.minVal), 1)
};
}
@Watch('gaugeData.timeAdv', { deep: true })
gaugeDataTimeChanged(n, o) {
if (this.gauge2 && n.maxVal - n.minVal > 0) {
this.gauge2.setValueAnimated((n.value - n.minVal) * 100 / (n.maxVal - n.minVal), .4)
};
}
get prod() { return store.state.prod.panel }
@Watch('prod.numDone')
@Watch('prod.numTarget')
gaugeChanged() {
this.gauge1.setValueAnimated((this.prod.numDone / this.prod.numTarget) * 100, 1);
polarToCartesian(centerX, centerY, radius, angleInDegrees) {
var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0;
return {
x: centerX + (radius * Math.cos(angleInRadians)),
y: centerY + (radius * Math.sin(angleInRadians))
};
}
describeArc(x, y, radius, startAngle, endAngle) {
var start = this.polarToCartesian(x, y, radius, endAngle);
var end = this.polarToCartesian(x, y, radius, startAngle);
var largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1";
var d = [
"M", start.x, start.y,
"A", radius, radius, 0, largeArcFlag, 0, end.x, end.y
].join(" ");
return d;
}
}
@@ -1,6 +1,34 @@
<template>
<div class="gauge-container">
<div ref="gauge1" class="gauge1"></div>
<!-- <div ref="gauge1" class="gauge1"></div> -->
<div class="gauge1">
<svg viewBox="8,8,84,84" class="gauge">
<path
class="dial"
fill="none"
stroke="#eee"
stroke-width="2"
d="M 50 10 A 40 40 0 1 1 49.999 10"
/>
<path
class="value"
fill="none"
stroke="#666"
stroke-width="2.5"
:d="describeArc(50,50,40,0,Math.min((prod.numDone / prod.numTarget) * 360,359.99))"
/>
<path
v-for="e in scrapedItems"
:key="`error_${e}`"
class="errors"
fill="none"
stroke="#d0021b"
stroke-width="2.5"
:d="describeArc(50,50,40,Math.min(((e-1)/ prod.numTarget) * 360,359.99),Math.min((e/ prod.numTarget) * 360,359.99))"
/>
</svg>
</div>
<div ref="gauge2" class="gauge2"></div>
<span class="done">{{prod.numDone}}</span>
<hr />
@@ -1,6 +1,7 @@
import Component from "vue-class-component";
import Vue from "vue";
import { Prop } from "vue-property-decorator";
import { prodService } from "@/services/prodService";
@Component({})
export default class Item extends Vue {
@@ -9,4 +10,9 @@ export default class Item extends Vue {
value: Prod.IProd;
showDetails: boolean = false;
async setScrap(num: number) {
await prodService.SetScrap(num);
this.value.isScrap = true;
}
}
@@ -1,7 +1,7 @@
<template>
<div class="history-item">
<div class="body">
<label>{{value.numDone}}</label>
<label :class="{red: value.isScrap}">{{value.numDone}}</label>
<div class="col">
<small>{{'history-item_warmup' | localize("tempo riscaldo")}}</small>
<span>{{Math.floor(value.timeWarm / 60) | round(0)}}'{{value.timeWarm % 60 | round(0)}}''</span>
@@ -22,7 +22,7 @@
<div class="subitems" v-if="showDetails">
<div class="row">
<div class="col">
<button class="trash">
<button class="trash" @click="setScrap(value.numDone)">
<i class="fa fa-trash-o" aria-hidden="true"></i>
</button>
</div>
@@ -66,4 +66,4 @@
</div>
</div>
</template>
<script src="./item.ts" lang="ts"></script>
<script src="./item.ts" lang="ts"></script>
@@ -14,10 +14,12 @@ export default class stats extends Vue {
for (const i in this.value) {
r.push(this.value[i])
}
return r;
return r.slice(Math.max(r.length - 20, 0));
}
@Prop()
maxNumDone: number;
get min() {
return Math.min(...this.Values);
@@ -28,7 +30,7 @@ export default class stats extends Vue {
}
get delta() {
return this.max - this.min;
return Math.max(this.max - this.min, 1);
}
@Prop({ default: 400 })
@@ -43,7 +45,7 @@ export default class stats extends Vue {
"M", 0, (this.Values[0] - this.min) * this.height / this.delta,
"S"
]
d.push(...this.Values.slice(1).map((v, idx) => `${idx * (this.width / this.Values.length)} ${this.height - (v - this.min) * this.height / this.delta}`))
d.push(...this.Values.map((v, idx) => `${idx * (this.width / 19)} ${this.height - (v - this.min) * this.height / this.delta}`))
d.push()
return d.join(" ");
}
@@ -1,14 +1,67 @@
<template>
<svg preserveAspectRatio="xMidYMid slice" :viewBox="`0 -20 ${width} ${height+40}`" :key="delta">
<svg
preserveAspectRatio="xMidYMid slice"
:viewBox="`0 -20 ${width + 30} ${height+60}`"
:key="delta"
>
<g class="chart-axis">
<line :x1="0" :x2="width" :y1="0" :y2="0" stroke="#353535" stroke-width="1" />
<line :x1="0" :x2="width" :y1="height/3" :y2="height/3" stroke="#353535" stroke-width="1" />
<line :x1="0" :x2="width" :y1="height*2/3" :y2="height*2/3" stroke="#353535" stroke-width="1" />
<line :x1="0" :x2="width" :y1="height" :y2="height" stroke="#353535" stroke-width="1" />
</g>
<g chart="chart-axis">
<line
v-for="(i,idx) in Values"
:key="idx"
:x1="idx * (width / 19)"
:x2="idx * (width / 19)"
:y1="0"
:y2="height"
stroke="#35353550"
stroke-width="1"
/>
</g>
<g>
<path fill="none" :d="pathData" stroke="#1791ff" stroke-width="4" />
<path fill="none" :d="pathData" v-if="pathData" stroke="#1791ff" stroke-width="4" />
</g>
<g>
<foreignObject
:x="width+2"
y="-10"
width="30"
height="30"
class="chart-legend"
>{{max | round(1)}}</foreignObject>
<foreignObject
:x="width+2"
:y="height - 15"
width="30"
height="30"
class="chart-legend"
>{{min | round(1)}}</foreignObject>
<foreignObject
:x="width-30"
:y="height"
:width="60"
height="30"
class="chart-legend"
style="text-align:center"
>{{maxNumDone}}</foreignObject>
<foreignObject
:x="0"
:y="height"
:width="60"
height="32"
class="chart-legend"
style="text-align:left"
>{{Math.max(maxNumDone-20,1)}}</foreignObject>
</g>
</svg>
</template>
<script src="./stats.ts" lang="ts"></script>
<script src="./stats.ts" lang="ts"></script>
<style scoped>
.chart-legend {
font-size: 14px;
}
</style>
@@ -27,6 +27,8 @@ import { SoftKeysConfigurationModel } from '@/store/machineInfo.store';
})
export default class Dashboard extends Vue {
selectedChart: 'tempociclo' | 'pezziora' = "pezziora";
get panel() {
return (this.$store.state as AppModel).prod.panel;
}
@@ -35,14 +37,23 @@ export default class Dashboard extends Vue {
return (this.$store.state as AppModel).prod.prod;
}
get ScrapedItems() {
return this.items.filter(i => i.isScrap).map(i => i.numDone);
}
@Watch("lastItem", { deep: true })
async lastitemChanged(n: Prod.IProd, o) {
if (this.items.length && n.numDone - 1 != this.items[0].numDone) {
let result = await prodService.History(n.numDone - 1, 1);
if (result && result.length)
this.itemsMap.set(result.numDone, result);
if (result && result.length) {
for (const i of result) {
this.itemsMap.set(i.numDone, i);
}
this.items = Array.from(this.itemsMap.values()).sort((a, b) => b.numDone - a.numDone);
}
}
this.items.splice(0, 0, ...await prodService.History(n.numDone - 1, 1));
// if (this.items.length == 0)
// this.items.splice(0, 0, ...await prodService.History(n.numDone));
@@ -95,7 +106,7 @@ export default class Dashboard extends Vue {
let min = Math.min(this.lastItem.numDone, ... this.items.map(i => i.numDone));
let result = await prodService.History(min - 1)
let result = await prodService.History(min - 1, min - 1)
for (const i of result) {
this.itemsMap.set(i.numDone, i);
}
@@ -126,7 +126,7 @@
</div>
<div class="second_col">
<gauge></gauge>
<gauge :scraped-items="ScrapedItems"></gauge>
<div class="remaining_time">
<small>{{'dashboard-remaining-time' | localize('tempo rimanente')}}</small>
<time v-if="panel.stimaDurata">
@@ -144,19 +144,42 @@
<label>{{panel.nomeRicetta}}</label>
</div>
<div class="piece_time">
<div class="piece_hours">
<div
class="piece_hours"
:class="{selected: selectedChart == 'pezziora'}"
@click="selectedChart = 'pezziora'"
>
<span>{{'dashboard-piece-hours' | localize('pezzi/ora')}}</span>
<span v-if="panel.lastCadenza">{{panel.lastCadenza | round(1)}}</span>
<span v-else>--</span>
</div>
<div class="time_cycle">
<div
class="time_cycle"
:class="{selected : selectedChart == 'tempociclo'}"
@click="selectedChart = 'tempociclo'"
>
<span>{{'dashboard-time-cycle' | localize('tempo/ciclo')}}</span>
<span
v-if="panel.lastTCiclo"
>{{Math.floor(panel.lastTCiclo / 60) | round(0)}}'{{panel.lastTCiclo % 60 | round(0)}}''</span>
<span v-else>--</span>
</div>
<stats class="stats" :width="614" :height="65" :value="panel.tS_TCiclo"></stats>
<stats
class="stats"
:width="614"
:height="65"
:value="panel.tS_Cadenza"
:max-num-done="lastItem.numDone-1"
v-if="selectedChart == 'pezziora'"
></stats>
<stats
class="stats"
:width="614"
:height="65"
:value="panel.tS_TCiclo"
:max-num-done="lastItem.numDone-1"
v-if="selectedChart == 'tempociclo'"
></stats>
</div>
<div class="current-item">
<hitem :value="lastItem"></hitem>
@@ -21,81 +21,80 @@ export default class ProgrammazionePreriscaldo extends Vue {
availabledays = null;
meridian: string = "--";
minutes= 0;
hours= 0;
minutes = 0;
hours = 0;
currentLang = 'en';
configuration = null;
UIavailable = false;
async mounted(){
async mounted() {
this.availabledays = moment.localeData('en').weekdays();
this.currentLang = this.currentAppLanguage;
await this.reloadData();
}
async reloadData(){
async reloadData() {
let result = await awaiter(preheatingService.GetConfiguration());
this.configuration = result;
let time = this.configuration[0].time.split(":");
if(time[0]< 12){
if (time[0] < 12) {
this.hours = time[0];
this.meridian = 'AM';
}
else
{
this.hours = time[0]-12;
else {
this.hours = time[0] - 12;
this.meridian = 'PM';
}
this.minutes = time[1];
this.minutes = time[1];
this.UIavailable = true;
}
async conferma(){
async conferma() {
this.UIavailable = false;
await awaiter(preheatingService.UpdateConfiguration(this.configuration));
await this.reloadData();
}
public get currentAppLanguage(){
public get currentAppLanguage() {
return (this.$store.state as AppModel).localization.currentLanguage;
}
public selectedDay(name){
if(!this.configuration)
public selectedDay(name) {
if (!this.configuration)
return false;
let result = this.configuration.find(x => x.day === name);
if(result)
let result = this.configuration.find(x => x.day === name);
if (result)
return result.enabled;
}
public selectunselectDay(name){
if(!this.configuration)
public selectunselectDay(name) {
if (!this.configuration)
return;
let result = this.configuration.find(x => x.day === name);
if(result)
let result = this.configuration.find(x => x.day === name);
if (result)
result.enabled = !result.enabled;
}
@Watch('currentAppLanguage',{deep:true})
public languageChanged(){
@Watch('currentAppLanguage', { deep: true })
public languageChanged() {
this.currentLang = this.currentAppLanguage;
}
@Watch('meridian',{deep:true})
@Watch('minutes',{deep:true})
@Watch('hours',{deep:true})
public timeChanged(){
if(!this.configuration)
@Watch('meridian', { deep: true })
@Watch('minutes', { deep: true })
@Watch('hours', { deep: true })
public timeChanged() {
if (!this.configuration)
return;
let minutestoset = this.minutes;
let hourstoset = this.hours;
if(this.meridian == 'PM')
hourstoset = hourstoset+12;
this.configuration.forEach(function(part, index, theArray) {
theArray[index].time = ('0' + hourstoset).slice(-2) + ":" + ('0' + minutestoset).slice(-2) +":00";
if (this.meridian == 'PM')
hourstoset = hourstoset + 12;
this.configuration.forEach(function (part, index, theArray) {
theArray[index].time = ('0' + hourstoset).slice(-2) + ":" + ('0' + minutestoset).slice(-2) + ":00";
});
}
@@ -111,16 +110,16 @@ export default class ProgrammazionePreriscaldo extends Vue {
appModelActions.ShowPreDashboard(this.$store);
}
enebleAll(){
this.configuration.forEach(function(part, index, theArray) {
enebleAll() {
this.configuration.forEach(function (part, index, theArray) {
theArray[index].enabled = true;
});
}
disableAll(){
this.configuration.forEach(function(part, index, theArray) {
disableAll() {
this.configuration.forEach(function (part, index, theArray) {
theArray[index].enabled = false;
});
}
}
isSelectedMinutes(index) {
return index == this.minutes;
}
@@ -135,8 +134,8 @@ export default class ProgrammazionePreriscaldo extends Vue {
this.hours = index;
}
getSinlePositionAngle(numItems,index){
if(numItems == 0)
getSinlePositionAngle(numItems, index) {
if (numItems == 0)
return 0;
return (360 / numItems) * index;
}
@@ -40,24 +40,24 @@
</template>
<style scoped>
#quota1 {
top: 490px;
left: 190px;
top: 510px;
left: 200px;
}
#quota2 {
top: 520px;
left: 930px;
top: 530px;
left: 970px;
}
#quota3 {
top: 100px;
left: 90px;
top: 110px;
left: 15px;
}
#quota4 {
top: 280px;
left: 10px;
top: 255px;
left: 15px;
}
#quota5 {
top: 300px;
left: 1110px;
top: 203px;
left: 895px;
}
</style>
<script lang="ts" src="./stampoSVG.ts"></script>
+7 -5
View File
@@ -25,6 +25,7 @@ import { recipeActions } from "@/store/recipe.store";
import { prodActions } from "@/store/prod.store";
import { Model } from "vue-property-decorator";
import { prodService } from "./prodService";
import { recipeService } from "./recipeService";
declare const PRODUCTION;
@@ -106,7 +107,7 @@ export class Hub {
// qui i NUOVI metodi NUOVI dal server (Recipe, gauges) da completare lato HUB
this._hub.client.recipeFullData = Hub.recipeFullData;
this._hub.client.setpointHmiInvalid = Hub.setpointHmiInvalid;
this._hub.client.setpointHmiInvalid = Hub.setpointHmiInvalid;
this._hub.client.recipeOverData = Hub.recipeOverData;
this._hub.client.recipeChangedData = Hub.recipeChangedData;
this._hub.client.prodInfoData = Hub.prodData;
@@ -180,11 +181,13 @@ export class Hub {
recipeActions.setCurrent(store, data, true);
}
public static setpointHmiInvalid(data) {
console.log("setpointHmiInvalid");
public static async setpointHmiInvalid(data) {
if (data) {
await recipeService.GetCurrent();
// await recipeService.GetOverview();
}
}
public static recipeOverData(data) {
recipeActions.setOverview(store, data);
}
@@ -194,7 +197,6 @@ export class Hub {
}
public static prodData(data) {
console.log('prodInfoData', data);
prodActions.setProd(store, data);
}
@@ -24,7 +24,6 @@ export class ProdService extends baseRestService {
return result;
}
async Manual() {
await this.Put<any>((await this.BASE_URL()) + "mode/manual", null);
}
@@ -36,5 +35,9 @@ export class ProdService extends baseRestService {
async Start(qty: number, newWorkOrder: boolean, riscqty: number) {
await this.Put<any>((await this.BASE_URL()) + `startFull?requestQty=${qty}&newWorkOrder=${newWorkOrder}&numCicliRisc=${riscqty}`, null);
}
async SetScrap(num: number, scrap: boolean = true) {
await this.Put<any>((await this.BASE_URL()) + `setScrap?num=${num}&isScrap=${scrap}`, null);
}
}
export const prodService = new ProdService();