@@ -1,4 +1,4 @@
|
|||||||
<babeledit_project version="1.2" be_version="2.6.1">
|
<babeledit_project be_version="2.6.1" version="1.2">
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
BabelEdit project file
|
BabelEdit project file
|
||||||
@@ -18,6 +18,63 @@
|
|||||||
<folder_node>
|
<folder_node>
|
||||||
<name>translation</name>
|
<name>translation</name>
|
||||||
<children>
|
<children>
|
||||||
|
<folder_node>
|
||||||
|
<name>allocations</name>
|
||||||
|
<children>
|
||||||
|
<folder_node>
|
||||||
|
<name>actions</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>assign</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>fields</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>employee</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
<name>appointments</name>
|
<name>appointments</name>
|
||||||
<children>
|
<children>
|
||||||
@@ -66,6 +123,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>new</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>reschedule</name>
|
<name>reschedule</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -157,6 +235,32 @@
|
|||||||
</concept_node>
|
</concept_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>fields</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>title</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
<name>labels</name>
|
<name>labels</name>
|
||||||
<children>
|
<children>
|
||||||
@@ -618,12 +722,415 @@
|
|||||||
</folder_node>
|
</folder_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>employees</name>
|
||||||
|
<children>
|
||||||
|
<folder_node>
|
||||||
|
<name>actions</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>new</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>errors</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>delete</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>save</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>validation</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>validationtitle</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>fields</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>active</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>base_rate</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>cost_center</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>employee_number</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>first_name</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>flat_rate</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>hire_date</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>last_name</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>termination_date</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>successes</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>delete</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>save</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
<name>general</name>
|
<name>general</name>
|
||||||
<children>
|
<children>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
<name>actions</name>
|
<name>actions</name>
|
||||||
<children>
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>delete</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>edit</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>reset</name>
|
<name>reset</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -645,6 +1152,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>save</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
@@ -671,6 +1199,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>barcode</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>in</name>
|
<name>in</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -914,6 +1463,32 @@
|
|||||||
</concept_node>
|
</concept_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>validation</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>required</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
</children>
|
||||||
|
</folder_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
@@ -985,6 +1560,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>mod_lb_hrs</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>oem_partno</name>
|
<name>oem_partno</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -3703,6 +4299,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>existing_jobs</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>lines</name>
|
<name>lines</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -3745,6 +4362,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>override_header</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>parts</name>
|
<name>parts</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -3939,6 +4577,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>supplemented</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
</children>
|
</children>
|
||||||
@@ -4143,6 +4802,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>shop</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>vehicles</name>
|
<name>vehicles</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -4697,6 +5377,27 @@
|
|||||||
<folder_node>
|
<folder_node>
|
||||||
<name>fields</name>
|
<name>fields</name>
|
||||||
<children>
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>address</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>allow_text_message</name>
|
<name>allow_text_message</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -4718,6 +5419,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>name</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>ownr_addr1</name>
|
<name>ownr_addr1</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -4975,6 +5697,27 @@
|
|||||||
<folder_node>
|
<folder_node>
|
||||||
<name>labels</name>
|
<name>labels</name>
|
||||||
<children>
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>create_new</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>existing_owners</name>
|
<name>existing_owners</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -5186,6 +5929,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>owners</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>profile</name>
|
<name>profile</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -5228,6 +5992,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>shop</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>vehicledetail</name>
|
<name>vehicledetail</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -5249,6 +6034,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>vehicles</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
@@ -5424,6 +6230,27 @@
|
|||||||
<folder_node>
|
<folder_node>
|
||||||
<name>fields</name>
|
<name>fields</name>
|
||||||
<children>
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>description</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>plate_no</name>
|
<name>plate_no</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"node-sass": "^4.13.1",
|
"node-sass": "^4.13.1",
|
||||||
"react": "^16.12.0",
|
"react": "^16.12.0",
|
||||||
"react-apollo": "^3.1.3",
|
"react-apollo": "^3.1.3",
|
||||||
|
"react-barcode": "^1.4.0",
|
||||||
"react-big-calendar": "^0.23.0",
|
"react-big-calendar": "^0.23.0",
|
||||||
"react-chartjs-2": "^2.9.0",
|
"react-chartjs-2": "^2.9.0",
|
||||||
"react-dom": "^16.12.0",
|
"react-dom": "^16.12.0",
|
||||||
@@ -30,7 +31,6 @@
|
|||||||
"react-redux": "^7.1.3",
|
"react-redux": "^7.1.3",
|
||||||
"react-router-dom": "^5.1.2",
|
"react-router-dom": "^5.1.2",
|
||||||
"react-scripts": "3.3.1",
|
"react-scripts": "3.3.1",
|
||||||
"react-trello": "^2.2.3",
|
|
||||||
"redux": "^4.0.5",
|
"redux": "^4.0.5",
|
||||||
"redux-logger": "^3.0.6",
|
"redux-logger": "^3.0.6",
|
||||||
"redux-persist": "^6.0.0",
|
"redux-persist": "^6.0.0",
|
||||||
|
|||||||
787
client/src/assets/unfolded_car-orig.svg
Normal file
787
client/src/assets/unfolded_car-orig.svg
Normal file
@@ -0,0 +1,787 @@
|
|||||||
|
<?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="1668"
|
||||||
|
height="1160"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||||
|
sodipodi:docname="unfolded_car.svg">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.71043165"
|
||||||
|
inkscape:cx="463.20424"
|
||||||
|
inkscape:cy="602.99002"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="primary"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:snap-global="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1017"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<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 />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="car"
|
||||||
|
inkscape:label="CAR"
|
||||||
|
transform="translate(253.99998,-253.99995)"
|
||||||
|
style="display:inline">
|
||||||
|
<g
|
||||||
|
id="g4113"
|
||||||
|
transform="translate(-13.779768,3.524026)">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="csssscccsssscsccscccsscccssc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3070"
|
||||||
|
d="M 748.57143,752.85714 C 790,737.14285 888.57143,741.42857 940,740 c 51.42857,-1.42857 160.4745,10.23062 201.4286,27.14286 40.9958,16.92944 134.7843,67.65586 151.4285,72.85714 22.8572,7.14286 41.4286,7.14286 80,20 38.5715,12.85714 25.7143,32.85714 25.7143,32.85714 l -30,-4.28571 -5.7562,52.92008 c 0,0 37.1848,1.36563 41.4705,15.65135 4.2857,14.28571 5.7143,31.42857 -2.8571,41.42857 -8.5715,9.99997 -14.2857,-1.42857 -18.5715,12.85717 -4.2857,14.2857 -2.8571,28.5714 -27.1428,27.1428 -24.2857,-1.4285 -98.5715,0 -98.5715,0 0,0 -15.7142,-108.5714 -98.5714,-105.71426 -82.8571,2.85715 -95.7143,105.71426 -95.7143,105.71426 H 562.85714 c 0,0 -5.71428,-104.28569 -97.14286,-105.71426 -91.42857,-1.42857 -98.57142,105.71426 -98.57142,105.71426 H 301.42857 L 282.85714,1000 c -0.51524,0 -26.24328,-10e-6 -21.42857,-17.14285 4.65143,-16.56149 -4.28571,-41.42858 17.14286,-41.42858 21.42857,0 47.14286,1.42857 47.14286,1.42857 L 341.42857,898.57143 300,895.71429 c 0,0 34.28571,-24.28572 118.57143,-32.85715 84.28571,-8.57143 157.14286,-8.57143 192.85714,-31.42857 35.71429,-22.85714 137.14286,-78.57143 137.14286,-78.57143 z"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3846"
|
||||||
|
d="m 282.85714,1000 h 92.85715"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3850"
|
||||||
|
d="M 555.71429,1000 H 1072.8571"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3852"
|
||||||
|
d="m 1245.7143,1000 h 151.4286"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="csccc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3884"
|
||||||
|
d="M 618.57143,847.14286 C 634.28572,828.57143 741.94515,765.61839 770,758.57143 c 29.50156,-7.41035 103.00398,-7.14286 103.00398,-7.14286 l -7.14285,95.71429 z"
|
||||||
|
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3888"
|
||||||
|
d="m 658.57143,817.14286 v 28.57143"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="ccccc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3892"
|
||||||
|
d="m 898.69729,752.83617 -4.28572,94.32767 h 207.16383 c -11.3076,-20.75266 -46.6124,-74.9056 -72.8572,-88.57143 -14.2857,-10 -82.87805,-4.32767 -130.02091,-5.75624 z"
|
||||||
|
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cscsc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3896"
|
||||||
|
d="m 1065.7143,760 c 0,0 80,84.28571 85.7143,87.14286 5.7143,2.85714 115.7143,1.42857 115.7143,1.42857 0,0 -77.1429,-47.14286 -102.8572,-58.57143 -25.7143,-11.42857 -90,-31.42857 -98.5714,-30 z"
|
||||||
|
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="csc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3900"
|
||||||
|
d="m 599.63544,837.66076 c -14.07595,30.96709 -18.29873,71.78734 -18.29873,94.30886 0,22.52152 4.22279,91.49368 22.52152,105.56958"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3900-6"
|
||||||
|
d="m 632.78482,993.12906 c -1.40759,5.63038 -4.04683,81.90444 -6.51012,106.93324 -3.67029,18.7146 -4.98821,51.2184 -6.15823,87.3149 0,22.5215 7.03798,80.2329 12.66836,105.5696"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3920"
|
||||||
|
d="m 357.52911,998.12658 c 0,0 15.48355,-85.86329 106.97722,-85.86329 91.49367,0 109.7924,87.27089 109.7924,87.27089"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3920-5"
|
||||||
|
d="m 800.28863,1253.5341 c 0,0 15.48355,-85.8633 106.97722,-85.8633 91.49364,0 109.79245,87.2709 109.79245,87.2709"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3940"
|
||||||
|
d="M 323.74684,943.23038 H 387.0886"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cssc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3942"
|
||||||
|
d="m 1033.1747,746.16708 c 18.2988,12.66836 56.3038,50.67343 92.9012,104.16203 36.5975,53.48861 8.4456,59.11899 -18.2987,74.60254 -26.7443,15.48354 -49.2658,42.22784 -67.5645,112.60755"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3944"
|
||||||
|
d="M 1112.7747,1196.0455 H 983.27594"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3946"
|
||||||
|
d="M 540.51646,941.82278 H 1085.2557"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3948"
|
||||||
|
d="m 1062.7342,791.21013 v 54.8962"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
rx="2.9330556"
|
||||||
|
ry="7.3789682"
|
||||||
|
y="1144.9166"
|
||||||
|
x="558.65344"
|
||||||
|
height="14.541238"
|
||||||
|
width="41.285542"
|
||||||
|
id="rect3950"
|
||||||
|
style="display:inline;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
rx="2.9330556"
|
||||||
|
ry="7.3789682"
|
||||||
|
y="1144.9166"
|
||||||
|
x="816.24335"
|
||||||
|
height="14.541238"
|
||||||
|
width="41.285542"
|
||||||
|
id="rect3950-4"
|
||||||
|
style="display:inline;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
ry="7.691968"
|
||||||
|
rx="1.6302098"
|
||||||
|
y="1146.318"
|
||||||
|
x="259.53336"
|
||||||
|
height="11.738417"
|
||||||
|
width="18.776392"
|
||||||
|
id="rect4014"
|
||||||
|
style="fill:#ffcb00;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4451"
|
||||||
|
transform="translate(-13.779768,15.524026)">
|
||||||
|
<path
|
||||||
|
inkscape:transform-center-x="-1.6185511"
|
||||||
|
transform="translate(-37.23036,423.94932)"
|
||||||
|
d="m 99.997791,388.63797 -11.711946,16.12011 -18.950327,-6.15733 0,-19.92556 18.950327,-6.15733 z"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
sodipodi:arg2="0.62831853"
|
||||||
|
sodipodi:arg1="0"
|
||||||
|
sodipodi:r2="13.712585"
|
||||||
|
sodipodi:r1="16.949688"
|
||||||
|
sodipodi:cy="388.63797"
|
||||||
|
sodipodi:cx="83.048103"
|
||||||
|
sodipodi:sides="5"
|
||||||
|
id="path4141"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
sodipodi:type="star" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4143"
|
||||||
|
d="m 31.741795,745.02273 315.301265,-111.2"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4145"
|
||||||
|
d="M 30.3342,888.59742 345.63546,1004.0202"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="ccssccccc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4165"
|
||||||
|
d="m 595.41266,378.78481 140.75949,38.00506 c 0,0 -8.44557,49.22222 -8.44557,71.9633 0,20.14574 0,124.39619 0,147.62151 0,30.96708 8.44557,78.82532 8.44557,78.82532 l -140.7595,33.78228 c 0,0 -17.24303,-61.90221 -17.24303,-92.90127 0.38411,-33.80191 1.75909,-154.79945 2.1114,-185.80253 -1.4076,-30.96709 15.13164,-91.49367 15.13164,-91.49367 z"
|
||||||
|
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="csccsc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4175"
|
||||||
|
d="m 736.17216,416.78987 c 0,0 94.30885,5.63038 152.02025,5.63038 106.97721,0 201.28609,-5.63038 201.28609,-5.63038 m -1.4076,297.00254 c 0,0 -77.4177,-5.63039 -199.87849,-5.63039 -68.97215,0 -152.02026,7.03798 -152.02026,7.03798"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
ry="34.43626"
|
||||||
|
rx="31.189682"
|
||||||
|
y="729.20502"
|
||||||
|
x="528.6228"
|
||||||
|
height="181.57974"
|
||||||
|
width="106.97722"
|
||||||
|
id="rect4177"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4135-9"
|
||||||
|
d="M 345.77724,632.78476 H 51.589892 l -14.07595,102.75443 -7.03797,11.26076 v 142.16709 l 7.03797,14.07595 15.48355,101.34681 H 341.55445"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="csscccssccc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4203"
|
||||||
|
d="m 1086.6633,416.78987 c 0,0 -12.6684,47.85823 -12.6684,73.19494 0,25.33671 0,121.05316 0,146.38987 0,25.33671 12.6684,77.41773 12.6684,77.41773 l 205.5089,38.00505 108.3848,10e-6 c 0,0 14.0759,-81.64051 14.0759,-115.42279 0,-33.78227 0,-109.7924 0,-147.79746 0,-38.00507 -14.0759,-109.79241 -14.0759,-109.79241 h -108.3848 z"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="csscsccsc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4205"
|
||||||
|
d="m 1097.9241,435.08861 c 0,0 -8.4456,40.82025 -8.4456,56.3038 0,15.48354 0,125.27594 0,144.98227 0,19.70633 7.038,57.7114 7.038,57.7114 0,0 94.3088,26.7443 123.8683,26.7443 29.5595,0 42.2279,0 42.2279,0 V 408.3443 c 0,0 -22.5216,0 -47.8583,0 -25.3367,0 -116.8303,26.74431 -116.8303,26.74431 z"
|
||||||
|
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4207"
|
||||||
|
d="m 1292.1722,378.78481 c 0,0 30.967,40.82025 30.967,111.2 0,70.37975 0,81.64051 0,146.38987 0,64.74937 -30.967,116.83038 -30.967,116.83038"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4209"
|
||||||
|
d="m 578.52152,489.98481 32.37468,-32.37468 v -40.82026 112.6076"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4209-7"
|
||||||
|
d="m 323.81774,865.03792 32.37468,-32.37468 v -40.82026 112.6076"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4209-76"
|
||||||
|
d="m 1005.0937,787.62021 -32.37469,-32.37468 v -40.82026 112.6076"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cssc"
|
||||||
|
transform="translate(-253.99998,253.99995)"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4243"
|
||||||
|
d="m 595.41266,378.78481 c 0,0 -42.22785,78.82532 -42.22785,111.2 0,32.37468 0,105.56962 0,146.38987 0,40.82026 42.22785,114.01519 42.22785,114.01519"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m -106.79241,740.91638 1.4076,-91.49367 c 0,0 5.630382,-23.92911 -25.33671,-25.3367 -30.96709,-1.4076 -26.74431,2.81518 -26.74431,2.81518 l 1.40759,415.24051 c 0,0 9.85317,0 28.1519,0 28.151917,0 22.52153,-22.5216 22.52153,-22.5216 l -1e-5,-95.71637 c -12.67694,0 -11.26075,-9.61416 -11.26075,-16.89115 0,-16.94968 -10e-6,-136.5367 -10e-6,-149.20506 0.45035,-18.89009 9.85317,-16.89114 9.85317,-16.89114 z"
|
||||||
|
id="path4245"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccsccsccccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2.20000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m -155.98734,646.16195 h 49.26582"
|
||||||
|
id="path4247"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2.20000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m -155.13671,1020.4303 h 49.26582"
|
||||||
|
id="path4247-2"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2.20000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m -156.69114,705.05816 h 49.26582"
|
||||||
|
id="path4247-1"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2.20000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m -153.87595,964.87082 h 49.26582"
|
||||||
|
id="path4247-0"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M -147.09621,703.82272 V 964.22778"
|
||||||
|
id="path4281-1"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M -137.24304,705.38727 V 965.79233"
|
||||||
|
id="path4281-8"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<g
|
||||||
|
id="g4428"
|
||||||
|
transform="translate(-13.779768,15.524026)">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="csssscccsssscsccscccsscccssc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3070-9"
|
||||||
|
d="m 494.57145,641.6137 c 41.42857,15.71429 140,11.42857 191.42857,12.85714 51.42857,1.42857 160.4745,-10.23062 201.4286,-27.14286 40.9958,-16.92944 134.78428,-67.65586 151.42848,-72.85714 22.8572,-7.14286 41.4286,-7.14286 80,-20 38.5715,-12.85714 25.7143,-32.85714 25.7143,-32.85714 l -30,4.28571 -5.7562,-52.92008 c 0,0 37.1848,-1.36563 41.4705,-15.65135 4.2857,-14.28571 5.7143,-31.42857 -2.8571,-41.42857 -8.5715,-9.99997 -14.2857,1.42857 -18.5715,-12.85717 -4.2857,-14.2857 -2.8571,-28.5714 -27.1428,-27.1428 -24.2857,1.4285 -98.5715,0 -98.5715,0 0,0 -15.71418,108.5714 -98.57138,105.71426 -82.8571,-2.85715 -95.7143,-105.71426 -95.7143,-105.71426 H 308.85716 c 0,0 -5.71428,104.28569 -97.14286,105.71426 -91.42857,1.42857 -98.57142,-105.71426 -98.57142,-105.71426 H 47.428587 l -18.57143,38.5714 c -0.51524,0 -26.243277,10e-6 -21.428567,17.14285 4.65143,16.56149 -4.28571,41.42858 17.14286,41.42858 21.428567,0 47.142857,-1.42857 47.142857,-1.42857 l 15.71428,44.28571 -41.42857,2.85714 c 0,0 34.28571,24.28572 118.571433,32.85715 84.28571,8.57143 157.14286,8.57143 192.85714,31.42857 35.71429,22.85714 137.14286,78.57143 137.14286,78.57143 z"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3846-2"
|
||||||
|
d="M 28.857157,394.47084 H 121.71431"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3850-6"
|
||||||
|
d="M 301.71431,394.47084 H 818.85712"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3852-6"
|
||||||
|
d="M 991.71432,394.47084 H 1143.1429"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="csccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3884-4"
|
||||||
|
d="m 364.57145,547.32798 c 15.71429,18.57143 123.37372,81.52447 151.42857,88.57143 29.50156,7.41035 103.00398,7.14286 103.00398,7.14286 l -7.14285,-95.71429 z"
|
||||||
|
style="display:inline;fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3888-9"
|
||||||
|
d="M 404.57145,577.32798 V 548.75655"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="ccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3892-5"
|
||||||
|
d="M 644.69731,641.63467 640.41159,547.307 h 207.16383 c -11.3076,20.75266 -46.6124,74.9056 -72.8572,88.57143 -14.2857,10 -82.87805,4.32767 -130.02091,5.75624 z"
|
||||||
|
style="display:inline;fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cscsc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3896-0"
|
||||||
|
d="m 811.71432,634.47084 c 0,0 80,-84.28571 85.7143,-87.14286 5.7143,-2.85714 115.71428,-1.42857 115.71428,-1.42857 0,0 -77.14288,47.14286 -102.85718,58.57143 -25.7143,11.42857 -90,31.42857 -98.5714,30 z"
|
||||||
|
style="display:inline;fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="csc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3900-4"
|
||||||
|
d="m 345.63546,556.81008 c -14.07595,-30.96709 -18.29873,-71.78734 -18.29873,-94.30886 0,-22.52152 4.22279,-91.49368 22.52152,-105.56958"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3900-6-8"
|
||||||
|
d="m 632.78482,655.34173 c -1.40759,-5.63038 -4.04683,-81.90444 -6.51012,-106.93324 -3.67029,-18.7146 -4.98821,-51.2184 -6.15823,-87.3149 0,-22.5215 7.03798,-80.2329 12.66836,-105.5696"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3920-7"
|
||||||
|
d="m 103.52913,396.34426 c 0,0 15.48355,85.86329 106.97722,85.86329 91.49367,0 109.7924,-87.27089 109.7924,-87.27089"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3920-5-1"
|
||||||
|
d="m 800.28863,394.93669 c 0,0 15.48355,85.8633 106.97722,85.8633 91.49364,0 109.79245,-87.2709 109.79245,-87.2709"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3940-7"
|
||||||
|
d="M 69.746857,451.24046 H 133.08862"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cssc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3942-2"
|
||||||
|
d="m 779.17472,648.30376 c 18.2988,-12.66836 56.3038,-50.67343 92.9012,-104.16203 36.5975,-53.48861 8.4456,-59.11899 -18.2987,-74.60254 -26.7443,-15.48354 -49.2658,-42.22784 -67.5645,-112.60755"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3944-7"
|
||||||
|
d="M 1112.7747,452.42529 H 983.27594"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3946-2"
|
||||||
|
d="M 286.51648,452.64806 H 831.25572"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3948-2"
|
||||||
|
d="m 808.73422,603.26071 v -54.8962"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
transform="scale(1,-1)"
|
||||||
|
rx="2.9330556"
|
||||||
|
ry="7.3789682"
|
||||||
|
y="-503.55417"
|
||||||
|
x="558.65344"
|
||||||
|
height="14.541238"
|
||||||
|
width="41.285542"
|
||||||
|
id="rect3950-6"
|
||||||
|
style="display:inline;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
transform="scale(1,-1)"
|
||||||
|
rx="2.9330556"
|
||||||
|
ry="7.3789682"
|
||||||
|
y="-503.55417"
|
||||||
|
x="816.24329"
|
||||||
|
height="14.541238"
|
||||||
|
width="41.285542"
|
||||||
|
id="rect3950-4-1"
|
||||||
|
style="display:inline;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
transform="scale(1,-1)"
|
||||||
|
ry="7.691968"
|
||||||
|
rx="1.6302098"
|
||||||
|
y="-502.1528"
|
||||||
|
x="259.53333"
|
||||||
|
height="11.738417"
|
||||||
|
width="18.776392"
|
||||||
|
id="rect4014-0"
|
||||||
|
style="display:inline;fill:#ffcb00;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<circle
|
||||||
|
transform="translate(941.34179,284.00501)"
|
||||||
|
id="path4335"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
cx="59.118988"
|
||||||
|
cy="211.28101"
|
||||||
|
r="16.89114" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M -126.57469,704.93158 V 965.33664"
|
||||||
|
id="path4281-8-0"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffc0;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m -153.87595,992.4894 v -26.0405 h 22.52152 22.52152 v 26.0405 26.0405 h -22.52152 -22.52152 z"
|
||||||
|
id="path4361"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffc0;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m -153.87595,675.78054 v -27.4481 h 22.52152 22.52152 v 27.4481 27.4481 h -22.52152 -22.52152 z"
|
||||||
|
id="path4363"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m -157.39494,624.37968 c 0,0 -4.22278,-12.66836 -18.29873,-12.66836 -14.07595,0 -14.07595,8.44557 -14.07595,8.44557 v 423.68601 c 0,0 1.40759,9.8532 14.07595,9.8532 12.66835,0 18.29873,-9.8532 18.29873,-9.8532"
|
||||||
|
id="path4377"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="csccsc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m -191.17722,624.37967 c 0,0 -35.18987,-1.40759 -35.18987,21.11393 0,22.52152 0,349.08354 0,371.605 0,22.5215 36.59747,25.3367 36.59747,25.3367"
|
||||||
|
id="path4381"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cssc" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4467"
|
||||||
|
width="16.891144"
|
||||||
|
height="35.189873"
|
||||||
|
x="-216.51393"
|
||||||
|
y="648.30878"
|
||||||
|
rx="7.7417746"
|
||||||
|
ry="6.2843671" />
|
||||||
|
<rect
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4467-6"
|
||||||
|
width="16.891144"
|
||||||
|
height="35.189873"
|
||||||
|
x="-216.51393"
|
||||||
|
y="985.57465"
|
||||||
|
rx="7.7417746"
|
||||||
|
ry="6.2843671" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4487"
|
||||||
|
width="30.967089"
|
||||||
|
height="377.23544"
|
||||||
|
x="-62.939251"
|
||||||
|
y="645.49365" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 1200.9342,633.85815 v 73.19494 h 67.5645 v -83.0481 l -25.3367,-14.07595 z"
|
||||||
|
id="path4499"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccc" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 1200.9342,963.23538 h 67.5645 v 78.82532 l -23.9291,14.0759 -43.6354,-18.2988 z"
|
||||||
|
id="path4501"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccc" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 1200.9342,692.97714 V 977.31132"
|
||||||
|
id="path4503"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 1268.4987,693.56955 V 977.90373"
|
||||||
|
id="path4505"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4534"
|
||||||
|
width="14.075921"
|
||||||
|
height="147.79749"
|
||||||
|
x="1216.5645"
|
||||||
|
y="759.50879" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 1224.1949,758.1012 V 704.61259"
|
||||||
|
id="path4536"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 1224.1949,961.97968 V 908.49107"
|
||||||
|
id="path4536-0"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 1254.5696,707.42778 V 963.61006"
|
||||||
|
id="path4556"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 1268.757,624.97209 c 0,0 4.2228,-12.66836 18.2987,-12.66836 14.076,0 14.076,8.44557 14.076,8.44557 v 423.686 c 0,0 -1.4076,9.8532 -14.076,9.8532 -12.6683,0 -18.2987,-9.8532 -18.2987,-9.8532"
|
||||||
|
id="path4377-2"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="csccsc" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 1302.5393,624.97208 c 0,0 35.1898,-1.40759 35.1898,21.11393 0,22.52152 0,349.08354 0,371.60499 0,22.5215 -36.5974,25.3367 -36.5974,25.3367"
|
||||||
|
id="path4381-0"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cssc" />
|
||||||
|
<rect
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4467-5"
|
||||||
|
width="16.891144"
|
||||||
|
height="35.189873"
|
||||||
|
x="-1329.876"
|
||||||
|
y="648.90118"
|
||||||
|
rx="7.7417746"
|
||||||
|
ry="6.2843671"
|
||||||
|
transform="scale(-1,1)" />
|
||||||
|
<rect
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4467-6-5"
|
||||||
|
width="16.891144"
|
||||||
|
height="35.189873"
|
||||||
|
x="-1329.876"
|
||||||
|
y="986.16711"
|
||||||
|
rx="7.7417746"
|
||||||
|
ry="6.2843671"
|
||||||
|
transform="scale(-1,1)" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 1199.6734,632.82525 67.5645,74.60253"
|
||||||
|
id="path4585"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 1199.6734,708.02018 67.5645,-73.19493"
|
||||||
|
id="path4587"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 1199.8962,962.97968 67.5645,74.60252"
|
||||||
|
id="path4585-9"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 1199.8962,1038.1746 67.5645,-73.19492"
|
||||||
|
id="path4587-0"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<circle
|
||||||
|
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4610"
|
||||||
|
transform="translate(78.488602,1074.6683)"
|
||||||
|
cx="119.64557"
|
||||||
|
cy="202.83545"
|
||||||
|
r="76.010124" />
|
||||||
|
<circle
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4612"
|
||||||
|
transform="translate(94.675942,1204.8708)"
|
||||||
|
cx="103.45823"
|
||||||
|
cy="72.632912"
|
||||||
|
r="44.339241" />
|
||||||
|
<circle
|
||||||
|
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4610-9"
|
||||||
|
transform="translate(78.488602,187.66068)"
|
||||||
|
cx="119.64557"
|
||||||
|
cy="202.83545"
|
||||||
|
r="76.010124" />
|
||||||
|
<circle
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4612-4"
|
||||||
|
transform="translate(94.675942,317.86322)"
|
||||||
|
cx="103.45823"
|
||||||
|
cy="72.632912"
|
||||||
|
r="44.339241" />
|
||||||
|
<circle
|
||||||
|
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4610-5"
|
||||||
|
transform="translate(773.02535,187.66068)"
|
||||||
|
cx="119.64557"
|
||||||
|
cy="202.83545"
|
||||||
|
r="76.010124" />
|
||||||
|
<circle
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4612-1"
|
||||||
|
transform="translate(789.21269,317.86322)"
|
||||||
|
cx="103.45823"
|
||||||
|
cy="72.632912"
|
||||||
|
r="44.339241" />
|
||||||
|
<circle
|
||||||
|
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4610-4"
|
||||||
|
transform="translate(773.02535,1074.6683)"
|
||||||
|
cx="119.64557"
|
||||||
|
cy="202.83545"
|
||||||
|
r="76.010124" />
|
||||||
|
<circle
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4612-3"
|
||||||
|
transform="translate(789.21269,1204.8708)"
|
||||||
|
cx="103.45823"
|
||||||
|
cy="72.632912"
|
||||||
|
r="44.339241" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 1338.5088,829.07334 h 40.8203"
|
||||||
|
id="path3083"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<circle
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path3853"
|
||||||
|
transform="translate(1441.2633,600.30879)"
|
||||||
|
cx="-59.118988"
|
||||||
|
cy="229.57974"
|
||||||
|
r="4.222785" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 778.06325,845.37208 -38.7088,-38.70886"
|
||||||
|
id="path3855"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<g
|
||||||
|
id="g3952"
|
||||||
|
transform="translate(-13.779768,15.524026)">
|
||||||
|
<circle
|
||||||
|
transform="translate(-79.458203,449.80248)"
|
||||||
|
id="path3857"
|
||||||
|
style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
cx="-81.640511"
|
||||||
|
cy="188.75949"
|
||||||
|
r="4.222785" />
|
||||||
|
<circle
|
||||||
|
transform="translate(-79.458203,569.9172)"
|
||||||
|
id="path3857-2"
|
||||||
|
style="display:inline;fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
cx="-81.640511"
|
||||||
|
cy="188.75949"
|
||||||
|
r="4.222785" />
|
||||||
|
<circle
|
||||||
|
transform="translate(-79.458203,690.03203)"
|
||||||
|
id="path3857-3"
|
||||||
|
style="display:inline;fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
cx="-81.640511"
|
||||||
|
cy="188.75949"
|
||||||
|
r="4.222785" />
|
||||||
|
<circle
|
||||||
|
transform="translate(-79.458203,810.14679)"
|
||||||
|
id="path3857-7"
|
||||||
|
style="display:inline;fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
cx="-81.640511"
|
||||||
|
cy="188.75949"
|
||||||
|
r="4.222785" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g3946"
|
||||||
|
transform="translate(-13.779768,17.524026)">
|
||||||
|
<circle
|
||||||
|
transform="translate(1381.6254,448.24805)"
|
||||||
|
id="path3857-97"
|
||||||
|
style="display:inline;fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
cx="-81.640511"
|
||||||
|
cy="188.75949"
|
||||||
|
r="4.222785" />
|
||||||
|
<circle
|
||||||
|
transform="translate(1381.6254,568.36277)"
|
||||||
|
id="path3857-2-3"
|
||||||
|
style="display:inline;fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
cx="-81.640511"
|
||||||
|
cy="188.75949"
|
||||||
|
r="4.222785" />
|
||||||
|
<circle
|
||||||
|
transform="translate(1381.6254,688.4776)"
|
||||||
|
id="path3857-3-6"
|
||||||
|
style="display:inline;fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
cx="-81.640511"
|
||||||
|
cy="188.75949"
|
||||||
|
r="4.222785" />
|
||||||
|
<circle
|
||||||
|
transform="translate(1381.6254,808.59236)"
|
||||||
|
id="path3857-7-1"
|
||||||
|
style="display:inline;fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
cx="-81.640511"
|
||||||
|
cy="188.75949"
|
||||||
|
r="4.222785" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="primary"
|
||||||
|
inkscape:label="primary">
|
||||||
|
<circle
|
||||||
|
style="fill:#a02c2c"
|
||||||
|
id="01"
|
||||||
|
cx="320.93164"
|
||||||
|
cy="-388.63797"
|
||||||
|
r="66.15696"
|
||||||
|
transform="scale(1,-1)"
|
||||||
|
inkscape:label="01" />
|
||||||
|
<circle
|
||||||
|
style="fill:#a02c2c"
|
||||||
|
id="02"
|
||||||
|
cx="320.93164"
|
||||||
|
cy="-757.42786"
|
||||||
|
r="66.15696"
|
||||||
|
transform="scale(1,-1)"
|
||||||
|
inkscape:label="01" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 43 KiB |
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 24 KiB |
144
client/src/assets/unfolded_car_clean.svg
Normal file
144
client/src/assets/unfolded_car_clean.svg
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
<svg id="svg166" version="1.1" viewBox="0 0 1668 1160" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g id="g158" transform="translate(254 -254)">
|
||||||
|
<g id="g34" transform="translate(-13.78 3.524)" stroke="#000">
|
||||||
|
<path id="path10" d="m494.57 1006.9c41.429-15.714 140-11.427 191.43-12.857 51.429-1.429 160.48 10.23 201.43 27.143 40.995 16.93 134.78 67.656 151.43 72.857 22.857 7.143 41.429 7.143 80 20 38.572 12.857 25.714 32.857 25.714 32.857l-30-4.286-5.756 52.92s37.185 1.366 41.47 15.652c4.286 14.286 5.715 31.428-2.856 41.428-8.572 10-14.286-1.428-18.572 12.858-4.286 14.285-2.857 28.571-27.143 27.142-24.285-1.428-98.571 0-98.571 0s-15.714-108.57-98.573-105.71c-82.857 2.857-95.714 105.71-95.714 105.71h-500s-5.714-104.28-97.143-105.71c-91.428-1.428-98.571 105.71-98.571 105.71h-65.713l-18.572-38.571c-0.515 0-26.243 0-21.428-17.143 4.651-16.561-4.286-41.428 17.142-41.428 21.429 0 47.143 1.428 47.143 1.428l15.715-44.286-41.429-2.857s34.286-24.285 118.57-32.857c84.286-8.571 157.14-8.571 192.86-31.428 35.714-22.858 137.14-78.572 137.14-78.572z" fill="none" stroke-width="5"/>
|
||||||
|
<path id="path12" d="m28.857 1254h92.857m180 0h517.14m172.86 0h151.43" fill="none" stroke-width="2"/>
|
||||||
|
<path id="path14" d="m364.57 1101.1c15.715-18.572 123.37-81.525 151.43-88.572 29.502-7.41 103-7.142 103-7.142l-7.143 95.714z" fill="#f0ffeb" stroke-width="5"/>
|
||||||
|
<path id="path16" d="m404.57 1071.1v28.571" fill="none" stroke-width="2"/>
|
||||||
|
<path id="path18" d="m644.7 1006.8-4.285 94.328h207.16c-11.307-20.753-46.612-74.906-72.857-88.572-14.285-10-82.878-4.327-130.02-5.756zm167.02 7.164s80 84.286 85.715 87.143c5.714 2.857 115.71 1.428 115.71 1.428s-77.143-47.141-102.86-58.571c-25.715-11.429-90-31.429-98.572-30z" fill="#f0ffeb" stroke-width="5"/>
|
||||||
|
<g fill="none">
|
||||||
|
<path id="path20" d="m345.64 1091.7c-14.075 30.968-18.298 71.788-18.298 94.31 0 22.521 4.223 91.493 22.521 105.57m282.93-298.41c-1.408 5.63-4.047 81.903-6.51 106.93-3.67 18.715-4.989 51.219-6.159 87.315 0 22.522 7.038 80.233 12.669 105.57" stroke-width="5"/>
|
||||||
|
<path id="path22" d="m103.53 1252.1s15.483-85.864 106.98-85.864c91.494 0 109.79 87.271 109.79 87.271m479.99 0s15.483-85.863 106.98-85.863c91.493 0 109.79 87.27 109.79 87.27m-947.31-57.711h63.342" stroke-width="2"/>
|
||||||
|
<path id="path24" d="m779.18 1000.2c18.299 12.668 56.304 50.673 92.9 104.16 36.598 53.489 8.447 59.12-18.298 74.603-26.744 15.483-49.266 42.227-67.564 112.61" stroke-width="5"/>
|
||||||
|
<path id="path26" d="m1112.8 1196h-129.5m-696.76-0.222h544.74m-22.522-150.61v54.896" stroke-width="2"/>
|
||||||
|
</g>
|
||||||
|
<g stroke-width="2">
|
||||||
|
<rect id="rect28" x="558.65" y="1144.9" width="41.286" height="14.541" rx="2.933" ry="7.379" fill="#e6e6e6"/>
|
||||||
|
<rect id="rect30" x="816.24" y="1144.9" width="41.286" height="14.541" rx="2.933" ry="7.379" fill="#e6e6e6"/>
|
||||||
|
<rect id="rect32" x="259.53" y="1146.3" width="18.776" height="11.738" rx="1.63" ry="7.692" fill="#ffcb00"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="g54" transform="translate(-13.78 15.524)" stroke="#000">
|
||||||
|
<path id="path36" d="m62.767 812.59-11.712 16.12-18.95-6.157v-19.925l18.95-6.158z" fill="none" stroke-width="5"/>
|
||||||
|
<path id="path38" d="m31.742 745.02 315.3-111.2m-316.71 254.77 315.3 115.42" fill="none" stroke-width="2"/>
|
||||||
|
<path id="path40" d="m341.41 632.78 140.76 38.005s-8.446 49.222-8.446 71.963v147.62c0 30.967 8.445 78.825 8.445 78.825l-140.76 33.782s-17.242-61.902-17.242-92.901l2.111-185.8c-1.408-30.967 15.132-91.493 15.132-91.493z" fill="#f0ffeb" stroke-width="5"/>
|
||||||
|
<g fill="none">
|
||||||
|
<path id="path42" d="m482.17 670.79s94.309 5.63 152.02 5.63c106.98 0 201.29-5.63 201.29-5.63m-1.408 297s-77.418-5.63-199.88-5.63c-68.972 0-152.02 7.038-152.02 7.038" stroke-width="5"/>
|
||||||
|
<rect id="rect44" x="528.62" y="729.2" width="106.98" height="181.58" rx="31.19" ry="34.436" stroke-width="2"/>
|
||||||
|
<path id="path46" d="m345.78 632.78h-294.19l-14.076 102.75-7.038 11.26v142.17l7.038 14.076 15.483 101.35h288.56m491.11-333.6s-12.668 47.858-12.668 73.195v146.39c0 25.336 12.668 77.417 12.668 77.417l205.51 38.005h108.38s14.076-81.64 14.076-115.42v-147.8c0-38.005-14.076-109.79-14.076-109.79h-108.38z" stroke-width="5"/>
|
||||||
|
</g>
|
||||||
|
<path id="path48" d="m843.92 689.09s-8.445 40.82-8.445 56.303v144.98c0 19.706 7.038 57.711 7.038 57.711s94.308 26.744 123.87 26.744h42.228v-312.49h-47.859c-25.336 0-116.83 26.745-116.83 26.745z" fill="#f0ffeb" stroke-width="5"/>
|
||||||
|
<path id="path50" d="m1038.2 632.78s30.967 40.82 30.967 111.2v146.39c0 64.749-30.967 116.83-30.967 116.83m-713.65-263.22 32.374-32.375v-40.82 112.61m-33.078 81.641 32.374-32.375v-40.82 112.61m648.9-116.83-32.375-32.374v-40.82 112.61" fill="none" stroke-width="2"/>
|
||||||
|
<path id="path52" d="m341.41 632.78s-42.228 78.825-42.228 111.2v146.39c0 40.82 42.228 114.02 42.228 114.02" fill="none" stroke-width="2"/>
|
||||||
|
</g>
|
||||||
|
<g fill="none" stroke="#000">
|
||||||
|
<path id="path56" d="m-106.79 740.92 1.407-91.493s5.63-23.93-25.337-25.337c-30.967-1.408-26.744 2.815-26.744 2.815l1.408 415.24h28.152c28.152 0 22.521-22.52 22.521-22.52v-95.717c-12.677 0-11.26-9.614-11.26-16.891v-149.2c0.45-18.89 9.853-16.892 9.853-16.892z" stroke-width="5"/>
|
||||||
|
<path id="path58" d="m-155.99 646.16h49.265m-48.415 374.27h49.266m-50.82-315.37h49.266m-46.451 259.81h49.266" stroke-width="2.2"/>
|
||||||
|
<path id="path60" d="m-147.1 703.82v260.4m9.853-258.84v260.4" stroke-width="2"/>
|
||||||
|
</g>
|
||||||
|
<g id="g88" transform="translate(-13.78 15.524)" stroke="#000">
|
||||||
|
<path id="path62" d="m494.57 641.61c41.429 15.714 140 11.428 191.43 12.856s160.48-10.23 201.43-27.143c40.995-16.93 134.78-67.656 151.43-72.857 22.857-7.143 41.429-7.143 80-20 38.572-12.857 25.714-32.857 25.714-32.857l-30 4.285-5.756-52.92s37.185-1.365 41.47-15.651c4.286-14.286 5.715-31.429-2.856-41.429-8.572-10-14.286 1.429-18.572-12.857-4.286-14.285-2.857-28.571-27.143-27.143-24.285 1.429-98.571 0-98.571 0s-15.714 108.57-98.572 105.72c-82.857-2.857-95.714-105.72-95.714-105.72h-500s-5.714 104.29-97.143 105.72c-91.428 1.428-98.571-105.72-98.571-105.72h-65.714l-18.572 38.572c-0.515 0-26.243 0-21.428 17.143 4.651 16.561-4.286 41.428 17.142 41.428 21.429 0 47.143-1.428 47.143-1.428l15.715 44.285-41.429 2.859s34.286 24.285 118.57 32.857c84.286 8.571 157.14 8.571 192.86 31.428 35.714 22.857 137.14 78.572 137.14 78.572z" fill="none" stroke-width="5"/>
|
||||||
|
<path id="path64" d="m28.857 394.47h92.857m180 0h517.14m172.86 0h151.43" fill="none" stroke-width="2"/>
|
||||||
|
<path id="path66" d="m364.57 547.33c15.715 18.571 123.37 81.524 151.43 88.571 29.502 7.41 103 7.143 103 7.143l-7.143-95.714z" fill="#f0ffeb" stroke-width="5"/>
|
||||||
|
<path id="path68" d="m404.57 577.33v-28.571" fill="none" stroke-width="2"/>
|
||||||
|
<path id="path70" d="m644.7 641.64-4.285-94.328h207.16c-11.307 20.753-46.612 74.906-72.857 88.571-14.285 10-82.878 4.328-130.02 5.757zm167.02-7.165s80-84.285 85.715-87.142c5.714-2.857 115.71-1.429 115.71-1.429s-77.143 47.143-102.86 58.572c-25.715 11.428-90 31.428-98.572 30z" fill="#f0ffeb" stroke-width="5"/>
|
||||||
|
<g fill="none">
|
||||||
|
<path id="path72" d="m345.64 556.81c-14.075-30.967-18.298-71.787-18.298-94.309 0-22.521 4.223-91.493 22.521-105.57m282.93 298.41c-1.408-5.63-4.047-81.905-6.51-106.93-3.67-18.714-4.989-51.218-6.159-87.314 0-22.522 7.038-80.233 12.669-105.57" stroke-width="5"/>
|
||||||
|
<path id="path74" d="m103.53 396.34s15.483 85.864 106.98 85.864c91.494 0 109.79-87.271 109.79-87.271m479.99 0s15.483 85.863 106.98 85.863c91.493 0 109.79-87.27 109.79-87.27m-947.31 57.71h63.342" stroke-width="2"/>
|
||||||
|
<path id="path76" d="m779.18 648.3c18.299-12.669 56.304-50.674 92.9-104.16 36.598-53.489 8.447-59.12-18.298-74.603-26.744-15.483-49.266-42.228-67.564-112.61" stroke-width="5"/>
|
||||||
|
<path id="path78" d="m1112.8 452.42h-129.5m-696.76 0.223h544.74m-22.522 150.61v-54.895" stroke-width="2"/>
|
||||||
|
</g>
|
||||||
|
<g stroke-width="2">
|
||||||
|
<rect id="rect80" transform="scale(1 -1)" x="558.65" y="-503.55" width="41.286" height="14.541" rx="2.933" ry="7.379" fill="#e6e6e6"/>
|
||||||
|
<rect id="rect82" transform="scale(1 -1)" x="816.24" y="-503.55" width="41.286" height="14.541" rx="2.933" ry="7.379" fill="#e6e6e6"/>
|
||||||
|
<rect id="rect84" transform="scale(1 -1)" x="259.53" y="-502.15" width="18.776" height="11.738" rx="1.63" ry="7.692" fill="#ffcb00"/>
|
||||||
|
<circle id="circle86" transform="translate(941.34 284)" cx="59.119" cy="211.28" r="16.891" fill="#fff"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path id="path90" d="m-126.58 704.93v260.4" fill="none" stroke="#000" stroke-width="2"/>
|
||||||
|
<path id="path92" d="m-153.88 992.49v-26.041h45.043v52.08h-45.043zm0-316.71v-27.448h45.043v54.898h-45.043z" fill="#ffffc0"/>
|
||||||
|
<g fill="none" stroke="#000">
|
||||||
|
<path id="path94" d="m-157.4 624.38s-4.223-12.669-18.299-12.669-14.076 8.446-14.076 8.446v423.69s1.408 9.853 14.076 9.853c12.669 0 18.3-9.853 18.3-9.853" stroke-width="5"/>
|
||||||
|
<path id="path96" d="m-191.18 624.38s-35.19-1.408-35.19 21.114v371.6c0 22.521 36.597 25.336 36.597 25.336" stroke-width="5"/>
|
||||||
|
<g stroke-width="2">
|
||||||
|
<rect id="rect98" x="-216.51" y="648.31" width="16.891" height="35.19" rx="7.742" ry="6.284"/>
|
||||||
|
<rect id="rect100" x="-216.51" y="985.58" width="16.891" height="35.19" rx="7.742" ry="6.284"/>
|
||||||
|
<path id="path102" d="m-62.939 645.49h30.967v377.24h-30.967z"/>
|
||||||
|
</g>
|
||||||
|
<path id="path104" d="m1200.9 633.86v73.195h67.565v-83.048l-25.337-14.076zm0 329.38h67.565v78.826l-23.93 14.076-43.635-18.3zm0-270.26v284.33m67.565-283.74v284.33" stroke-width="5"/>
|
||||||
|
<path id="path106" d="m1216.6 759.51h14.076v147.8h-14.076zm7.631-1.408v-53.488m0 257.37v-53.49m30.375-201.06v256.18" stroke-width="2"/>
|
||||||
|
<path id="path108" d="m1268.8 624.97s4.223-12.668 18.299-12.668 14.076 8.445 14.076 8.445v423.69s-1.408 9.853-14.076 9.853c-12.669 0-18.299-9.853-18.299-9.853m33.783-419.46s35.19-1.408 35.19 21.114v371.6c0 22.521-36.598 25.337-36.598 25.337" stroke-width="5"/>
|
||||||
|
<g stroke-width="2">
|
||||||
|
<rect id="rect110" transform="scale(-1 1)" x="-1329.9" y="648.9" width="16.891" height="35.19" rx="7.742" ry="6.284"/>
|
||||||
|
<rect id="rect112" transform="scale(-1 1)" x="-1329.9" y="986.17" width="16.891" height="35.19" rx="7.742" ry="6.284"/>
|
||||||
|
<path id="path114" d="m1199.7 632.82 67.565 74.603m-67.565 0.592 67.565-73.195m-67.342 328.16 67.565 74.602m-67.565 0.593 67.565-73.195"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g stroke="#000">
|
||||||
|
<g stroke-width="2">
|
||||||
|
<circle id="circle116" transform="translate(78.489 1074.7)" cx="119.65" cy="202.84" r="76.01" fill="#c8c8c8"/>
|
||||||
|
<circle id="circle118" transform="translate(94.676 1204.9)" cx="103.46" cy="72.633" r="44.339" fill="#fff"/>
|
||||||
|
<circle id="circle120" transform="translate(78.489 187.66)" cx="119.65" cy="202.84" r="76.01" fill="#c8c8c8"/>
|
||||||
|
<circle id="circle122" transform="translate(94.676 317.86)" cx="103.46" cy="72.633" r="44.339" fill="#fff"/>
|
||||||
|
<circle id="circle124" transform="translate(773.02 187.66)" cx="119.65" cy="202.84" r="76.01" fill="#c8c8c8"/>
|
||||||
|
<circle id="circle126" transform="translate(789.21 317.86)" cx="103.46" cy="72.633" r="44.339" fill="#fff"/>
|
||||||
|
<circle id="circle128" transform="translate(773.02 1074.7)" cx="119.65" cy="202.84" r="76.01" fill="#c8c8c8"/>
|
||||||
|
<circle id="circle130" transform="translate(789.21 1204.9)" cx="103.46" cy="72.633" r="44.339" fill="#fff"/>
|
||||||
|
</g>
|
||||||
|
<path id="path132" d="m1338.5 829.07h40.82" fill="none" stroke-width="5"/>
|
||||||
|
<circle id="circle134" transform="translate(1441.3 600.31)" cx="-59.119" cy="229.58" r="4.223" fill="#3c3c3c" stroke-width="5"/>
|
||||||
|
<g stroke-width="2">
|
||||||
|
<path id="path136" d="m778.06 845.37-38.709-38.709" fill="none"/>
|
||||||
|
<g id="g146" transform="translate(-13.78 15.524)" fill="#3c3c3c">
|
||||||
|
<circle id="circle138" transform="translate(-79.458 449.8)" cx="-81.641" cy="188.76" r="4.223"/>
|
||||||
|
<circle id="circle140" transform="translate(-79.458 569.92)" cx="-81.641" cy="188.76" r="4.223"/>
|
||||||
|
<circle id="circle142" transform="translate(-79.458 690.03)" cx="-81.641" cy="188.76" r="4.223"/>
|
||||||
|
<circle id="circle144" transform="translate(-79.458 810.15)" cx="-81.641" cy="188.76" r="4.223"/>
|
||||||
|
</g>
|
||||||
|
<g id="g156" transform="translate(-13.78 17.524)" fill="#3c3c3c">
|
||||||
|
<circle id="circle148" transform="translate(1381.6 448.25)" cx="-81.641" cy="188.76" r="4.223"/>
|
||||||
|
<circle id="circle150" transform="translate(1381.6 568.36)" cx="-81.641" cy="188.76" r="4.223"/>
|
||||||
|
<circle id="circle152" transform="translate(1381.6 688.48)" cx="-81.641" cy="188.76" r="4.223"/>
|
||||||
|
<circle id="circle154" transform="translate(1381.6 808.59)" cx="-81.641" cy="188.76" r="4.223"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="layer2" fill="#d00000">
|
||||||
|
<circle id="p02" cx="503.65" cy="248.75" r="61.935" />
|
||||||
|
<circle id="p03" cx="863.41" cy="248.75" r="61.935"/>
|
||||||
|
<circle id="p04" cx="1181.5" cy="248.75" r="61.935"/>
|
||||||
|
<circle id="p05" cx="1378.4" cy="151.16" r="61.935"/>
|
||||||
|
<circle id="p06" cx="1535.1" cy="581.37" r="61.935"/>
|
||||||
|
<circle id="p07" cx="1378.4" cy="997.9" r="61.935"/>
|
||||||
|
<circle id="p08" cx="1181.5" cy="914.24" r="61.935"/>
|
||||||
|
<circle id="p09" transform="scale(1,-1)" cx="863.41" cy="-914.24" r="61.935"/>
|
||||||
|
<circle id="p10" cx="503.65" cy="914.24" r="61.935"/>
|
||||||
|
<circle id="p11" cx="297.77" cy="997.9" r="61.935"/>
|
||||||
|
<circle id="p12" cx="93.269" cy="581.37" r="61.935"/>
|
||||||
|
<circle id="p25" cx="424.31" cy="581.37" r="61.935"/>
|
||||||
|
<circle id="p27" cx="972.84" cy="581.37" r="61.935"/>
|
||||||
|
<circle id="p01" cx="297.77" cy="151.16" r="61.935"/>
|
||||||
|
<circle id="p26" cx="1339.4" cy="581.37" r="61.935"/>
|
||||||
|
</g>
|
||||||
|
<g id="g4994" fill="#ffef00">
|
||||||
|
<circle id="s02" cx="503.65" cy="248.75" r="61.935"/>
|
||||||
|
<circle id="s03" cx="863.41" cy="248.75" r="61.935"/>
|
||||||
|
<circle id="s04" cx="1181.5" cy="248.75" r="61.935"/>
|
||||||
|
<circle id="s05" cx="1378.4" cy="151.16" r="61.935"/>
|
||||||
|
<circle id="s06" cx="1535.1" cy="581.37" r="61.935"/>
|
||||||
|
<circle id="s07" cx="1378.4" cy="997.9" r="61.935"/>
|
||||||
|
<circle id="s08" cx="1181.5" cy="914.24" r="61.935"/>
|
||||||
|
<circle id="s09" transform="scale(1,-1)" cx="863.41" cy="-914.24" r="61.935"/>
|
||||||
|
<circle id="s10" cx="503.65" cy="914.24" r="61.935"/>
|
||||||
|
<circle id="s11" cx="297.77" cy="997.9" r="61.935"/>
|
||||||
|
<circle id="s12" cx="93.269" cy="581.37" r="61.935"/>
|
||||||
|
<circle id="s25" cx="424.31" cy="581.37" r="61.935"/>
|
||||||
|
<circle id="s27" cx="972.84" cy="581.37" r="61.935"/>
|
||||||
|
<circle id="s01" cx="297.77" cy="151.16" r="61.935"/>
|
||||||
|
<circle id="s26" cx="1339.4" cy="581.37" r="61.935"/>
|
||||||
|
</g>
|
||||||
|
<g id="layer3">
|
||||||
|
<text id="p15" opacity="0" x="382.62802" y="1034.3463" fill="#fd0000" font-family="sans-serif" font-size="1696.9px" letter-spacing="0px" stroke-width="17.676" word-spacing="0px" style="line-height:5.25" xml:space="preserve"><tspan id="tspan4997" x="382.62802" y="1034.3463" fill="#fd0000" stroke-width="17.676">x</tspan></text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,76 @@
|
|||||||
|
import { Select, Button, Popover, InputNumber } from "antd";
|
||||||
|
import React from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { connect } from "react-redux";
|
||||||
|
import { createStructuredSelector } from "reselect";
|
||||||
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
|
|
||||||
|
const mapStateToProps = createStructuredSelector({
|
||||||
|
bodyshop: selectBodyshop
|
||||||
|
});
|
||||||
|
|
||||||
|
export default connect(
|
||||||
|
mapStateToProps,
|
||||||
|
null
|
||||||
|
)(function AllocationsAssignmentComponent({
|
||||||
|
bodyshop,
|
||||||
|
handleAssignment,
|
||||||
|
assignment,
|
||||||
|
setAssignment,
|
||||||
|
visibilityState,
|
||||||
|
maxHours
|
||||||
|
}) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const onChange = e => {
|
||||||
|
console.log("e", e);
|
||||||
|
setAssignment({ ...assignment, employeeid: e });
|
||||||
|
};
|
||||||
|
|
||||||
|
const [visibility, setVisibility] = visibilityState;
|
||||||
|
|
||||||
|
const popContent = (
|
||||||
|
<div>
|
||||||
|
<Select
|
||||||
|
showSearch
|
||||||
|
style={{ width: 200 }}
|
||||||
|
placeholder="Select a person"
|
||||||
|
optionFilterProp="children"
|
||||||
|
onChange={onChange}
|
||||||
|
filterOption={(input, option) =>
|
||||||
|
option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{bodyshop.employees.map(emp => (
|
||||||
|
<Select.Option value={emp.id} key={emp.id}>
|
||||||
|
{`${emp.first_name} ${emp.last_name}`}
|
||||||
|
</Select.Option>
|
||||||
|
))}
|
||||||
|
</Select>
|
||||||
|
<InputNumber
|
||||||
|
defaultValue={assignment.hours}
|
||||||
|
placeholder={t("joblines.fields.mod_lb_hrs")}
|
||||||
|
max={parseFloat(maxHours)}
|
||||||
|
min={0}
|
||||||
|
onChange={e => setAssignment({ ...assignment, hours: e })}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
disabled={!assignment.employeeid}
|
||||||
|
onClick={handleAssignment}
|
||||||
|
>
|
||||||
|
Assign
|
||||||
|
</Button>
|
||||||
|
<Button onClick={() => setVisibility(false)}>Close</Button>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Popover content={popContent} visible={visibility}>
|
||||||
|
<Button onClick={() => setVisibility(true)}>
|
||||||
|
{t("allocations.actions.assign")}
|
||||||
|
</Button>
|
||||||
|
</Popover>
|
||||||
|
);
|
||||||
|
});
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
import React, { useState } from "react";
|
||||||
|
import AllocationsAssignmentComponent from "./allocations-assignment.component";
|
||||||
|
import { useMutation } from "react-apollo";
|
||||||
|
import { INSERT_ALLOCATION } from "../../graphql/allocations.queries";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { notification } from "antd";
|
||||||
|
|
||||||
|
export default function AllocationsAssignmentContainer({ jobLineId, hours }) {
|
||||||
|
const visibilityState = useState(false);
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const [assignment, setAssignment] = useState({
|
||||||
|
joblineid: jobLineId,
|
||||||
|
hours: parseFloat(hours),
|
||||||
|
employeeid: null
|
||||||
|
});
|
||||||
|
const [insertAllocation] = useMutation(INSERT_ALLOCATION);
|
||||||
|
|
||||||
|
const handleAssignment = () => {
|
||||||
|
insertAllocation({ variables: { alloc: { ...assignment } } }).then(r => {
|
||||||
|
notification["success"]({
|
||||||
|
message: t("employees.successes.save")
|
||||||
|
});
|
||||||
|
//TODO: Better way to reset the field decorators?
|
||||||
|
visibilityState[1](false);
|
||||||
|
//refetch().then(r => form.resetFields());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<AllocationsAssignmentComponent
|
||||||
|
handleAssignment={handleAssignment}
|
||||||
|
maxHours={hours}
|
||||||
|
assignment={assignment}
|
||||||
|
setAssignment={setAssignment}
|
||||||
|
visibilityState={visibilityState}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import { Tag, Popover } from "antd";
|
||||||
|
import React from "react";
|
||||||
|
import Barcode from "react-barcode";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
export default function BarcodePopupComponent({ value }) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Popover
|
||||||
|
content={
|
||||||
|
<Barcode
|
||||||
|
value={value}
|
||||||
|
background="transparent"
|
||||||
|
displayValue={false}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<Tag>{t("general.labels.barcode")}</Tag>
|
||||||
|
</Popover>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,5 +1,10 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { Drawer } from "antd";
|
|
||||||
export default function ChatWindowComponent({ ...drawerProps }) {
|
export default function ChatWindowComponent({ toggleChatVisible }) {
|
||||||
return <Drawer {...drawerProps}>Chat Windows and more</Drawer>;
|
return (
|
||||||
|
<div style={{ height: "300px" }}>
|
||||||
|
<button onClick={() => toggleChatVisible()}>hide</button> This is a chat
|
||||||
|
window!
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { Layout } from "antd";
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
@@ -18,17 +17,8 @@ export default connect(
|
|||||||
mapStateToProps,
|
mapStateToProps,
|
||||||
mapDispatchToProps
|
mapDispatchToProps
|
||||||
)(function ChatWindowContainer({ chatVisible, toggleChatVisible }) {
|
)(function ChatWindowContainer({ chatVisible, toggleChatVisible }) {
|
||||||
return (
|
if (chatVisible)
|
||||||
<Layout.Sider
|
return <ChatWindowComponent toggleChatVisible={toggleChatVisible} />;
|
||||||
collapsible
|
|
||||||
defaultCollapsed
|
return <div onClick={() => toggleChatVisible()}>Chat</div>;
|
||||||
theme="light"
|
|
||||||
collapsedWidth={0}
|
|
||||||
width={300}
|
|
||||||
collapsed={!chatVisible}
|
|
||||||
onCollapse={(collapsed, type) => toggleChatVisible()}
|
|
||||||
>
|
|
||||||
<ChatWindowComponent mask={false} maskClosable={false} zIndex={0} />
|
|
||||||
</Layout.Sider>
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -72,6 +72,12 @@ export default ({
|
|||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
</Menu.SubMenu>
|
</Menu.SubMenu>
|
||||||
|
|
||||||
|
<Menu.Item key="shop">
|
||||||
|
<Link to="/manage/shop">
|
||||||
|
{t("menus.header.shop")}
|
||||||
|
</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
|
||||||
<Menu.SubMenu
|
<Menu.SubMenu
|
||||||
title={
|
title={
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -0,0 +1,735 @@
|
|||||||
|
import React from "react";
|
||||||
|
export default ({ dmg1, dmg2 }) => (
|
||||||
|
<svg
|
||||||
|
id='svg166'
|
||||||
|
version='1.1'
|
||||||
|
viewBox='0 0 1668 1160'
|
||||||
|
xmlns='http://www.w3.org/2000/svg'>
|
||||||
|
<g id='g158' transform='translate(254 -254)'>
|
||||||
|
<g id='g34' transform='translate(-13.78 3.524)' stroke='#000'>
|
||||||
|
<path
|
||||||
|
id='path10'
|
||||||
|
d='m494.57 1006.9c41.429-15.714 140-11.427 191.43-12.857 51.429-1.429 160.48 10.23 201.43 27.143 40.995 16.93 134.78 67.656 151.43 72.857 22.857 7.143 41.429 7.143 80 20 38.572 12.857 25.714 32.857 25.714 32.857l-30-4.286-5.756 52.92s37.185 1.366 41.47 15.652c4.286 14.286 5.715 31.428-2.856 41.428-8.572 10-14.286-1.428-18.572 12.858-4.286 14.285-2.857 28.571-27.143 27.142-24.285-1.428-98.571 0-98.571 0s-15.714-108.57-98.573-105.71c-82.857 2.857-95.714 105.71-95.714 105.71h-500s-5.714-104.28-97.143-105.71c-91.428-1.428-98.571 105.71-98.571 105.71h-65.713l-18.572-38.571c-0.515 0-26.243 0-21.428-17.143 4.651-16.561-4.286-41.428 17.142-41.428 21.429 0 47.143 1.428 47.143 1.428l15.715-44.286-41.429-2.857s34.286-24.285 118.57-32.857c84.286-8.571 157.14-8.571 192.86-31.428 35.714-22.858 137.14-78.572 137.14-78.572z'
|
||||||
|
fill='none'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path12'
|
||||||
|
d='m28.857 1254h92.857m180 0h517.14m172.86 0h151.43'
|
||||||
|
fill='none'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path14'
|
||||||
|
d='m364.57 1101.1c15.715-18.572 123.37-81.525 151.43-88.572 29.502-7.41 103-7.142 103-7.142l-7.143 95.714z'
|
||||||
|
fill='#f0ffeb'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path16'
|
||||||
|
d='m404.57 1071.1v28.571'
|
||||||
|
fill='none'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path18'
|
||||||
|
d='m644.7 1006.8-4.285 94.328h207.16c-11.307-20.753-46.612-74.906-72.857-88.572-14.285-10-82.878-4.327-130.02-5.756zm167.02 7.164s80 84.286 85.715 87.143c5.714 2.857 115.71 1.428 115.71 1.428s-77.143-47.141-102.86-58.571c-25.715-11.429-90-31.429-98.572-30z'
|
||||||
|
fill='#f0ffeb'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<g fill='none'>
|
||||||
|
<path
|
||||||
|
id='path20'
|
||||||
|
d='m345.64 1091.7c-14.075 30.968-18.298 71.788-18.298 94.31 0 22.521 4.223 91.493 22.521 105.57m282.93-298.41c-1.408 5.63-4.047 81.903-6.51 106.93-3.67 18.715-4.989 51.219-6.159 87.315 0 22.522 7.038 80.233 12.669 105.57'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path22'
|
||||||
|
d='m103.53 1252.1s15.483-85.864 106.98-85.864c91.494 0 109.79 87.271 109.79 87.271m479.99 0s15.483-85.863 106.98-85.863c91.493 0 109.79 87.27 109.79 87.27m-947.31-57.711h63.342'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path24'
|
||||||
|
d='m779.18 1000.2c18.299 12.668 56.304 50.673 92.9 104.16 36.598 53.489 8.447 59.12-18.298 74.603-26.744 15.483-49.266 42.227-67.564 112.61'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path26'
|
||||||
|
d='m1112.8 1196h-129.5m-696.76-0.222h544.74m-22.522-150.61v54.896'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
<g strokeWidth='2'>
|
||||||
|
<rect
|
||||||
|
id='rect28'
|
||||||
|
x='558.65'
|
||||||
|
y='1144.9'
|
||||||
|
width='41.286'
|
||||||
|
height='14.541'
|
||||||
|
rx='2.933'
|
||||||
|
ry='7.379'
|
||||||
|
fill='#e6e6e6'
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
id='rect30'
|
||||||
|
x='816.24'
|
||||||
|
y='1144.9'
|
||||||
|
width='41.286'
|
||||||
|
height='14.541'
|
||||||
|
rx='2.933'
|
||||||
|
ry='7.379'
|
||||||
|
fill='#e6e6e6'
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
id='rect32'
|
||||||
|
x='259.53'
|
||||||
|
y='1146.3'
|
||||||
|
width='18.776'
|
||||||
|
height='11.738'
|
||||||
|
rx='1.63'
|
||||||
|
ry='7.692'
|
||||||
|
fill='#ffcb00'
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id='g54' transform='translate(-13.78 15.524)' stroke='#000'>
|
||||||
|
<path
|
||||||
|
id='path36'
|
||||||
|
d='m62.767 812.59-11.712 16.12-18.95-6.157v-19.925l18.95-6.158z'
|
||||||
|
fill='none'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path38'
|
||||||
|
d='m31.742 745.02 315.3-111.2m-316.71 254.77 315.3 115.42'
|
||||||
|
fill='none'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path40'
|
||||||
|
d='m341.41 632.78 140.76 38.005s-8.446 49.222-8.446 71.963v147.62c0 30.967 8.445 78.825 8.445 78.825l-140.76 33.782s-17.242-61.902-17.242-92.901l2.111-185.8c-1.408-30.967 15.132-91.493 15.132-91.493z'
|
||||||
|
fill='#f0ffeb'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<g fill='none'>
|
||||||
|
<path
|
||||||
|
id='path42'
|
||||||
|
d='m482.17 670.79s94.309 5.63 152.02 5.63c106.98 0 201.29-5.63 201.29-5.63m-1.408 297s-77.418-5.63-199.88-5.63c-68.972 0-152.02 7.038-152.02 7.038'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
id='rect44'
|
||||||
|
x='528.62'
|
||||||
|
y='729.2'
|
||||||
|
width='106.98'
|
||||||
|
height='181.58'
|
||||||
|
rx='31.19'
|
||||||
|
ry='34.436'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path46'
|
||||||
|
d='m345.78 632.78h-294.19l-14.076 102.75-7.038 11.26v142.17l7.038 14.076 15.483 101.35h288.56m491.11-333.6s-12.668 47.858-12.668 73.195v146.39c0 25.336 12.668 77.417 12.668 77.417l205.51 38.005h108.38s14.076-81.64 14.076-115.42v-147.8c0-38.005-14.076-109.79-14.076-109.79h-108.38z'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
id='path48'
|
||||||
|
d='m843.92 689.09s-8.445 40.82-8.445 56.303v144.98c0 19.706 7.038 57.711 7.038 57.711s94.308 26.744 123.87 26.744h42.228v-312.49h-47.859c-25.336 0-116.83 26.745-116.83 26.745z'
|
||||||
|
fill='#f0ffeb'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path50'
|
||||||
|
d='m1038.2 632.78s30.967 40.82 30.967 111.2v146.39c0 64.749-30.967 116.83-30.967 116.83m-713.65-263.22 32.374-32.375v-40.82 112.61m-33.078 81.641 32.374-32.375v-40.82 112.61m648.9-116.83-32.375-32.374v-40.82 112.61'
|
||||||
|
fill='none'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path52'
|
||||||
|
d='m341.41 632.78s-42.228 78.825-42.228 111.2v146.39c0 40.82 42.228 114.02 42.228 114.02'
|
||||||
|
fill='none'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
<g fill='none' stroke='#000'>
|
||||||
|
<path
|
||||||
|
id='path56'
|
||||||
|
d='m-106.79 740.92 1.407-91.493s5.63-23.93-25.337-25.337c-30.967-1.408-26.744 2.815-26.744 2.815l1.408 415.24h28.152c28.152 0 22.521-22.52 22.521-22.52v-95.717c-12.677 0-11.26-9.614-11.26-16.891v-149.2c0.45-18.89 9.853-16.892 9.853-16.892z'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path58'
|
||||||
|
d='m-155.99 646.16h49.265m-48.415 374.27h49.266m-50.82-315.37h49.266m-46.451 259.81h49.266'
|
||||||
|
strokeWidth='2.2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path60'
|
||||||
|
d='m-147.1 703.82v260.4m9.853-258.84v260.4'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
<g id='g88' transform='translate(-13.78 15.524)' stroke='#000'>
|
||||||
|
<path
|
||||||
|
id='path62'
|
||||||
|
d='m494.57 641.61c41.429 15.714 140 11.428 191.43 12.856s160.48-10.23 201.43-27.143c40.995-16.93 134.78-67.656 151.43-72.857 22.857-7.143 41.429-7.143 80-20 38.572-12.857 25.714-32.857 25.714-32.857l-30 4.285-5.756-52.92s37.185-1.365 41.47-15.651c4.286-14.286 5.715-31.429-2.856-41.429-8.572-10-14.286 1.429-18.572-12.857-4.286-14.285-2.857-28.571-27.143-27.143-24.285 1.429-98.571 0-98.571 0s-15.714 108.57-98.572 105.72c-82.857-2.857-95.714-105.72-95.714-105.72h-500s-5.714 104.29-97.143 105.72c-91.428 1.428-98.571-105.72-98.571-105.72h-65.714l-18.572 38.572c-0.515 0-26.243 0-21.428 17.143 4.651 16.561-4.286 41.428 17.142 41.428 21.429 0 47.143-1.428 47.143-1.428l15.715 44.285-41.429 2.859s34.286 24.285 118.57 32.857c84.286 8.571 157.14 8.571 192.86 31.428 35.714 22.857 137.14 78.572 137.14 78.572z'
|
||||||
|
fill='none'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path64'
|
||||||
|
d='m28.857 394.47h92.857m180 0h517.14m172.86 0h151.43'
|
||||||
|
fill='none'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path66'
|
||||||
|
d='m364.57 547.33c15.715 18.571 123.37 81.524 151.43 88.571 29.502 7.41 103 7.143 103 7.143l-7.143-95.714z'
|
||||||
|
fill='#f0ffeb'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path68'
|
||||||
|
d='m404.57 577.33v-28.571'
|
||||||
|
fill='none'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path70'
|
||||||
|
d='m644.7 641.64-4.285-94.328h207.16c-11.307 20.753-46.612 74.906-72.857 88.571-14.285 10-82.878 4.328-130.02 5.757zm167.02-7.165s80-84.285 85.715-87.142c5.714-2.857 115.71-1.429 115.71-1.429s-77.143 47.143-102.86 58.572c-25.715 11.428-90 31.428-98.572 30z'
|
||||||
|
fill='#f0ffeb'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<g fill='none'>
|
||||||
|
<path
|
||||||
|
id='path72'
|
||||||
|
d='m345.64 556.81c-14.075-30.967-18.298-71.787-18.298-94.309 0-22.521 4.223-91.493 22.521-105.57m282.93 298.41c-1.408-5.63-4.047-81.905-6.51-106.93-3.67-18.714-4.989-51.218-6.159-87.314 0-22.522 7.038-80.233 12.669-105.57'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path74'
|
||||||
|
d='m103.53 396.34s15.483 85.864 106.98 85.864c91.494 0 109.79-87.271 109.79-87.271m479.99 0s15.483 85.863 106.98 85.863c91.493 0 109.79-87.27 109.79-87.27m-947.31 57.71h63.342'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path76'
|
||||||
|
d='m779.18 648.3c18.299-12.669 56.304-50.674 92.9-104.16 36.598-53.489 8.447-59.12-18.298-74.603-26.744-15.483-49.266-42.228-67.564-112.61'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path78'
|
||||||
|
d='m1112.8 452.42h-129.5m-696.76 0.223h544.74m-22.522 150.61v-54.895'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
<g strokeWidth='2'>
|
||||||
|
<rect
|
||||||
|
id='rect80'
|
||||||
|
transform='scale(1 -1)'
|
||||||
|
x='558.65'
|
||||||
|
y='-503.55'
|
||||||
|
width='41.286'
|
||||||
|
height='14.541'
|
||||||
|
rx='2.933'
|
||||||
|
ry='7.379'
|
||||||
|
fill='#e6e6e6'
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
id='rect82'
|
||||||
|
transform='scale(1 -1)'
|
||||||
|
x='816.24'
|
||||||
|
y='-503.55'
|
||||||
|
width='41.286'
|
||||||
|
height='14.541'
|
||||||
|
rx='2.933'
|
||||||
|
ry='7.379'
|
||||||
|
fill='#e6e6e6'
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
id='rect84'
|
||||||
|
transform='scale(1 -1)'
|
||||||
|
x='259.53'
|
||||||
|
y='-502.15'
|
||||||
|
width='18.776'
|
||||||
|
height='11.738'
|
||||||
|
rx='1.63'
|
||||||
|
ry='7.692'
|
||||||
|
fill='#ffcb00'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle86'
|
||||||
|
transform='translate(941.34 284)'
|
||||||
|
cx='59.119'
|
||||||
|
cy='211.28'
|
||||||
|
r='16.891'
|
||||||
|
fill='#fff'
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
id='path90'
|
||||||
|
d='m-126.58 704.93v260.4'
|
||||||
|
fill='none'
|
||||||
|
stroke='#000'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path92'
|
||||||
|
d='m-153.88 992.49v-26.041h45.043v52.08h-45.043zm0-316.71v-27.448h45.043v54.898h-45.043z'
|
||||||
|
fill='#ffffc0'
|
||||||
|
/>
|
||||||
|
<g fill='none' stroke='#000'>
|
||||||
|
<path
|
||||||
|
id='path94'
|
||||||
|
d='m-157.4 624.38s-4.223-12.669-18.299-12.669-14.076 8.446-14.076 8.446v423.69s1.408 9.853 14.076 9.853c12.669 0 18.3-9.853 18.3-9.853'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path96'
|
||||||
|
d='m-191.18 624.38s-35.19-1.408-35.19 21.114v371.6c0 22.521 36.597 25.336 36.597 25.336'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<g strokeWidth='2'>
|
||||||
|
<rect
|
||||||
|
id='rect98'
|
||||||
|
x='-216.51'
|
||||||
|
y='648.31'
|
||||||
|
width='16.891'
|
||||||
|
height='35.19'
|
||||||
|
rx='7.742'
|
||||||
|
ry='6.284'
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
id='rect100'
|
||||||
|
x='-216.51'
|
||||||
|
y='985.58'
|
||||||
|
width='16.891'
|
||||||
|
height='35.19'
|
||||||
|
rx='7.742'
|
||||||
|
ry='6.284'
|
||||||
|
/>
|
||||||
|
<path id='path102' d='m-62.939 645.49h30.967v377.24h-30.967z' />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
id='path104'
|
||||||
|
d='m1200.9 633.86v73.195h67.565v-83.048l-25.337-14.076zm0 329.38h67.565v78.826l-23.93 14.076-43.635-18.3zm0-270.26v284.33m67.565-283.74v284.33'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path106'
|
||||||
|
d='m1216.6 759.51h14.076v147.8h-14.076zm7.631-1.408v-53.488m0 257.37v-53.49m30.375-201.06v256.18'
|
||||||
|
strokeWidth='2'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path108'
|
||||||
|
d='m1268.8 624.97s4.223-12.668 18.299-12.668 14.076 8.445 14.076 8.445v423.69s-1.408 9.853-14.076 9.853c-12.669 0-18.299-9.853-18.299-9.853m33.783-419.46s35.19-1.408 35.19 21.114v371.6c0 22.521-36.598 25.337-36.598 25.337'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<g strokeWidth='2'>
|
||||||
|
<rect
|
||||||
|
id='rect110'
|
||||||
|
transform='scale(-1 1)'
|
||||||
|
x='-1329.9'
|
||||||
|
y='648.9'
|
||||||
|
width='16.891'
|
||||||
|
height='35.19'
|
||||||
|
rx='7.742'
|
||||||
|
ry='6.284'
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
id='rect112'
|
||||||
|
transform='scale(-1 1)'
|
||||||
|
x='-1329.9'
|
||||||
|
y='986.17'
|
||||||
|
width='16.891'
|
||||||
|
height='35.19'
|
||||||
|
rx='7.742'
|
||||||
|
ry='6.284'
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
id='path114'
|
||||||
|
d='m1199.7 632.82 67.565 74.603m-67.565 0.592 67.565-73.195m-67.342 328.16 67.565 74.602m-67.565 0.593 67.565-73.195'
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g stroke='#000'>
|
||||||
|
<g strokeWidth='2'>
|
||||||
|
<circle
|
||||||
|
id='circle116'
|
||||||
|
transform='translate(78.489 1074.7)'
|
||||||
|
cx='119.65'
|
||||||
|
cy='202.84'
|
||||||
|
r='76.01'
|
||||||
|
fill='#c8c8c8'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle118'
|
||||||
|
transform='translate(94.676 1204.9)'
|
||||||
|
cx='103.46'
|
||||||
|
cy='72.633'
|
||||||
|
r='44.339'
|
||||||
|
fill='#fff'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle120'
|
||||||
|
transform='translate(78.489 187.66)'
|
||||||
|
cx='119.65'
|
||||||
|
cy='202.84'
|
||||||
|
r='76.01'
|
||||||
|
fill='#c8c8c8'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle122'
|
||||||
|
transform='translate(94.676 317.86)'
|
||||||
|
cx='103.46'
|
||||||
|
cy='72.633'
|
||||||
|
r='44.339'
|
||||||
|
fill='#fff'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle124'
|
||||||
|
transform='translate(773.02 187.66)'
|
||||||
|
cx='119.65'
|
||||||
|
cy='202.84'
|
||||||
|
r='76.01'
|
||||||
|
fill='#c8c8c8'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle126'
|
||||||
|
transform='translate(789.21 317.86)'
|
||||||
|
cx='103.46'
|
||||||
|
cy='72.633'
|
||||||
|
r='44.339'
|
||||||
|
fill='#fff'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle128'
|
||||||
|
transform='translate(773.02 1074.7)'
|
||||||
|
cx='119.65'
|
||||||
|
cy='202.84'
|
||||||
|
r='76.01'
|
||||||
|
fill='#c8c8c8'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle130'
|
||||||
|
transform='translate(789.21 1204.9)'
|
||||||
|
cx='103.46'
|
||||||
|
cy='72.633'
|
||||||
|
r='44.339'
|
||||||
|
fill='#fff'
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
id='path132'
|
||||||
|
d='m1338.5 829.07h40.82'
|
||||||
|
fill='none'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle134'
|
||||||
|
transform='translate(1441.3 600.31)'
|
||||||
|
cx='-59.119'
|
||||||
|
cy='229.58'
|
||||||
|
r='4.223'
|
||||||
|
fill='#3c3c3c'
|
||||||
|
strokeWidth='5'
|
||||||
|
/>
|
||||||
|
<g strokeWidth='2'>
|
||||||
|
<path id='path136' d='m778.06 845.37-38.709-38.709' fill='none' />
|
||||||
|
<g id='g146' transform='translate(-13.78 15.524)' fill='#3c3c3c'>
|
||||||
|
<circle
|
||||||
|
id='circle138'
|
||||||
|
transform='translate(-79.458 449.8)'
|
||||||
|
cx='-81.641'
|
||||||
|
cy='188.76'
|
||||||
|
r='4.223'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle140'
|
||||||
|
transform='translate(-79.458 569.92)'
|
||||||
|
cx='-81.641'
|
||||||
|
cy='188.76'
|
||||||
|
r='4.223'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle142'
|
||||||
|
transform='translate(-79.458 690.03)'
|
||||||
|
cx='-81.641'
|
||||||
|
cy='188.76'
|
||||||
|
r='4.223'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle144'
|
||||||
|
transform='translate(-79.458 810.15)'
|
||||||
|
cx='-81.641'
|
||||||
|
cy='188.76'
|
||||||
|
r='4.223'
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
<g id='g156' transform='translate(-13.78 17.524)' fill='#3c3c3c'>
|
||||||
|
<circle
|
||||||
|
id='circle148'
|
||||||
|
transform='translate(1381.6 448.25)'
|
||||||
|
cx='-81.641'
|
||||||
|
cy='188.76'
|
||||||
|
r='4.223'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle150'
|
||||||
|
transform='translate(1381.6 568.36)'
|
||||||
|
cx='-81.641'
|
||||||
|
cy='188.76'
|
||||||
|
r='4.223'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle152'
|
||||||
|
transform='translate(1381.6 688.48)'
|
||||||
|
cx='-81.641'
|
||||||
|
cy='188.76'
|
||||||
|
r='4.223'
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='circle154'
|
||||||
|
transform='translate(1381.6 808.59)'
|
||||||
|
cx='-81.641'
|
||||||
|
cy='188.76'
|
||||||
|
r='4.223'
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id='layer2' fill='#d00000'>
|
||||||
|
<circle
|
||||||
|
id='p02'
|
||||||
|
cx='503.65'
|
||||||
|
cy='248.75'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "02" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p03'
|
||||||
|
cx='863.41'
|
||||||
|
cy='248.75'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "03" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p04'
|
||||||
|
cx='1181.5'
|
||||||
|
cy='248.75'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "04" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p05'
|
||||||
|
cx='1378.4'
|
||||||
|
cy='151.16'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "05" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p06'
|
||||||
|
cx='1535.1'
|
||||||
|
cy='581.37'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "06" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p07'
|
||||||
|
cx='1378.4'
|
||||||
|
cy='997.9'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "07" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p08'
|
||||||
|
cx='1181.5'
|
||||||
|
cy='914.24'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "08" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p09'
|
||||||
|
transform='scale(1,-1)'
|
||||||
|
cx='863.41'
|
||||||
|
cy='-914.24'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "09" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p10'
|
||||||
|
cx='503.65'
|
||||||
|
cy='914.24'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "10" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p11'
|
||||||
|
cx='297.77'
|
||||||
|
cy='997.9'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "11" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p12'
|
||||||
|
cx='93.269'
|
||||||
|
cy='581.37'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "12" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p25'
|
||||||
|
cx='424.31'
|
||||||
|
cy='581.37'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "25" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p27'
|
||||||
|
cx='972.84'
|
||||||
|
cy='581.37'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "27" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p01'
|
||||||
|
cx='297.77'
|
||||||
|
cy='151.16'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "01" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='p26'
|
||||||
|
cx='1339.4'
|
||||||
|
cy='581.37'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg1 === "26" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
<g id='g4994' fill='#ffef00'>
|
||||||
|
<circle
|
||||||
|
id='s02'
|
||||||
|
cx='503.65'
|
||||||
|
cy='248.75'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "02" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s03'
|
||||||
|
cx='863.41'
|
||||||
|
cy='248.75'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "03" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s04'
|
||||||
|
cx='1181.5'
|
||||||
|
cy='248.75'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "04" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s05'
|
||||||
|
cx='1378.4'
|
||||||
|
cy='151.16'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "05" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s06'
|
||||||
|
cx='1535.1'
|
||||||
|
cy='581.37'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "06" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s07'
|
||||||
|
cx='1378.4'
|
||||||
|
cy='997.9'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "07" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s08'
|
||||||
|
cx='1181.5'
|
||||||
|
cy='914.24'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "08" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s09'
|
||||||
|
transform='scale(1,-1)'
|
||||||
|
cx='863.41'
|
||||||
|
cy='-914.24'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "09" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s10'
|
||||||
|
cx='503.65'
|
||||||
|
cy='914.24'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "10" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s11'
|
||||||
|
cx='297.77'
|
||||||
|
cy='997.9'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "11" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s12'
|
||||||
|
cx='93.269'
|
||||||
|
cy='581.37'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "12" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s25'
|
||||||
|
cx='424.31'
|
||||||
|
cy='581.37'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "25" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s27'
|
||||||
|
cx='972.84'
|
||||||
|
cy='581.37'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "27" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s01'
|
||||||
|
cx='297.77'
|
||||||
|
cy='151.16'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "01" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
id='s26'
|
||||||
|
cx='1339.4'
|
||||||
|
cy='581.37'
|
||||||
|
r='61.935'
|
||||||
|
opacity={dmg2 === "26" ? 100 : 0}
|
||||||
|
/>
|
||||||
|
{
|
||||||
|
// <text
|
||||||
|
// id='p15'
|
||||||
|
// opacity='0'
|
||||||
|
// x='382.62802'
|
||||||
|
// y='1034.3463'
|
||||||
|
// fill='#fd0000'
|
||||||
|
// fontFamily='sans-serif'
|
||||||
|
// fontSize='1696.9px'
|
||||||
|
// letterSpacing='0px'
|
||||||
|
// strokeWidth='17.676'
|
||||||
|
// wordSpacing='0px'
|
||||||
|
// style='line-height:5.25'>
|
||||||
|
// x
|
||||||
|
// </text>
|
||||||
|
}
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
@@ -1,18 +1,14 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import CardTemplate from "./job-detail-cards.template.component";
|
import CardTemplate from "./job-detail-cards.template.component";
|
||||||
import UnfoldedCar from "../../assets/unfolded_car.svg";
|
import Car from "../job-damage-visual/job-damage-visual.component";
|
||||||
|
|
||||||
export default function JobDetailCardsDamageComponent({ loading, data }) {
|
export default function JobDetailCardsDamageComponent({ loading, data }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const { area_of_damage } = data;
|
||||||
return (
|
return (
|
||||||
<CardTemplate loading={loading} title={t("jobs.labels.cards.damage")}>
|
<CardTemplate loading={loading} title={t("jobs.labels.cards.damage")}>
|
||||||
{data ? (
|
<Car dmg1={area_of_damage.impact1} dmg2={area_of_damage.impact2} />
|
||||||
<span>
|
|
||||||
<img src={UnfoldedCar} alt='Damaged Area' width={200} height={200} />
|
|
||||||
</span>
|
|
||||||
) : null}
|
|
||||||
</CardTemplate>
|
</CardTemplate>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next";
|
|||||||
import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
||||||
import { alphaSort } from "../../utils/sorters";
|
import { alphaSort } from "../../utils/sorters";
|
||||||
//import EditableCell from "./job-lines-cell.component";
|
//import EditableCell from "./job-lines-cell.component";
|
||||||
|
import AllocationsAssignmentContainer from "../allocations-assignment/allocations-assignment.container";
|
||||||
|
|
||||||
export default function JobLinesComponent({
|
export default function JobLinesComponent({
|
||||||
jobLines,
|
jobLines,
|
||||||
@@ -97,6 +98,38 @@ export default function JobLinesComponent({
|
|||||||
render: (text, record) => (
|
render: (text, record) => (
|
||||||
<CurrencyFormatter>{record.act_price}</CurrencyFormatter>
|
<CurrencyFormatter>{record.act_price}</CurrencyFormatter>
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("joblines.fields.mod_lb_hrs"),
|
||||||
|
dataIndex: "mod_lb_hrs",
|
||||||
|
key: "mod_lb_hrs",
|
||||||
|
sorter: (a, b) => a.mod_lb_hrs - b.mod_lb_hrs,
|
||||||
|
sortOrder:
|
||||||
|
state.sortedInfo.columnKey === "mod_lb_hrs" && state.sortedInfo.order
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("allocations.fields.employee"),
|
||||||
|
dataIndex: "employee",
|
||||||
|
key: "employee",
|
||||||
|
sorter: (a, b) => a.act_price - b.act_price, //TODO Fix employee sorting.
|
||||||
|
sortOrder:
|
||||||
|
state.sortedInfo.columnKey === "employee" && state.sortedInfo.order,
|
||||||
|
render: (text, record) => (
|
||||||
|
<span>
|
||||||
|
{record.allocations && record.allocations.length > 0
|
||||||
|
? record.allocations.map(item => (
|
||||||
|
<div
|
||||||
|
key={item.id}
|
||||||
|
>{`${item.employee.first_name} ${item.employee.last_name} (${item.hours})`}</div>
|
||||||
|
))
|
||||||
|
: null}
|
||||||
|
<AllocationsAssignmentContainer
|
||||||
|
key={record.id}
|
||||||
|
jobLineId={record.id}
|
||||||
|
hours={record.mod_lb_hrs}
|
||||||
|
/>
|
||||||
|
</span>
|
||||||
|
)
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { DateTimeFormatter } from "../../utils/DateFormatter";
|
import { DateTimeFormatter } from "../../utils/DateFormatter";
|
||||||
import { alphaSort } from "../../utils/sorters";
|
import { alphaSort } from "../../utils/sorters";
|
||||||
import OwnerFindModalContainer from "../owner-find-modal/owner-find-modal.container";
|
import OwnerFindModalContainer from "../owner-find-modal/owner-find-modal.container";
|
||||||
|
import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
||||||
|
|
||||||
export default function JobsAvailableComponent({
|
export default function JobsAvailableComponent({
|
||||||
loading,
|
loading,
|
||||||
data,
|
data,
|
||||||
@@ -77,7 +79,10 @@ export default function JobsAvailableComponent({
|
|||||||
key: "clm_amt",
|
key: "clm_amt",
|
||||||
sorter: (a, b) => a.clm_amt - b.clm_amt,
|
sorter: (a, b) => a.clm_amt - b.clm_amt,
|
||||||
sortOrder:
|
sortOrder:
|
||||||
state.sortedInfo.columnKey === "clm_amt" && state.sortedInfo.order
|
state.sortedInfo.columnKey === "clm_amt" && state.sortedInfo.order,
|
||||||
|
render: (text, record) => (
|
||||||
|
<CurrencyFormatter>{record.clm_amt}</CurrencyFormatter>
|
||||||
|
)
|
||||||
//width: "12%",
|
//width: "12%",
|
||||||
//ellipsis: true
|
//ellipsis: true
|
||||||
},
|
},
|
||||||
@@ -141,7 +146,8 @@ export default function JobsAvailableComponent({
|
|||||||
estData.data.available_jobs_by_pk &&
|
estData.data.available_jobs_by_pk &&
|
||||||
estData.data.available_jobs_by_pk.est_data &&
|
estData.data.available_jobs_by_pk.est_data &&
|
||||||
estData.data.available_jobs_by_pk.est_data.owner &&
|
estData.data.available_jobs_by_pk.est_data.owner &&
|
||||||
estData.data.available_jobs_by_pk.est_data.owner.data
|
estData.data.available_jobs_by_pk.est_data.owner.data &&
|
||||||
|
!estData.data.available_jobs_by_pk.issupplement
|
||||||
? estData.data.available_jobs_by_pk.est_data.owner.data
|
? estData.data.available_jobs_by_pk.est_data.owner.data
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
@@ -164,7 +170,7 @@ export default function JobsAvailableComponent({
|
|||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Input.Search
|
<Input.Search
|
||||||
placeholder="Search..."
|
placeholder="Search...//TODO Implement Search"
|
||||||
onSearch={value => {
|
onSearch={value => {
|
||||||
console.log(value);
|
console.log(value);
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -29,14 +29,7 @@ export default withRouter(function JobsAvailableContainer({
|
|||||||
|
|
||||||
const onModalOk = () => {
|
const onModalOk = () => {
|
||||||
setModalVisible(false);
|
setModalVisible(false);
|
||||||
console.log("selectedOwner", selectedOwner);
|
|
||||||
setInsertLoading(true);
|
setInsertLoading(true);
|
||||||
console.log(
|
|
||||||
"logitest",
|
|
||||||
estData.data &&
|
|
||||||
estData.data.available_jobs_by_pk &&
|
|
||||||
estData.data.available_jobs_by_pk.est_data
|
|
||||||
);
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!(
|
!(
|
||||||
|
|||||||
@@ -3,13 +3,25 @@ import React, { useState } from "react";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { alphaSort } from "../../utils/sorters";
|
import { alphaSort } from "../../utils/sorters";
|
||||||
import { DateTimeFormatter } from "../../utils/DateFormatter";
|
import { DateTimeFormatter } from "../../utils/DateFormatter";
|
||||||
|
import JobsFindModalContainer from "../jobs-find-modal/jobs-find-modal.container";
|
||||||
|
import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
||||||
|
|
||||||
export default function JobsAvailableSupplementComponent({
|
export default function JobsAvailableSupplementComponent({
|
||||||
loading,
|
loading,
|
||||||
data,
|
data,
|
||||||
refetch,
|
refetch,
|
||||||
deleteJob,
|
deleteJob,
|
||||||
|
updateJob,
|
||||||
|
onModalOk,
|
||||||
|
onModalCancel,
|
||||||
|
modalVisible,
|
||||||
|
setModalVisible,
|
||||||
|
selectedJob,
|
||||||
|
setSelectedJob,
|
||||||
deleteAllNewJobs,
|
deleteAllNewJobs,
|
||||||
estDataLazyLoad
|
loadEstData,
|
||||||
|
estData,
|
||||||
|
importOptionsState
|
||||||
}) {
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
@@ -81,7 +93,10 @@ export default function JobsAvailableSupplementComponent({
|
|||||||
key: "clm_amt",
|
key: "clm_amt",
|
||||||
sorter: (a, b) => a.clm_amt - b.clm_amt,
|
sorter: (a, b) => a.clm_amt - b.clm_amt,
|
||||||
sortOrder:
|
sortOrder:
|
||||||
state.sortedInfo.columnKey === "clm_amt" && state.sortedInfo.order
|
state.sortedInfo.columnKey === "clm_amt" && state.sortedInfo.order,
|
||||||
|
render: (text, record) => (
|
||||||
|
<CurrencyFormatter>{record.clm_amt}</CurrencyFormatter>
|
||||||
|
)
|
||||||
//width: "12%",
|
//width: "12%",
|
||||||
//ellipsis: true
|
//ellipsis: true
|
||||||
},
|
},
|
||||||
@@ -127,7 +142,8 @@ export default function JobsAvailableSupplementComponent({
|
|||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
alert("Add");
|
loadEstData({ variables: { id: record.id } });
|
||||||
|
setModalVisible(true);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Icon type="plus" />
|
<Icon type="plus" />
|
||||||
@@ -140,54 +156,66 @@ export default function JobsAvailableSupplementComponent({
|
|||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Table
|
<div>
|
||||||
loading={loading}
|
<JobsFindModalContainer
|
||||||
title={() => {
|
loading={estData.loading}
|
||||||
return (
|
error={estData.error}
|
||||||
<div>
|
selectedJob={selectedJob}
|
||||||
<Input.Search
|
setSelectedJob={setSelectedJob}
|
||||||
placeholder="Search..."
|
importOptionsState={importOptionsState}
|
||||||
onSearch={value => {
|
visible={modalVisible}
|
||||||
console.log(value);
|
onOk={onModalOk}
|
||||||
}}
|
onCancel={onModalCancel}
|
||||||
enterButton
|
/>
|
||||||
/>
|
<Table
|
||||||
<Button
|
loading={loading}
|
||||||
onClick={() => {
|
title={() => {
|
||||||
refetch();
|
return (
|
||||||
}}
|
<div>
|
||||||
>
|
<Input.Search
|
||||||
<Icon type="sync" />
|
placeholder="Search..."
|
||||||
</Button>
|
onSearch={value => {
|
||||||
<Button
|
console.log(value);
|
||||||
onClick={() => {
|
}}
|
||||||
deleteAllNewJobs()
|
enterButton
|
||||||
.then(r => {
|
/>
|
||||||
notification["success"]({
|
<Button
|
||||||
message: t("jobs.successes.all_deleted", {
|
onClick={() => {
|
||||||
count: r.data.delete_available_jobs.affected_rows
|
refetch();
|
||||||
})
|
}}
|
||||||
|
>
|
||||||
|
<Icon type="sync" />
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
onClick={() => {
|
||||||
|
deleteAllNewJobs()
|
||||||
|
.then(r => {
|
||||||
|
notification["success"]({
|
||||||
|
message: t("jobs.successes.all_deleted", {
|
||||||
|
count: r.data.delete_available_jobs.affected_rows
|
||||||
|
})
|
||||||
|
});
|
||||||
|
refetch();
|
||||||
|
})
|
||||||
|
.catch(r => {
|
||||||
|
notification["error"]({
|
||||||
|
message: t("jobs.errors.deleted") + " " + r.message
|
||||||
|
});
|
||||||
});
|
});
|
||||||
refetch();
|
}}
|
||||||
})
|
>
|
||||||
.catch(r => {
|
Delete All
|
||||||
notification["error"]({
|
</Button>
|
||||||
message: t("jobs.errors.deleted") + " " + r.message
|
</div>
|
||||||
});
|
);
|
||||||
});
|
}}
|
||||||
}}
|
size="small"
|
||||||
>
|
pagination={{ position: "top" }}
|
||||||
Delete All
|
columns={columns.map(item => ({ ...item }))}
|
||||||
</Button>
|
rowKey="id"
|
||||||
</div>
|
dataSource={data && data.available_jobs}
|
||||||
);
|
onChange={handleTableChange}
|
||||||
}}
|
/>
|
||||||
size="small"
|
</div>
|
||||||
pagination={{ position: "top" }}
|
|
||||||
columns={columns.map(item => ({ ...item }))}
|
|
||||||
rowKey="id"
|
|
||||||
dataSource={data && data.available_jobs}
|
|
||||||
onChange={handleTableChange}
|
|
||||||
/>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,21 @@
|
|||||||
import React from "react";
|
import { notification } from "antd";
|
||||||
|
import React, { useState } from "react";
|
||||||
import { useMutation, useQuery } from "react-apollo";
|
import { useMutation, useQuery } from "react-apollo";
|
||||||
import { DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS, QUERY_AVAILABLE_SUPPLEMENT_JOBS } from "../../graphql/available-jobs.queries";
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { withRouter } from "react-router-dom";
|
||||||
|
import {
|
||||||
|
DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS,
|
||||||
|
QUERY_AVAILABLE_SUPPLEMENT_JOBS
|
||||||
|
} from "../../graphql/available-jobs.queries";
|
||||||
|
import { UPDATE_JOB } from "../../graphql/jobs.queries";
|
||||||
import AlertComponent from "../alert/alert.component";
|
import AlertComponent from "../alert/alert.component";
|
||||||
import JobsAvailableSupplementComponent from "./jobs-available-supplement.component";
|
import JobsAvailableSupplementComponent from "./jobs-available-supplement.component";
|
||||||
|
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
|
||||||
|
|
||||||
export default function JobsAvailableSupplementContainer({
|
export default withRouter(function JobsAvailableSupplementContainer({
|
||||||
deleteJob,
|
deleteJob,
|
||||||
estDataLazyLoad
|
estDataLazyLoad,
|
||||||
|
history
|
||||||
}) {
|
}) {
|
||||||
const { loading, error, data, refetch } = useQuery(
|
const { loading, error, data, refetch } = useQuery(
|
||||||
QUERY_AVAILABLE_SUPPLEMENT_JOBS,
|
QUERY_AVAILABLE_SUPPLEMENT_JOBS,
|
||||||
@@ -14,17 +23,107 @@ export default function JobsAvailableSupplementContainer({
|
|||||||
fetchPolicy: "network-only"
|
fetchPolicy: "network-only"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const [deleteAllNewJobs] = useMutation(DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS);
|
const [deleteAllNewJobs] = useMutation(DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS);
|
||||||
|
|
||||||
|
const [modalVisible, setModalVisible] = useState(false);
|
||||||
|
const [selectedJob, setSelectedJob] = useState(null);
|
||||||
|
const [insertLoading, setInsertLoading] = useState(false);
|
||||||
|
const [updateJob] = useMutation(UPDATE_JOB);
|
||||||
|
const [loadEstData, estData] = estDataLazyLoad;
|
||||||
|
const importOptionsState = useState({ overrideHeaders: false });
|
||||||
|
const importOptions = importOptionsState[0];
|
||||||
|
const onModalOk = () => {
|
||||||
|
setModalVisible(false);
|
||||||
|
setInsertLoading(true);
|
||||||
|
|
||||||
|
if (
|
||||||
|
!(
|
||||||
|
estData.data &&
|
||||||
|
estData.data.available_jobs_by_pk &&
|
||||||
|
estData.data.available_jobs_by_pk.est_data
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
//We don't have the right data. Error!
|
||||||
|
setInsertLoading(false);
|
||||||
|
notification["error"]({
|
||||||
|
message: t("jobs.errors.creating", { error: "No job data present." })
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
//create upsert job
|
||||||
|
let supp = estData.data.available_jobs_by_pk.est_data;
|
||||||
|
delete supp.joblines;
|
||||||
|
delete supp.owner;
|
||||||
|
delete supp.vehicle;
|
||||||
|
|
||||||
|
if (!importOptions.overrideHeaders) {
|
||||||
|
delete supp["ins_ea"];
|
||||||
|
//Strip out the header options
|
||||||
|
}
|
||||||
|
|
||||||
|
updateJob({
|
||||||
|
variables: {
|
||||||
|
jobId: selectedJob,
|
||||||
|
job: supp
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(r => {
|
||||||
|
notification["success"]({
|
||||||
|
message: t("jobs.successes.supplemented"),
|
||||||
|
onClick: () => {
|
||||||
|
history.push(
|
||||||
|
`/manage/jobs/${r.data.update_jobs.returning[0].id}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//Job has been inserted. Clean up the available jobs record.
|
||||||
|
deleteJob({
|
||||||
|
variables: { id: estData.data.available_jobs_by_pk.id }
|
||||||
|
}).then(r => {
|
||||||
|
refetch();
|
||||||
|
setInsertLoading(false);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(r => {
|
||||||
|
//error while inserting
|
||||||
|
notification["error"]({
|
||||||
|
message: t("jobs.errors.creating", { error: r.message })
|
||||||
|
});
|
||||||
|
refetch();
|
||||||
|
setInsertLoading(false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const onModalCancel = () => {
|
||||||
|
setModalVisible(false);
|
||||||
|
setSelectedJob(null);
|
||||||
|
};
|
||||||
|
|
||||||
if (error) return <AlertComponent type="error" message={error.message} />;
|
if (error) return <AlertComponent type="error" message={error.message} />;
|
||||||
return (
|
return (
|
||||||
<JobsAvailableSupplementComponent
|
<LoadingSpinner
|
||||||
loading={loading}
|
loading={insertLoading}
|
||||||
data={data}
|
message={t("jobs.labels.creating_new_job")}
|
||||||
refetch={refetch}
|
>
|
||||||
deleteJob={deleteJob}
|
<JobsAvailableSupplementComponent
|
||||||
deleteAllNewJobs={deleteAllNewJobs}
|
loading={loading}
|
||||||
estDataLazyLoad={estDataLazyLoad}
|
data={data}
|
||||||
/>
|
refetch={refetch}
|
||||||
|
deleteJob={deleteJob}
|
||||||
|
updateJob={updateJob}
|
||||||
|
onModalOk={onModalOk}
|
||||||
|
onModalCancel={onModalCancel}
|
||||||
|
modalVisible={modalVisible}
|
||||||
|
setModalVisible={setModalVisible}
|
||||||
|
selectedJob={selectedJob}
|
||||||
|
setSelectedJob={setSelectedJob}
|
||||||
|
deleteAllNewJobs={deleteAllNewJobs}
|
||||||
|
loadEstData={loadEstData}
|
||||||
|
estData={estData}
|
||||||
|
importOptionsState={importOptionsState}
|
||||||
|
/>
|
||||||
|
</LoadingSpinner>
|
||||||
);
|
);
|
||||||
}
|
});
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import { createStructuredSelector } from "reselect";
|
|||||||
import CarImage from "../../assets/car.svg";
|
import CarImage from "../../assets/car.svg";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
||||||
|
import BarcodePopup from "../barcode-popup/barcode-popup.component";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
bodyshop: selectBodyshop
|
bodyshop: selectBodyshop
|
||||||
@@ -49,32 +50,6 @@ export default connect(
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
const tombstoneSubtitle = (
|
|
||||||
<div>
|
|
||||||
<Tag color="red">
|
|
||||||
{job.owner ? (
|
|
||||||
<Link to={`/manage/owners/${job.owner.id}`}>
|
|
||||||
{`${job.ownr_co_nm || ""}${job.ownr_fn || ""} ${job.ownr_ln || ""}`}
|
|
||||||
</Link>
|
|
||||||
) : (
|
|
||||||
t("jobs.errors.noowner")
|
|
||||||
)}
|
|
||||||
</Tag>
|
|
||||||
|
|
||||||
<Tag color="green">
|
|
||||||
{job.vehicle ? (
|
|
||||||
<Link to={`/manage/vehicles/${job.vehicle.id}`}>
|
|
||||||
{job.vehicle.v_model_yr || t("general.labels.na")}{" "}
|
|
||||||
{job.vehicle.v_make_desc || t("general.labels.na")}{" "}
|
|
||||||
{job.vehicle.v_model_desc || t("general.labels.na")} |{" "}
|
|
||||||
{job.vehicle.plate_no || t("general.labels.na")} |{" "}
|
|
||||||
{job.vehicle.v_vin || t("general.labels.na")}
|
|
||||||
</Link>
|
|
||||||
) : null}
|
|
||||||
</Tag>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
|
|
||||||
const statusmenu = (
|
const statusmenu = (
|
||||||
<Menu
|
<Menu
|
||||||
onClick={e => {
|
onClick={e => {
|
||||||
@@ -137,10 +112,32 @@ export default connect(
|
|||||||
border: "1px solid rgb(235, 237, 240)"
|
border: "1px solid rgb(235, 237, 240)"
|
||||||
}}
|
}}
|
||||||
title={tombstoneTitle}
|
title={tombstoneTitle}
|
||||||
subTitle={tombstoneSubtitle}
|
//subTitle={tombstoneSubtitle}
|
||||||
tags={
|
tags={
|
||||||
<span key="job-status">
|
<span key="job-status">
|
||||||
{job.status ? <Tag color="blue">{job.status}</Tag> : null}
|
{job.status ? <Tag color="blue">{job.status}</Tag> : null}
|
||||||
|
<Tag color="red">
|
||||||
|
{job.owner ? (
|
||||||
|
<Link to={`/manage/owners/${job.owner.id}`}>
|
||||||
|
{`${job.ownr_co_nm || ""}${job.ownr_fn || ""} ${job.ownr_ln ||
|
||||||
|
""}`}
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
t("jobs.errors.noowner")
|
||||||
|
)}
|
||||||
|
</Tag>
|
||||||
|
<Tag color="green">
|
||||||
|
{job.vehicle ? (
|
||||||
|
<Link to={`/manage/vehicles/${job.vehicle.id}`}>
|
||||||
|
{job.vehicle.v_model_yr || t("general.labels.na")}{" "}
|
||||||
|
{job.vehicle.v_make_desc || t("general.labels.na")}{" "}
|
||||||
|
{job.vehicle.v_model_desc || t("general.labels.na")} |{" "}
|
||||||
|
{job.vehicle.plate_no || t("general.labels.na")} |{" "}
|
||||||
|
{job.vehicle.v_vin || t("general.labels.na")}
|
||||||
|
</Link>
|
||||||
|
) : null}
|
||||||
|
</Tag>
|
||||||
|
<BarcodePopup value={job.id} />
|
||||||
</span>
|
</span>
|
||||||
}
|
}
|
||||||
extra={menuExtra}
|
extra={menuExtra}
|
||||||
|
|||||||
@@ -0,0 +1,172 @@
|
|||||||
|
import { Checkbox, Divider, Table } from "antd";
|
||||||
|
import React from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { Link } from "react-router-dom";
|
||||||
|
import PhoneFormatter from "../../utils/PhoneFormatter";
|
||||||
|
|
||||||
|
export default function JobsFindModalComponent({
|
||||||
|
selectedJob,
|
||||||
|
setSelectedJob,
|
||||||
|
jobsList,
|
||||||
|
jobsListLoading,
|
||||||
|
importOptionsState
|
||||||
|
}) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const [importOptions, setImportOptions] = importOptionsState;
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
title: t("jobs.fields.ro_number"),
|
||||||
|
dataIndex: "ro_number",
|
||||||
|
key: "ro_number",
|
||||||
|
width: "8%",
|
||||||
|
render: (text, record) => (
|
||||||
|
<span>
|
||||||
|
<Link to={"/manage/jobs/" + record.id}>
|
||||||
|
{record.ro_number ? record.ro_number : "EST-" + record.est_number}
|
||||||
|
</Link>
|
||||||
|
</span>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("jobs.fields.owner"),
|
||||||
|
dataIndex: "owner",
|
||||||
|
key: "owner",
|
||||||
|
ellipsis: true,
|
||||||
|
|
||||||
|
width: "25%",
|
||||||
|
|
||||||
|
render: (text, record) => {
|
||||||
|
return record.owner ? (
|
||||||
|
<Link to={"/manage/owners/" + record.owner.id}>
|
||||||
|
{record.ownr_fn} {record.ownr_ln}
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
// t("jobs.errors.noowner")
|
||||||
|
<span>{`${record.ownr_fn} ${record.ownr_ln}`}</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("jobs.fields.ownr_ph1"),
|
||||||
|
dataIndex: "ownr_ph1",
|
||||||
|
key: "ownr_ph1",
|
||||||
|
width: "12%",
|
||||||
|
ellipsis: true,
|
||||||
|
render: (text, record) => {
|
||||||
|
return record.ownr_ph1 ? (
|
||||||
|
<PhoneFormatter>{record.ownr_ph1}</PhoneFormatter>
|
||||||
|
) : (
|
||||||
|
t("general.labels.unknown")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("jobs.fields.status"),
|
||||||
|
dataIndex: "status",
|
||||||
|
key: "status",
|
||||||
|
width: "10%",
|
||||||
|
ellipsis: true,
|
||||||
|
render: (text, record) => {
|
||||||
|
return record.status || t("general.labels.na");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
title: t("jobs.fields.vehicle"),
|
||||||
|
dataIndex: "vehicle",
|
||||||
|
key: "vehicle",
|
||||||
|
width: "15%",
|
||||||
|
ellipsis: true,
|
||||||
|
render: (text, record) => {
|
||||||
|
return record.vehicle ? (
|
||||||
|
<Link to={"/manage/vehicles/" + record.vehicle.id}>
|
||||||
|
{record.vehicle.v_model_yr} {record.vehicle.v_make_desc}{" "}
|
||||||
|
{record.vehicle.v_model_desc}
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
t("jobs.errors.novehicle")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("vehicles.fields.plate_no"),
|
||||||
|
dataIndex: "plate_no",
|
||||||
|
key: "plate_no",
|
||||||
|
width: "8%",
|
||||||
|
ellipsis: true,
|
||||||
|
render: (text, record) => {
|
||||||
|
return record.vehicle.plate_no ? (
|
||||||
|
<span>{record.vehicle.plate_no}</span>
|
||||||
|
) : (
|
||||||
|
t("general.labels.unknown")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("jobs.fields.clm_no"),
|
||||||
|
dataIndex: "clm_no",
|
||||||
|
key: "clm_no",
|
||||||
|
width: "12%",
|
||||||
|
ellipsis: true,
|
||||||
|
render: (text, record) => {
|
||||||
|
return record.clm_no ? (
|
||||||
|
<span>{record.clm_no}</span>
|
||||||
|
) : (
|
||||||
|
t("general.labels.unknown")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const handleOnRowClick = record => {
|
||||||
|
if (record) {
|
||||||
|
if (record.id) {
|
||||||
|
setSelectedJob(record.id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setSelectedJob(null);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Table
|
||||||
|
title={() => t("jobs.labels.existing_jobs")}
|
||||||
|
size="small"
|
||||||
|
pagination={{ position: "bottom" }}
|
||||||
|
columns={columns.map(item => ({ ...item }))}
|
||||||
|
rowKey="id"
|
||||||
|
loading={jobsListLoading}
|
||||||
|
dataSource={jobsList}
|
||||||
|
rowSelection={{
|
||||||
|
onSelect: props => {
|
||||||
|
setSelectedJob(props.id);
|
||||||
|
},
|
||||||
|
type: "radio",
|
||||||
|
selectedRowKeys: [selectedJob]
|
||||||
|
}}
|
||||||
|
onRow={(record, rowIndex) => {
|
||||||
|
return {
|
||||||
|
onClick: event => {
|
||||||
|
handleOnRowClick(record);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Divider />
|
||||||
|
<Checkbox
|
||||||
|
defaultChecked={importOptions.overrideHeader}
|
||||||
|
onChange={e =>
|
||||||
|
setImportOptions({
|
||||||
|
...importOptions,
|
||||||
|
overrideHeader: e.target.checked
|
||||||
|
})
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{t("jobs.labels.override_header")}
|
||||||
|
</Checkbox>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import { Modal } from "antd";
|
||||||
|
import React from "react";
|
||||||
|
import { useQuery } from "react-apollo";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { QUERY_ALL_OPEN_JOBS } from "../../graphql/jobs.queries";
|
||||||
|
import AlertComponent from "../alert/alert.component";
|
||||||
|
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
|
||||||
|
import JobsFindModalComponent from "./jobs-find-modal.component";
|
||||||
|
|
||||||
|
export default function JobsFindModalContainer({
|
||||||
|
loading,
|
||||||
|
error,
|
||||||
|
selectedJob,
|
||||||
|
setSelectedJob,
|
||||||
|
importOptionsState,
|
||||||
|
...modalProps
|
||||||
|
}) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const jobsList = useQuery(QUERY_ALL_OPEN_JOBS, {
|
||||||
|
fetchPolicy: "network-only"
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Modal
|
||||||
|
title={t("jobs.labels.existing_jobs")}
|
||||||
|
width={"80%"}
|
||||||
|
okButtonProps={{ disabled: selectedJob ? false : true }}
|
||||||
|
{...modalProps}
|
||||||
|
>
|
||||||
|
{loading ? <LoadingSpinner /> : null}
|
||||||
|
{error ? <AlertComponent message={error.message} type="error" /> : null}
|
||||||
|
{true ? (
|
||||||
|
<JobsFindModalComponent
|
||||||
|
selectedJob={selectedJob}
|
||||||
|
setSelectedJob={setSelectedJob}
|
||||||
|
importOptionsState={importOptionsState}
|
||||||
|
jobsListLoading={jobsList.loading}
|
||||||
|
jobsList={
|
||||||
|
jobsList.data && jobsList.data.jobs ? jobsList.data.jobs : null
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
</Modal>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -118,7 +118,8 @@ export default function OwnerFindModalComponent({
|
|||||||
checked={selectedOwner ? false : true}
|
checked={selectedOwner ? false : true}
|
||||||
onClick={() => setSelectedOwner(null)}
|
onClick={() => setSelectedOwner(null)}
|
||||||
>
|
>
|
||||||
Create a new Owner record for this job.
|
|
||||||
|
{t("owners.labels.create_new")}
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
89
client/src/components/owners-list/owners-list.component.jsx
Normal file
89
client/src/components/owners-list/owners-list.component.jsx
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
import { Input, Table } from "antd";
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { Link } from "react-router-dom";
|
||||||
|
import PhoneFormatter from "../../utils/PhoneFormatter";
|
||||||
|
import { alphaSort } from "../../utils/sorters";
|
||||||
|
|
||||||
|
export default function OwnersListComponent({ loading, owners, refetch }) {
|
||||||
|
const [state, setState] = useState({
|
||||||
|
sortedInfo: {},
|
||||||
|
filteredInfo: { text: "" }
|
||||||
|
});
|
||||||
|
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
title: t("owners.fields.name"),
|
||||||
|
dataIndex: "name",
|
||||||
|
key: "name",
|
||||||
|
// onFilter: (value, record) => record.ro_number.includes(value),
|
||||||
|
// filteredValue: state.filteredInfo.text || null,
|
||||||
|
sorter: (a, b) => alphaSort(a.ownr_ln, b.ownr_ln),
|
||||||
|
sortOrder:
|
||||||
|
state.sortedInfo.columnKey === "name" && state.sortedInfo.order,
|
||||||
|
|
||||||
|
render: (text, record) => (
|
||||||
|
<Link to={"/manage/owners/" + record.id}>
|
||||||
|
{`${record.ownr_fn} ${record.ownr_ln}`}
|
||||||
|
</Link>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("owners.fields.ownr_ph1"),
|
||||||
|
dataIndex: "ownr_ph1",
|
||||||
|
key: "ownr_ph1",
|
||||||
|
sorter: (a, b) => alphaSort(a.ownr_ph1, b.ownr_ph1),
|
||||||
|
sortOrder:
|
||||||
|
state.sortedInfo.columnKey === "ownr_ph1" && state.sortedInfo.order,
|
||||||
|
render: (text, record) => {
|
||||||
|
return <PhoneFormatter>{record.ownr_ph1}</PhoneFormatter>;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("owners.fields.ownr_ea"),
|
||||||
|
dataIndex: "ownr_ea",
|
||||||
|
key: "ownr_ea"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("owners.fields.address"),
|
||||||
|
dataIndex: "address",
|
||||||
|
key: "address",
|
||||||
|
render: (text, record) => {
|
||||||
|
return (
|
||||||
|
<div>{`${record.ownr_addr1 || ""} ${record.ownr_addr2 ||
|
||||||
|
""} ${record.ownr_city || ""} ${record.ownr_st ||
|
||||||
|
""} ${record.ownr_zip || ""}`}</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const handleTableChange = (pagination, filters, sorter) => {
|
||||||
|
setState({ ...state, filteredInfo: filters, sortedInfo: sorter });
|
||||||
|
};
|
||||||
|
//TODO Implement searching & pagination
|
||||||
|
return (
|
||||||
|
<Table
|
||||||
|
loading={loading}
|
||||||
|
title={() => {
|
||||||
|
return (
|
||||||
|
<Input.Search
|
||||||
|
placeholder="Search..."
|
||||||
|
onSearch={value => {
|
||||||
|
console.log(value);
|
||||||
|
}}
|
||||||
|
enterButton
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
size="small"
|
||||||
|
pagination={{ position: "top" }}
|
||||||
|
columns={columns.map(item => ({ ...item }))}
|
||||||
|
rowKey="id"
|
||||||
|
dataSource={owners}
|
||||||
|
onChange={handleTableChange}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
20
client/src/components/owners-list/owners-list.container.jsx
Normal file
20
client/src/components/owners-list/owners-list.container.jsx
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { useQuery } from "react-apollo";
|
||||||
|
import { QUERY_ALL_OWNERS } from "../../graphql/owners.queries";
|
||||||
|
import AlertComponent from "../alert/alert.component";
|
||||||
|
import OwnersListComponent from "./owners-list.component";
|
||||||
|
|
||||||
|
export default function OwnersListContainer() {
|
||||||
|
const { loading, error, data, refetch } = useQuery(QUERY_ALL_OWNERS, {
|
||||||
|
fetchPolicy: "network-only"
|
||||||
|
});
|
||||||
|
|
||||||
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
|
return (
|
||||||
|
<OwnersListComponent
|
||||||
|
loading={loading}
|
||||||
|
owners={data ? data.owners : null}
|
||||||
|
refetch={refetch}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
import { Checkbox, Col, DatePicker, Modal, Row, TimePicker, Input } from "antd";
|
||||||
|
import React from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import ScheduleDayViewContainer from "../schedule-day-view/schedule-day-view.container";
|
||||||
|
|
||||||
|
export default function ScheduleJobModalComponent({
|
||||||
|
appData,
|
||||||
|
setAppData,
|
||||||
|
formData,
|
||||||
|
setFormData,
|
||||||
|
...props
|
||||||
|
}) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
//TODO: Existing appointments list only refreshes sometimes after modal close. May have to do with the container class.
|
||||||
|
return (
|
||||||
|
<Modal
|
||||||
|
{...props}
|
||||||
|
width={"80%"}
|
||||||
|
maskClosable={false}
|
||||||
|
destroyOnClose={true}
|
||||||
|
okButtonProps={{ disabled: appData.start ? false : true }}
|
||||||
|
>
|
||||||
|
<Row>
|
||||||
|
<Col span={14}>
|
||||||
|
<Row>
|
||||||
|
Manual Job Selection Scheduled Time
|
||||||
|
<Input
|
||||||
|
placeholder={t("appointments.fields.title")}
|
||||||
|
onChange={e => {
|
||||||
|
setAppData({ ...appData, title: e.target.value });
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<DatePicker
|
||||||
|
value={appData.start}
|
||||||
|
onChange={e => {
|
||||||
|
setAppData({ ...appData, start: e });
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<TimePicker
|
||||||
|
value={appData.start}
|
||||||
|
format={"HH:mm"}
|
||||||
|
minuteStep={15}
|
||||||
|
onChange={e => {
|
||||||
|
setAppData({ ...appData, start: e });
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Row>
|
||||||
|
|
||||||
|
{
|
||||||
|
//TODO: Build out notifications.
|
||||||
|
}
|
||||||
|
<Checkbox
|
||||||
|
defaultChecked={formData.notifyCustomer}
|
||||||
|
onChange={e =>
|
||||||
|
setFormData({ ...formData, notifyCustomer: e.target.checked })
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{t("jobs.labels.appointmentconfirmation")}
|
||||||
|
</Checkbox>
|
||||||
|
</Col>
|
||||||
|
<Col span={10}>
|
||||||
|
<ScheduleDayViewContainer day={appData.start} />
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</Modal>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
import { notification } from "antd";
|
||||||
|
import moment from "moment";
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import { useMutation } from "react-apollo";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { connect } from "react-redux";
|
||||||
|
import { createStructuredSelector } from "reselect";
|
||||||
|
import { INSERT_APPOINTMENT } from "../../graphql/appointments.queries";
|
||||||
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
|
import ScheduleAppointmentModalComponent from "./schedule-appointment-modal.component";
|
||||||
|
|
||||||
|
const mapStateToProps = createStructuredSelector({
|
||||||
|
bodyshop: selectBodyshop
|
||||||
|
});
|
||||||
|
|
||||||
|
export default connect(
|
||||||
|
mapStateToProps,
|
||||||
|
null
|
||||||
|
)(function ScheduleAppointmentModalContainer({
|
||||||
|
scheduleModalState,
|
||||||
|
jobId,
|
||||||
|
bodyshop,
|
||||||
|
refetch
|
||||||
|
}) {
|
||||||
|
const [scheduleModalVisible, setscheduleModalVisible] = scheduleModalState;
|
||||||
|
const [appData, setAppData] = useState({
|
||||||
|
jobid: jobId,
|
||||||
|
bodyshopid: bodyshop.id,
|
||||||
|
isintake: false,
|
||||||
|
start: null
|
||||||
|
});
|
||||||
|
const [insertAppointment] = useMutation(INSERT_APPOINTMENT);
|
||||||
|
const [formData, setFormData] = useState({ notifyCustomer: false });
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ScheduleAppointmentModalComponent
|
||||||
|
appData={appData}
|
||||||
|
setAppData={setAppData}
|
||||||
|
formData={formData}
|
||||||
|
setFormData={setFormData}
|
||||||
|
//Spreadable Modal Props
|
||||||
|
visible={scheduleModalVisible}
|
||||||
|
onCancel={() => setscheduleModalVisible(false)}
|
||||||
|
onOk={() => {
|
||||||
|
//TODO: Customize the amount of minutes it will add.
|
||||||
|
insertAppointment({
|
||||||
|
variables: {
|
||||||
|
app: { ...appData, end: moment(appData.start).add(60, "minutes") }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(r => {
|
||||||
|
notification["success"]({
|
||||||
|
message: t("appointments.successes.created")
|
||||||
|
});
|
||||||
|
|
||||||
|
if (formData.notifyCustomer) {
|
||||||
|
//TODO: Implement customer reminder on scheduling.
|
||||||
|
alert("Chosed to notify the customer somehow!");
|
||||||
|
}
|
||||||
|
setscheduleModalVisible(false);
|
||||||
|
if (refetch) refetch();
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
notification["error"]({
|
||||||
|
message: t("appointments.errors.saving", {
|
||||||
|
message: error.message
|
||||||
|
})
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
});
|
||||||
@@ -1,13 +1,46 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
//import "react-big-calendar/lib/css/react-big-calendar.css";
|
//import "react-big-calendar/lib/css/react-big-calendar.css";
|
||||||
import ScheduleCalendarWrapperComponent from "../schedule-calendar-wrapper/scheduler-calendar-wrapper.component";
|
import ScheduleCalendarWrapperComponent from "../schedule-calendar-wrapper/scheduler-calendar-wrapper.component";
|
||||||
|
import { Button, Icon } from "antd";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import ScheduleAppointmentModalContainer from "../schedule-appointment-modal/schedule-appointment-modal.container";
|
||||||
|
|
||||||
|
export default function ScheduleCalendarComponent({
|
||||||
|
data,
|
||||||
|
refetch,
|
||||||
|
scheduleModalState
|
||||||
|
}) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
export default function ScheduleCalendarComponent({ data, refetch }) {
|
|
||||||
return (
|
return (
|
||||||
<ScheduleCalendarWrapperComponent
|
<div>
|
||||||
data={data}
|
<Button
|
||||||
defaultView="week"
|
onClick={() => {
|
||||||
refetch={refetch}
|
refetch();
|
||||||
/>
|
}}
|
||||||
|
>
|
||||||
|
<Icon type="sync" />
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
onClick={() => {
|
||||||
|
scheduleModalState[1](true);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{t("appointments.actions.new")}
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<ScheduleAppointmentModalContainer
|
||||||
|
scheduleModalState={scheduleModalState}
|
||||||
|
jobId={null}
|
||||||
|
refetch={refetch}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ScheduleCalendarWrapperComponent
|
||||||
|
data={data}
|
||||||
|
defaultView="week"
|
||||||
|
refetch={refetch}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React from "react";
|
import React, { useState } from "react";
|
||||||
import { useQuery } from "react-apollo";
|
import { useQuery } from "react-apollo";
|
||||||
import ScheduleCalendarComponent from "./schedule-calendar.component";
|
import ScheduleCalendarComponent from "./schedule-calendar.component";
|
||||||
import { QUERY_ALL_ACTIVE_APPOINTMENTS } from "../../graphql/appointments.queries";
|
import { QUERY_ALL_ACTIVE_APPOINTMENTS } from "../../graphql/appointments.queries";
|
||||||
@@ -12,6 +12,7 @@ export default function ScheduleCalendarContainer() {
|
|||||||
fetchPolicy: "network-only"
|
fetchPolicy: "network-only"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
const scheduleModalState = useState(false);
|
||||||
|
|
||||||
if (loading) return <LoadingSpinner />;
|
if (loading) return <LoadingSpinner />;
|
||||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
@@ -27,6 +28,7 @@ export default function ScheduleCalendarContainer() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<ScheduleCalendarComponent
|
<ScheduleCalendarComponent
|
||||||
|
scheduleModalState={scheduleModalState}
|
||||||
refetch={refetch}
|
refetch={refetch}
|
||||||
data={data ? normalizedData : null}
|
data={data ? normalizedData : null}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -9,22 +9,53 @@ export default function ScheduleEventComponent({ event, handleCancel }) {
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const popoverContent = (
|
const popoverContent = (
|
||||||
<div>
|
<div>
|
||||||
<div>{`${t("jobs.fields.ro_number")}: ${event.job.ro_number}`}</div>
|
{!event.isintake ? (
|
||||||
<div>
|
<strong>{event.title}</strong>
|
||||||
{t("jobs.fields.clm_total")}:
|
) : (
|
||||||
<CurrencyFormatter>{event.job.clm_total}</CurrencyFormatter>
|
<div>
|
||||||
</div>
|
<strong>{`${(event.job && event.job.ownr_fn) || ""} ${(event.job &&
|
||||||
<div>{`${t("jobs.fields.clm_no")}: ${event.job.clm_no}`}</div>
|
event.job.ownr_ln) ||
|
||||||
<div>
|
""}`}</strong>
|
||||||
{t("jobs.fields.ownr_ea")}:{event.job.ownr_ea}
|
<span style={{ margin: 4 }}>
|
||||||
</div>
|
{`${(event.job && event.job.vehicle.v_model_yr) ||
|
||||||
<div>
|
""} ${(event.job && event.job.vehicle.v_make_desc) ||
|
||||||
{t("jobs.fields.ownr_ph1")}:
|
""} ${(event.job && event.job.vehicle.v_model_desc) || ""}`}
|
||||||
<PhoneFormatter>{event.job.ownr_ph1}</PhoneFormatter>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<Link to={`/manage/jobs/${event.job.id}`}>
|
)}
|
||||||
<Button>{t("appointments.actions.viewjob")}</Button>
|
{event.job ? (
|
||||||
</Link>
|
<div>
|
||||||
|
<div>{`${t("jobs.fields.ro_number")}: ${(event.job &&
|
||||||
|
event.job.ro_number) ||
|
||||||
|
""}`}</div>
|
||||||
|
<div>
|
||||||
|
{t("jobs.fields.clm_total")}:
|
||||||
|
<CurrencyFormatter>
|
||||||
|
{(event.job && event.job.clm_total) || ""}
|
||||||
|
</CurrencyFormatter>
|
||||||
|
</div>
|
||||||
|
<div>{`${t("jobs.fields.clm_no")}: ${(event.job &&
|
||||||
|
event.job.clm_no) ||
|
||||||
|
""}`}</div>
|
||||||
|
<div>
|
||||||
|
{t("jobs.fields.ownr_ea")}:{(event.job && event.job.ownr_ea) || ""}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{t("jobs.fields.ownr_ph1")}:
|
||||||
|
<PhoneFormatter>
|
||||||
|
{(event.job && event.job.ownr_ph1) || ""}
|
||||||
|
</PhoneFormatter>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
|
{
|
||||||
|
//TODO Add phone 1 MessagingActionTypes.
|
||||||
|
}
|
||||||
|
{event.job ? (
|
||||||
|
<Link to={`/manage/jobs/${event.job && event.job.id}`}>
|
||||||
|
<Button>{t("appointments.actions.viewjob")}</Button>
|
||||||
|
</Link>
|
||||||
|
) : null}
|
||||||
<Button onClick={() => handleCancel(event.id)}>
|
<Button onClick={() => handleCancel(event.id)}>
|
||||||
{t("appointments.actions.cancel")}
|
{t("appointments.actions.cancel")}
|
||||||
</Button>
|
</Button>
|
||||||
@@ -34,24 +65,36 @@ export default function ScheduleEventComponent({ event, handleCancel }) {
|
|||||||
}
|
}
|
||||||
{t("appointments.actions.reschedule")}
|
{t("appointments.actions.reschedule")}
|
||||||
</Button>
|
</Button>
|
||||||
<Button>
|
{event.isintake ? (
|
||||||
{
|
<Button>
|
||||||
//TODO: Add intake func.
|
{
|
||||||
}
|
//TODO: Add intake func.
|
||||||
{t("appointments.actions.intake")}
|
}
|
||||||
</Button>
|
{t("appointments.actions.intake")}
|
||||||
|
</Button>
|
||||||
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Popover content={popoverContent}>
|
<Popover content={popoverContent}>
|
||||||
<div>
|
<div>
|
||||||
<strong>{`${event.job.ownr_fn || ""} ${event.job.ownr_ln ||
|
{event.isintake ? (
|
||||||
""}`}</strong>
|
<div>
|
||||||
<span style={{ margin: 4 }}>
|
<strong>{`${(event.job && event.job.ownr_fn) || ""} ${(event.job &&
|
||||||
{`${event.job.vehicle.v_model_yr || ""} ${event.job.vehicle
|
event.job.ownr_ln) ||
|
||||||
.v_make_desc || ""} ${event.job.vehicle.v_model_desc || ""}`}
|
""}`}</strong>
|
||||||
</span>
|
<span style={{ margin: 4 }}>
|
||||||
|
{`${(event.job && event.job.vehicle.v_model_yr) ||
|
||||||
|
""} ${(event.job && event.job.vehicle.v_make_desc) ||
|
||||||
|
""} ${(event.job && event.job.vehicle.v_model_desc) || ""}`}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<div>
|
||||||
|
<strong>{`${event.title || ""}`}</strong>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</Popover>
|
</Popover>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -28,7 +28,11 @@ export default connect(
|
|||||||
refetch
|
refetch
|
||||||
}) {
|
}) {
|
||||||
const [scheduleModalVisible, setscheduleModalVisible] = scheduleModalState;
|
const [scheduleModalVisible, setscheduleModalVisible] = scheduleModalState;
|
||||||
const [appData, setAppData] = useState({ jobid: jobId, start: null });
|
const [appData, setAppData] = useState({
|
||||||
|
jobid: jobId,
|
||||||
|
start: null,
|
||||||
|
bodyshopid: bodyshop.id
|
||||||
|
});
|
||||||
const [insertAppointment] = useMutation(INSERT_APPOINTMENT);
|
const [insertAppointment] = useMutation(INSERT_APPOINTMENT);
|
||||||
const [updateJobStatus] = useMutation(UPDATE_JOB_STATUS, {
|
const [updateJobStatus] = useMutation(UPDATE_JOB_STATUS, {
|
||||||
variables: {
|
variables: {
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
import { Button, DatePicker, Form, Input, InputNumber, Switch } from "antd";
|
||||||
|
import moment from "moment";
|
||||||
|
import React from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
export default function ShopEmployeesFormComponent({
|
||||||
|
form,
|
||||||
|
selectedEmployee,
|
||||||
|
handleSubmit
|
||||||
|
}) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const { getFieldDecorator } = form;
|
||||||
|
if (!selectedEmployee) return "//TODO No employee selected.";
|
||||||
|
return (
|
||||||
|
<Form onSubmit={handleSubmit} autoComplete={"off"}>
|
||||||
|
<Button type="primary" htmlType="submit">
|
||||||
|
{t("general.actions.save")}
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<Form.Item label={t("employees.fields.first_name")}>
|
||||||
|
{getFieldDecorator("first_name", {
|
||||||
|
initialValue: selectedEmployee.first_name,
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})(<Input name="first_name" />)}
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("employees.fields.last_name")}>
|
||||||
|
{getFieldDecorator("last_name", {
|
||||||
|
initialValue: selectedEmployee.last_name,
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})(<Input name="last_name" />)}
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("employees.fields.employee_number")}>
|
||||||
|
{getFieldDecorator("employee_number", {
|
||||||
|
initialValue: selectedEmployee.employee_number,
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})(<Input name="employee_number" />)}
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("employees.fields.active")}>
|
||||||
|
{getFieldDecorator("active", {
|
||||||
|
initialValue: selectedEmployee.active,
|
||||||
|
valuePropName: "checked"
|
||||||
|
})(<Switch name="active" />)}
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("employees.fields.flat_rate")}>
|
||||||
|
{getFieldDecorator("flat_rate", {
|
||||||
|
initialValue: selectedEmployee.flat_rate,
|
||||||
|
valuePropName: "checked"
|
||||||
|
})(<Switch name="active" />)}
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("employees.fields.hire_date")}>
|
||||||
|
{getFieldDecorator("hire_date", {
|
||||||
|
initialValue: selectedEmployee.hire_date
|
||||||
|
? moment(selectedEmployee.hire_date)
|
||||||
|
: null,
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})(<DatePicker name="hire_date" />)}
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("employees.fields.termination_date")}>
|
||||||
|
{getFieldDecorator("termination_date", {
|
||||||
|
initialValue: selectedEmployee.termination_date
|
||||||
|
? moment(selectedEmployee.termination_date)
|
||||||
|
: null
|
||||||
|
})(<DatePicker name="termination_date" />)}
|
||||||
|
</Form.Item>
|
||||||
|
{
|
||||||
|
//TODO Make this a picklist.
|
||||||
|
}
|
||||||
|
<Form.Item label={t("employees.fields.cost_center")}>
|
||||||
|
{getFieldDecorator("cost_center", {
|
||||||
|
initialValue: selectedEmployee.cost_center,
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})(<Input name="cost_center" />)}
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("employees.fields.base_rate")}>
|
||||||
|
{getFieldDecorator("base_rate", {
|
||||||
|
initialValue: selectedEmployee.base_rate,
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})(<InputNumber name="base_rate" />)}
|
||||||
|
</Form.Item>
|
||||||
|
</Form>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
import { Button, List } from "antd";
|
||||||
|
import React from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
||||||
|
export default function ShopEmployeesListComponent({
|
||||||
|
loading,
|
||||||
|
employees,
|
||||||
|
setSelectedEmployee,
|
||||||
|
handleDelete
|
||||||
|
}) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
onClick={() => {
|
||||||
|
setSelectedEmployee({});
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{t("employees.actions.new")}
|
||||||
|
</Button>
|
||||||
|
<List
|
||||||
|
loading={loading}
|
||||||
|
itemLayout="horizontal"
|
||||||
|
dataSource={employees}
|
||||||
|
renderItem={item => (
|
||||||
|
<List.Item
|
||||||
|
actions={[
|
||||||
|
<Button key="edit" onClick={() => setSelectedEmployee(item)}>
|
||||||
|
{t("general.actions.edit")}
|
||||||
|
</Button>,
|
||||||
|
<Button key="delete" onClick={() => handleDelete(item.id)}>
|
||||||
|
{t("general.actions.delete")}
|
||||||
|
</Button>
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<List.Item.Meta
|
||||||
|
title={`${item.first_name || ""} ${item.last_name ||
|
||||||
|
""} | ${item.employee_number || ""}`}
|
||||||
|
description={
|
||||||
|
<span>
|
||||||
|
{item.cost_center} @{" "}
|
||||||
|
<CurrencyFormatter>{item.base_rate}</CurrencyFormatter>
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</List.Item>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { Col, Row } from "antd";
|
||||||
|
import React from "react";
|
||||||
|
import ShopEmployeesFormComponent from "./shop-employees-form.component";
|
||||||
|
import ShopEmployeesListComponent from "./shop-employees-list.component";
|
||||||
|
export default function ShopEmployeeComponent({
|
||||||
|
form,
|
||||||
|
loading,
|
||||||
|
employees,
|
||||||
|
employeeState,
|
||||||
|
handleSubmit,
|
||||||
|
handleDelete
|
||||||
|
}) {
|
||||||
|
const [selectedEmployee, setSelectedEmployee] = employeeState;
|
||||||
|
return (
|
||||||
|
<Row>
|
||||||
|
<Col span={6}>
|
||||||
|
<ShopEmployeesListComponent
|
||||||
|
employees={employees}
|
||||||
|
loading={loading}
|
||||||
|
setSelectedEmployee={setSelectedEmployee}
|
||||||
|
handleDelete={handleDelete}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
|
||||||
|
<Col span={18}>
|
||||||
|
<ShopEmployeesFormComponent
|
||||||
|
handleSubmit={handleSubmit}
|
||||||
|
form={form}
|
||||||
|
selectedEmployee={selectedEmployee}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
import { Form, notification } from "antd";
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import { useMutation, useQuery } from "react-apollo";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { connect } from "react-redux";
|
||||||
|
import { createStructuredSelector } from "reselect";
|
||||||
|
import { DELETE_EMPLOYEE, INSERT_EMPLOYEES, QUERY_EMPLOYEES, UPDATE_EMPLOYEE } from "../../graphql/employees.queries";
|
||||||
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
|
import AlertComponent from "../alert/alert.component";
|
||||||
|
import ShopEmployeeComponent from "./shop-employees.component";
|
||||||
|
|
||||||
|
|
||||||
|
const mapStateToProps = createStructuredSelector({
|
||||||
|
bodyshop: selectBodyshop
|
||||||
|
});
|
||||||
|
|
||||||
|
function ShopEmployeesContainer({ form, bodyshop }) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const employeeState = useState(null);
|
||||||
|
const { loading, error, data, refetch } = useQuery(QUERY_EMPLOYEES, {
|
||||||
|
fetchPolicy: "network-only"
|
||||||
|
});
|
||||||
|
|
||||||
|
const [updateEmployee] = useMutation(UPDATE_EMPLOYEE);
|
||||||
|
const [insertEmployees] = useMutation(INSERT_EMPLOYEES);
|
||||||
|
const [deleteEmployee] = useMutation(DELETE_EMPLOYEE);
|
||||||
|
const handleDelete = id => {
|
||||||
|
deleteEmployee({ variables: { id: id } })
|
||||||
|
.then(r => {
|
||||||
|
notification["success"]({
|
||||||
|
message: t("employees.successes.delete")
|
||||||
|
});
|
||||||
|
//TODO: Better way to reset the field decorators?
|
||||||
|
employeeState[1](null);
|
||||||
|
refetch().then(r => form.resetFields());
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
notification["error"]({
|
||||||
|
message: t("employees.errors.delete")
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSubmit = e => {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
form.validateFieldsAndScroll((err, values) => {
|
||||||
|
if (err) {
|
||||||
|
notification["error"]({
|
||||||
|
message: t("employees.errors.validationtitle"),
|
||||||
|
description: t("employees.errors.validation")
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (!err) {
|
||||||
|
if (employeeState[0].id) {
|
||||||
|
//Update a record.
|
||||||
|
updateEmployee({
|
||||||
|
variables: { id: employeeState[0].id, employee: values }
|
||||||
|
})
|
||||||
|
.then(r => {
|
||||||
|
notification["success"]({
|
||||||
|
message: t("employees.successes.save")
|
||||||
|
});
|
||||||
|
//TODO: Better way to reset the field decorators?
|
||||||
|
employeeState[1](null);
|
||||||
|
refetch().then(r => form.resetFields());
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
notification["error"]({
|
||||||
|
message: t("employees.errors.save")
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
//New record, insert it.
|
||||||
|
insertEmployees({
|
||||||
|
variables: { employees: [{ ...values, shopid: bodyshop.id }] }
|
||||||
|
}).then(r => {
|
||||||
|
notification["success"]({
|
||||||
|
message: t("employees.successes.save")
|
||||||
|
});
|
||||||
|
//TODO: Better way to reset the field decorators?
|
||||||
|
employeeState[1](null);
|
||||||
|
refetch()
|
||||||
|
.then(r => form.resetFields())
|
||||||
|
.catch(error => {
|
||||||
|
notification["error"]({
|
||||||
|
message: t("employees.errors.save")
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ShopEmployeeComponent
|
||||||
|
handleSubmit={handleSubmit}
|
||||||
|
handleDelete={handleDelete}
|
||||||
|
form={form}
|
||||||
|
loading={loading}
|
||||||
|
employeeState={employeeState}
|
||||||
|
employees={data ? data.employees : []}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
export default connect(
|
||||||
|
mapStateToProps,
|
||||||
|
null
|
||||||
|
)(Form.create({ name: "ShopEmployeesContainer" })(ShopEmployeesContainer));
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
import { Input, Table } from "antd";
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { Link } from "react-router-dom";
|
||||||
|
import { alphaSort } from "../../utils/sorters";
|
||||||
|
|
||||||
|
export default function VehiclesListComponent({ loading, vehicles, refetch }) {
|
||||||
|
const [state, setState] = useState({
|
||||||
|
sortedInfo: {},
|
||||||
|
filteredInfo: { text: "" }
|
||||||
|
});
|
||||||
|
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
title: t("vehicles.fields.v_vin"),
|
||||||
|
dataIndex: "v_vin",
|
||||||
|
key: "v_vin",
|
||||||
|
// onFilter: (value, record) => record.ro_number.includes(value),
|
||||||
|
// filteredValue: state.filteredInfo.text || null,
|
||||||
|
sorter: (a, b) => alphaSort(a.v_vin, b.v_vin),
|
||||||
|
sortOrder:
|
||||||
|
state.sortedInfo.columnKey === "v_vin" && state.sortedInfo.order,
|
||||||
|
|
||||||
|
render: (text, record) => (
|
||||||
|
<Link to={"/manage/vehicles/" + record.id}>{record.v_vin}</Link>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("vehicles.fields.description"),
|
||||||
|
dataIndex: "description",
|
||||||
|
key: "description",
|
||||||
|
render: (text, record) => {
|
||||||
|
return (
|
||||||
|
<span>{`${record.v_model_yr} ${record.v_make_desc} ${record.v_model_desc} ${record.v_color}`}</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("vehicles.fields.plate_no"),
|
||||||
|
dataIndex: "plate",
|
||||||
|
key: "plate",
|
||||||
|
render: (text, record) => {
|
||||||
|
return <span>{`${record.plate_st} | ${record.plate_no}`}</span>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const handleTableChange = (pagination, filters, sorter) => {
|
||||||
|
setState({ ...state, filteredInfo: filters, sortedInfo: sorter });
|
||||||
|
};
|
||||||
|
//TODO Implement searching & pagination
|
||||||
|
return (
|
||||||
|
<Table
|
||||||
|
loading={loading}
|
||||||
|
title={() => {
|
||||||
|
return (
|
||||||
|
<Input.Search
|
||||||
|
placeholder="Search..."
|
||||||
|
onSearch={value => {
|
||||||
|
console.log(value);
|
||||||
|
}}
|
||||||
|
enterButton
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
size="small"
|
||||||
|
pagination={{ position: "top" }}
|
||||||
|
columns={columns.map(item => ({ ...item }))}
|
||||||
|
rowKey="id"
|
||||||
|
dataSource={vehicles}
|
||||||
|
onChange={handleTableChange}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import React from "react";
|
||||||
|
import VehiclesListComponent from "./vehicles-list.component";
|
||||||
|
import { useQuery } from "react-apollo";
|
||||||
|
import AlertComponent from "../alert/alert.component";
|
||||||
|
import { QUERY_ALL_VEHICLES } from "../../graphql/vehicles.queries";
|
||||||
|
|
||||||
|
export default function VehiclesListContainer() {
|
||||||
|
const { loading, error, data, refetch } = useQuery(QUERY_ALL_VEHICLES, {
|
||||||
|
fetchPolicy: "network-only"
|
||||||
|
});
|
||||||
|
|
||||||
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
|
return (
|
||||||
|
<VehiclesListComponent
|
||||||
|
loading={loading}
|
||||||
|
vehicles={data ? data.vehicles : null}
|
||||||
|
refetch={refetch}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import { Link } from "react-router-dom";
|
|
||||||
import { Menu, Dropdown, Card, Icon, Avatar, Row, Col } from "antd";
|
|
||||||
import { useTranslation } from "react-i18next";
|
|
||||||
import styled from "styled-components";
|
|
||||||
import Moment from "react-moment";
|
|
||||||
import CarImage from "../../assets/car.svg";
|
|
||||||
|
|
||||||
//The following styled div is required because of a smooth-dnd style used by react-trello to prevent wrapping of columns.
|
|
||||||
const WrappedSpan = styled.span`
|
|
||||||
white-space: normal;
|
|
||||||
`;
|
|
||||||
|
|
||||||
export default function WhiteBoardCard({ metadata }) {
|
|
||||||
// const {
|
|
||||||
// onClick,
|
|
||||||
// className,
|
|
||||||
// name,
|
|
||||||
// cardStyle,
|
|
||||||
// body,
|
|
||||||
// dueOn,
|
|
||||||
// cardColor,
|
|
||||||
// subTitle,
|
|
||||||
// tagStyle,
|
|
||||||
// escalationText,
|
|
||||||
// tags,
|
|
||||||
// showDeleteButton,
|
|
||||||
// onDelete
|
|
||||||
// } = this.props;
|
|
||||||
const { t } = useTranslation();
|
|
||||||
|
|
||||||
const menu = (
|
|
||||||
<Menu>
|
|
||||||
<Menu.Item key='images'>
|
|
||||||
<Icon type='file-image' />
|
|
||||||
{t("jobs.actions.viewJobImages")}
|
|
||||||
</Menu.Item>
|
|
||||||
<Menu.Item key='printing'>
|
|
||||||
<Icon type='printer' />
|
|
||||||
{t("jobs.actions.printCenter")}
|
|
||||||
</Menu.Item>
|
|
||||||
<Menu.Item key='notes'>
|
|
||||||
<Icon type='edit' />
|
|
||||||
{t("jobs.actions.notes")}
|
|
||||||
</Menu.Item>
|
|
||||||
<Menu.Item key='postinvoices'>
|
|
||||||
<Icon type='shopping-cart' />
|
|
||||||
{t("jobs.actions.postInvoices")}
|
|
||||||
</Menu.Item>
|
|
||||||
<Menu.Item key='receiveparts'>
|
|
||||||
<Icon type='inbox' />
|
|
||||||
{t("jobs.actions.receiveParts")}
|
|
||||||
</Menu.Item>
|
|
||||||
<Menu.Item key='partstatus'>
|
|
||||||
<Icon type='tool' />
|
|
||||||
{t("jobs.actions.partStatus")}
|
|
||||||
</Menu.Item>
|
|
||||||
</Menu>
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<Card
|
|
||||||
title={
|
|
||||||
(metadata.ro_number || metadata.est_number) +
|
|
||||||
" | " +
|
|
||||||
(metadata.owner?.first_name || "") +
|
|
||||||
" " +
|
|
||||||
(metadata.owner?.last_name || "")
|
|
||||||
}
|
|
||||||
style={{ width: 300, marginTop: 10 }}
|
|
||||||
bodyStyle={{ padding: 10 }}
|
|
||||||
actions={[
|
|
||||||
<Link to={`/manage/jobs/${metadata.id}`}>
|
|
||||||
<Icon type='eye' key='view' />
|
|
||||||
</Link>,
|
|
||||||
<Icon type='message' key='message' />,
|
|
||||||
<Dropdown overlay={menu} trigger={["click"]}>
|
|
||||||
<Icon type='ellipsis' />
|
|
||||||
</Dropdown>
|
|
||||||
]}>
|
|
||||||
<Row>
|
|
||||||
<Col span={6}>
|
|
||||||
<Avatar size='large' alt='Vehicle Image' src={CarImage} />
|
|
||||||
</Col>
|
|
||||||
<Col span={18}>
|
|
||||||
<Row>
|
|
||||||
<WrappedSpan>
|
|
||||||
{metadata.vehicle?.v_model_yr || t("general.labels.na")}{" "}
|
|
||||||
{metadata.vehicle?.v_make_desc || t("general.labels.na")}{" "}
|
|
||||||
{metadata.vehicle?.v_model_desc || t("general.labels.na")}
|
|
||||||
</WrappedSpan>
|
|
||||||
</Row>
|
|
||||||
{metadata.vehicle?.v_vin ? (
|
|
||||||
<Row>
|
|
||||||
<WrappedSpan>
|
|
||||||
VIN: {metadata.vehicle?.v_vin || t("general.labels.na")}
|
|
||||||
</WrappedSpan>
|
|
||||||
</Row>
|
|
||||||
) : null}
|
|
||||||
</Col>
|
|
||||||
</Row>
|
|
||||||
<Row>
|
|
||||||
<Col span={12}>
|
|
||||||
{t("general.labels.in")}:
|
|
||||||
<Moment format='MM/DD/YYYY'>{metadata.actual_in}</Moment>
|
|
||||||
</Col>
|
|
||||||
<Col span={12}>
|
|
||||||
{t("general.labels.out")}:
|
|
||||||
<Moment format='MM/DD/YYYY'>{metadata.scheduled_completion}</Moment>
|
|
||||||
</Col>
|
|
||||||
</Row>
|
|
||||||
</Card>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import Board from "react-trello";
|
|
||||||
import WhiteBoardCard from "../white-board-card/white-board-card.component";
|
|
||||||
|
|
||||||
export default function WhiteBoardKanBan({ data, eventBus }) {
|
|
||||||
const setEventBus = handle => {
|
|
||||||
eventBus = handle;
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Board
|
|
||||||
tagStyle={{ fontSize: "80%" }}
|
|
||||||
data={data}
|
|
||||||
style={{ backgroundColor: "none" }}
|
|
||||||
laneDraggable={false}
|
|
||||||
eventBusHandle={setEventBus}
|
|
||||||
components={{ Card: WhiteBoardCard }}
|
|
||||||
onCardClick={(cardId, metadata) =>
|
|
||||||
alert(`Card with id:${cardId} clicked. Has metadata.id: ${metadata.id}`)
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import { useSubscription } from "@apollo/react-hooks";
|
|
||||||
import { SUBSCRIPTION_JOBS_IN_PRODUCTION } from "../../graphql/jobs.queries";
|
|
||||||
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
|
|
||||||
import Alert from "../../components/alert/alert.component";
|
|
||||||
import WhiteBoardKanBan from "./white-board-kanban.component";
|
|
||||||
|
|
||||||
export default function WhiteBoardKanBanContainer() {
|
|
||||||
const { loading, error, data } = useSubscription(
|
|
||||||
SUBSCRIPTION_JOBS_IN_PRODUCTION,
|
|
||||||
{
|
|
||||||
fetchPolicy: "network-only"
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
if (loading) return <LoadingSpinner />;
|
|
||||||
if (error) return <Alert message={error.message} />;
|
|
||||||
let eventBus;
|
|
||||||
|
|
||||||
let i = data.job_status.reduce((acc, value) => {
|
|
||||||
//Create a lane object for each row.
|
|
||||||
let newLane = {
|
|
||||||
id: value.name,
|
|
||||||
title: value.name,
|
|
||||||
label: "0",
|
|
||||||
cards: value.jobs.reduce((acc, value) => {
|
|
||||||
acc.push({
|
|
||||||
id: value.id,
|
|
||||||
title: value.ro_number,
|
|
||||||
description: value.est_number,
|
|
||||||
label: value.id,
|
|
||||||
metadata: value
|
|
||||||
});
|
|
||||||
return acc;
|
|
||||||
}, [])
|
|
||||||
};
|
|
||||||
acc.push(newLane);
|
|
||||||
return acc;
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
let laneData = {
|
|
||||||
lanes: i
|
|
||||||
};
|
|
||||||
|
|
||||||
return <WhiteBoardKanBan eventBus={eventBus} data={laneData} />;
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import { Menu, Icon } from "antd";
|
|
||||||
export default function WhiteBoardLeftSiderComponent({visible}) {
|
|
||||||
return (
|
|
||||||
<Menu theme="dark" mode="inline" defaultSelectedKeys={["4"]}>
|
|
||||||
<Menu.Item key="1">
|
|
||||||
<Icon type="user" />
|
|
||||||
<span className="nav-text">nav 1</span>
|
|
||||||
</Menu.Item>
|
|
||||||
<Menu.Item key="2">
|
|
||||||
<Icon type="video-camera" />
|
|
||||||
<span className="nav-text">nav 2</span>
|
|
||||||
</Menu.Item>
|
|
||||||
<Menu.Item key="3">
|
|
||||||
<Icon type="upload" />
|
|
||||||
<span className="nav-text">nav 3</span>
|
|
||||||
</Menu.Item>
|
|
||||||
<Menu.Item key="4">
|
|
||||||
<Icon type="user" />
|
|
||||||
<span className="nav-text">nav 4</span>
|
|
||||||
</Menu.Item>
|
|
||||||
</Menu>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
|
|
||||||
import WhiteBoardLeftSiderComponent from "./white-board-left-sider.component";
|
|
||||||
|
|
||||||
export default function WhiteBoardPageContainer() {
|
|
||||||
return <WhiteBoardLeftSiderComponent />;
|
|
||||||
}
|
|
||||||
11
client/src/graphql/allocations.queries.js
Normal file
11
client/src/graphql/allocations.queries.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import { gql } from "apollo-boost";
|
||||||
|
|
||||||
|
export const INSERT_ALLOCATION = gql`
|
||||||
|
mutation INSERT_ALLOCATION($alloc: [allocations_insert_input!]!) {
|
||||||
|
insert_allocations(objects: $alloc) {
|
||||||
|
returning {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
@@ -25,8 +25,6 @@ const errorLink = onError(
|
|||||||
}
|
}
|
||||||
if (expired) {
|
if (expired) {
|
||||||
//User access token has expired
|
//User access token has expired
|
||||||
//props.history.push("/network-error");
|
|
||||||
console.log("We need a new token!");
|
|
||||||
console.log("Old Token", window.localStorage.getItem("token"));
|
console.log("Old Token", window.localStorage.getItem("token"));
|
||||||
// Let's refresh token through async request
|
// Let's refresh token through async request
|
||||||
|
|
||||||
@@ -35,15 +33,15 @@ const errorLink = onError(
|
|||||||
console.log("Got the new token.", token);
|
console.log("Got the new token.", token);
|
||||||
window.localStorage.setItem("token", token);
|
window.localStorage.setItem("token", token);
|
||||||
|
|
||||||
const oldHeaders = operation.getContext().headers;
|
// const oldHeaders = operation.getContext().headers;
|
||||||
operation.setContext({
|
// operation.setContext({
|
||||||
headers: {
|
// headers: {
|
||||||
...oldHeaders,
|
// ...oldHeaders,
|
||||||
authorization: token ? `Bearer ${token}` : ""
|
// authorization: token ? `Bearer ${token}` : ""
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
console.log("forward", forward);
|
// console.log("forward", forward);
|
||||||
console.log("operation", operation);
|
// console.log("operation", operation);
|
||||||
return forward(operation).subscribe();
|
return forward(operation).subscribe();
|
||||||
|
|
||||||
// return new Observable(observer => {
|
// return new Observable(observer => {
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ export const QUERY_ALL_ACTIVE_APPOINTMENTS = gql`
|
|||||||
start
|
start
|
||||||
id
|
id
|
||||||
end
|
end
|
||||||
|
title
|
||||||
|
isintake
|
||||||
job {
|
job {
|
||||||
ro_number
|
ro_number
|
||||||
ownr_ln
|
ownr_ln
|
||||||
@@ -38,10 +40,14 @@ export const INSERT_APPOINTMENT = gql`
|
|||||||
|
|
||||||
export const QUERY_APPOINTMENT_BY_DATE = gql`
|
export const QUERY_APPOINTMENT_BY_DATE = gql`
|
||||||
query QUERY_APPOINTMENT_BY_DATE($start: timestamptz, $end: timestamptz) {
|
query QUERY_APPOINTMENT_BY_DATE($start: timestamptz, $end: timestamptz) {
|
||||||
appointments(where: { start: { _lte: $end, _gte: $start } }) {
|
appointments(
|
||||||
|
where: { start: { _lte: $end, _gte: $start }, canceled: { _eq: false } }
|
||||||
|
) {
|
||||||
start
|
start
|
||||||
id
|
id
|
||||||
end
|
end
|
||||||
|
title
|
||||||
|
isintake
|
||||||
job {
|
job {
|
||||||
ro_number
|
ro_number
|
||||||
ownr_ln
|
ownr_ln
|
||||||
@@ -81,6 +87,7 @@ export const QUERY_APPOINTMENTS_BY_JOBID = gql`
|
|||||||
start
|
start
|
||||||
id
|
id
|
||||||
end
|
end
|
||||||
|
isintake
|
||||||
arrived
|
arrived
|
||||||
canceled
|
canceled
|
||||||
created_at
|
created_at
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ export const QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK = gql`
|
|||||||
query QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK($id: uuid!) {
|
query QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK($id: uuid!) {
|
||||||
available_jobs_by_pk(id: $id) {
|
available_jobs_by_pk(id: $id) {
|
||||||
id
|
id
|
||||||
|
issupplement
|
||||||
est_data
|
est_data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,13 @@ export const QUERY_BODYSHOP = gql`
|
|||||||
updated_at
|
updated_at
|
||||||
zip_post
|
zip_post
|
||||||
region_config
|
region_config
|
||||||
|
employees {
|
||||||
|
id
|
||||||
|
first_name
|
||||||
|
last_name
|
||||||
|
employee_number
|
||||||
|
cost_center
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|||||||
48
client/src/graphql/employees.queries.jsx
Normal file
48
client/src/graphql/employees.queries.jsx
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import { gql } from "apollo-boost";
|
||||||
|
|
||||||
|
export const QUERY_EMPLOYEES = gql`
|
||||||
|
query QUERY_EMPLOYEES {
|
||||||
|
employees {
|
||||||
|
last_name
|
||||||
|
id
|
||||||
|
first_name
|
||||||
|
employee_number
|
||||||
|
active
|
||||||
|
termination_date
|
||||||
|
hire_date
|
||||||
|
flat_rate
|
||||||
|
cost_center
|
||||||
|
base_rate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
export const INSERT_EMPLOYEES = gql`
|
||||||
|
mutation INSERT_EMPLOYEES($employees: [employees_insert_input!]!) {
|
||||||
|
insert_employees(objects: $employees) {
|
||||||
|
returning {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
export const UPDATE_EMPLOYEE = gql`
|
||||||
|
mutation UPDATE_EMPLOYEE($id: uuid!, $employee: employees_set_input) {
|
||||||
|
update_employees(where: { id: { _eq: $id } }, _set: $employee) {
|
||||||
|
returning {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
export const DELETE_EMPLOYEE = gql`
|
||||||
|
mutation DELETE_EMPLOYEE($id: uuid!) {
|
||||||
|
delete_employees(where: { id: { _eq: $id } }) {
|
||||||
|
returning {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
@@ -18,6 +18,15 @@ export const GET_JOB_LINES_BY_PK = gql`
|
|||||||
lbr_op
|
lbr_op
|
||||||
lbr_amt
|
lbr_amt
|
||||||
op_code_desc
|
op_code_desc
|
||||||
|
allocations {
|
||||||
|
id
|
||||||
|
hours
|
||||||
|
employee {
|
||||||
|
id
|
||||||
|
first_name
|
||||||
|
last_name
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ export const GET_JOB_BY_PK = gql`
|
|||||||
ins_co_id
|
ins_co_id
|
||||||
policy_no
|
policy_no
|
||||||
loss_date
|
loss_date
|
||||||
|
clm_no
|
||||||
area_of_damage
|
area_of_damage
|
||||||
ins_co_nm
|
ins_co_nm
|
||||||
ins_addr1
|
ins_addr1
|
||||||
@@ -256,6 +257,7 @@ export const QUERY_JOB_CARD_DETAILS = gql`
|
|||||||
est_ct_ln
|
est_ct_ln
|
||||||
clm_no
|
clm_no
|
||||||
status
|
status
|
||||||
|
area_of_damage
|
||||||
ro_number
|
ro_number
|
||||||
scheduled_completion
|
scheduled_completion
|
||||||
scheduled_in
|
scheduled_in
|
||||||
|
|||||||
@@ -65,3 +65,28 @@ export const UPDATE_OWNER = gql`
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
export const QUERY_ALL_OWNERS = gql`
|
||||||
|
query QUERY_ALL_OWNERS {
|
||||||
|
owners {
|
||||||
|
id
|
||||||
|
allow_text_message
|
||||||
|
created_at
|
||||||
|
ownr_addr1
|
||||||
|
ownr_addr2
|
||||||
|
ownr_co_nm
|
||||||
|
ownr_city
|
||||||
|
ownr_ctry
|
||||||
|
ownr_ea
|
||||||
|
ownr_fn
|
||||||
|
ownr_ph1
|
||||||
|
ownr_ln
|
||||||
|
ownr_ph2
|
||||||
|
ownr_st
|
||||||
|
ownr_title
|
||||||
|
ownr_zip
|
||||||
|
preferred_contact
|
||||||
|
updated_at
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|||||||
@@ -53,3 +53,20 @@ export const UPDATE_VEHICLE = gql`
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
export const QUERY_ALL_VEHICLES = gql`
|
||||||
|
query QUERY_ALL_VEHICLES {
|
||||||
|
vehicles {
|
||||||
|
id
|
||||||
|
plate_no
|
||||||
|
plate_st
|
||||||
|
v_vin
|
||||||
|
v_model_yr
|
||||||
|
v_model_desc
|
||||||
|
v_make_desc
|
||||||
|
v_color
|
||||||
|
v_bstyle
|
||||||
|
updated_at
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import React, { useEffect, useState } from "react";
|
|
||||||
import { useQuery } from "@apollo/react-hooks";
|
import { useQuery } from "@apollo/react-hooks";
|
||||||
import AlertComponent from "../../components/alert/alert.component";
|
import React, { useEffect, useState } from "react";
|
||||||
import { Col } from "antd";
|
|
||||||
import { QUERY_ALL_OPEN_JOBS } from "../../graphql/jobs.queries";
|
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import JobsList from "../../components/jobs-list/jobs-list.component";
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
import JobDetailCards from "../../components/job-detail-cards/job-detail-cards.component";
|
import JobDetailCards from "../../components/job-detail-cards/job-detail-cards.component";
|
||||||
|
import JobsList from "../../components/jobs-list/jobs-list.component";
|
||||||
|
import { QUERY_ALL_OPEN_JOBS } from "../../graphql/jobs.queries";
|
||||||
|
|
||||||
//TODO: Implement pagination for this.
|
//TODO: Implement pagination for this.
|
||||||
export default function JobsPage({ match, location }) {
|
export default function JobsPage({ match, location }) {
|
||||||
@@ -21,9 +20,9 @@ export default function JobsPage({ match, location }) {
|
|||||||
const { hash } = location;
|
const { hash } = location;
|
||||||
const [selectedJob, setSelectedJob] = useState(hash ? hash.substr(1) : null);
|
const [selectedJob, setSelectedJob] = useState(hash ? hash.substr(1) : null);
|
||||||
|
|
||||||
if (error) return <AlertComponent message={error.message} type='error' />;
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
return (
|
return (
|
||||||
<Col span={22} offset={1}>
|
<div>
|
||||||
<JobsList
|
<JobsList
|
||||||
loading={loading}
|
loading={loading}
|
||||||
selectedJob={selectedJob}
|
selectedJob={selectedJob}
|
||||||
@@ -31,6 +30,6 @@ export default function JobsPage({ match, location }) {
|
|||||||
jobs={data ? data.jobs : null}
|
jobs={data ? data.jobs : null}
|
||||||
/>
|
/>
|
||||||
<JobDetailCards selectedJob={selectedJob} />
|
<JobDetailCards selectedJob={selectedJob} />
|
||||||
</Col>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,28 @@
|
|||||||
|
import { notification } from "antd";
|
||||||
import React, { useEffect } from "react";
|
import React, { useEffect } from "react";
|
||||||
import ManagePage from "./manage.page";
|
|
||||||
import { useQuery } from "react-apollo";
|
import { useQuery } from "react-apollo";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { connect } from "react-redux";
|
||||||
|
import { createStructuredSelector } from "reselect";
|
||||||
|
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
|
||||||
import { QUERY_BODYSHOP } from "../../graphql/bodyshop.queries";
|
import { QUERY_BODYSHOP } from "../../graphql/bodyshop.queries";
|
||||||
import { setBodyshop } from "../../redux/user/user.actions";
|
import { setBodyshop } from "../../redux/user/user.actions";
|
||||||
import { connect } from "react-redux";
|
import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors";
|
||||||
import { notification } from "antd";
|
import ManagePage from "./manage.page";
|
||||||
import { useTranslation } from "react-i18next";
|
|
||||||
|
const mapStateToProps = createStructuredSelector({
|
||||||
|
currentUser: selectCurrentUser,
|
||||||
|
bodyshop: selectBodyshop
|
||||||
|
});
|
||||||
|
|
||||||
const mapDispatchToProps = dispatch => ({
|
const mapDispatchToProps = dispatch => ({
|
||||||
setBodyshop: bs => dispatch(setBodyshop(bs))
|
setBodyshop: bs => dispatch(setBodyshop(bs))
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connect(
|
export default connect(
|
||||||
null,
|
mapStateToProps,
|
||||||
mapDispatchToProps
|
mapDispatchToProps
|
||||||
)(function ManagePageContainer({ match, setBodyshop }) {
|
)(function ManagePageContainer({ match, setBodyshop, bodyshop }) {
|
||||||
const { error, data } = useQuery(QUERY_BODYSHOP, {
|
const { error, data } = useQuery(QUERY_BODYSHOP, {
|
||||||
fetchPolicy: "network-only"
|
fetchPolicy: "network-only"
|
||||||
});
|
});
|
||||||
@@ -30,5 +38,7 @@ export default connect(
|
|||||||
};
|
};
|
||||||
}, [data, setBodyshop]);
|
}, [data, setBodyshop]);
|
||||||
|
|
||||||
|
//TODO Translate later.
|
||||||
|
if (!bodyshop) return <LoadingSpinner message="Loading bodyshop data." />;
|
||||||
return <ManagePage match={match} />;
|
return <ManagePage match={match} />;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ const OwnersContainer = lazy(() => import("../owners/owners.page.container"));
|
|||||||
const OwnersDetailContainer = lazy(() =>
|
const OwnersDetailContainer = lazy(() =>
|
||||||
import("../owners-detail/owners-detail.page.container")
|
import("../owners-detail/owners-detail.page.container")
|
||||||
);
|
);
|
||||||
|
const ShopPage = lazy(() => import("../shop/shop.page.component"));
|
||||||
|
|
||||||
const { Header, Content, Footer } = Layout;
|
const { Header, Content, Footer } = Layout;
|
||||||
|
|
||||||
export default function Manage({ match }) {
|
export default function Manage({ match }) {
|
||||||
@@ -54,9 +56,10 @@ export default function Manage({ match }) {
|
|||||||
<HeaderContainer />
|
<HeaderContainer />
|
||||||
</Header>
|
</Header>
|
||||||
<Layout>
|
<Layout>
|
||||||
<ChatWindowContainer />
|
<Content
|
||||||
|
className="content-container"
|
||||||
<Content className="content-container" style={{ margin: "0px" }}>
|
style={{ padding: "0em 4em 4em" }}
|
||||||
|
>
|
||||||
<ErrorBoundary>
|
<ErrorBoundary>
|
||||||
<Suspense
|
<Suspense
|
||||||
fallback={
|
fallback={
|
||||||
@@ -113,12 +116,20 @@ export default function Manage({ match }) {
|
|||||||
path={`${match.path}/available`}
|
path={`${match.path}/available`}
|
||||||
component={JobsAvailablePage}
|
component={JobsAvailablePage}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<Route exact path={`${match.path}/shop/`} component={ShopPage} />
|
||||||
</Suspense>
|
</Suspense>
|
||||||
</ErrorBoundary>
|
</ErrorBoundary>
|
||||||
</Content>
|
</Content>
|
||||||
</Layout>
|
</Layout>
|
||||||
<Footer>
|
<Footer>
|
||||||
<FooterComponent />
|
<FooterComponent />
|
||||||
|
{
|
||||||
|
// <Affix offsetBottom={20}>
|
||||||
|
// <ChatWindowContainer />
|
||||||
|
// </Affix>
|
||||||
|
}
|
||||||
|
<ChatWindowContainer />
|
||||||
</Footer>
|
</Footer>
|
||||||
<BackTop />
|
<BackTop />
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
import React from 'react'
|
import React from "react";
|
||||||
|
import OwnersListContainer from "../../components/owners-list/owners-list.container";
|
||||||
|
|
||||||
export default function OwnersPageComponent() {
|
export default function OwnersPageComponent() {
|
||||||
return (
|
return <OwnersListContainer />;
|
||||||
<div>
|
|
||||||
Owners Page
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
import React from 'react'
|
import React, { useEffect } from "react";
|
||||||
import OwnersPageComponent from './owners.page.component'
|
import OwnersPageComponent from "./owners.page.component";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
export default function OwnersPageContainer() {
|
export default function OwnersPageContainer() {
|
||||||
return (
|
const { t } = useTranslation();
|
||||||
<OwnersPageComponent />
|
useEffect(() => {
|
||||||
)
|
document.title = t("titles.owners");
|
||||||
|
}, [t]);
|
||||||
|
|
||||||
|
return <OwnersPageComponent />;
|
||||||
}
|
}
|
||||||
|
|||||||
25
client/src/pages/shop/shop.page.component.jsx
Normal file
25
client/src/pages/shop/shop.page.component.jsx
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { Tabs } from "antd";
|
||||||
|
import React, { useEffect } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import ShopEmployeesContainer from "../../components/shop-employees/shop-employees.container";
|
||||||
|
|
||||||
|
export default function ShopPage() {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = t("titles.shop");
|
||||||
|
}, [t]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Tabs>
|
||||||
|
<Tabs.TabPane tab="Shop Info" key="info">
|
||||||
|
Shop INfo
|
||||||
|
</Tabs.TabPane>
|
||||||
|
<Tabs.TabPane tab="Employees" key="employees">
|
||||||
|
<ShopEmployeesContainer />
|
||||||
|
</Tabs.TabPane>
|
||||||
|
<Tabs.TabPane tab="Licensing" key="licensing">
|
||||||
|
Licensing
|
||||||
|
</Tabs.TabPane>
|
||||||
|
</Tabs>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
import React from 'react'
|
import React from "react";
|
||||||
|
import VehiclesListContainer from "../../components/vehicles-list/vehicles-list.container";
|
||||||
|
|
||||||
export default function VehiclesPageComponent() {
|
export default function VehiclesPageComponent() {
|
||||||
return (
|
return <VehiclesListContainer />;
|
||||||
<div>
|
|
||||||
Vehiculos
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import React from "react";
|
import React, { useEffect } from "react";
|
||||||
import VehiclesPageComponent from "./vehicles.page.component";
|
import VehiclesPageComponent from "./vehicles.page.component";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
export default function VehiclesPageContainer() {
|
export default function VehiclesPageContainer() {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = t("titles.vehicles");
|
||||||
|
}, [t]);
|
||||||
return <VehiclesPageComponent />;
|
return <VehiclesPageComponent />;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
|
|
||||||
import WhiteBoardLeftSiderContainer from "../../components/white-board-left-sider/white-board-left-sider.container";
|
|
||||||
import WhiteBoardKanBanContainer from "../../components/white-board-kanban/white-board-kanban.container";
|
|
||||||
import { Layout } from "antd";
|
|
||||||
|
|
||||||
export default function WhiteBoardPage({ whiteBoardLeftSiderVisible }) {
|
|
||||||
const { Sider, Content } = Layout;
|
|
||||||
return (
|
|
||||||
<Layout>
|
|
||||||
<Sider
|
|
||||||
collapsible={true}
|
|
||||||
breakpoint="lg"
|
|
||||||
collapsedWidth="0"
|
|
||||||
onBreakpoint={broken => {
|
|
||||||
//console.log(broken);
|
|
||||||
}}
|
|
||||||
onCollapse={(collapsed, type) => {
|
|
||||||
//console.log(collapsed, type);
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<WhiteBoardLeftSiderContainer />
|
|
||||||
</Sider>
|
|
||||||
|
|
||||||
<Content>
|
|
||||||
<WhiteBoardKanBanContainer />
|
|
||||||
</Content>
|
|
||||||
</Layout>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,9 +1,18 @@
|
|||||||
{
|
{
|
||||||
"translation": {
|
"translation": {
|
||||||
|
"allocations": {
|
||||||
|
"actions": {
|
||||||
|
"assign": "Assign"
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"employee": "Allocated To"
|
||||||
|
}
|
||||||
|
},
|
||||||
"appointments": {
|
"appointments": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"intake": "Intake",
|
"intake": "Intake",
|
||||||
|
"new": "New Appointment",
|
||||||
"reschedule": "Reschedule",
|
"reschedule": "Reschedule",
|
||||||
"viewjob": "View Job"
|
"viewjob": "View Job"
|
||||||
},
|
},
|
||||||
@@ -11,6 +20,9 @@
|
|||||||
"canceling": "Error canceling appointment.",
|
"canceling": "Error canceling appointment.",
|
||||||
"saving": "Error scheduling appointment. {{message}}"
|
"saving": "Error scheduling appointment. {{message}}"
|
||||||
},
|
},
|
||||||
|
"fields": {
|
||||||
|
"title": "Title"
|
||||||
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"arrivedon": "Arrived on: ",
|
"arrivedon": "Arrived on: ",
|
||||||
"cancelledappointment": "Canceled appointment for: ",
|
"cancelledappointment": "Canceled appointment for: ",
|
||||||
@@ -55,12 +67,42 @@
|
|||||||
"insert": "Uploaded document successfully. "
|
"insert": "Uploaded document successfully. "
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"employees": {
|
||||||
|
"actions": {
|
||||||
|
"new": "New Employee"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"delete": "Error encountered while deleting employee.",
|
||||||
|
"save": "Error encountered saving employee.",
|
||||||
|
"validation": "Please check all fields.",
|
||||||
|
"validationtitle": "Unable to save employee."
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"active": "Active?",
|
||||||
|
"base_rate": "Base Rate",
|
||||||
|
"cost_center": "Cost Center",
|
||||||
|
"employee_number": "Employee Number",
|
||||||
|
"first_name": "First Name",
|
||||||
|
"flat_rate": "Flat Rate (Disabled is Straight Time)",
|
||||||
|
"hire_date": "Hire Date",
|
||||||
|
"last_name": "Last Name",
|
||||||
|
"termination_date": "Termination Date"
|
||||||
|
},
|
||||||
|
"successes": {
|
||||||
|
"delete": "Employee deleted successfully.",
|
||||||
|
"save": "Employee saved successfully."
|
||||||
|
}
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"reset": "Reset to original."
|
"delete": "Delete",
|
||||||
|
"edit": "Edit",
|
||||||
|
"reset": "Reset to original.",
|
||||||
|
"save": "Save"
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"actions": "Actions",
|
"actions": "Actions",
|
||||||
|
"barcode": "Barcode",
|
||||||
"in": "In",
|
"in": "In",
|
||||||
"loading": "Loading...",
|
"loading": "Loading...",
|
||||||
"loadingapp": "Loading Bodyshop.app",
|
"loadingapp": "Loading Bodyshop.app",
|
||||||
@@ -76,6 +118,9 @@
|
|||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"unsavedchanges": "You have unsaved changes."
|
"unsavedchanges": "You have unsaved changes."
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"required": "This field is required. "
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"joblines": {
|
"joblines": {
|
||||||
@@ -83,6 +128,7 @@
|
|||||||
"act_price": "Actual Price",
|
"act_price": "Actual Price",
|
||||||
"db_price": "Database Price",
|
"db_price": "Database Price",
|
||||||
"line_desc": "Line Description",
|
"line_desc": "Line Description",
|
||||||
|
"mod_lb_hrs": "Labor Hours",
|
||||||
"oem_partno": "OEM Part #",
|
"oem_partno": "OEM Part #",
|
||||||
"part_type": "Part Type",
|
"part_type": "Part Type",
|
||||||
"unq_seq": "Seq #"
|
"unq_seq": "Seq #"
|
||||||
@@ -223,8 +269,10 @@
|
|||||||
},
|
},
|
||||||
"creating_new_job": "Creating new job...",
|
"creating_new_job": "Creating new job...",
|
||||||
"documents": "Documents",
|
"documents": "Documents",
|
||||||
|
"existing_jobs": "Existing Jobs",
|
||||||
"lines": "Estimate Lines",
|
"lines": "Estimate Lines",
|
||||||
"notes": "Notes",
|
"notes": "Notes",
|
||||||
|
"override_header": "Override estimate header on import?",
|
||||||
"parts": "Parts",
|
"parts": "Parts",
|
||||||
"rates": "Rates",
|
"rates": "Rates",
|
||||||
"vehicle_info": "Vehicle"
|
"vehicle_info": "Vehicle"
|
||||||
@@ -235,7 +283,8 @@
|
|||||||
"created": "Job created successfully. Click to view.",
|
"created": "Job created successfully. Click to view.",
|
||||||
"deleted": "Job deleted successfully.",
|
"deleted": "Job deleted successfully.",
|
||||||
"save": "Job saved successfully.",
|
"save": "Job saved successfully.",
|
||||||
"savetitle": "Record saved successfully."
|
"savetitle": "Record saved successfully.",
|
||||||
|
"supplemented": "Job supplemented successfully. "
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
@@ -251,6 +300,7 @@
|
|||||||
"jobs": "Jobs",
|
"jobs": "Jobs",
|
||||||
"owners": "Owners",
|
"owners": "Owners",
|
||||||
"schedule": "Schedule",
|
"schedule": "Schedule",
|
||||||
|
"shop": "My Shop",
|
||||||
"vehicles": "Vehicles"
|
"vehicles": "Vehicles"
|
||||||
},
|
},
|
||||||
"jobsdetail": {
|
"jobsdetail": {
|
||||||
@@ -295,7 +345,9 @@
|
|||||||
"noaccess": "The record does not exist or you do not have access to it. "
|
"noaccess": "The record does not exist or you do not have access to it. "
|
||||||
},
|
},
|
||||||
"fields": {
|
"fields": {
|
||||||
|
"address": "Address",
|
||||||
"allow_text_message": "Permission to Text?",
|
"allow_text_message": "Permission to Text?",
|
||||||
|
"name": "Name",
|
||||||
"ownr_addr1": "Address",
|
"ownr_addr1": "Address",
|
||||||
"ownr_addr2": "Address 2",
|
"ownr_addr2": "Address 2",
|
||||||
"ownr_city": "City",
|
"ownr_city": "City",
|
||||||
@@ -310,6 +362,7 @@
|
|||||||
"preferred_contact": "Preferred Contact Method"
|
"preferred_contact": "Preferred Contact Method"
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
|
"create_new": "Create a new owner record.",
|
||||||
"existing_owners": "Existing Owners"
|
"existing_owners": "Existing Owners"
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
@@ -328,9 +381,12 @@
|
|||||||
"jobsdetail": "Job {{ro_number}} | $t(titles.app)",
|
"jobsdetail": "Job {{ro_number}} | $t(titles.app)",
|
||||||
"jobsdocuments": "Job Documents {{ro_number}} | $t(titles.app)",
|
"jobsdocuments": "Job Documents {{ro_number}} | $t(titles.app)",
|
||||||
"manageroot": "Home | $t(titles.app)",
|
"manageroot": "Home | $t(titles.app)",
|
||||||
|
"owners": "All Owners | $t(titles.app)",
|
||||||
"profile": "My Profile | $t(titles.app)",
|
"profile": "My Profile | $t(titles.app)",
|
||||||
"schedule": "Schedule | $t(titles.app)",
|
"schedule": "Schedule | $t(titles.app)",
|
||||||
"vehicledetail": "Vehicle Details {{vehicle}} | $t(titles.app)"
|
"shop": "My Shop | $t(titles.app)",
|
||||||
|
"vehicledetail": "Vehicle Details {{vehicle}} | $t(titles.app)",
|
||||||
|
"vehicles": "All Vehicles | $t(titles.app)"
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"actions": {
|
"actions": {
|
||||||
@@ -349,6 +405,7 @@
|
|||||||
"validationtitle": "Validation Error"
|
"validationtitle": "Validation Error"
|
||||||
},
|
},
|
||||||
"fields": {
|
"fields": {
|
||||||
|
"description": "Vehicle Description",
|
||||||
"plate_no": "License Plate",
|
"plate_no": "License Plate",
|
||||||
"plate_st": "Plate Jurisdiction",
|
"plate_st": "Plate Jurisdiction",
|
||||||
"trim_color": "Trim Color",
|
"trim_color": "Trim Color",
|
||||||
|
|||||||
@@ -1,9 +1,18 @@
|
|||||||
{
|
{
|
||||||
"translation": {
|
"translation": {
|
||||||
|
"allocations": {
|
||||||
|
"actions": {
|
||||||
|
"assign": "Asignar"
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"employee": "Asignado a"
|
||||||
|
}
|
||||||
|
},
|
||||||
"appointments": {
|
"appointments": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"intake": "Consumo",
|
"intake": "Consumo",
|
||||||
|
"new": "Nueva cita",
|
||||||
"reschedule": "Reprogramar",
|
"reschedule": "Reprogramar",
|
||||||
"viewjob": "Ver trabajo"
|
"viewjob": "Ver trabajo"
|
||||||
},
|
},
|
||||||
@@ -11,6 +20,9 @@
|
|||||||
"canceling": "Error al cancelar la cita.",
|
"canceling": "Error al cancelar la cita.",
|
||||||
"saving": "Error al programar la cita. {{message}}"
|
"saving": "Error al programar la cita. {{message}}"
|
||||||
},
|
},
|
||||||
|
"fields": {
|
||||||
|
"title": "Título"
|
||||||
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"arrivedon": "Llegado el:",
|
"arrivedon": "Llegado el:",
|
||||||
"cancelledappointment": "Cita cancelada para:",
|
"cancelledappointment": "Cita cancelada para:",
|
||||||
@@ -55,12 +67,42 @@
|
|||||||
"insert": "Documento cargado con éxito."
|
"insert": "Documento cargado con éxito."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"employees": {
|
||||||
|
"actions": {
|
||||||
|
"new": "Nuevo empleado"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"delete": "Se encontró un error al eliminar al empleado.",
|
||||||
|
"save": "Se encontró un error al salvar al empleado.",
|
||||||
|
"validation": "Por favor verifique todos los campos.",
|
||||||
|
"validationtitle": "No se puede salvar al empleado."
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"active": "¿Activo?",
|
||||||
|
"base_rate": "Tasa básica",
|
||||||
|
"cost_center": "Centro de costos",
|
||||||
|
"employee_number": "Numero de empleado",
|
||||||
|
"first_name": "Nombre de pila",
|
||||||
|
"flat_rate": "Tarifa plana (deshabilitado es tiempo recto)",
|
||||||
|
"hire_date": "Fecha de contratación",
|
||||||
|
"last_name": "Apellido",
|
||||||
|
"termination_date": "Fecha de conclusión"
|
||||||
|
},
|
||||||
|
"successes": {
|
||||||
|
"delete": "Empleado eliminado con éxito.",
|
||||||
|
"save": "Empleado guardado con éxito."
|
||||||
|
}
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"reset": "Restablecer a original."
|
"delete": "Borrar",
|
||||||
|
"edit": "Editar",
|
||||||
|
"reset": "Restablecer a original.",
|
||||||
|
"save": "Salvar"
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"actions": "Comportamiento",
|
"actions": "Comportamiento",
|
||||||
|
"barcode": "código de barras",
|
||||||
"in": "en",
|
"in": "en",
|
||||||
"loading": "Cargando...",
|
"loading": "Cargando...",
|
||||||
"loadingapp": "Cargando Bodyshop.app",
|
"loadingapp": "Cargando Bodyshop.app",
|
||||||
@@ -76,6 +118,9 @@
|
|||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"unsavedchanges": "Usted tiene cambios no guardados."
|
"unsavedchanges": "Usted tiene cambios no guardados."
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"required": "Este campo es requerido."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"joblines": {
|
"joblines": {
|
||||||
@@ -83,6 +128,7 @@
|
|||||||
"act_price": "Precio actual",
|
"act_price": "Precio actual",
|
||||||
"db_price": "Precio de base de datos",
|
"db_price": "Precio de base de datos",
|
||||||
"line_desc": "Descripción de línea",
|
"line_desc": "Descripción de línea",
|
||||||
|
"mod_lb_hrs": "Horas laborales",
|
||||||
"oem_partno": "OEM parte #",
|
"oem_partno": "OEM parte #",
|
||||||
"part_type": "Tipo de parte",
|
"part_type": "Tipo de parte",
|
||||||
"unq_seq": "Seq #"
|
"unq_seq": "Seq #"
|
||||||
@@ -223,8 +269,10 @@
|
|||||||
},
|
},
|
||||||
"creating_new_job": "Creando nuevo trabajo ...",
|
"creating_new_job": "Creando nuevo trabajo ...",
|
||||||
"documents": "documentos",
|
"documents": "documentos",
|
||||||
|
"existing_jobs": "Empleos existentes",
|
||||||
"lines": "Líneas estimadas",
|
"lines": "Líneas estimadas",
|
||||||
"notes": "Notas",
|
"notes": "Notas",
|
||||||
|
"override_header": "¿Anular encabezado estimado al importar?",
|
||||||
"parts": "Partes",
|
"parts": "Partes",
|
||||||
"rates": "Tarifas",
|
"rates": "Tarifas",
|
||||||
"vehicle_info": "Vehículo"
|
"vehicle_info": "Vehículo"
|
||||||
@@ -235,7 +283,8 @@
|
|||||||
"created": "Trabajo creado con éxito. Click para ver.",
|
"created": "Trabajo creado con éxito. Click para ver.",
|
||||||
"deleted": "Trabajo eliminado con éxito.",
|
"deleted": "Trabajo eliminado con éxito.",
|
||||||
"save": "Trabajo guardado con éxito.",
|
"save": "Trabajo guardado con éxito.",
|
||||||
"savetitle": "Registro guardado con éxito."
|
"savetitle": "Registro guardado con éxito.",
|
||||||
|
"supplemented": "Trabajo complementado con éxito."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
@@ -251,6 +300,7 @@
|
|||||||
"jobs": "Trabajos",
|
"jobs": "Trabajos",
|
||||||
"owners": "propietarios",
|
"owners": "propietarios",
|
||||||
"schedule": "Programar",
|
"schedule": "Programar",
|
||||||
|
"shop": "Mi tienda",
|
||||||
"vehicles": "Vehículos"
|
"vehicles": "Vehículos"
|
||||||
},
|
},
|
||||||
"jobsdetail": {
|
"jobsdetail": {
|
||||||
@@ -295,7 +345,9 @@
|
|||||||
"noaccess": "El registro no existe o no tiene acceso a él."
|
"noaccess": "El registro no existe o no tiene acceso a él."
|
||||||
},
|
},
|
||||||
"fields": {
|
"fields": {
|
||||||
|
"address": "Dirección",
|
||||||
"allow_text_message": "Permiso de texto?",
|
"allow_text_message": "Permiso de texto?",
|
||||||
|
"name": "Nombre",
|
||||||
"ownr_addr1": "Dirección",
|
"ownr_addr1": "Dirección",
|
||||||
"ownr_addr2": "Dirección 2",
|
"ownr_addr2": "Dirección 2",
|
||||||
"ownr_city": "ciudad",
|
"ownr_city": "ciudad",
|
||||||
@@ -310,6 +362,7 @@
|
|||||||
"preferred_contact": "Método de Contacto Preferido"
|
"preferred_contact": "Método de Contacto Preferido"
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
|
"create_new": "Crea un nuevo registro de propietario.",
|
||||||
"existing_owners": "Propietarios existentes"
|
"existing_owners": "Propietarios existentes"
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
@@ -328,9 +381,12 @@
|
|||||||
"jobsdetail": "Trabajo {{ro_number}} | $t(titles.app)",
|
"jobsdetail": "Trabajo {{ro_number}} | $t(titles.app)",
|
||||||
"jobsdocuments": "Documentos de trabajo {{ro_number}} | $ t (títulos.app)",
|
"jobsdocuments": "Documentos de trabajo {{ro_number}} | $ t (títulos.app)",
|
||||||
"manageroot": "Casa | $t(titles.app)",
|
"manageroot": "Casa | $t(titles.app)",
|
||||||
|
"owners": "Todos los propietarios | $t(titles.app)",
|
||||||
"profile": "Mi perfil | $t(titles.app)",
|
"profile": "Mi perfil | $t(titles.app)",
|
||||||
"schedule": "Horario | $t(titles.app)",
|
"schedule": "Horario | $t(titles.app)",
|
||||||
"vehicledetail": "Detalles del vehículo {{vehicle}} | $t(titles.app)"
|
"shop": "Mi tienda | $t(titles.app)",
|
||||||
|
"vehicledetail": "Detalles del vehículo {{vehicle}} | $t(titles.app)",
|
||||||
|
"vehicles": "Todos los vehiculos | $t(titles.app)"
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"actions": {
|
"actions": {
|
||||||
@@ -349,6 +405,7 @@
|
|||||||
"validationtitle": "Error de validacion"
|
"validationtitle": "Error de validacion"
|
||||||
},
|
},
|
||||||
"fields": {
|
"fields": {
|
||||||
|
"description": "Descripcion del vehiculo",
|
||||||
"plate_no": "Placa",
|
"plate_no": "Placa",
|
||||||
"plate_st": "Jurisdicción de placas",
|
"plate_st": "Jurisdicción de placas",
|
||||||
"trim_color": "Recortar color",
|
"trim_color": "Recortar color",
|
||||||
|
|||||||
@@ -1,9 +1,18 @@
|
|||||||
{
|
{
|
||||||
"translation": {
|
"translation": {
|
||||||
|
"allocations": {
|
||||||
|
"actions": {
|
||||||
|
"assign": "Attribuer"
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"employee": "Alloué à"
|
||||||
|
}
|
||||||
|
},
|
||||||
"appointments": {
|
"appointments": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"cancel": "annuler",
|
"cancel": "annuler",
|
||||||
"intake": "Admission",
|
"intake": "Admission",
|
||||||
|
"new": "Nouveau rendez-vous",
|
||||||
"reschedule": "Replanifier",
|
"reschedule": "Replanifier",
|
||||||
"viewjob": "Voir le travail"
|
"viewjob": "Voir le travail"
|
||||||
},
|
},
|
||||||
@@ -11,6 +20,9 @@
|
|||||||
"canceling": "Erreur lors de l'annulation du rendez-vous.",
|
"canceling": "Erreur lors de l'annulation du rendez-vous.",
|
||||||
"saving": "Erreur lors de la planification du rendez-vous. {{message}}"
|
"saving": "Erreur lors de la planification du rendez-vous. {{message}}"
|
||||||
},
|
},
|
||||||
|
"fields": {
|
||||||
|
"title": "Titre"
|
||||||
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"arrivedon": "Arrivé le:",
|
"arrivedon": "Arrivé le:",
|
||||||
"cancelledappointment": "Rendez-vous annulé pour:",
|
"cancelledappointment": "Rendez-vous annulé pour:",
|
||||||
@@ -55,12 +67,42 @@
|
|||||||
"insert": "Document téléchargé avec succès."
|
"insert": "Document téléchargé avec succès."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"employees": {
|
||||||
|
"actions": {
|
||||||
|
"new": "Nouvel employé"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"delete": "Erreur rencontrée lors de la suppression de l'employé.",
|
||||||
|
"save": "Une erreur s'est produite lors de l'enregistrement de l'employé.",
|
||||||
|
"validation": "Veuillez cocher tous les champs.",
|
||||||
|
"validationtitle": "Impossible d'enregistrer l'employé."
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"active": "Actif?",
|
||||||
|
"base_rate": "Taux de base",
|
||||||
|
"cost_center": "Centre de coûts",
|
||||||
|
"employee_number": "Numéro d'employé",
|
||||||
|
"first_name": "Prénom",
|
||||||
|
"flat_rate": "Taux fixe (désactivé est le temps normal)",
|
||||||
|
"hire_date": "Date d'embauche",
|
||||||
|
"last_name": "Nom de famille",
|
||||||
|
"termination_date": "Date de résiliation"
|
||||||
|
},
|
||||||
|
"successes": {
|
||||||
|
"delete": "L'employé a bien été supprimé.",
|
||||||
|
"save": "L'employé a enregistré avec succès."
|
||||||
|
}
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"reset": "Rétablir l'original."
|
"delete": "Effacer",
|
||||||
|
"edit": "modifier",
|
||||||
|
"reset": "Rétablir l'original.",
|
||||||
|
"save": "sauvegarder"
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"actions": "actes",
|
"actions": "actes",
|
||||||
|
"barcode": "code à barre",
|
||||||
"in": "dans",
|
"in": "dans",
|
||||||
"loading": "Chargement...",
|
"loading": "Chargement...",
|
||||||
"loadingapp": "Chargement de Bodyshop.app",
|
"loadingapp": "Chargement de Bodyshop.app",
|
||||||
@@ -76,6 +118,9 @@
|
|||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"unsavedchanges": "Vous avez des changements non enregistrés."
|
"unsavedchanges": "Vous avez des changements non enregistrés."
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"required": "Ce champ est requis."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"joblines": {
|
"joblines": {
|
||||||
@@ -83,6 +128,7 @@
|
|||||||
"act_price": "Prix actuel",
|
"act_price": "Prix actuel",
|
||||||
"db_price": "Prix de la base de données",
|
"db_price": "Prix de la base de données",
|
||||||
"line_desc": "Description de la ligne",
|
"line_desc": "Description de la ligne",
|
||||||
|
"mod_lb_hrs": "Heures de travail",
|
||||||
"oem_partno": "Pièce OEM #",
|
"oem_partno": "Pièce OEM #",
|
||||||
"part_type": "Type de pièce",
|
"part_type": "Type de pièce",
|
||||||
"unq_seq": "Seq #"
|
"unq_seq": "Seq #"
|
||||||
@@ -223,8 +269,10 @@
|
|||||||
},
|
},
|
||||||
"creating_new_job": "Création d'un nouvel emploi ...",
|
"creating_new_job": "Création d'un nouvel emploi ...",
|
||||||
"documents": "Les documents",
|
"documents": "Les documents",
|
||||||
|
"existing_jobs": "Emplois existants",
|
||||||
"lines": "Estimer les lignes",
|
"lines": "Estimer les lignes",
|
||||||
"notes": "Remarques",
|
"notes": "Remarques",
|
||||||
|
"override_header": "Remplacer l'en-tête d'estimation à l'importation?",
|
||||||
"parts": "les pièces",
|
"parts": "les pièces",
|
||||||
"rates": "Les taux",
|
"rates": "Les taux",
|
||||||
"vehicle_info": "Véhicule"
|
"vehicle_info": "Véhicule"
|
||||||
@@ -235,7 +283,8 @@
|
|||||||
"created": "Le travail a été créé avec succès. Clique pour voir.",
|
"created": "Le travail a été créé avec succès. Clique pour voir.",
|
||||||
"deleted": "Le travail a bien été supprimé.",
|
"deleted": "Le travail a bien été supprimé.",
|
||||||
"save": "Le travail a été enregistré avec succès.",
|
"save": "Le travail a été enregistré avec succès.",
|
||||||
"savetitle": "Enregistrement enregistré avec succès."
|
"savetitle": "Enregistrement enregistré avec succès.",
|
||||||
|
"supplemented": "Travail complété avec succès."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
@@ -251,6 +300,7 @@
|
|||||||
"jobs": "Emplois",
|
"jobs": "Emplois",
|
||||||
"owners": "Propriétaires",
|
"owners": "Propriétaires",
|
||||||
"schedule": "Programme",
|
"schedule": "Programme",
|
||||||
|
"shop": "Mon magasin",
|
||||||
"vehicles": "Véhicules"
|
"vehicles": "Véhicules"
|
||||||
},
|
},
|
||||||
"jobsdetail": {
|
"jobsdetail": {
|
||||||
@@ -295,7 +345,9 @@
|
|||||||
"noaccess": "L'enregistrement n'existe pas ou vous n'y avez pas accès."
|
"noaccess": "L'enregistrement n'existe pas ou vous n'y avez pas accès."
|
||||||
},
|
},
|
||||||
"fields": {
|
"fields": {
|
||||||
|
"address": "Adresse",
|
||||||
"allow_text_message": "Autorisation de texte?",
|
"allow_text_message": "Autorisation de texte?",
|
||||||
|
"name": "Prénom",
|
||||||
"ownr_addr1": "Adresse",
|
"ownr_addr1": "Adresse",
|
||||||
"ownr_addr2": "Adresse 2 ",
|
"ownr_addr2": "Adresse 2 ",
|
||||||
"ownr_city": "Ville",
|
"ownr_city": "Ville",
|
||||||
@@ -310,6 +362,7 @@
|
|||||||
"preferred_contact": "Méthode de contact préférée"
|
"preferred_contact": "Méthode de contact préférée"
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
|
"create_new": "Créez un nouvel enregistrement de propriétaire.",
|
||||||
"existing_owners": "Propriétaires existants"
|
"existing_owners": "Propriétaires existants"
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
@@ -328,9 +381,12 @@
|
|||||||
"jobsdetail": "Travail {{ro_number}} | $t(titles.app)",
|
"jobsdetail": "Travail {{ro_number}} | $t(titles.app)",
|
||||||
"jobsdocuments": "Documents de travail {{ro_number}} | $ t (titres.app)",
|
"jobsdocuments": "Documents de travail {{ro_number}} | $ t (titres.app)",
|
||||||
"manageroot": "Accueil | $t(titles.app)",
|
"manageroot": "Accueil | $t(titles.app)",
|
||||||
|
"owners": "Tous les propriétaires | $t(titles.app)",
|
||||||
"profile": "Mon profil | $t(titles.app)",
|
"profile": "Mon profil | $t(titles.app)",
|
||||||
"schedule": "Horaire | $t(titles.app)",
|
"schedule": "Horaire | $t(titles.app)",
|
||||||
"vehicledetail": "Détails du véhicule {{vehicle} | $t(titles.app)"
|
"shop": "Mon magasin | $t(titles.app)",
|
||||||
|
"vehicledetail": "Détails du véhicule {{vehicle} | $t(titles.app)",
|
||||||
|
"vehicles": "Tous les véhicules | $t(titles.app)"
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"actions": {
|
"actions": {
|
||||||
@@ -349,6 +405,7 @@
|
|||||||
"validationtitle": "Erreur de validation"
|
"validationtitle": "Erreur de validation"
|
||||||
},
|
},
|
||||||
"fields": {
|
"fields": {
|
||||||
|
"description": "Description du véhicule",
|
||||||
"plate_no": "Plaque d'immatriculation",
|
"plate_no": "Plaque d'immatriculation",
|
||||||
"plate_st": "Juridiction de la plaque",
|
"plate_st": "Juridiction de la plaque",
|
||||||
"trim_color": "Couleur de garniture",
|
"trim_color": "Couleur de garniture",
|
||||||
|
|||||||
1556
client/yarn.lock
1556
client/yarn.lock
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" DROP COLUMN "hire_date";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" ADD COLUMN "hire_date" date NULL;
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" DROP COLUMN "termination_date";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" ADD COLUMN "termination_date" date NULL;
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" DROP COLUMN "base_rate";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" ADD COLUMN "base_rate" numeric NULL;
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" DROP COLUMN "cost_center";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" ADD COLUMN "cost_center" text NOT NULL;
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE ONLY "public"."employees" ALTER COLUMN "base_rate" SET DEFAULT
|
||||||
|
0;
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" ALTER COLUMN "base_rate" DROP NOT NULL;
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."employees"."base_rate" IS E'null'
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE ONLY "public"."employees" ALTER COLUMN "base_rate" SET DEFAULT
|
||||||
|
0;
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" ALTER COLUMN "base_rate" SET NOT NULL;
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."employees"."base_rate" IS E''
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" DROP COLUMN "pay_type";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" ADD COLUMN "pay_type" integer NOT NULL DEFAULT
|
||||||
|
0;
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" ADD COLUMN "pay_type" int4
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" ALTER COLUMN "pay_type" DROP NOT NULL
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" ALTER COLUMN "pay_type" SET DEFAULT 0
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" DROP COLUMN "pay_type" CASCADE
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" DROP COLUMN "flat_rate";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."employees" ADD COLUMN "flat_rate" boolean NOT NULL
|
||||||
|
DEFAULT false;
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: drop_insert_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
check:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
columns:
|
||||||
|
- active
|
||||||
|
- employee_number
|
||||||
|
- first_name
|
||||||
|
- last_name
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- id
|
||||||
|
- shopid
|
||||||
|
localPresets:
|
||||||
|
- key: ""
|
||||||
|
value: ""
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: create_insert_permission
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: drop_insert_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
check:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
columns:
|
||||||
|
- id
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- first_name
|
||||||
|
- last_name
|
||||||
|
- employee_number
|
||||||
|
- shopid
|
||||||
|
- active
|
||||||
|
- hire_date
|
||||||
|
- termination_date
|
||||||
|
- base_rate
|
||||||
|
- cost_center
|
||||||
|
- flat_rate
|
||||||
|
localPresets:
|
||||||
|
- key: ""
|
||||||
|
value: ""
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: create_insert_permission
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: false
|
||||||
|
columns:
|
||||||
|
- active
|
||||||
|
- employee_number
|
||||||
|
- first_name
|
||||||
|
- last_name
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- id
|
||||||
|
- shopid
|
||||||
|
computed_fields: []
|
||||||
|
filter:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: false
|
||||||
|
columns:
|
||||||
|
- active
|
||||||
|
- flat_rate
|
||||||
|
- hire_date
|
||||||
|
- termination_date
|
||||||
|
- base_rate
|
||||||
|
- cost_center
|
||||||
|
- employee_number
|
||||||
|
- first_name
|
||||||
|
- last_name
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- id
|
||||||
|
- shopid
|
||||||
|
computed_fields: []
|
||||||
|
filter:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: drop_update_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
columns:
|
||||||
|
- active
|
||||||
|
- employee_number
|
||||||
|
- first_name
|
||||||
|
- last_name
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- id
|
||||||
|
- shopid
|
||||||
|
filter:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
localPresets:
|
||||||
|
- key: ""
|
||||||
|
value: ""
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: create_update_permission
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: drop_update_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
columns:
|
||||||
|
- active
|
||||||
|
- flat_rate
|
||||||
|
- hire_date
|
||||||
|
- termination_date
|
||||||
|
- base_rate
|
||||||
|
- cost_center
|
||||||
|
- employee_number
|
||||||
|
- first_name
|
||||||
|
- last_name
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- id
|
||||||
|
- shopid
|
||||||
|
filter:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
localPresets:
|
||||||
|
- key: ""
|
||||||
|
value: ""
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: create_update_permission
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: DROP TABLE "public"."allocations"
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
- args:
|
||||||
|
sql: CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: "CREATE TABLE \"public\".\"allocations\"(\"id\" uuid NOT NULL DEFAULT gen_random_uuid(),
|
||||||
|
\"created_at\" timestamptz NOT NULL DEFAULT now(), \"updated_at\" timestamptz
|
||||||
|
NOT NULL DEFAULT now(), \"joblineid\" uuid NOT NULL, \"employeeid\" uuid NOT
|
||||||
|
NULL, \"hours\" numeric NOT NULL DEFAULT 0, PRIMARY KEY (\"id\") , FOREIGN KEY
|
||||||
|
(\"joblineid\") REFERENCES \"public\".\"joblines\"(\"id\") ON UPDATE cascade
|
||||||
|
ON DELETE cascade, FOREIGN KEY (\"employeeid\") REFERENCES \"public\".\"employees\"(\"id\")
|
||||||
|
ON UPDATE cascade ON DELETE cascade);\nCREATE OR REPLACE FUNCTION \"public\".\"set_current_timestamp_updated_at\"()\nRETURNS
|
||||||
|
TRIGGER AS $$\nDECLARE\n _new record;\nBEGIN\n _new := NEW;\n _new.\"updated_at\"
|
||||||
|
= NOW();\n RETURN _new;\nEND;\n$$ LANGUAGE plpgsql;\nCREATE TRIGGER \"set_public_allocations_updated_at\"\nBEFORE
|
||||||
|
UPDATE ON \"public\".\"allocations\"\nFOR EACH ROW\nEXECUTE PROCEDURE \"public\".\"set_current_timestamp_updated_at\"();\nCOMMENT
|
||||||
|
ON TRIGGER \"set_public_allocations_updated_at\" ON \"public\".\"allocations\"
|
||||||
|
\nIS 'trigger to set value of column \"updated_at\" to current timestamp on
|
||||||
|
row update';\n"
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: add_existing_table_or_view
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
- args:
|
||||||
|
relationship: employee
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: drop_relationship
|
||||||
|
- args:
|
||||||
|
relationship: jobline
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: drop_relationship
|
||||||
|
- args:
|
||||||
|
relationship: allocations
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
type: drop_relationship
|
||||||
|
- args:
|
||||||
|
relationship: allocations
|
||||||
|
table:
|
||||||
|
name: joblines
|
||||||
|
schema: public
|
||||||
|
type: drop_relationship
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
- args:
|
||||||
|
name: employee
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
using:
|
||||||
|
foreign_key_constraint_on: employeeid
|
||||||
|
type: create_object_relationship
|
||||||
|
- args:
|
||||||
|
name: jobline
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
using:
|
||||||
|
foreign_key_constraint_on: joblineid
|
||||||
|
type: create_object_relationship
|
||||||
|
- args:
|
||||||
|
name: allocations
|
||||||
|
table:
|
||||||
|
name: employees
|
||||||
|
schema: public
|
||||||
|
using:
|
||||||
|
foreign_key_constraint_on:
|
||||||
|
column: employeeid
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: create_array_relationship
|
||||||
|
- args:
|
||||||
|
name: allocations
|
||||||
|
table:
|
||||||
|
name: joblines
|
||||||
|
schema: public
|
||||||
|
using:
|
||||||
|
foreign_key_constraint_on:
|
||||||
|
column: joblineid
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: create_array_relationship
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: drop_insert_permission
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_upsert: true
|
||||||
|
check:
|
||||||
|
jobline:
|
||||||
|
job:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
columns:
|
||||||
|
- hours
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- employeeid
|
||||||
|
- id
|
||||||
|
- joblineid
|
||||||
|
localPresets:
|
||||||
|
- key: ""
|
||||||
|
value: ""
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: create_insert_permission
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: false
|
||||||
|
columns:
|
||||||
|
- hours
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- employeeid
|
||||||
|
- id
|
||||||
|
- joblineid
|
||||||
|
filter:
|
||||||
|
jobline:
|
||||||
|
job:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
limit: null
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: drop_update_permission
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
columns:
|
||||||
|
- hours
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- employeeid
|
||||||
|
- id
|
||||||
|
- joblineid
|
||||||
|
filter:
|
||||||
|
jobline:
|
||||||
|
job:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
localPresets:
|
||||||
|
- key: ""
|
||||||
|
value: ""
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: create_update_permission
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: drop_update_permission
|
||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: create_update_permission
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: drop_update_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
columns: []
|
||||||
|
filter:
|
||||||
|
jobline:
|
||||||
|
job:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
localPresets:
|
||||||
|
- key: ""
|
||||||
|
value: ""
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: create_update_permission
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: drop_delete_permission
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
filter:
|
||||||
|
jobline:
|
||||||
|
job:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: allocations
|
||||||
|
schema: public
|
||||||
|
type: create_delete_permission
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user