BOD-16 Added pages + routing for courtesy cars
This commit is contained in:
@@ -1975,6 +1975,488 @@
|
|||||||
</folder_node>
|
</folder_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
|
<folder_node>
|
||||||
|
<name>courtesycars</name>
|
||||||
|
<children>
|
||||||
|
<folder_node>
|
||||||
|
<name>erorrs</name>
|
||||||
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>saving</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>color</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>dailycost</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>damage</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>fleetnumber</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>fuel</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>insuranceexpires</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>leaseenddate</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>make</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>model</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>nextservicedate</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>nextservicekm</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>notes</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>plate</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>purchasedate</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>registrationexpires</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>serviceenddate</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>servicestartdate</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>status</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>vin</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>year</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>saved</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>documents</name>
|
<name>documents</name>
|
||||||
<children>
|
<children>
|
||||||
@@ -7409,6 +7891,90 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>courtesycars</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>courtesycars-all</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>courtesycars-contracts</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>courtesycars-newcontract</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>customers</name>
|
<name>customers</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -8964,6 +9530,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>courtesycars-create</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>jobs</name>
|
<name>jobs</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -8985,6 +9572,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>jobs-create</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>jobsavailable</name>
|
<name>jobsavailable</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
|
|||||||
@@ -0,0 +1,197 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { Form, Input, InputNumber, DatePicker, Button } from "antd";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
|
||||||
|
export default function CourtesyCarCreateFormComponent() {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Button type="primary" htmlType="submit">
|
||||||
|
{t("general.actions.save")}
|
||||||
|
</Button>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.make")}
|
||||||
|
name="make"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.model")}
|
||||||
|
name="model"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.year")}
|
||||||
|
name="year"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.plate")}
|
||||||
|
name="plate"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.color")}
|
||||||
|
name="color"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.vin")}
|
||||||
|
name="vin"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.fleetnumber")}
|
||||||
|
name="fleetnumber"
|
||||||
|
>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.purchasedate")}
|
||||||
|
name="purchasedate"
|
||||||
|
>
|
||||||
|
<DatePicker />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.servicestartdate")}
|
||||||
|
name="servicestartdate"
|
||||||
|
>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.serviceenddate")}
|
||||||
|
name="serviceenddate"
|
||||||
|
>
|
||||||
|
<DatePicker />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.leaseenddate")}
|
||||||
|
name="leaseenddate"
|
||||||
|
>
|
||||||
|
<DatePicker />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.status")}
|
||||||
|
name="status"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.nextservicekm")}
|
||||||
|
name="nextservicekm"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<InputNumber />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.nextservicedate")}
|
||||||
|
name="nextservicedate"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<DatePicker />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("courtesycars.fields.damage")} name="damage">
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("courtesycars.fields.notes")} name="notes">
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.fuel")}
|
||||||
|
name="fuel"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Input />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.registrationexpires")}
|
||||||
|
name="registrationexpires"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<DatePicker />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={t("courtesycars.fields.insuranceexpires")}
|
||||||
|
name="insuranceexpires"
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: t("general.validation.required")
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<DatePicker />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("courtesycars.fields.dailycost")} name="dailycost">
|
||||||
|
<CurrencyInput />
|
||||||
|
</Form.Item>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
import { 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 JobsList({ loading, courtesycars }) {
|
||||||
|
const [state, setState] = useState({
|
||||||
|
sortedInfo: {},
|
||||||
|
filteredInfo: { text: "" }
|
||||||
|
});
|
||||||
|
console.log("courtesycars", courtesycars);
|
||||||
|
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
title: t("courtesycars.fields.fleetnumber"),
|
||||||
|
dataIndex: "fleetnumber",
|
||||||
|
key: "fleetnumber",
|
||||||
|
sorter: (a, b) => alphaSort(a.fleetnumber, b.fleetnumber),
|
||||||
|
sortOrder:
|
||||||
|
state.sortedInfo.columnKey === "fleetnumber" && state.sortedInfo.order
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("courtesycars.fields.vin"),
|
||||||
|
dataIndex: "vin",
|
||||||
|
key: "vin",
|
||||||
|
sorter: (a, b) => alphaSort(a.vin, b.vin),
|
||||||
|
sortOrder: state.sortedInfo.columnKey === "vin" && state.sortedInfo.order,
|
||||||
|
render: (text, record) => (
|
||||||
|
<Link to={`/manage/courtesycars/${record.id}`}>{record.vin}</Link>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("courtesycars.fields.status"),
|
||||||
|
dataIndex: "status",
|
||||||
|
key: "status",
|
||||||
|
sorter: (a, b) => alphaSort(a.status, b.status),
|
||||||
|
sortOrder:
|
||||||
|
state.sortedInfo.columnKey === "status" && state.sortedInfo.order
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("courtesycars.fields.year"),
|
||||||
|
dataIndex: "year",
|
||||||
|
key: "year",
|
||||||
|
sorter: (a, b) => alphaSort(a.year, b.year),
|
||||||
|
sortOrder: state.sortedInfo.columnKey === "year" && state.sortedInfo.order
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("courtesycars.fields.make"),
|
||||||
|
dataIndex: "make",
|
||||||
|
key: "make",
|
||||||
|
sorter: (a, b) => alphaSort(a.make, b.make),
|
||||||
|
sortOrder: state.sortedInfo.columnKey === "make" && state.sortedInfo.order
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("courtesycars.fields.model"),
|
||||||
|
dataIndex: "model",
|
||||||
|
key: "model",
|
||||||
|
sorter: (a, b) => alphaSort(a.model, b.model),
|
||||||
|
sortOrder:
|
||||||
|
state.sortedInfo.columnKey === "model" && state.sortedInfo.order
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const handleTableChange = (pagination, filters, sorter) => {
|
||||||
|
setState({ ...state, filteredInfo: filters, sortedInfo: sorter });
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Table
|
||||||
|
loading={loading}
|
||||||
|
size="small"
|
||||||
|
pagination={{ position: "top" }}
|
||||||
|
columns={columns.map(item => ({ ...item }))}
|
||||||
|
rowKey="id"
|
||||||
|
dataSource={courtesycars}
|
||||||
|
onChange={handleTableChange}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,4 +1,12 @@
|
|||||||
import { CalendarFilled, CarFilled, GlobalOutlined, HomeFilled, TeamOutlined } from "@ant-design/icons";
|
import {
|
||||||
|
CalendarFilled,
|
||||||
|
CarFilled,
|
||||||
|
GlobalOutlined,
|
||||||
|
HomeFilled,
|
||||||
|
TeamOutlined,
|
||||||
|
FileAddFilled,
|
||||||
|
FileFilled
|
||||||
|
} from "@ant-design/icons";
|
||||||
import { Avatar, Col, Menu, Row } from "antd";
|
import { Avatar, Col, Menu, Row } from "antd";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
@@ -122,6 +130,28 @@ export default ({
|
|||||||
</Link>
|
</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
</Menu.SubMenu>
|
</Menu.SubMenu>
|
||||||
|
|
||||||
|
<Menu.SubMenu title={t("menus.header.courtesycars")}>
|
||||||
|
<Menu.Item key="courtesycarsall">
|
||||||
|
<Link to="/manage/courtesycars">
|
||||||
|
<CarFilled />
|
||||||
|
{t("menus.header.courtesycars-all")}
|
||||||
|
</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="contracts">
|
||||||
|
<Link to="/manage/courtesycars/contracts">
|
||||||
|
<FileFilled />
|
||||||
|
{t("menus.header.courtesycars-contracts")}
|
||||||
|
</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key="newcontract">
|
||||||
|
<Link to="/manage/courtesycars/contracts/new">
|
||||||
|
<FileAddFilled />
|
||||||
|
{t("menus.header.courtesycars-newcontract")}
|
||||||
|
</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
</Menu.SubMenu>
|
||||||
|
|
||||||
<Menu.SubMenu title={t("menus.header.shop")}>
|
<Menu.SubMenu title={t("menus.header.shop")}>
|
||||||
<Menu.Item key="shop">
|
<Menu.Item key="shop">
|
||||||
<Link to="/manage/shop">{t("menus.header.shop_config")}</Link>
|
<Link to="/manage/shop">{t("menus.header.shop_config")}</Link>
|
||||||
|
|||||||
82
client/src/graphql/courtesy-car.queries.js
Normal file
82
client/src/graphql/courtesy-car.queries.js
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
import { gql } from "apollo-boost";
|
||||||
|
|
||||||
|
export const INSERT_NEW_COURTESY_CAR = gql`
|
||||||
|
mutation INSERT_NEW_COURTESY_CAR(
|
||||||
|
$courtesycar: [courtesycars_insert_input!]!
|
||||||
|
) {
|
||||||
|
insert_courtesycars(objects: $courtesycar) {
|
||||||
|
returning {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
export const QUERY_ALL_CC = gql`
|
||||||
|
query QUERY_ALL_CC {
|
||||||
|
courtesycars {
|
||||||
|
color
|
||||||
|
created_at
|
||||||
|
dailycost
|
||||||
|
damage
|
||||||
|
fleetnumber
|
||||||
|
fuel
|
||||||
|
id
|
||||||
|
insuranceexpires
|
||||||
|
leaseenddate
|
||||||
|
make
|
||||||
|
model
|
||||||
|
nextservicedate
|
||||||
|
nextservicekm
|
||||||
|
notes
|
||||||
|
plate
|
||||||
|
purchasedate
|
||||||
|
registrationexpires
|
||||||
|
serviceenddate
|
||||||
|
servicestartdate
|
||||||
|
status
|
||||||
|
vin
|
||||||
|
year
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
export const QUERY_CC_BY_PK = gql`
|
||||||
|
query QUERY_CC_BY_PK($id: uuid!) {
|
||||||
|
courtesycars_by_pk(id: $id) {
|
||||||
|
bodyshopid
|
||||||
|
color
|
||||||
|
created_at
|
||||||
|
dailycost
|
||||||
|
damage
|
||||||
|
fleetnumber
|
||||||
|
fuel
|
||||||
|
id
|
||||||
|
insuranceexpires
|
||||||
|
leaseenddate
|
||||||
|
make
|
||||||
|
model
|
||||||
|
nextservicedate
|
||||||
|
nextservicekm
|
||||||
|
notes
|
||||||
|
plate
|
||||||
|
purchasedate
|
||||||
|
registrationexpires
|
||||||
|
serviceenddate
|
||||||
|
servicestartdate
|
||||||
|
status
|
||||||
|
vin
|
||||||
|
year
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
export const UPDATE_CC = gql`
|
||||||
|
mutation UPDATE_CC($ccId: uuid!, $cc: courtesycars_set_input!) {
|
||||||
|
update_courtesycars(where: { id: { _eq: $ccId } }, _set: $cc) {
|
||||||
|
returning {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
export default {
|
|
||||||
__typename: "State",
|
|
||||||
currentUser: null,
|
|
||||||
selectedNavItem: "Home",
|
|
||||||
recentItems: [],
|
|
||||||
bodyShopData: null,
|
|
||||||
language: "en_us"
|
|
||||||
};
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import React from "react";
|
||||||
|
import CourtesyCarCreateFormComponent from "../../components/courtesy-car-form/courtesy-car-form.component"
|
||||||
|
|
||||||
|
export default function CourtesyCarCreateComponent() {
|
||||||
|
return <CourtesyCarCreateFormComponent />;
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
import { useMutation } from "@apollo/react-hooks";
|
||||||
|
import { Form, notification } from "antd";
|
||||||
|
import React, { useEffect } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { connect } from "react-redux";
|
||||||
|
import { createStructuredSelector } from "reselect";
|
||||||
|
import { INSERT_NEW_COURTESY_CAR } from "../../graphql/courtesy-car.queries";
|
||||||
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
|
import CourtesyCarCreateComponent from "./courtesy-car-create.page.component";
|
||||||
|
|
||||||
|
const mapStateToProps = createStructuredSelector({
|
||||||
|
bodyshop: selectBodyshop
|
||||||
|
});
|
||||||
|
|
||||||
|
export function CourtesyCarCreateContainer({ bodyshop }) {
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
const [insertCourtesyCar] = useMutation(INSERT_NEW_COURTESY_CAR);
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const handleFinish = values => {
|
||||||
|
insertCourtesyCar({
|
||||||
|
variables: { courtesycar: { ...values, bodyshopid: bodyshop.id } }
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
notification["success"]({ message: t("courtesycars.successes.saved") });
|
||||||
|
})
|
||||||
|
.catch(error => console.log("error", error));
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = t("titles.courtesycars-create");
|
||||||
|
}, [t]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Form form={form} autoComplete="no" onFinish={handleFinish}>
|
||||||
|
<CourtesyCarCreateComponent />
|
||||||
|
</Form>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
export default connect(mapStateToProps, null)(CourtesyCarCreateContainer);
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import React from "react";
|
||||||
|
import CourtesyCarCreateFormComponent from "../../components/courtesy-car-form/courtesy-car-form.component";
|
||||||
|
|
||||||
|
export default function CourtesyCarDetailPageComponent() {
|
||||||
|
return <CourtesyCarCreateFormComponent />;
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
import { useMutation, useQuery } from "@apollo/react-hooks";
|
||||||
|
import { Form, notification } from "antd";
|
||||||
|
import moment from "moment";
|
||||||
|
import React, { useEffect } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { useParams } from "react-router-dom";
|
||||||
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
|
import { QUERY_CC_BY_PK, UPDATE_CC } from "../../graphql/courtesy-car.queries";
|
||||||
|
import CourtesyCarDetailPageComponent from "./courtesy-car-detail.page.component";
|
||||||
|
|
||||||
|
export default function CourtesyCarDetailPageContainer() {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const [insertCourtesyCar] = useMutation(UPDATE_CC);
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
const { ccId } = useParams();
|
||||||
|
|
||||||
|
const { loading, error, data } = useQuery(QUERY_CC_BY_PK, {
|
||||||
|
variables: { id: ccId }
|
||||||
|
});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = loading
|
||||||
|
? t("titles.app")
|
||||||
|
: error
|
||||||
|
? t("titles.app")
|
||||||
|
: t("titles.courtesycars-detail", {
|
||||||
|
id: (data && data.courtesycars_by_pk.vin) || ""
|
||||||
|
});
|
||||||
|
}, [t, data, error, loading]);
|
||||||
|
|
||||||
|
const handleFinish = values => {
|
||||||
|
insertCourtesyCar({
|
||||||
|
variables: { cc: { ...values }, ccId: ccId }
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
notification["success"]({ message: t("courtesycars.successes.saved") });
|
||||||
|
})
|
||||||
|
.catch(error =>
|
||||||
|
notification["error"]({
|
||||||
|
message: t("courtesycars.errors.saving", { error: error })
|
||||||
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (data) form.resetFields();
|
||||||
|
}, [data, form]);
|
||||||
|
|
||||||
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
|
return (
|
||||||
|
<Form
|
||||||
|
form={form}
|
||||||
|
autoComplete="no"
|
||||||
|
onFinish={handleFinish}
|
||||||
|
initialValues={
|
||||||
|
data
|
||||||
|
? {
|
||||||
|
...data.courtesycars_by_pk,
|
||||||
|
purchasedate: data.courtesycars_by_pk.purchasedate
|
||||||
|
? moment(data.courtesycars_by_pk.purchasedate)
|
||||||
|
: null,
|
||||||
|
servicestartdate: data.courtesycars_by_pk.servicestartdate
|
||||||
|
? moment(data.courtesycars_by_pk.servicestartdate)
|
||||||
|
: null,
|
||||||
|
serviceenddate: data.courtesycars_by_pk.serviceenddate
|
||||||
|
? moment(data.courtesycars_by_pk.serviceenddate)
|
||||||
|
: null,
|
||||||
|
leaseenddate: data.courtesycars_by_pk.leaseenddate
|
||||||
|
? moment(data.courtesycars_by_pk.leaseenddate)
|
||||||
|
: null,
|
||||||
|
nextservicedate: data.courtesycars_by_pk.nextservicedate
|
||||||
|
? moment(data.courtesycars_by_pk.nextservicedate)
|
||||||
|
: null,
|
||||||
|
registrationexpires: data.courtesycars_by_pk.registrationexpires
|
||||||
|
? moment(data.courtesycars_by_pk.registrationexpires)
|
||||||
|
: null,
|
||||||
|
insuranceexpires: data.courtesycars_by_pk.insuranceexpires
|
||||||
|
? moment(data.courtesycars_by_pk.insuranceexpires)
|
||||||
|
: null
|
||||||
|
}
|
||||||
|
: {}
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<CourtesyCarDetailPageComponent />
|
||||||
|
</Form>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import React from "react";
|
||||||
|
import CourtesyCarsListComponent from "../../components/courtesy-cars-list/courtesy-cars-list.component";
|
||||||
|
|
||||||
|
export default function CourtesyCarsPageComponent({ loading, data }) {
|
||||||
|
return <CourtesyCarsListComponent loading={loading} courtesycars={data} />;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import React from "react";
|
||||||
|
import CourtesyCarsPageComponent from "./courtesy-cars.page.component";
|
||||||
|
import { useQuery } from "@apollo/react-hooks";
|
||||||
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
|
import { QUERY_ALL_CC } from "../../graphql/courtesy-car.queries";
|
||||||
|
|
||||||
|
export default function CourtesyCarsPageContainer() {
|
||||||
|
const { loading, error, data } = useQuery(QUERY_ALL_CC);
|
||||||
|
|
||||||
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
|
return (
|
||||||
|
<CourtesyCarsPageComponent
|
||||||
|
loading={loading}
|
||||||
|
data={(data && data.courtesycars) || []}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -35,15 +35,17 @@ function JobsCreateContainer({ bodyshop }) {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!!state.owner.selectedid) {
|
if (!!state.owner.selectedid) {
|
||||||
console.log("Loading Selected Owner ID");
|
|
||||||
loadOwner({
|
loadOwner({
|
||||||
variables: { id: state.owner.selectedid }
|
variables: { id: state.owner.selectedid }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, [state.owner.selectedid, loadOwner]);
|
}, [state.owner.selectedid, loadOwner]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.title = t("titles.jobs-create");
|
||||||
|
}, [t]);
|
||||||
|
|
||||||
const runInsertJob = job => {
|
const runInsertJob = job => {
|
||||||
console.log("Job To Save", job);
|
|
||||||
insertJob({ variables: { job: job } })
|
insertJob({ variables: { job: job } })
|
||||||
.then(resp => {
|
.then(resp => {
|
||||||
setState({
|
setState({
|
||||||
@@ -63,8 +65,6 @@ function JobsCreateContainer({ bodyshop }) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleFinish = values => {
|
const handleFinish = values => {
|
||||||
console.log("Form Values", values);
|
|
||||||
console.log("Progress State", state);
|
|
||||||
let job = Object.assign(
|
let job = Object.assign(
|
||||||
{},
|
{},
|
||||||
values,
|
values,
|
||||||
|
|||||||
@@ -43,10 +43,18 @@ const ShopVendorPageContainer = lazy(() =>
|
|||||||
const EmailOverlayContainer = lazy(() =>
|
const EmailOverlayContainer = lazy(() =>
|
||||||
import("../../components/email-overlay/email-overlay.container.jsx")
|
import("../../components/email-overlay/email-overlay.container.jsx")
|
||||||
);
|
);
|
||||||
|
|
||||||
const JobsCreateContainerPage = lazy(() =>
|
const JobsCreateContainerPage = lazy(() =>
|
||||||
import("../jobs-create/jobs-create.container")
|
import("../jobs-create/jobs-create.container")
|
||||||
);
|
);
|
||||||
|
const CourtesyCarCreateContainer = lazy(() =>
|
||||||
|
import("../courtesy-car-create/courtesy-car-create.page.container")
|
||||||
|
);
|
||||||
|
const CourtesyCarDetailContainer = lazy(() =>
|
||||||
|
import("../courtesy-car-detail/courtesy-car-detail.page.container")
|
||||||
|
);
|
||||||
|
const CourtesyCarsPage = lazy(() =>
|
||||||
|
import("../courtesy-cars/courtesy-cars.page.container")
|
||||||
|
);
|
||||||
|
|
||||||
const { Header, Content, Footer } = Layout;
|
const { Header, Content, Footer } = Layout;
|
||||||
|
|
||||||
@@ -64,13 +72,15 @@ export default function Manage({ match }) {
|
|||||||
</Header>
|
</Header>
|
||||||
<Layout>
|
<Layout>
|
||||||
<Content
|
<Content
|
||||||
className='content-container'
|
className="content-container"
|
||||||
style={{ padding: "0em 4em 4em" }}>
|
style={{ padding: "0em 4em 4em" }}
|
||||||
|
>
|
||||||
<ErrorBoundary>
|
<ErrorBoundary>
|
||||||
<Suspense
|
<Suspense
|
||||||
fallback={
|
fallback={
|
||||||
<LoadingSpinner message={t("general.labels.loadingapp")} />
|
<LoadingSpinner message={t("general.labels.loadingapp")} />
|
||||||
}>
|
}
|
||||||
|
>
|
||||||
<EmailOverlayContainer />
|
<EmailOverlayContainer />
|
||||||
<Route exact path={`${match.path}`} component={ManageRootPage} />
|
<Route exact path={`${match.path}`} component={ManageRootPage} />
|
||||||
<Route exact path={`${match.path}/jobs`} component={JobsPage} />
|
<Route exact path={`${match.path}/jobs`} component={JobsPage} />
|
||||||
@@ -86,7 +96,41 @@ export default function Manage({ match }) {
|
|||||||
component={JobsDetailPage}
|
component={JobsDetailPage}
|
||||||
/>
|
/>
|
||||||
</Switch>
|
</Switch>
|
||||||
|
<Route
|
||||||
|
exact
|
||||||
|
path={`${match.path}/courtesycars/`}
|
||||||
|
component={CourtesyCarsPage}
|
||||||
|
/>
|
||||||
|
<Switch>
|
||||||
|
<Route
|
||||||
|
exact
|
||||||
|
path={`${match.path}/courtesycars/create`}
|
||||||
|
component={CourtesyCarCreateContainer}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Route
|
||||||
|
exact
|
||||||
|
path={`${match.path}/courtesycars/contracts`}
|
||||||
|
component={() => <div>HOLD</div>}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Route
|
||||||
|
exact
|
||||||
|
path={`${match.path}/courtesycars/contracts/new`}
|
||||||
|
component={() => <div>new cc contract</div>}
|
||||||
|
/>
|
||||||
|
<Route
|
||||||
|
exact
|
||||||
|
path={`${match.path}/courtesycars/contracts/:contractId`}
|
||||||
|
component={() => <div>cc contract id</div>}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Route
|
||||||
|
exact
|
||||||
|
path={`${match.path}/courtesycars/:ccId`}
|
||||||
|
component={CourtesyCarDetailContainer}
|
||||||
|
/>
|
||||||
|
</Switch>
|
||||||
<Route
|
<Route
|
||||||
exact
|
exact
|
||||||
path={`${match.path}/profile`}
|
path={`${match.path}/profile`}
|
||||||
|
|||||||
@@ -139,6 +139,36 @@
|
|||||||
"save": "Bodyshop saved successfully. "
|
"save": "Bodyshop saved successfully. "
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"courtesycars": {
|
||||||
|
"erorrs": {
|
||||||
|
"saving": "Error saving courtesy card. {{error}}"
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"color": "Color",
|
||||||
|
"dailycost": "Daily Cost to Rent",
|
||||||
|
"damage": "Damage",
|
||||||
|
"fleetnumber": "Fleet Number",
|
||||||
|
"fuel": "Fuel Level",
|
||||||
|
"insuranceexpires": "Insurance Expires On",
|
||||||
|
"leaseenddate": "Lease Ends On",
|
||||||
|
"make": "Make",
|
||||||
|
"model": "Model",
|
||||||
|
"nextservicedate": "Next Service Date",
|
||||||
|
"nextservicekm": "Next Service KMs",
|
||||||
|
"notes": "Notes",
|
||||||
|
"plate": "Plate Number",
|
||||||
|
"purchasedate": "Purchase Date",
|
||||||
|
"registrationexpires": "Registration Expires On",
|
||||||
|
"serviceenddate": "Service End Date",
|
||||||
|
"servicestartdate": "Service Start Date",
|
||||||
|
"status": "Status",
|
||||||
|
"vin": "VIN",
|
||||||
|
"year": "Year"
|
||||||
|
},
|
||||||
|
"successes": {
|
||||||
|
"saved": "Courtesy Car saved successfully."
|
||||||
|
}
|
||||||
|
},
|
||||||
"documents": {
|
"documents": {
|
||||||
"errors": {
|
"errors": {
|
||||||
"deletes3": "Error deleting document from storage. ",
|
"deletes3": "Error deleting document from storage. ",
|
||||||
@@ -477,6 +507,10 @@
|
|||||||
"header": {
|
"header": {
|
||||||
"activejobs": "Active Jobs",
|
"activejobs": "Active Jobs",
|
||||||
"availablejobs": "Available Jobs",
|
"availablejobs": "Available Jobs",
|
||||||
|
"courtesycars": "Courtesy Cars",
|
||||||
|
"courtesycars-all": "All Courtesy Cars",
|
||||||
|
"courtesycars-contracts": "Contracts",
|
||||||
|
"courtesycars-newcontract": "New Contract",
|
||||||
"customers": "Customers",
|
"customers": "Customers",
|
||||||
"home": "Home",
|
"home": "Home",
|
||||||
"jobs": "Jobs",
|
"jobs": "Jobs",
|
||||||
@@ -596,7 +630,9 @@
|
|||||||
},
|
},
|
||||||
"titles": {
|
"titles": {
|
||||||
"app": "Bodyshop by ImEX Systems",
|
"app": "Bodyshop by ImEX Systems",
|
||||||
|
"courtesycars-create": "New Courtesy Car | $t(titles.app)",
|
||||||
"jobs": "All Jobs | $t(titles.app)",
|
"jobs": "All Jobs | $t(titles.app)",
|
||||||
|
"jobs-create": "Create a New Job | $t(titles.app)",
|
||||||
"jobsavailable": "Available Jobs | $t(titles.app)",
|
"jobsavailable": "Available Jobs | $t(titles.app)",
|
||||||
"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)",
|
||||||
|
|||||||
@@ -139,6 +139,36 @@
|
|||||||
"save": ""
|
"save": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"courtesycars": {
|
||||||
|
"erorrs": {
|
||||||
|
"saving": ""
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"color": "",
|
||||||
|
"dailycost": "",
|
||||||
|
"damage": "",
|
||||||
|
"fleetnumber": "",
|
||||||
|
"fuel": "",
|
||||||
|
"insuranceexpires": "",
|
||||||
|
"leaseenddate": "",
|
||||||
|
"make": "",
|
||||||
|
"model": "",
|
||||||
|
"nextservicedate": "",
|
||||||
|
"nextservicekm": "",
|
||||||
|
"notes": "",
|
||||||
|
"plate": "",
|
||||||
|
"purchasedate": "",
|
||||||
|
"registrationexpires": "",
|
||||||
|
"serviceenddate": "",
|
||||||
|
"servicestartdate": "",
|
||||||
|
"status": "",
|
||||||
|
"vin": "",
|
||||||
|
"year": ""
|
||||||
|
},
|
||||||
|
"successes": {
|
||||||
|
"saved": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"documents": {
|
"documents": {
|
||||||
"errors": {
|
"errors": {
|
||||||
"deletes3": "Error al eliminar el documento del almacenamiento.",
|
"deletes3": "Error al eliminar el documento del almacenamiento.",
|
||||||
@@ -477,6 +507,10 @@
|
|||||||
"header": {
|
"header": {
|
||||||
"activejobs": "Empleos activos",
|
"activejobs": "Empleos activos",
|
||||||
"availablejobs": "Trabajos disponibles",
|
"availablejobs": "Trabajos disponibles",
|
||||||
|
"courtesycars": "",
|
||||||
|
"courtesycars-all": "",
|
||||||
|
"courtesycars-contracts": "",
|
||||||
|
"courtesycars-newcontract": "",
|
||||||
"customers": "Clientes",
|
"customers": "Clientes",
|
||||||
"home": "Casa",
|
"home": "Casa",
|
||||||
"jobs": "Trabajos",
|
"jobs": "Trabajos",
|
||||||
@@ -596,7 +630,9 @@
|
|||||||
},
|
},
|
||||||
"titles": {
|
"titles": {
|
||||||
"app": "Carrocería de ImEX Systems",
|
"app": "Carrocería de ImEX Systems",
|
||||||
|
"courtesycars-create": "",
|
||||||
"jobs": "Todos los trabajos | $t(titles.app)",
|
"jobs": "Todos los trabajos | $t(titles.app)",
|
||||||
|
"jobs-create": "",
|
||||||
"jobsavailable": "Empleos disponibles | $t(titles.app)",
|
"jobsavailable": "Empleos disponibles | $t(titles.app)",
|
||||||
"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)",
|
||||||
|
|||||||
@@ -139,6 +139,36 @@
|
|||||||
"save": ""
|
"save": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"courtesycars": {
|
||||||
|
"erorrs": {
|
||||||
|
"saving": ""
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"color": "",
|
||||||
|
"dailycost": "",
|
||||||
|
"damage": "",
|
||||||
|
"fleetnumber": "",
|
||||||
|
"fuel": "",
|
||||||
|
"insuranceexpires": "",
|
||||||
|
"leaseenddate": "",
|
||||||
|
"make": "",
|
||||||
|
"model": "",
|
||||||
|
"nextservicedate": "",
|
||||||
|
"nextservicekm": "",
|
||||||
|
"notes": "",
|
||||||
|
"plate": "",
|
||||||
|
"purchasedate": "",
|
||||||
|
"registrationexpires": "",
|
||||||
|
"serviceenddate": "",
|
||||||
|
"servicestartdate": "",
|
||||||
|
"status": "",
|
||||||
|
"vin": "",
|
||||||
|
"year": ""
|
||||||
|
},
|
||||||
|
"successes": {
|
||||||
|
"saved": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"documents": {
|
"documents": {
|
||||||
"errors": {
|
"errors": {
|
||||||
"deletes3": "Erreur lors de la suppression du document du stockage.",
|
"deletes3": "Erreur lors de la suppression du document du stockage.",
|
||||||
@@ -477,6 +507,10 @@
|
|||||||
"header": {
|
"header": {
|
||||||
"activejobs": "Emplois actifs",
|
"activejobs": "Emplois actifs",
|
||||||
"availablejobs": "Emplois disponibles",
|
"availablejobs": "Emplois disponibles",
|
||||||
|
"courtesycars": "",
|
||||||
|
"courtesycars-all": "",
|
||||||
|
"courtesycars-contracts": "",
|
||||||
|
"courtesycars-newcontract": "",
|
||||||
"customers": "Les clients",
|
"customers": "Les clients",
|
||||||
"home": "Accueil",
|
"home": "Accueil",
|
||||||
"jobs": "Emplois",
|
"jobs": "Emplois",
|
||||||
@@ -596,7 +630,9 @@
|
|||||||
},
|
},
|
||||||
"titles": {
|
"titles": {
|
||||||
"app": "Carrosserie par ImEX Systems",
|
"app": "Carrosserie par ImEX Systems",
|
||||||
|
"courtesycars-create": "",
|
||||||
"jobs": "Tous les emplois | $t(titles.app)",
|
"jobs": "Tous les emplois | $t(titles.app)",
|
||||||
|
"jobs-create": "",
|
||||||
"jobsavailable": "Emplois disponibles | $t(titles.app)",
|
"jobsavailable": "Emplois disponibles | $t(titles.app)",
|
||||||
"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)",
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: alter table "public"."courtesycars" rename column "nextservicekm" to "NextServiceKm";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: alter table "public"."courtesycars" rename column "NextServiceKm" to "nextservicekm";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: alter table "public"."courtesycars" rename column "damage" to "Damage";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: alter table "public"."courtesycars" rename column "Damage" to "damage";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: alter table "public"."courtesycars" rename column "notes" to "Notes";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: alter table "public"."courtesycars" rename column "Notes" to "notes";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: alter table "public"."courtesycars" rename column "nextservicedate" to "NextServiceDate";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: alter table "public"."courtesycars" rename column "NextServiceDate" to "nextservicedate";
|
||||||
|
type: run_sql
|
||||||
Reference in New Issue
Block a user