Jobs list page updates & note adding modal.

This commit is contained in:
Patrick Fic
2020-01-13 22:08:06 -08:00
parent f7aa89496a
commit bee4f630c4
41 changed files with 2281 additions and 260 deletions

View File

@@ -31,15 +31,5 @@
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>

View File

@@ -0,0 +1,820 @@
<?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.48.1 r9760"
sodipodi:docname="car-side.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="1089.7894"
inkscape:cy="602.99002"
inkscape:document-units="px"
inkscape:current-layer="layer2"
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="1033"
inkscape:window-x="-3"
inkscape:window-y="-3"
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="layer2"
inkscape:label="auto"
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 991.42857,738.57143 1100.4745,750.23062 1141.4286,767.14286 1182.4244,784.0723 1276.2129,834.79872 1292.8571,840 1315.7143,847.14286 1334.2857,847.14286 1372.8571,860 1411.4286,872.85714 1398.5714,892.85714 1398.5714,892.85714 L 1368.5714,888.57143 1362.8152,941.49151 C 1362.8152,941.49151 1400,942.85714 1404.2857,957.14286 1408.5714,971.42857 1410,988.57143 1401.4286,998.57143 1392.8571,1008.5714 1387.1429,997.14286 1382.8571,1011.4286 1378.5714,1025.7143 1380,1040 1355.7143,1038.5714 1331.4286,1037.1429 1257.1428,1038.5714 1257.1428,1038.5714 1257.1428,1038.5714 1241.4286,930 1158.5714,932.85714 1075.7143,935.71429 1062.8571,1038.5714 1062.8571,1038.5714 L 562.85714,1038.5714 C 562.85714,1038.5714 557.14286,934.28571 465.71428,932.85714 374.28571,931.42857 367.14286,1038.5714 367.14286,1038.5714 L 301.42857,1038.5714 282.85714,1000 C 282.3419,1000 256.61386,999.99999 261.42857,982.85715 266.08,966.29566 257.14286,941.42857 278.57143,941.42857 300,941.42857 325.71429,942.85714 325.71429,942.85714 L 341.42857,898.57143 300,895.71429 C 300,895.71429 334.28571,871.42857 418.57143,862.85714 502.85714,854.28571 575.71429,854.28571 611.42857,831.42857 647.14286,808.57143 748.57143,752.85714 748.57143,752.85714 z"
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3846"
d="M 282.85714,1000 375.71429,1000"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3850"
d="M 555.71429,1000 1072.8571,1000"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3852"
d="M 1245.7143,1000 1397.1429,1000"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<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 799.50156,751.16108 873.00398,751.42857 873.00398,751.42857 L 865.86113,847.14286 z"
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3888"
d="M 658.57143,817.14286 658.57143,845.71429"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccccc"
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3892"
d="M 898.69729,752.83617 894.41157,847.16384 1101.5754,847.16384 C 1090.2678,826.41118 1054.963,772.25824 1028.7182,758.59241 1014.4325,748.59241 945.84015,754.26474 898.69729,752.83617 z"
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cscsc"
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3896"
d="M 1065.7143,760 C 1065.7143,760 1145.7143,844.28571 1151.4286,847.14286 1157.1429,850 1267.1429,848.57143 1267.1429,848.57143 1267.1429,848.57143 1190,801.42857 1164.2857,790 1138.5714,778.57143 1074.2857,758.57143 1065.7143,760 z"
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="csc"
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3900"
d="M 599.63544,837.66076 C 585.55949,868.62785 581.33671,909.4481 581.33671,931.96962 581.33671,954.49114 585.5595,1023.4633 603.85823,1037.5392"
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path3900-6"
d="M 632.78482,993.12906 C 631.37723,998.75944 628.73799,1075.0335 626.2747,1100.0623 622.60441,1118.7769 621.28649,1151.2807 620.11647,1187.3772 620.11647,1209.8987 627.15445,1267.6101 632.78483,1292.9468"
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3920"
d="M 357.52911,998.12658 C 357.52911,998.12658 373.01266,912.26329 464.50633,912.26329 556,912.26329 574.29873,999.53418 574.29873,999.53418"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path3920-5"
d="M 800.28863,1253.5341 C 800.28863,1253.5341 815.77218,1167.6708 907.26585,1167.6708 998.75949,1167.6708 1017.0583,1254.9417 1017.0583,1254.9417"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
sodipodi:nodetypes="cc"
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3940"
d="M 323.74684,943.23038 387.0886,943.23038"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cssc"
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3942"
d="M 1033.1747,746.16708 C 1051.4735,758.83544 1089.4785,796.84051 1126.0759,850.32911 1162.6734,903.81772 1134.5215,909.4481 1107.7772,924.93165 1081.0329,940.41519 1058.5114,967.15949 1040.2127,1037.5392"
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3944"
d="M 1112.7747,1196.0455 983.27594,1196.0455"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3946"
d="M 540.51646,941.82278 1085.2557,941.82278"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path3948"
d="M 1062.7342,791.21013 1062.7342,846.10633"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<rect
rx="2.9330556"
ry="7.3789682"
y="1144.9166"
x="558.65344"
height="14.541238"
width="41.285542"
id="rect3950"
style="fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<rect
rx="2.9330556"
ry="7.3789682"
y="1144.9166"
x="816.24335"
height="14.541238"
width="41.285542"
id="rect3950-4"
style="fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<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-opacity:1;stroke-dasharray:none" />
</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 88.285845,404.75808 69.335518,398.60075 69.335518,378.67519 88.285845,372.51786 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-opacity:1;stroke-dasharray:none"
sodipodi:type="star" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path4143"
d="M 31.741795,745.02273 347.04306,633.82273"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<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-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="ccssccccc"
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path4165"
d="M 595.41266,378.78481 736.17215,416.78987 C 736.17215,416.78987 727.72658,466.01209 727.72658,488.75317 727.72658,508.89891 727.72658,613.14936 727.72658,636.37468 727.72658,667.34176 736.17215,715.2 736.17215,715.2 L 595.41265,748.98228 C 595.41265,748.98228 578.16962,687.08007 578.16962,656.08101 578.55373,622.2791 579.92871,501.28156 580.28102,470.27848 578.87342,439.31139 595.41266,378.78481 595.41266,378.78481 z"
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="csccsc"
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path4175"
d="M 736.17216,416.78987 C 736.17216,416.78987 830.48101,422.42025 888.19241,422.42025 995.16962,422.42025 1089.4785,416.78987 1089.4785,416.78987 M 1088.0709,713.79241 C 1088.0709,713.79241 1010.6532,708.16202 888.19241,708.16202 819.22026,708.16202 736.17215,715.2 736.17215,715.2"
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<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-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path4135-9"
d="M 345.77724,632.78476 51.589892,632.78476 37.513942,735.53919 30.475972,746.79995 30.475972,888.96704 37.513942,903.04299 52.997492,1004.3898 341.55445,1004.3898"
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
sodipodi:nodetypes="csscccssccc"
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path4203"
d="M 1086.6633,416.78987 C 1086.6633,416.78987 1073.9949,464.6481 1073.9949,489.98481 1073.9949,515.32152 1073.9949,611.03797 1073.9949,636.37468 1073.9949,661.71139 1086.6633,713.79241 1086.6633,713.79241 L 1292.1722,751.79746 1400.557,751.79747 C 1400.557,751.79747 1414.6329,670.15696 1414.6329,636.37468 1414.6329,602.59241 1414.6329,526.58228 1414.6329,488.57722 1414.6329,450.57215 1400.557,378.78481 1400.557,378.78481 L 1292.1722,378.78481 z"
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="csscsccsc"
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path4205"
d="M 1097.9241,435.08861 C 1097.9241,435.08861 1089.4785,475.90886 1089.4785,491.39241 1089.4785,506.87595 1089.4785,616.66835 1089.4785,636.37468 1089.4785,656.08101 1096.5165,694.08608 1096.5165,694.08608 1096.5165,694.08608 1190.8253,720.83038 1220.3848,720.83038 1249.9443,720.83038 1262.6127,720.83038 1262.6127,720.83038 L 1262.6127,408.3443 C 1262.6127,408.3443 1240.0911,408.3443 1214.7544,408.3443 1189.4177,408.3443 1097.9241,435.08861 1097.9241,435.08861 z"
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path4207"
d="M 1292.1722,378.78481 C 1292.1722,378.78481 1323.1392,419.60506 1323.1392,489.98481 1323.1392,560.36456 1323.1392,571.62532 1323.1392,636.37468 1323.1392,701.12405 1292.1722,753.20506 1292.1722,753.20506"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path4209"
d="M 578.52152,489.98481 610.8962,457.61013 610.8962,416.78987 610.8962,529.39747"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path4209-7"
d="M 323.81774,865.03792 356.19242,832.66324 356.19242,791.84298 356.19242,904.45058"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="path4209-76"
d="M 1005.0937,787.62021 972.71901,755.24553 972.71901,714.42527 972.71901,827.03287"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
sodipodi:nodetypes="cssc"
transform="translate(-253.99998,253.99995)"
inkscape:connector-curvature="0"
id="path4243"
d="M 595.41266,378.78481 C 595.41266,378.78481 553.18481,457.61013 553.18481,489.98481 553.18481,522.35949 553.18481,595.55443 553.18481,636.37468 553.18481,677.19494 595.41266,750.38987 595.41266,750.38987"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M -106.79241,740.91638 -105.38481,649.42271 C -105.38481,649.42271 -99.754428,625.4936 -130.72152,624.08601 -161.68861,622.67841 -157.46583,626.90119 -157.46583,626.90119 L -156.05824,1042.1417 C -156.05824,1042.1417 -146.20507,1042.1417 -127.90634,1042.1417 -99.754423,1042.1417 -105.38481,1019.6201 -105.38481,1019.6201 L -105.38482,923.90373 C -118.06176,923.90373 -116.64557,914.28957 -116.64557,907.01258 -116.64557,890.0629 -116.64558,770.47588 -116.64558,757.80752 -116.19523,738.91743 -106.79241,740.91638 -106.79241,740.91638 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-opacity:1;stroke-dasharray:none"
d="M -155.98734,646.16195 -106.72152,646.16195"
id="path4247"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2.20000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M -155.13671,1020.4303 -105.87089,1020.4303"
id="path4247-2"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2.20000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M -156.69114,705.05816 -107.42532,705.05816"
id="path4247-1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2.20000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M -153.87595,964.87082 -104.61013,964.87082"
id="path4247-0"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M -147.09621,703.82272 -147.09621,964.22778"
id="path4281-1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M -137.24304,705.38727 -137.24304,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 536.00002,657.32799 634.57145,653.04227 686.00002,654.47084 737.42859,655.89941 846.47452,644.24022 887.42862,627.32798 928.42442,610.39854 1022.2129,559.67212 1038.8571,554.47084 1061.7143,547.32798 1080.2857,547.32798 1118.8571,534.47084 1157.4286,521.6137 1144.5714,501.6137 1144.5714,501.6137 L 1114.5714,505.89941 1108.8152,452.97933 C 1108.8152,452.97933 1146,451.6137 1150.2857,437.32798 1154.5714,423.04227 1156,405.89941 1147.4286,395.89941 1138.8571,385.89944 1133.1429,397.32798 1128.8571,383.04224 1124.5714,368.75654 1126,354.47084 1101.7143,355.89944 1077.4286,357.32794 1003.1428,355.89944 1003.1428,355.89944 1003.1428,355.89944 987.42862,464.47084 904.57142,461.6137 821.71432,458.75655 808.85712,355.89944 808.85712,355.89944 L 308.85716,355.89944 C 308.85716,355.89944 303.14288,460.18513 211.7143,461.6137 120.28573,463.04227 113.14288,355.89944 113.14288,355.89944 L 47.428587,355.89944 28.857157,394.47084 C 28.341917,394.47084 2.61388,394.47085 7.42859,411.61369 12.08002,428.17518 3.14288,453.04227 24.57145,453.04227 46.000017,453.04227 71.714307,451.6137 71.714307,451.6137 L 87.428587,495.89941 46.000017,498.75655 C 46.000017,498.75655 80.285727,523.04227 164.57145,531.6137 248.85716,540.18513 321.71431,540.18513 357.42859,563.04227 393.14288,585.89941 494.57145,641.6137 494.57145,641.6137 z"
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="path3846-2"
d="M 28.857157,394.47084 121.71431,394.47084"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="path3850-6"
d="M 301.71431,394.47084 818.85712,394.47084"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="path3852-6"
d="M 991.71432,394.47084 1143.1429,394.47084"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
sodipodi:nodetypes="csccc"
inkscape:connector-curvature="0"
id="path3884-4"
d="M 364.57145,547.32798 C 380.28574,565.89941 487.94517,628.85245 516.00002,635.89941 545.50158,643.30976 619.004,643.04227 619.004,643.04227 L 611.86115,547.32798 z"
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="path3888-9"
d="M 404.57145,577.32798 404.57145,548.75655"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3892-5"
d="M 644.69731,641.63467 640.41159,547.307 847.57542,547.307 C 836.26782,568.05966 800.96302,622.2126 774.71822,635.87843 760.43252,645.87843 691.84017,640.2061 644.69731,641.63467 z"
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
sodipodi:nodetypes="cscsc"
inkscape:connector-curvature="0"
id="path3896-0"
d="M 811.71432,634.47084 C 811.71432,634.47084 891.71432,550.18513 897.42862,547.32798 903.14292,544.47084 1013.1429,545.89941 1013.1429,545.89941 1013.1429,545.89941 936.00002,593.04227 910.28572,604.47084 884.57142,615.89941 820.28572,635.89941 811.71432,634.47084 z"
style="fill:#f0ffeb;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0"
id="path3900-4"
d="M 345.63546,556.81008 C 331.55951,525.84299 327.33673,485.02274 327.33673,462.50122 327.33673,439.9797 331.55952,371.00754 349.85825,356.93164"
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path3900-6-8"
d="M 632.78482,655.34173 C 631.37723,649.71135 628.73799,573.43729 626.2747,548.40849 622.60441,529.69389 621.28649,497.19009 620.11647,461.09359 620.11647,438.57209 627.15445,380.86069 632.78483,355.52399"
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="path3920-7"
d="M 103.52913,396.34426 C 103.52913,396.34426 119.01268,482.20755 210.50635,482.20755 302.00002,482.20755 320.29875,394.93666 320.29875,394.93666"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="path3920-5-1"
d="M 800.28863,394.93669 C 800.28863,394.93669 815.77218,480.79999 907.26585,480.79999 998.75949,480.79999 1017.0583,393.52909 1017.0583,393.52909"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3940-7"
d="M 69.746857,451.24046 133.08862,451.24046"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
sodipodi:nodetypes="cssc"
inkscape:connector-curvature="0"
id="path3942-2"
d="M 779.17472,648.30376 C 797.47352,635.6354 835.47852,597.63033 872.07592,544.14173 908.67342,490.65312 880.52152,485.02274 853.77722,469.53919 827.03292,454.05565 804.51142,427.31135 786.21272,356.93164"
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3944-7"
d="M 1112.7747,452.42529 983.27594,452.42529"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="path3946-2"
d="M 286.51648,452.64806 831.25572,452.64806"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="path3948-2"
d="M 808.73422,603.26071 808.73422,548.36451"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<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="fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<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="fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<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="fill:#ffcb00;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
transform="translate(941.34179,284.00501)"
d="M 76.010128,211.28101 C 76.010128,220.60972 68.447707,228.17215 59.118988,228.17215 49.790269,228.17215 42.227848,220.60972 42.227848,211.28101 42.227848,201.95229 49.790269,194.38987 59.118988,194.38987 68.447707,194.38987 76.010128,201.95229 76.010128,211.28101 z"
sodipodi:ry="16.89114"
sodipodi:rx="16.89114"
sodipodi:cy="211.28101"
sodipodi:cx="59.118988"
id="path4335"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M -126.57469,704.93158 -126.57469,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-opacity:1;stroke-dasharray:none"
d="M -153.87595,992.4894 -153.87595,966.4489 -131.35443,966.4489 -108.83291,966.4489 -108.83291,992.4894 -108.83291,1018.5299 -131.35443,1018.5299 -153.87595,1018.5299 -153.87595,992.4894 z"
id="path4361"
inkscape:connector-curvature="0" />
<path
style="fill:#ffffc0;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M -153.87595,675.78054 -153.87595,648.33244 -131.35443,648.33244 -108.83291,648.33244 -108.83291,675.78054 -108.83291,703.22864 -131.35443,703.22864 -153.87595,703.22864 -153.87595,675.78054 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-opacity:1;stroke-dasharray:none"
d="M -157.39494,624.37968 C -157.39494,624.37968 -161.61772,611.71132 -175.69367,611.71132 -189.76962,611.71132 -189.76962,620.15689 -189.76962,620.15689 L -189.76962,1043.8429 C -189.76962,1043.8429 -188.36203,1053.6961 -175.69367,1053.6961 -163.02532,1053.6961 -157.39494,1043.8429 -157.39494,1043.8429"
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-opacity:1;stroke-dasharray:none"
d="M -191.17722,624.37967 C -191.17722,624.37967 -226.36709,622.97208 -226.36709,645.4936 -226.36709,668.01512 -226.36709,994.57714 -226.36709,1017.0986 -226.36709,1039.6201 -189.76962,1042.4353 -189.76962,1042.4353"
id="path4381"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssc" />
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4467"
width="16.891144"
height="35.189873"
x="-216.51393"
y="648.30878"
rx="7.7417746"
ry="6.2843671" />
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
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-opacity:1;stroke-dasharray:none"
id="rect4487"
width="30.967089"
height="377.23544"
x="-62.939251"
y="645.49365" />
<path
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M 1200.9342,633.85815 1200.9342,707.05309 1268.4987,707.05309 1268.4987,624.00499 1243.162,609.92904 z"
id="path4499"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M 1200.9342,963.23538 1268.4987,963.23538 1268.4987,1042.0607 1244.5696,1056.1366 1200.9342,1037.8378 z"
id="path4501"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M 1200.9342,692.97714 1200.9342,977.31132"
id="path4503"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M 1268.4987,693.56955 1268.4987,977.90373"
id="path4505"
inkscape:connector-curvature="0" />
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
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-opacity:1;stroke-dasharray:none"
d="M 1224.1949,758.1012 1224.1949,704.61259"
id="path4536"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M 1224.1949,961.97968 1224.1949,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-opacity:1;stroke-dasharray:none"
d="M 1254.5696,707.42778 1254.5696,963.61006"
id="path4556"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M 1268.757,624.97209 C 1268.757,624.97209 1272.9798,612.30373 1287.0557,612.30373 1301.1317,612.30373 1301.1317,620.7493 1301.1317,620.7493 L 1301.1317,1044.4353 C 1301.1317,1044.4353 1299.7241,1054.2885 1287.0557,1054.2885 1274.3874,1054.2885 1268.757,1044.4353 1268.757,1044.4353"
id="path4377-2"
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-opacity:1;stroke-dasharray:none;display:inline"
d="M 1302.5393,624.97208 C 1302.5393,624.97208 1337.7291,623.56449 1337.7291,646.08601 1337.7291,668.60753 1337.7291,995.16955 1337.7291,1017.691 1337.7291,1040.2125 1301.1317,1043.0277 1301.1317,1043.0277"
id="path4381-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssc" />
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
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="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
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-opacity:1;stroke-dasharray:none"
d="M 1199.6734,632.82525 1267.2379,707.42778"
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-opacity:1;stroke-dasharray:none"
d="M 1199.6734,708.02018 1267.2379,634.82525"
id="path4587"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M 1199.8962,962.97968 1267.4607,1037.5822"
id="path4585-9"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="M 1199.8962,1038.1746 1267.4607,964.97968"
id="path4587-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
sodipodi:type="arc"
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4610"
sodipodi:cx="119.64557"
sodipodi:cy="202.83545"
sodipodi:rx="76.010124"
sodipodi:ry="76.010124"
d="M 195.65569,202.83545 A 76.010124,76.010124 0 1 1 43.635445,202.83545 76.010124,76.010124 0 1 1 195.65569,202.83545 z"
transform="translate(78.488602,1074.6683)" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4612"
sodipodi:cx="103.45823"
sodipodi:cy="72.632912"
sodipodi:rx="44.339241"
sodipodi:ry="44.339241"
d="M 147.79747,72.632912 A 44.339241,44.339241 0 1 1 59.118988,72.632912 44.339241,44.339241 0 1 1 147.79747,72.632912 z"
transform="translate(94.675942,1204.8708)" />
<path
sodipodi:type="arc"
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4610-9"
sodipodi:cx="119.64557"
sodipodi:cy="202.83545"
sodipodi:rx="76.010124"
sodipodi:ry="76.010124"
d="M 195.65569,202.83545 A 76.010124,76.010124 0 1 1 43.635445,202.83545 76.010124,76.010124 0 1 1 195.65569,202.83545 z"
transform="translate(78.488602,187.66068)" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4612-4"
sodipodi:cx="103.45823"
sodipodi:cy="72.632912"
sodipodi:rx="44.339241"
sodipodi:ry="44.339241"
d="M 147.79747,72.632912 A 44.339241,44.339241 0 1 1 59.118988,72.632912 44.339241,44.339241 0 1 1 147.79747,72.632912 z"
transform="translate(94.675942,317.86322)" />
<path
sodipodi:type="arc"
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4610-5"
sodipodi:cx="119.64557"
sodipodi:cy="202.83545"
sodipodi:rx="76.010124"
sodipodi:ry="76.010124"
d="M 195.65569,202.83545 A 76.010124,76.010124 0 1 1 43.635445,202.83545 76.010124,76.010124 0 1 1 195.65569,202.83545 z"
transform="translate(773.02535,187.66068)" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4612-1"
sodipodi:cx="103.45823"
sodipodi:cy="72.632912"
sodipodi:rx="44.339241"
sodipodi:ry="44.339241"
d="M 147.79747,72.632912 A 44.339241,44.339241 0 1 1 59.118988,72.632912 44.339241,44.339241 0 1 1 147.79747,72.632912 z"
transform="translate(789.21269,317.86322)" />
<path
sodipodi:type="arc"
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4610-4"
sodipodi:cx="119.64557"
sodipodi:cy="202.83545"
sodipodi:rx="76.010124"
sodipodi:ry="76.010124"
d="M 195.65569,202.83545 A 76.010124,76.010124 0 1 1 43.635445,202.83545 76.010124,76.010124 0 1 1 195.65569,202.83545 z"
transform="translate(773.02535,1074.6683)" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4612-3"
sodipodi:cx="103.45823"
sodipodi:cy="72.632912"
sodipodi:rx="44.339241"
sodipodi:ry="44.339241"
d="M 147.79747,72.632912 A 44.339241,44.339241 0 1 1 59.118988,72.632912 44.339241,44.339241 0 1 1 147.79747,72.632912 z"
transform="translate(789.21269,1204.8708)" />
<path
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 1338.5088,829.07334 1379.3291,829.07334"
id="path3083"
inkscape:connector-curvature="0" />
<path
sodipodi:type="arc"
style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3853"
sodipodi:cx="-59.118988"
sodipodi:cy="229.57974"
sodipodi:rx="4.222785"
sodipodi:ry="4.222785"
d="M -54.896203,229.57974 A 4.222785,4.222785 0 1 1 -63.341773,229.57974 4.222785,4.222785 0 1 1 -54.896203,229.57974 z"
transform="translate(1441.2633,600.30879)" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 778.06325,845.37208 739.35445,806.66322"
id="path3855"
inkscape:connector-curvature="0" />
<g
id="g3952"
transform="translate(-13.779768,15.524026)">
<path
transform="translate(-79.458203,449.80248)"
d="M -77.417726,188.75949 C -77.417726,191.09167 -79.308331,192.98228 -81.640511,192.98228 -83.97269,192.98228 -85.863296,191.09167 -85.863296,188.75949 -85.863296,186.42731 -83.97269,184.53671 -81.640511,184.53671 -79.308331,184.53671 -77.417726,186.42731 -77.417726,188.75949 z"
sodipodi:ry="4.222785"
sodipodi:rx="4.222785"
sodipodi:cy="188.75949"
sodipodi:cx="-81.640511"
id="path3857"
style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc" />
<path
transform="translate(-79.458203,569.9172)"
d="M -77.417726,188.75949 C -77.417726,191.09167 -79.308331,192.98228 -81.640511,192.98228 -83.97269,192.98228 -85.863296,191.09167 -85.863296,188.75949 -85.863296,186.42731 -83.97269,184.53671 -81.640511,184.53671 -79.308331,184.53671 -77.417726,186.42731 -77.417726,188.75949 z"
sodipodi:ry="4.222785"
sodipodi:rx="4.222785"
sodipodi:cy="188.75949"
sodipodi:cx="-81.640511"
id="path3857-2"
style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc" />
<path
transform="translate(-79.458203,690.03203)"
d="M -77.417726,188.75949 C -77.417726,191.09167 -79.308331,192.98228 -81.640511,192.98228 -83.97269,192.98228 -85.863296,191.09167 -85.863296,188.75949 -85.863296,186.42731 -83.97269,184.53671 -81.640511,184.53671 -79.308331,184.53671 -77.417726,186.42731 -77.417726,188.75949 z"
sodipodi:ry="4.222785"
sodipodi:rx="4.222785"
sodipodi:cy="188.75949"
sodipodi:cx="-81.640511"
id="path3857-3"
style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc" />
<path
transform="translate(-79.458203,810.14679)"
d="M -77.417726,188.75949 C -77.417726,191.09167 -79.308331,192.98228 -81.640511,192.98228 -83.97269,192.98228 -85.863296,191.09167 -85.863296,188.75949 -85.863296,186.42731 -83.97269,184.53671 -81.640511,184.53671 -79.308331,184.53671 -77.417726,186.42731 -77.417726,188.75949 z"
sodipodi:ry="4.222785"
sodipodi:rx="4.222785"
sodipodi:cy="188.75949"
sodipodi:cx="-81.640511"
id="path3857-7"
style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc" />
</g>
<g
id="g3946"
transform="translate(-13.779768,17.524026)">
<path
transform="translate(1381.6254,448.24805)"
d="M -77.417726,188.75949 C -77.417726,191.09167 -79.308331,192.98228 -81.640511,192.98228 -83.97269,192.98228 -85.863296,191.09167 -85.863296,188.75949 -85.863296,186.42731 -83.97269,184.53671 -81.640511,184.53671 -79.308331,184.53671 -77.417726,186.42731 -77.417726,188.75949 z"
sodipodi:ry="4.222785"
sodipodi:rx="4.222785"
sodipodi:cy="188.75949"
sodipodi:cx="-81.640511"
id="path3857-97"
style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc" />
<path
transform="translate(1381.6254,568.36277)"
d="M -77.417726,188.75949 C -77.417726,191.09167 -79.308331,192.98228 -81.640511,192.98228 -83.97269,192.98228 -85.863296,191.09167 -85.863296,188.75949 -85.863296,186.42731 -83.97269,184.53671 -81.640511,184.53671 -79.308331,184.53671 -77.417726,186.42731 -77.417726,188.75949 z"
sodipodi:ry="4.222785"
sodipodi:rx="4.222785"
sodipodi:cy="188.75949"
sodipodi:cx="-81.640511"
id="path3857-2-3"
style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc" />
<path
transform="translate(1381.6254,688.4776)"
d="M -77.417726,188.75949 C -77.417726,191.09167 -79.308331,192.98228 -81.640511,192.98228 -83.97269,192.98228 -85.863296,191.09167 -85.863296,188.75949 -85.863296,186.42731 -83.97269,184.53671 -81.640511,184.53671 -79.308331,184.53671 -77.417726,186.42731 -77.417726,188.75949 z"
sodipodi:ry="4.222785"
sodipodi:rx="4.222785"
sodipodi:cy="188.75949"
sodipodi:cx="-81.640511"
id="path3857-3-6"
style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc" />
<path
transform="translate(1381.6254,808.59236)"
d="M -77.417726,188.75949 C -77.417726,191.09167 -79.308331,192.98228 -81.640511,192.98228 -83.97269,192.98228 -85.863296,191.09167 -85.863296,188.75949 -85.863296,186.42731 -83.97269,184.53671 -81.640511,184.53671 -79.308331,184.53671 -77.417726,186.42731 -77.417726,188.75949 z"
sodipodi:ry="4.222785"
sodipodi:rx="4.222785"
sodipodi:cy="188.75949"
sodipodi:cx="-81.640511"
id="path3857-7-1"
style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 50 KiB

View File

@@ -1,4 +1,4 @@
import React from "react";
import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import { useQuery } from "@apollo/react-hooks";
import AlertComponent from "../alert/alert.component";
@@ -17,6 +17,8 @@ import JobDetailCardsTotalsComponent from "./job-detail-cards.totals.component";
import JobDetailCardsDocumentsComponent from "./job-detail-cards.documents.component";
import "./job-detail-cards.styles.scss";
import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component";
import NoteAddModal from "../note-add-modal/note-add-modal.component";
export default function JobDetailCards({ selectedJob }) {
const { loading, error, data } = useQuery(QUERY_JOB_CARD_DETAILS, {
@@ -24,6 +26,7 @@ export default function JobDetailCards({ selectedJob }) {
variables: { id: selectedJob },
skip: !selectedJob
});
const [noteModalVisible, setNoteModalVisible] = useState(false);
const { t } = useTranslation();
@@ -31,85 +34,106 @@ export default function JobDetailCards({ selectedJob }) {
return <div>{t("jobs.errors.nojobselected")}</div>;
}
if (error) return <AlertComponent message={error.message} type="error" />;
console.log("data", data);
return (
<PageHeader
ghost={false}
onBack={() => window.history.back()}
tags={<Tag color="blue">{data?.jobs_by_pk.job_status?.name}</Tag>}
title={
data?.jobs_by_pk.ro_number
? `${t("jobs.fields.ro_number")} ${data?.jobs_by_pk.ro_number}`
: `${t("jobs.fields.est_number")} ${data?.jobs_by_pk.est_number}`
}
extra={[
<Button key="documents">
<Icon type="file-image" />
{t("jobs.actions.addDocuments")}
</Button>,
<Button key="printing">
<Icon type="printer" />
{t("jobs.actions.printCenter")}
</Button>,
<Button key="notes">
<Icon type="edit" />
{t("jobs.actions.addNote")}
</Button>,
<Button key="postinvoices">
<Icon type="shopping-cart" />
{t("jobs.actions.postInvoices")}
</Button>
]}
>
<Descriptions size="small" column={3}>
<Descriptions.Item label="Created">Lili Qu</Descriptions.Item>
<Descriptions.Item label="Association">421421</Descriptions.Item>
<Descriptions.Item label="Creation Time">2017-01-10</Descriptions.Item>
<Descriptions.Item label="Effective Time">2017-10-10</Descriptions.Item>
<Descriptions.Item label="Remarks">
Gonghu Road, Xihu District, Hangzhou, Zhejiang, China
</Descriptions.Item>
</Descriptions>
if (error) return <AlertComponent message={error.message} type='error' />;
<section className="job-cards">
<JobDetailCardsCustomerComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsVehicleComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsInsuranceComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsDatesComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsPartsComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsNotesComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsDamageComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsDocumentsComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsTotalsComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
</section>
</PageHeader>
return (
<div className='job-cards-container'>
<NoteAddModal
jobId={data?.jobs_by_pk.id}
visible={noteModalVisible}
changeVisibility={setNoteModalVisible}
/>
<PageHeader
ghost={false}
onBack={() => window.history.back()}
tags={<Tag color='blue'>{data?.jobs_by_pk.job_status?.name}</Tag>}
title={
loading
? t("general.labels.loading")
: data?.jobs_by_pk.ro_number
? `${t("jobs.fields.ro_number")} ${data?.jobs_by_pk.ro_number}`
: `${t("jobs.fields.est_number")} ${data?.jobs_by_pk.est_number}`
}
extra={[
<Button key='documents'>
<Icon type='file-image' />
{t("jobs.actions.addDocuments")}
</Button>,
<Button key='printing'>
<Icon type='printer' />
{t("jobs.actions.printCenter")}
</Button>,
<Button
key='notes'
actiontype='addNote'
onClick={() => {
setNoteModalVisible(!noteModalVisible);
}}>
<Icon type='edit' />
{t("jobs.actions.addNote")}
</Button>,
<Button key='postinvoices'>
<Icon type='shopping-cart' />
{t("jobs.actions.postInvoices")}
</Button>
]}>
{loading ? (
<LoadingSkeleton />
) : (
<Descriptions size='small' column={3}>
<Descriptions.Item label='Created'>Lili Qu</Descriptions.Item>
<Descriptions.Item label='Association'>421421</Descriptions.Item>
<Descriptions.Item label='Creation Time'>
2017-01-10
</Descriptions.Item>
<Descriptions.Item label='Effective Time'>
2017-10-10
</Descriptions.Item>
<Descriptions.Item label='Remarks'>
Gonghu Road, Xihu District, Hangzhou, Zhejiang, China
</Descriptions.Item>
</Descriptions>
)}
<section className='job-cards'>
<JobDetailCardsCustomerComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsVehicleComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsInsuranceComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsDatesComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsPartsComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsNotesComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsDamageComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsDocumentsComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
<JobDetailCardsTotalsComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
/>
</section>
</PageHeader>
</div>
);
}

View File

@@ -1,6 +1,7 @@
import React from "react";
import { useTranslation } from "react-i18next";
import CardTemplate from "./job-detail-cards.template.component";
import UnfoldedCar from "../../assets/unfolded_car.svg";
export default function JobDetailCardsDamageComponent({ loading, data }) {
const { t } = useTranslation();
@@ -9,7 +10,7 @@ export default function JobDetailCardsDamageComponent({ loading, data }) {
<CardTemplate loading={loading} title={t("jobs.labels.cards.damage")}>
{data ? (
<span>
Damage stuff here.
<img src={UnfoldedCar} alt='Damaged Area' width={200} height={200} />
</span>
) : null}
</CardTemplate>

View File

@@ -2,6 +2,7 @@ import React from "react";
import { useTranslation } from "react-i18next";
import CardTemplate from "./job-detail-cards.template.component";
import Moment from "react-moment";
import { Timeline } from "antd";
export default function JobDetailCardsDatesComponent({ loading, data }) {
const { t } = useTranslation();
@@ -9,11 +10,15 @@ export default function JobDetailCardsDatesComponent({ loading, data }) {
return (
<CardTemplate loading={loading} title={t("jobs.labels.cards.dates")}>
{data ? (
<span>
Actual In <Moment format="MM/DD/YYYY">{data?.actual_in}</Moment>
Scheduled Completion
<Moment format="MM/DD/YYYY">{data?.scheduled_completion}</Moment>
</span>
<Timeline>
<Timeline.Item>
Actual In <Moment format='MM/DD/YYYY'>{data?.actual_in}</Moment>
</Timeline.Item>
<Timeline.Item>
Scheduled Completion
<Moment format='MM/DD/YYYY'>{data?.scheduled_completion}</Moment>
</Timeline.Item>
</Timeline>
) : null}
</CardTemplate>
);

View File

@@ -1,6 +1,13 @@
import { List, Icon } from "antd";
import React from "react";
import { useTranslation } from "react-i18next";
import CardTemplate from "./job-detail-cards.template.component";
import styled from "styled-components";
const Container = styled.div`
height: 100%;
overflow-y: auto;
`;
export default function JobDetailCardsNotesComponent({ loading, data }) {
const { t } = useTranslation();
@@ -8,9 +15,24 @@ export default function JobDetailCardsNotesComponent({ loading, data }) {
return (
<CardTemplate loading={loading} title={t("jobs.labels.cards.notes")}>
{data ? (
<span>
notes stuff here.
</span>
<Container>
<List
size='small'
bordered
dataSource={data?.notes}
renderItem={item => (
<List.Item>
{item.critical ? (
<Icon style={{ margin: 4, color: "red" }} type='warning' />
) : null}
{item.private ? (
<Icon style={{ margin: 4 }} type='eye-invisible' />
) : null}
{item.text}
</List.Item>
)}
/>
</Container>
) : null}
</CardTemplate>
);

View File

@@ -1,32 +1,36 @@
.job-cards-container {
height: 45vh;
overflow-y: auto;
}
.job-cards {
display: flex;
flex-wrap: wrap;
}
display: flex;
flex-wrap: wrap;
}
.job-card {
margin: .5em;
margin: 0.5em;
}
@media screen and (min-width: 40em) {
.card {
max-width: calc(50% - 1em);
}
.card {
max-width: calc(50% - 1em);
}
}
@media screen and (min-width: 60em) {
.card {
max-width: calc(25% - 1em);
}
.card {
max-width: calc(25% - 1em);
}
}
.centered {
margin: 0 auto;
padding: 0 1em;
margin: 0 auto;
padding: 0 1em;
}
@media screen and (min-width: 52em) {
.centered {
max-width: 52em;
}
}
.centered {
max-width: 52em;
}
}

View File

@@ -13,7 +13,7 @@ export default function JobDetailCardTemplate({
return (
<Card
size="small"
style={{ width: 300 }}
style={{ width: 290 }}
className="job-card"
title={title}
loading={loading}

View File

@@ -91,7 +91,7 @@ function JobTombstone({ job, ...otherProps }) {
? (jobContext.owner?.first_name ?? "") +
" " +
(jobContext.owner?.last_name ?? "")
: t("jobs.labels.no_owner")
: t("jobs.errors.noowner")
}
tags={<Tag color='blue'>{jobContext?.job_status?.name}</Tag>}
extra={[
@@ -102,7 +102,7 @@ function JobTombstone({ job, ...otherProps }) {
</Form.Item>
]}>
<Descriptions size='small' column={5}>
<Descriptions.Item label={t("jobs.labels.vehicle_info")}>
<Descriptions.Item label={t("jobs.fields.vehicle")}>
<Link to={`/manage/vehicles/${jobContext.vehicle?.id}`}>
{jobContext.vehicle?.v_model_yr ?? t("general.labels.na")}{" "}
{jobContext.vehicle?.v_make_desc ?? t("general.labels.na")}{" "}
@@ -185,4 +185,4 @@ function JobTombstone({ job, ...otherProps }) {
);
}
export default Form.create({ name: "JobTombstone" })(JobTombstone);
export default Form.create({ name: "JobTombstone" })(JobTombstone);

View File

@@ -1,10 +1,12 @@
import { Input, Table, Icon } from "antd";
import React, { useState } from "react";
import { Link } from "react-router-dom";
import { Table, Icon, Input, Dropdown, Menu } from "antd";
import { alphaSort } from "../../utils/sorters";
import { useTranslation } from "react-i18next";
import { Link } from "react-router-dom";
import PhoneFormatter from "../../utils/PhoneFormatter";
import { alphaSort } from "../../utils/sorters";
import "./jobs-list.styles.scss";
export default function JobsPage({
export default function JobsList({
loading,
jobs,
selectedJob,
@@ -17,38 +19,9 @@ export default function JobsPage({
const { t } = useTranslation();
const actionMenu = (
<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>
);
const columns = [
{
title: "RO #",
title: t("jobs.fields.ro_number"),
dataIndex: "ro_number",
key: "ro_number",
// onFilter: (value, record) => record.ro_number.includes(value),
@@ -56,67 +29,144 @@ export default function JobsPage({
sorter: (a, b) => alphaSort(a, b),
sortOrder:
state.sortedInfo.columnKey === "ro_number" && state.sortedInfo.order,
ellipsis: true,
render: (text, record) => (
<span>
<Link to={`/manage/jobs/${record.id}`}>{record.ro_number}</Link>
<Link to={"/manage/jobs/" + record.id}>
{record.ro_number ? record.ro_number : t("general.labels.na")}
</Link>
</span>
)
},
{
title: "Est. #",
dataIndex: "est_number",
key: "est_number"
title: t("jobs.fields.owner"),
dataIndex: "owner",
key: "owner",
ellipsis: true,
sorter: (a, b) => alphaSort(a.pit_owner_last_name, b.pit_owner_last_name),
sortOrder:
state.sortedInfo.columnKey === "owner" && state.sortedInfo.order,
render: (text, record) => {
return record.owner ? (
<Link to={"/manage/owners/" + record.owner.id}>
{record.pit_owner_first_name} {record.pit_owner_last_name}
</Link>
) : (
t("jobs.errors.noowner")
);
}
},
{
title: "Status",
title: t("jobs.fields.phone1"),
dataIndex: "pit_owner_phone",
key: "pit_owner_phone",
ellipsis: true,
render: (text, record) => {
return record.pit_owner_phone ? (
<span>
<PhoneFormatter>{record.pit_owner_phone}</PhoneFormatter>
<Icon
style={{ margin: 4 }}
type='message'
onClick={() => {
alert("SMSing will happen here.");
}}
/>
</span>
) : (
t("general.labels.unknown")
);
}
},
{
title: t("jobs.fields.status"),
dataIndex: "status",
key: "status",
ellipsis: true,
sorter: (a, b) => alphaSort(a, b),
sortOrder:
state.sortedInfo.columnKey === "status" && state.sortedInfo.order,
ellipsis: true,
render: (text, record) => {
return record.job_status?.name ?? "";
return record.job_status?.name ?? t("general.labels.na");
}
},
{
title: "Customer",
dataIndex: "customer",
key: "customer",
render: (text, record) => {
return record.owner ? (
<div>
{record.owner.first_name} {record.owner.last_name}
</div>
) : (
"No Customer"
);
}
},
{
title: "Vehicle",
title: t("jobs.fields.vehicle"),
dataIndex: "vehicle",
key: "vehicle",
ellipsis: true,
render: (text, record) => {
return record.vehicle ? (
<div>
<Link to={"manage/vehicles/" + record.vehicle.id}>
{record.vehicle.v_model_yr} {record.vehicle.v_make_desc}{" "}
{record.vehicle.v_model_desc}
</div>
</Link>
) : (
"No Vehicle"
t("jobs.errors.novehicle")
);
}
},
{
title: "Action",
key: "action",
render: (text, record) => (
<Dropdown overlay={actionMenu} trigger={["click"]}>
<Icon type="ellipsis" />
</Dropdown>
)
title: t("vehicles.fields.plate_no"),
dataIndex: "plate_no",
key: "plate_no",
ellipsis: true,
sorter: (a, b) => alphaSort(a, b),
sortOrder:
state.sortedInfo.columnKey === "plate_no" && state.sortedInfo.order,
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",
ellipsis: true,
sorter: (a, b) => alphaSort(a, b),
sortOrder:
state.sortedInfo.columnKey === "clm_no" && state.sortedInfo.order,
render: (text, record) => {
return record.clm_no ? (
<span>{record.clm_no}</span>
) : (
t("general.labels.unknown")
);
}
},
{
title: t("jobs.fields.clm_total"),
dataIndex: "clm_total",
key: "clm_total",
sorter: (a, b) => {
return a > b;
},
sortOrder:
state.sortedInfo.columnKey === "clm_total" && state.sortedInfo.order,
render: (text, record) => {
return record.clm_total ? (
<span>{record.clm_total}</span>
) : (
t("general.labels.unknown")
);
}
},
{
title: t("jobs.fields.owner_owing"),
dataIndex: "owner_owing",
key: "owner_owing",
render: (text, record) => {
return record.owner_owing ? (
<span>{record.owner_owing}</span>
) : (
t("general.labels.unknown")
);
}
}
];
@@ -140,19 +190,22 @@ export default function JobsPage({
};
return (
<div>
<Input.Search
placeholder="Search..."
onSearch={value => console.log(value)}
enterButton
/>
<br />
<div className='jobs-list'>
<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"
rowKey='id'
dataSource={jobs}
rowSelection={{ selectedRowKeys: [selectedJob] }}
onChange={handleTableChange}

View File

@@ -0,0 +1,4 @@
.jobs-list{
text-align: center;
height: 40vh;
}

View File

@@ -1,10 +1,8 @@
import React from 'react'
import './loading-skeleton.styles.scss'
import React from "react";
import "./loading-skeleton.styles.scss";
import { Skeleton } from "antd";
export default function LoadingSkeleton() {
return (
<Skeleton className="loading-skeleton" active/>
)
export default function LoadingSkeleton(props) {
return <Skeleton {...props} className='loading-skeleton' active />;
}

View File

@@ -0,0 +1,75 @@
import { Input, Modal, Switch } from "antd";
import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import { useMutation } from "react-apollo";
import { INSERT_NEW_NOTE } from "../../graphql/notes.queries";
export default function NoteAddModal({ jobId, visible, changeVisibility }) {
const [newNote, setnewNote] = useState({
private: false,
critical: false,
text: ""
});
const { t } = useTranslation();
const [insertNote] = useMutation(INSERT_NEW_NOTE);
return (
<Modal
title='Basic Modal'
visible={visible}
okText='Save'
onOk={() => {
insertNote({
variables: {
noteInput: [
{ ...newNote, jobid: jobId, created_by: "patrick@bodyshop.app" }
]
}
}).then(r => {
setnewNote({
private: false,
critical: false,
text: ""
});
});
changeVisibility(!visible);
}}
onCancel={() => {
changeVisibility(!visible);
setnewNote({
private: false,
critical: false,
text: ""
});
}}>
<div>
{t("notes.fields.critical")}
<Switch
title={t("notes.fields.critical")}
onChange={checked => {
setnewNote({ ...newNote, critical: checked });
}}
/>
</div>
<div>
{t("notes.fields.private")}
<Switch
title={t("notes.fields.private")}
onChange={checked => {
setnewNote({ ...newNote, private: checked });
}}
/>
</div>
<Input.TextArea
rows={8}
defaultValue={newNote.text}
placeholder={t("notes.labels.newnoteplaceholder")}
onChange={e => {
setnewNote({ ...newNote, text: e.target.value });
}}
/>
</Modal>
);
}

View File

@@ -11,49 +11,49 @@ const errorLink = onError(
console.log("forward", forward);
//if (graphQLErrors) {
// User access token has expired
// if (graphQLErrors[0].message.includes("JWTExpired")) {
console.log("Got to the error check.");
if (access_token && access_token !== "undefined") {
// Let's refresh token through async request
return new Observable(observer => {
auth.currentUser
.getIdToken(true)
.then(function(idToken) {
if (!idToken) {
window.localStorage.removeItem("token");
return console.log("Refresh token has expired");
}
console.log("Got a new token", idToken);
window.localStorage.setItem("token", idToken);
// reset the headers
operation.setContext(({ headers = {} }) => ({
headers: {
// Re-add old headers
...headers,
// Switch out old access token for new one
authorization: idToken ? `Bearer ${idToken}` : ""
if (networkError.message.includes("JWTExpired")) {
console.log("Got to the error check.");
if (access_token && access_token !== "undefined") {
// Let's refresh token through async request
return new Observable(observer => {
auth.currentUser
.getIdToken(true)
.then(function(idToken) {
if (!idToken) {
window.localStorage.removeItem("token");
return console.log("Refresh token has expired");
}
}));
console.log("Got a new token", idToken);
window.localStorage.setItem("token", idToken);
const subscriber = {
next: observer.next.bind(observer),
error: observer.error.bind(observer),
complete: observer.complete.bind(observer)
};
console.log("About to resend the request.");
// Retry last failed request
forward(operation).subscribe(subscriber);
})
.catch(error => {
// No refresh or client token available, we force user to login
console.log("Hit an error.");
observer.error(error);
});
});
// reset the headers
operation.setContext(({ headers = {} }) => ({
headers: {
// Re-add old headers
...headers,
// Switch out old access token for new one
authorization: idToken ? `Bearer ${idToken}` : ""
}
}));
// const subscriber = {
// next: observer.next.bind(observer),
// error: observer.error.bind(observer),
// complete: observer.complete.bind(observer)
// };
console.log("About to resend the request.");
// Retry last failed request
forward(operation); //.subscribe(subscriber);
})
.catch(error => {
// No refresh or client token available, we force user to login
console.log("Hit an error.");
observer.error(error);
});
});
}
}
//}
//}
if (networkError) {
console.log(`[Network error]: ${networkError}`);

View File

@@ -30,27 +30,61 @@ export const GET_ALL_OPEN_JOBS = gql`
export const SUBSCRIPTION_ALL_OPEN_JOBS = gql`
subscription SUBSCRIPTION_ALL_OPEN_JOBS {
jobs {
id
updated_at
est_number
ro_number
job_status {
name
pit_owner_first_name
pit_owner_last_name
pit_owner_phone
pit_owner_email
owner {
id
allow_text_message
preferred_contact
}
scheduled_completion
scheduled_delivery
vehicle {
id
v_model_yr
v_make_desc
v_model_desc
v_color
plate_no
}
owner {
pit_vehicle_plate_no
actual_completion
actual_delivery
actual_in
est_number
id
ins_co_nm
ins_ct_fn
ins_ct_ln
ins_ph1
ins_ea
est_co_nm
est_ph1
est_ea
est_ct_fn
est_ct_ln
clm_no
clm_total
owner_owing
ro_number
scheduled_completion
scheduled_in
scheduled_delivery
job_status {
id
first_name
last_name
name
}
updated_at
claim_total
ded_amt
vehicle {
id
plate_no
v_vin
v_model_yr
v_model_desc
v_make_desc
v_color
}
}
}
@@ -200,6 +234,13 @@ export const QUERY_JOB_CARD_DETAILS = gql`
scheduled_completion
scheduled_in
scheduled_delivery
notes {
id
text
critical
private
created_at
}
job_status {
id
name

View File

@@ -0,0 +1,11 @@
import { gql } from "apollo-boost";
export const INSERT_NEW_NOTE = gql`
mutation INSERT_NEW_JOB($noteInput: [notes_insert_input!]!) {
insert_notes(objects: $noteInput) {
returning {
id
}
}
}
`;

View File

@@ -11,7 +11,8 @@
"out": "Out",
"na": "N/A",
"unknown": "Unknown",
"save": "Save"
"save": "Save",
"loading": "Loading..."
}
},
"menus": {
@@ -38,6 +39,23 @@
}
},
"vehicles": {
"fields": {
"plate_no": "License Plate"
}
},
"notes": {
"labels": {
"newnoteplaceholder": "Add a note..."
},
"fields": {
"critical": "Critical",
"private": "Private",
"text": "Contents"
}
},
"jobs": {
"labels": {
"cards": {
@@ -50,18 +68,23 @@
"notes": "Notes",
"damage": "Area of Damage",
"totals": "Totals",
"filehandler" : "File Handler",
"appraiser" : "Appraiser",
"estimator" : "Estimator"
"filehandler": "File Handler",
"appraiser": "Appraiser",
"estimator": "Estimator"
},
"no_owner": "No Owner",
"vehicle_info": "Vehicle"
},
"fields": {
"ro_number": "RO #",
"est_number": "Estimate Number",
"claim_total": "Claim Total",
"deductible": "Deductible"
"clm_total": "Claim Total",
"deductible": "Deductible",
"owner": "Owner",
"status": "Job Status",
"vehicle": "Vehicle",
"phone1": "Phone 1",
"clm_no": "Claim #",
"owner_owing": "Cust. Owes"
},
"successes": {
"save": "Record Saved",
@@ -72,7 +95,9 @@
"validationtitle": "Validation Error",
"validation": "Please ensure all fields are entered correctly.",
"saving": "Error encountered while saving record.",
"nojobselected": "No job is selected."
"nojobselected": "No job is selected.",
"noowner": "No owner associated.",
"novehicle": "No vehicle associated."
},
"actions": {
"addDocuments": "Add Job Documents",

View File

@@ -0,0 +1,3 @@
- args:
sql: ALTER TABLE "public"."jobs" DROP COLUMN "clm_total";
type: run_sql

View File

@@ -0,0 +1,3 @@
- args:
sql: ALTER TABLE "public"."jobs" ADD COLUMN "clm_total" numeric NULL;
type: run_sql

View File

@@ -0,0 +1,3 @@
- args:
sql: ALTER TABLE "public"."jobs" DROP COLUMN "owner_owing";
type: run_sql

View File

@@ -0,0 +1,3 @@
- args:
sql: ALTER TABLE "public"."jobs" ADD COLUMN "owner_owing" numeric NULL;
type: run_sql

View File

@@ -0,0 +1,120 @@
- args:
role: user
table:
name: jobs
schema: public
type: drop_insert_permission
- args:
permission:
check:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- ded_status
- inproduction
- asgn_date
- invoice_date
- claim_total
- ded_amt
- deductible
- federal_tax_rate
- local_tax_rate
- rate_atp
- rate_la1
- rate_la2
- rate_la3
- rate_la4
- rate_lab
- rate_lad
- rate_lae
- rate_laf
- rate_lag
- rate_lam
- rate_lar
- rate_las
- rate_lau
- rate_ma2s
- rate_ma2t
- rate_ma3s
- rate_mabl
- rate_macs
- rate_mahw
- rate_mapa
- rate_mash
- rate_matd
- state_tax_rate
- asgn_no
- asgn_type
- clm_no
- clm_ofc_id
- est_addr1
- est_addr2
- est_city
- est_co_nm
- est_ct_fn
- est_ct_ln
- est_ctry
- est_ea
- est_number
- est_ph1
- est_st
- est_zip
- ins_addr1
- ins_addr2
- ins_city
- ins_co_id
- ins_co_nm
- ins_ct_fn
- ins_ct_ln
- ins_ct_ph
- ins_ct_phx
- ins_ctry
- ins_ea
- ins_fax
- ins_faxx
- ins_memo
- ins_ph1
- ins_ph1x
- ins_ph2
- ins_ph2x
- ins_st
- ins_title
- ins_zip
- labor_rate_desc
- labor_rate_id
- pit_owner_email
- pit_owner_first_name
- pit_owner_last_name
- pit_owner_phone
- pit_vehicle_plate_no
- policy_no
- regie_number
- ro_number
- actual_completion
- actual_delivery
- actual_in
- scheduled_completion
- scheduled_delivery
- scheduled_in
- created_at
- updated_at
- id
- ownerid
- shopid
- statusid
- vehicleid
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: jobs
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,128 @@
- args:
role: user
table:
name: jobs
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
- shopid
- est_number
- ro_number
- ownerid
- vehicleid
- labor_rate_id
- labor_rate_desc
- rate_lab
- rate_lad
- rate_lae
- rate_lar
- rate_las
- rate_laf
- rate_lam
- rate_lag
- rate_atp
- rate_lau
- rate_la1
- rate_la2
- rate_la3
- rate_la4
- rate_mapa
- rate_mash
- rate_mahw
- rate_ma2s
- rate_ma3s
- rate_ma2t
- rate_mabl
- rate_macs
- rate_matd
- federal_tax_rate
- state_tax_rate
- local_tax_rate
- est_co_nm
- est_addr1
- est_addr2
- est_city
- est_st
- est_zip
- est_ctry
- est_ph1
- est_ea
- est_ct_ln
- est_ct_fn
- scheduled_in
- actual_in
- scheduled_completion
- actual_completion
- scheduled_delivery
- actual_delivery
- regie_number
- invoice_date
- claim_total
- deductible
- inproduction
- statusid
- pit_owner_first_name
- pit_owner_last_name
- pit_owner_phone
- pit_owner_email
- pit_vehicle_plate_no
- ins_co_id
- ins_co_nm
- ins_addr1
- ins_addr2
- ins_city
- ins_st
- ins_zip
- ins_ctry
- ins_ph1
- ins_ph1x
- ins_ph2
- ins_ph2x
- ins_fax
- ins_faxx
- ins_ct_ln
- ins_ct_fn
- ins_title
- ins_ct_ph
- ins_ct_phx
- ins_ea
- ins_memo
- policy_no
- ded_amt
- ded_status
- asgn_no
- asgn_date
- asgn_type
- clm_no
- clm_ofc_id
- date_estimated
- date_open
- date_scheduled
- date_invoiced
- date_closed
- date_exported
- clm_total
- owner_owing
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: jobs
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,118 @@
- args:
role: user
table:
name: jobs
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- ded_status
- inproduction
- asgn_date
- invoice_date
- claim_total
- ded_amt
- deductible
- federal_tax_rate
- local_tax_rate
- rate_atp
- rate_la1
- rate_la2
- rate_la3
- rate_la4
- rate_lab
- rate_lad
- rate_lae
- rate_laf
- rate_lag
- rate_lam
- rate_lar
- rate_las
- rate_lau
- rate_ma2s
- rate_ma2t
- rate_ma3s
- rate_mabl
- rate_macs
- rate_mahw
- rate_mapa
- rate_mash
- rate_matd
- state_tax_rate
- asgn_no
- asgn_type
- clm_no
- clm_ofc_id
- est_addr1
- est_addr2
- est_city
- est_co_nm
- est_ct_fn
- est_ct_ln
- est_ctry
- est_ea
- est_number
- est_ph1
- est_st
- est_zip
- ins_addr1
- ins_addr2
- ins_city
- ins_co_id
- ins_co_nm
- ins_ct_fn
- ins_ct_ln
- ins_ct_ph
- ins_ct_phx
- ins_ctry
- ins_ea
- ins_fax
- ins_faxx
- ins_memo
- ins_ph1
- ins_ph1x
- ins_ph2
- ins_ph2x
- ins_st
- ins_title
- ins_zip
- labor_rate_desc
- labor_rate_id
- pit_owner_email
- pit_owner_first_name
- pit_owner_last_name
- pit_owner_phone
- pit_vehicle_plate_no
- policy_no
- regie_number
- ro_number
- actual_completion
- actual_delivery
- actual_in
- scheduled_completion
- scheduled_delivery
- scheduled_in
- created_at
- updated_at
- id
- ownerid
- shopid
- statusid
- vehicleid
computed_fields: []
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: jobs
schema: public
type: create_select_permission

View File

@@ -0,0 +1,126 @@
- args:
role: user
table:
name: jobs
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- ded_status
- inproduction
- asgn_date
- invoice_date
- claim_total
- clm_total
- ded_amt
- deductible
- federal_tax_rate
- local_tax_rate
- owner_owing
- rate_atp
- rate_la1
- rate_la2
- rate_la3
- rate_la4
- rate_lab
- rate_lad
- rate_lae
- rate_laf
- rate_lag
- rate_lam
- rate_lar
- rate_las
- rate_lau
- rate_ma2s
- rate_ma2t
- rate_ma3s
- rate_mabl
- rate_macs
- rate_mahw
- rate_mapa
- rate_mash
- rate_matd
- state_tax_rate
- asgn_no
- asgn_type
- clm_no
- clm_ofc_id
- est_addr1
- est_addr2
- est_city
- est_co_nm
- est_ct_fn
- est_ct_ln
- est_ctry
- est_ea
- est_number
- est_ph1
- est_st
- est_zip
- ins_addr1
- ins_addr2
- ins_city
- ins_co_id
- ins_co_nm
- ins_ct_fn
- ins_ct_ln
- ins_ct_ph
- ins_ct_phx
- ins_ctry
- ins_ea
- ins_fax
- ins_faxx
- ins_memo
- ins_ph1
- ins_ph1x
- ins_ph2
- ins_ph2x
- ins_st
- ins_title
- ins_zip
- labor_rate_desc
- labor_rate_id
- pit_owner_email
- pit_owner_first_name
- pit_owner_last_name
- pit_owner_phone
- pit_vehicle_plate_no
- policy_no
- regie_number
- ro_number
- actual_completion
- actual_delivery
- actual_in
- created_at
- date_closed
- date_estimated
- date_exported
- date_invoiced
- date_open
- date_scheduled
- scheduled_completion
- scheduled_delivery
- scheduled_in
- updated_at
- id
- ownerid
- shopid
- statusid
- vehicleid
computed_fields: []
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: jobs
schema: public
type: create_select_permission

View File

@@ -0,0 +1,120 @@
- args:
role: user
table:
name: jobs
schema: public
type: drop_update_permission
- args:
permission:
columns:
- ded_status
- inproduction
- asgn_date
- invoice_date
- claim_total
- ded_amt
- deductible
- federal_tax_rate
- local_tax_rate
- rate_atp
- rate_la1
- rate_la2
- rate_la3
- rate_la4
- rate_lab
- rate_lad
- rate_lae
- rate_laf
- rate_lag
- rate_lam
- rate_lar
- rate_las
- rate_lau
- rate_ma2s
- rate_ma2t
- rate_ma3s
- rate_mabl
- rate_macs
- rate_mahw
- rate_mapa
- rate_mash
- rate_matd
- state_tax_rate
- asgn_no
- asgn_type
- clm_no
- clm_ofc_id
- est_addr1
- est_addr2
- est_city
- est_co_nm
- est_ct_fn
- est_ct_ln
- est_ctry
- est_ea
- est_number
- est_ph1
- est_st
- est_zip
- ins_addr1
- ins_addr2
- ins_city
- ins_co_id
- ins_co_nm
- ins_ct_fn
- ins_ct_ln
- ins_ct_ph
- ins_ct_phx
- ins_ctry
- ins_ea
- ins_fax
- ins_faxx
- ins_memo
- ins_ph1
- ins_ph1x
- ins_ph2
- ins_ph2x
- ins_st
- ins_title
- ins_zip
- labor_rate_desc
- labor_rate_id
- pit_owner_email
- pit_owner_first_name
- pit_owner_last_name
- pit_owner_phone
- pit_vehicle_plate_no
- policy_no
- regie_number
- ro_number
- actual_completion
- actual_delivery
- actual_in
- scheduled_completion
- scheduled_delivery
- scheduled_in
- created_at
- updated_at
- id
- ownerid
- shopid
- statusid
- vehicleid
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: jobs
schema: public
type: create_update_permission

View File

@@ -0,0 +1,128 @@
- args:
role: user
table:
name: jobs
schema: public
type: drop_update_permission
- args:
permission:
columns:
- ded_status
- inproduction
- asgn_date
- invoice_date
- claim_total
- clm_total
- ded_amt
- deductible
- federal_tax_rate
- local_tax_rate
- owner_owing
- rate_atp
- rate_la1
- rate_la2
- rate_la3
- rate_la4
- rate_lab
- rate_lad
- rate_lae
- rate_laf
- rate_lag
- rate_lam
- rate_lar
- rate_las
- rate_lau
- rate_ma2s
- rate_ma2t
- rate_ma3s
- rate_mabl
- rate_macs
- rate_mahw
- rate_mapa
- rate_mash
- rate_matd
- state_tax_rate
- asgn_no
- asgn_type
- clm_no
- clm_ofc_id
- est_addr1
- est_addr2
- est_city
- est_co_nm
- est_ct_fn
- est_ct_ln
- est_ctry
- est_ea
- est_number
- est_ph1
- est_st
- est_zip
- ins_addr1
- ins_addr2
- ins_city
- ins_co_id
- ins_co_nm
- ins_ct_fn
- ins_ct_ln
- ins_ct_ph
- ins_ct_phx
- ins_ctry
- ins_ea
- ins_fax
- ins_faxx
- ins_memo
- ins_ph1
- ins_ph1x
- ins_ph2
- ins_ph2x
- ins_st
- ins_title
- ins_zip
- labor_rate_desc
- labor_rate_id
- pit_owner_email
- pit_owner_first_name
- pit_owner_last_name
- pit_owner_phone
- pit_vehicle_plate_no
- policy_no
- regie_number
- ro_number
- actual_completion
- actual_delivery
- actual_in
- created_at
- date_closed
- date_estimated
- date_exported
- date_invoiced
- date_open
- date_scheduled
- scheduled_completion
- scheduled_delivery
- scheduled_in
- updated_at
- id
- ownerid
- shopid
- statusid
- vehicleid
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: jobs
schema: public
type: create_update_permission

View File

@@ -0,0 +1,3 @@
- args:
sql: DROP TABLE "public"."notes"
type: run_sql

View File

@@ -0,0 +1,21 @@
- args:
sql: CREATE EXTENSION IF NOT EXISTS pgcrypto;
type: run_sql
- args:
sql: "CREATE TABLE \"public\".\"notes\"(\"id\" uuid NOT NULL DEFAULT gen_random_uuid(),
\"created_at\" timestamptz NOT NULL DEFAULT now(), \"updated_at\" timestamptz
NOT NULL DEFAULT now(), \"jobid\" uuid NOT NULL, \"text\" text, \"created_by\"
text NOT NULL, \"critical\" boolean NOT NULL DEFAULT false, \"private\" boolean
NOT NULL DEFAULT false, PRIMARY KEY (\"id\") , FOREIGN KEY (\"jobid\") REFERENCES
\"public\".\"jobs\"(\"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_notes_updated_at\"\nBEFORE
UPDATE ON \"public\".\"notes\"\nFOR EACH ROW\nEXECUTE PROCEDURE \"public\".\"set_current_timestamp_updated_at\"();\nCOMMENT
ON TRIGGER \"set_public_notes_updated_at\" ON \"public\".\"notes\" \nIS 'trigger
to set value of column \"updated_at\" to current timestamp on row update';\n"
type: run_sql
- args:
name: notes
schema: public
type: add_existing_table_or_view

View File

@@ -0,0 +1,12 @@
- args:
relationship: notes
table:
name: jobs
schema: public
type: drop_relationship
- args:
relationship: job
table:
name: notes
schema: public
type: drop_relationship

View File

@@ -0,0 +1,20 @@
- args:
name: notes
table:
name: jobs
schema: public
using:
foreign_key_constraint_on:
column: jobid
table:
name: notes
schema: public
type: create_array_relationship
- args:
name: job
table:
name: notes
schema: public
using:
foreign_key_constraint_on: jobid
type: create_object_relationship

View File

@@ -0,0 +1,6 @@
- args:
role: user
table:
name: notes
schema: public
type: drop_insert_permission

View File

@@ -0,0 +1,31 @@
- args:
permission:
allow_upsert: true
check:
job:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- id
- created_at
- updated_at
- jobid
- text
- created_by
- critical
- private
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: notes
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,6 @@
- args:
role: user
table:
name: notes
schema: public
type: drop_select_permission

View File

@@ -0,0 +1,28 @@
- args:
permission:
allow_aggregations: false
columns:
- critical
- private
- created_by
- text
- created_at
- updated_at
- id
- jobid
filter:
job:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
limit: null
role: user
table:
name: notes
schema: public
type: create_select_permission

View File

@@ -0,0 +1,6 @@
- args:
role: user
table:
name: notes
schema: public
type: drop_update_permission

View File

@@ -0,0 +1,30 @@
- args:
permission:
columns:
- critical
- private
- created_by
- text
- created_at
- updated_at
- id
- jobid
filter:
job:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: notes
schema: public
type: create_update_permission

View File

@@ -0,0 +1,6 @@
- args:
role: user
table:
name: notes
schema: public
type: drop_delete_permission

View File

@@ -0,0 +1,17 @@
- args:
permission:
filter:
job:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: notes
schema: public
type: create_delete_permission

View File

@@ -0,0 +1,4 @@
- args:
sql: "\n alter table \"public\".\"notes\" drop constraint \"notes_created_by_fkey\"\n
\ "
type: run_sql

View File

@@ -0,0 +1,6 @@
- args:
sql: "\n alter table \"public\".\"notes\"\n add constraint
\"notes_created_by_fkey\"\n foreign key (\"created_by\")\n references
\"public\".\"users\"\n (\"email\") on update cascade on delete cascade;\n
\ "
type: run_sql