end of day commit for users and suppliers authenticated handling

This commit is contained in:
2012-08-25 15:55:56 +02:00
parent b7c57d41ce
commit e56badcbf8
29 changed files with 435 additions and 582 deletions
+92 -29
View File
@@ -18,7 +18,10 @@
xml:space="preserve"
style="fill-rule:evenodd"
inkscape:version="0.48.2 r9819"
sodipodi:docname="smartphone.svg"><sodipodi:namedview
sodipodi:docname="smartphone.svg"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999"><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
@@ -40,7 +43,7 @@
inkscape:current-layer="svg2" /><metadata
id="metadata475"><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>
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
<defs
id="defs4"><style
type="text/css"
@@ -451,7 +454,8 @@
x1="167.96001"
y1="299.25299"
x2="373.21799"
y2="299.25299" /><linearGradient
y2="299.25299"
gradientTransform="translate(-497.67221,17.988152)" /><linearGradient
inkscape:collect="always"
xlink:href="#id9"
id="linearGradient3167"
@@ -584,64 +588,115 @@
inkscape:connector-curvature="0"
style="fill:#dededd;fill-rule:nonzero;stroke:#1f1a17;stroke-width:0.72130001"
id="path265"
d="m 28.2317,0.36065 335.29,0 c 15.4405,0 27.871,12.4302 27.871,27.8707 l 0,712.231 c 0,15.4416 -12.4305,27.8707 -27.871,27.8707 l -335.29,0 c -15.4405,0 -27.871,-12.4291 -27.871,-27.8707 l 0,-712.231 c 0,-15.4405 12.4305,-27.8707 27.871,-27.8707 z m 0,0 z" /><path
d="m 28.2317,0.36065 335.29,0 c 15.4405,0 27.871,12.4302 27.871,27.8707 l 0,712.231 c 0,15.4416 -12.4305,27.8707 -27.871,27.8707 l -335.29,0 c -15.4405,0 -27.871,-12.4291 -27.871,-27.8707 l 0,-712.231 c 0,-15.4405 12.4305,-27.8707 27.871,-27.8707 z m 0,0 z"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><path
inkscape:connector-curvature="0"
style="fill:#1f1a17;fill-rule:nonzero;stroke:#1f1a17;stroke-width:0.72130001"
id="path267"
d="m 33.0878,6.02105 326.845,0 c 15.442,0 27.8721,12.4302 27.8721,27.8721 l 0,702.733 c 0,15.4405 -12.4302,27.871 -27.8721,27.871 l -326.845,0 c -15.4416,0 -27.8707,-12.4305 -27.8707,-27.871 l 0,-702.733 c 0,-15.442 12.4291,-27.8721 27.8707,-27.8721 z m 0,0 z" /><path
d="m 33.0878,6.02105 326.845,0 c 15.442,0 27.8721,12.4302 27.8721,27.8721 l 0,702.733 c 0,15.4405 -12.4302,27.871 -27.8721,27.871 l -326.845,0 c -15.4416,0 -27.8707,-12.4305 -27.8707,-27.871 l 0,-702.733 c 0,-15.442 12.4291,-27.8721 27.8707,-27.8721 z m 0,0 z"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><path
inkscape:connector-curvature="0"
style="fill:#1f1a17;fill-rule:nonzero;stroke:#4d4948;stroke-width:0.72130001"
id="path269"
d="m 229.264,715.017 c 0,20.4914 -16.6137,37.1051 -37.1051,37.1051 -20.4954,0 -37.1102,-16.6137 -37.1102,-37.1051 0,-20.4954 16.6148,-37.1102 37.1102,-37.1102 20.4914,0 37.1051,16.6148 37.1051,37.1102 z m 0,0 z" /><path
d="m 229.264,715.017 c 0,20.4914 -16.6137,37.1051 -37.1051,37.1051 -20.4954,0 -37.1102,-16.6137 -37.1102,-37.1051 0,-20.4954 16.6148,-37.1102 37.1102,-37.1102 20.4914,0 37.1051,16.6148 37.1051,37.1102 z m 0,0 z"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient3284);fill-rule:nonzero;stroke:#1f1a17;stroke-width:0.72130001"
id="path271"
d="m 228.028,723.664 c -22.2067,8.79157 -46.2707,9.67732 -72.1834,2.66448 4.47314,14.4466 19.0892,24.447 35.7437,24.447 17.7865,0 33.0846,-11.3771 36.4397,-27.1115 z m 0,0 z" /><path
d="m 228.028,723.664 c -22.2067,8.79157 -46.2707,9.67732 -72.1834,2.66448 4.47314,14.4466 19.0892,24.447 35.7437,24.447 17.7865,0 33.0846,-11.3771 36.4397,-27.1115 z m 0,0 z"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><path
inkscape:connector-curvature="0"
style="fill:none;stroke:#c2c1c1;stroke-width:0.72130001"
id="path273"
d="m 180.689,701.975 22.9355,0 c 0.86917,0 1.57532,0.7011 1.57532,1.57135 l 0,22.9355 c 0,0.87025 -0.70615,1.57532 -1.57532,1.57532 l -22.9355,0 c -0.87025,0 -1.57135,-0.70507 -1.57135,-1.57532 l 0,-22.9355 c 0,-0.87025 0.7011,-1.57135 1.57135,-1.57135 z m 0,0 z" /><path
d="m 180.689,701.975 22.9355,0 c 0.86917,0 1.57532,0.7011 1.57532,1.57135 l 0,22.9355 c 0,0.87025 -0.70615,1.57532 -1.57532,1.57532 l -22.9355,0 c -0.87025,0 -1.57135,-0.70507 -1.57135,-1.57532 l 0,-22.9355 c 0,-0.87025 0.7011,-1.57135 1.57135,-1.57135 z m 0,0 z"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><path
inkscape:connector-curvature="0"
style="fill:#1f1a17;fill-rule:nonzero;stroke:#383431;stroke-width:0.72130001"
id="path281"
d="m 160.769,53.8415 71.4671,0 c 1.55584,0 2.80802,1.25326 2.80802,2.80802 l 0,5.39316 c 0,1.55476 -1.25218,2.80802 -2.80802,2.80802 l -71.4671,0 c -1.55476,0 -2.80802,-1.25326 -2.80802,-2.80802 l 0,-5.39316 c 0,-1.55476 1.25326,-2.80802 2.80802,-2.80802 z m 0,0 z" /><path
d="m 160.769,53.8415 71.4671,0 c 1.55584,0 2.80802,1.25326 2.80802,2.80802 l 0,5.39316 c 0,1.55476 -1.25218,2.80802 -2.80802,2.80802 l -71.4671,0 c -1.55476,0 -2.80802,-1.25326 -2.80802,-2.80802 l 0,-5.39316 c 0,-1.55476 1.25326,-2.80802 2.80802,-2.80802 z m 0,0 z"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><path
inkscape:connector-curvature="0"
style="fill:#72706f;fill-rule:nonzero;stroke:#383431;stroke-width:0.72130001"
id="path283"
d="m 160.372,62.2103 74.9063,0 -2.05751,1.65538 c -0.75051,0.606974 -1.65502,1.09421 -2.65402,1.42637 -0.95897,0.313044 -2.00738,0.487238 -3.09654,0.487238 l -61.92,0 c -1.08772,0 -2.13757,-0.174194 -3.09185,-0.487238 -1.00369,-0.332159 -1.9082,-0.819397 -2.65763,-1.42637 l -2.05859,-1.65538 2.62986,0 z m 0,0 z" /><path
d="m 160.372,62.2103 74.9063,0 -2.05751,1.65538 c -0.75051,0.606974 -1.65502,1.09421 -2.65402,1.42637 -0.95897,0.313044 -2.00738,0.487238 -3.09654,0.487238 l -61.92,0 c -1.08772,0 -2.13757,-0.174194 -3.09185,-0.487238 -1.00369,-0.332159 -1.9082,-0.819397 -2.65763,-1.42637 l -2.05859,-1.65538 2.62986,0 z m 0,0 z"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><path
inkscape:connector-curvature="0"
style="fill:#ffffff;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.27481499"
id="path285"
d="m 134.468,132.898 c 0,1.0293 -0.8295,1.86384 -1.85879,1.86384 -1.02785,0 -1.85735,-0.83454 -1.85735,-1.86384 0,-1.02425 0.82949,-1.85879 1.85735,-1.85879 1.0293,0 1.85879,0.83454 1.85879,1.85879 z m 0,0 z" /><path
d="m 134.468,132.898 c 0,1.0293 -0.8295,1.86384 -1.85879,1.86384 -1.02785,0 -1.85735,-0.83454 -1.85735,-1.86384 0,-1.02425 0.82949,-1.85879 1.85735,-1.85879 1.0293,0 1.85879,0.83454 1.85879,1.85879 z m 0,0 z"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><path
inkscape:connector-curvature="0"
style="fill:none;stroke:#ffffff;stroke-width:0.72130001"
id="path287"
d="m 125.066,127.202 c 4.50777,-2.32547 9.30802,-2.32547 14.3972,0" /><path
d="m 125.066,127.202 c 4.50777,-2.32547 9.30802,-2.32547 14.3972,0"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><path
inkscape:connector-curvature="0"
style="fill:none;stroke:#ffffff;stroke-width:0.72130001"
id="path289"
d="m 123.908,124.135 c 5.39208,-2.78242 11.1376,-2.78242 17.2254,0" /><path
d="m 123.908,124.135 c 5.39208,-2.78242 11.1376,-2.78242 17.2254,0"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><path
inkscape:connector-curvature="0"
style="fill:none;stroke:#ffffff;stroke-width:0.72130001"
id="path291"
d="m 127.452,129.583 c 2.98582,-1.54575 6.1718,-1.54575 9.54713,0" /><polygon
d="m 127.452,129.583 c 2.98582,-1.54575 6.1718,-1.54575 9.54713,0"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><polygon
style="fill:#ffffff;fill-rule:nonzero"
id="polygon293"
points="45.5425,134.762 45.5425,124.732 49.2652,124.732 49.2652,134.762 " /><polygon
points="45.5425,134.762 45.5425,124.732 49.2652,124.732 49.2652,134.762 "
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><polygon
style="fill:#ffffff;fill-rule:nonzero"
id="polygon295"
points="41.0791,134.762 41.0791,126.218 44.8364,126.218 44.8364,134.762 " /><polygon
points="41.0791,134.762 41.0791,126.218 44.8364,126.218 44.8364,134.762 "
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><polygon
style="fill:#ffffff;fill-rule:nonzero"
id="polygon297"
points="36.6518,134.761 36.6518,127.311 40.3744,127.311 40.3744,134.761 " /><polygon
points="36.6518,134.761 36.6518,127.311 40.3744,127.311 40.3744,134.761 "
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><polygon
style="fill:#ffffff;fill-rule:nonzero"
id="polygon299"
points="32.1884,134.762 32.1884,128.693 35.9456,128.693 35.9456,134.762 " /><polygon
points="32.1884,134.762 32.1884,128.693 35.9456,128.693 35.9456,134.762 "
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><polygon
style="fill:#ffffff;fill-rule:nonzero"
id="polygon301"
points="27.7596,134.762 27.7596,132.097 31.4822,132.097 31.4822,134.762 " /><g
points="27.7596,134.762 27.7596,132.097 31.4822,132.097 31.4822,134.762 "
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><g
id="g303"
transform="translate(1.30588,-240.887)">
transform="translate(1.30588,-240.887)"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999">
<text
style="font-size:14.24960041px;font-weight:normal;fill:#ffffff;font-family:Arial"
id="text305"
@@ -658,7 +713,10 @@
</g><g
id="g309"
transform="translate(123.043,-240.887)">
transform="translate(123.043,-240.887)"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999">
<text
style="font-size:15.82499981px;font-weight:normal;fill:#ffffff;font-family:Arial"
id="text311"
@@ -669,17 +727,22 @@
</g><polygon
style="fill:#ffffff;fill-rule:nonzero"
id="polygon313"
points="348.288,134.762 348.288,124.583 367.894,124.583 367.894,134.762 " /><polygon
points="348.288,134.762 348.288,124.583 367.894,124.583 367.894,134.762 "
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><polygon
style="fill:#ffffff;fill-rule:nonzero"
id="polygon315"
points="368.332,132.754 368.332,126.492 371.07,126.492 371.07,132.754 " /><text
points="368.332,132.754 368.332,126.492 371.07,126.492 371.07,132.754 "
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999" /><text
style="font-size:15.90359974px;font-weight:normal;fill:#ffffff;font-family:Arial"
id="text469"
y="133.63699"
x="220.118">pm</text>
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient3156);fill-opacity:0.50196084;fill-rule:nonzero"
id="path471"
d="M 373.218,479.09 167.96,119.414 l 205.258,0 0,359.676 z m 0,0 z" />
x="220.118"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/smartphone.png"
inkscape:export-xdpi="82.529999"
inkscape:export-ydpi="82.529999">pm</text>
</svg>

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 21 KiB

+54 -313
View File
@@ -14,8 +14,8 @@
height="890"
id="svg2"
version="1.1"
inkscape:version="0.48.0 r9654"
sodipodi:docname="zt-180_assembled-view.svg">
inkscape:version="0.48.2 r9819"
sodipodi:docname="tablet.svg">
<defs
id="defs4">
<linearGradient
@@ -453,11 +453,11 @@
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="971"
inkscape:window-x="1280"
inkscape:window-width="1436"
inkscape:window-height="856"
inkscape:window-x="4"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
@@ -490,7 +490,10 @@
x="0"
y="-774"
rx="61"
ry="61" />
ry="61"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959" />
<rect
style="color:#000000;fill:#e9e9e9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4678-9"
@@ -499,7 +502,10 @@
x="3"
y="-771"
rx="59"
ry="59" />
ry="59"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959" />
<rect
style="color:#000000;fill:#131313;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4678-9-1"
@@ -508,7 +514,10 @@
x="12"
y="-764"
rx="52"
ry="52" />
ry="52"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959" />
<rect
style="color:#000000;fill:url(#linearGradient4760);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4678-9-1-4"
@@ -517,30 +526,36 @@
x="15"
y="-761"
rx="49"
ry="49" />
<path
style="color:#000000;fill:url(#linearGradient4803);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 275.5,-761 904.5,0 c 27.146,0 49,21.854 49,49 l 0,602.5 z"
id="rect4678-9-1-4-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csscc" />
ry="49"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959" />
<rect
style="color:#000000;fill:#424242;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4734"
width="1024"
height="600"
x="93"
y="-657" />
y="-657"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959" />
<rect
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4734-2"
width="1020"
height="596"
x="95"
y="-655" />
y="-655"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959" />
<g
id="g4875"
transform="translate(-1.4377202,81.437725)">
transform="translate(-1.4377202,81.437725)"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959">
<path
transform="matrix(1.1245554,0,0,1.1245554,-178.91576,-768.16833)"
d="m 1244.8615,292.70975 c 0,16.20675 -13.1381,29.34493 -29.3449,29.34493 -16.2068,0 -29.3449,-13.13818 -29.3449,-29.34493 0,-16.20676 13.1381,-29.34493 29.3449,-29.34493 16.2068,0 29.3449,13.13817 29.3449,29.34493 z"
@@ -576,319 +591,45 @@
d="m 62,-771 c -32.686,0 -59,26.314 -59,59 L 3,-4 c 0,32.686 26.314,59 59,59 l 1120,0 c 32.686,0 59,-26.314 59,-59 l 0,-708 c 0,-32.686 -26.314,-59 -59,-59 z m 2,5 1118,0 c 28.808,0 54,23.192 54,52 l 0,710 c 0,28.808 -25.192,56 -54,56 L 64,52 C 35.192,52 8,24.808 8,-4 l 0,-708 c 0,-28.808 27.192,-54 56,-54 z"
id="rect4678-9-16"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssssssssssss" />
sodipodi:nodetypes="ssssssssssssssssss"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959" />
<path
style="color:#000000;fill:url(#radialGradient5010);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 62,-771 c -32.686,0 -59,26.314 -59,59 L 3,-4 c 0,32.686 26.314,59 59,59 l 1120,0 c 32.686,0 59,-26.314 59,-59 l 0,-708 c 0,-32.686 -26.314,-59 -59,-59 z m -2,3 1124,0 c 28.808,0 52,23.192 52,52 l 0,716 c 0,28.808 -23.192,52 -52,52 L 60,52 C 31.192,52 8,28.808 8,0 l 0,-716 c 0,-28.808 23.192,-52 52,-52 z"
id="rect4678-9-16-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssssssssssss" />
sodipodi:nodetypes="ssssssssssssssssss"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959" />
<path
style="color:#000000;fill:url(#linearGradient5055);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 62,-771 c -32.686,0 -59,26.314 -59,59 L 3,-4 c 0,32.686 26.314,61 59,61 l 1120,0 c 32.686,0 59,-28.314 59,-61 l 0,-708 c 0,-32.686 -26.314,-59 -59,-59 z m -2,3 1124,0 c 28.808,0 52,23.192 52,52 l 0,716 c 0,28.808 -23.192,52 -52,52 L 60,52 C 31.192,52 8,28.808 8,0 l 0,-716 c 0,-28.808 23.192,-52 52,-52 z"
id="rect4678-9-16-0-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssssssssssss" />
sodipodi:nodetypes="ssssssssssssssssss"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959" />
<path
style="color:#000000;fill:url(#radialGradient5025);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 62,-771 c -32.686,0 -59,26.314 -59,59 L 3,-4 c 0,32.686 26.314,59 59,59 l 1120,0 c 32.686,0 59,-26.314 59,-59 l 0,-708 c 0,-32.686 -26.314,-59 -59,-59 z m -2,3 1124,0 c 28.808,0 52.1618,23.1924 52,52 l -4,712 c -0.1618,28.80755 -23.1921,51.89711 -52,52 L 60,52 C 31.192184,52.10289 8,28.808 8,0 l 0,-716 c 0,-28.808 23.192,-52 52,-52 z"
id="rect4678-9-16-0-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssssssssssss" />
sodipodi:nodetypes="ssssssssssssssssss"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959" />
<path
style="color:#000000;fill:url(#radialGradient5040);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 62,-771 c -32.686,0 -59,26.314 -59,59 L 3,-4 c 0,32.686 26.314,59 59,59 l 1120,0 c 32.686,0 59,-26.314 59,-59 l 0,-708 c 0,-32.686 -26.314,-59 -59,-59 z m -2,3 1124,0 c 28.808,0 52,23.192 52,52 l 0,716 c 0,28.808 -23.192,52 -52,52 L 60,52 C 31.192,52 10,28.808 10,0 l 0,-716 c 0,-28.808 21.192,-52 50,-52 z"
id="rect4678-9-16-0-42"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssssssssssss" />
<g
id="g5389"
transform="translate(0,-832)">
<g
style="display:none"
transform="translate(-32,-229.36218)"
id="layer1"
inkscape:label="pict">
<image
width="1244"
height="892"
xlink:href="file:///home/leon/_DATA/gnu/hard/ZT-180%20Android%20Tablet/skin/zt-180-hor.png"
id="image3073"
x="32"
y="229.36218" />
</g>
<g
inkscape:label="draw"
id="layer2-4">
<g
transform="translate(0,60)"
id="g4016">
<rect
style="color:#000000;fill:url(#linearGradient3883);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3856"
width="1244"
height="40"
x="0"
y="-42"
rx="4"
ry="4" />
<path
style="color:#000000;fill:url(#radialGradient4022);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 622,-60 c 603.2302,0 618,18 618,18 L 4,-42 c 0,0 14.769786,-18 618,-18 z"
id="rect3856-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="zccz" />
<path
style="color:#000000;fill:#000000;fill-opacity:0.11917102;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 1244,-6 c 0,2.216 -1.784,4 -4,4 L 4,-2 C 1.784,-2 0,-3.784 0,-6 z"
id="rect3856-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csscc" />
<path
style="color:#000000;fill:#ffffff;fill-opacity:0.26943006;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 1244,-38 c 0,-2.216 -1.784,-4 -4,-4 L 4,-42 c -2.216,0 -4,1.784 -4,4 z"
id="rect3856-3-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csscc" />
</g>
<g
transform="translate(-0.21961,7.353554)"
id="g4110-2">
<path
style="color:#000000;fill:#e2e2e2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 517.43841,17.396446 c 0.0103,0.08266 0.0312,0.164456 0.0312,0.25 l 0,14 c 0,1.108 -0.892,2 -2,2 l -69,0 c -0.0855,0 -0.16734,-0.02093 -0.25,-0.03125 0.54908,0.62744 1.3469,1.03125 2.25,1.03125 l 67,0 c 1.662,0 3,-1.338 3,-3 l 0,-12 c 0,-0.903101 -0.40381,-1.700917 -1.03125,-2.25 z"
id="rect4024-2-6"
inkscape:connector-curvature="0" />
<rect
style="color:#000000;fill:#1e1e1e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4090-6"
width="63.75"
height="7.75"
x="451.2196"
y="21.896446"
rx="1"
ry="1" />
<rect
style="color:#000000;fill:#444444;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4090-9-6"
width="49.75"
height="4.75"
x="458.2196"
y="24.896446"
rx="0.78039217"
ry="0.61290324" />
<path
style="color:#000000;fill:#c8c8c8;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 447.25091,34.646446 c -0.0103,-0.08266 -0.0312,-0.164456 -0.0312,-0.25 l 0,-14 c 0,-1.108 0.892,-2 2,-2 l 69,0 c 0.0855,0 0.16734,0.02093 0.25,0.03125 -0.54913,-0.62744 -1.34695,-1.03125 -2.25005,-1.03125 l -67,0 c -1.662,0 -3,1.338 -3,3 l 0,12 c 0,0.903101 0.40381,1.700917 1.03125,2.25 z"
id="rect4024-2-6-2"
inkscape:connector-curvature="0" />
</g>
<rect
ry="3"
rx="3"
y="29.5"
x="526.5"
height="11"
width="5"
id="rect4116"
style="color:#000000;fill:url(#radialGradient4261);fill-opacity:1;fill-rule:nonzero;stroke:#cfcfcf;stroke-width:1;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<rect
ry="3"
rx="3"
y="29.5"
x="534.5"
height="11"
width="5"
id="rect4116-7"
style="color:#000000;fill:url(#radialGradient4141-4);fill-opacity:1;fill-rule:nonzero;stroke:#cfcfcf;stroke-width:1;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<g
transform="translate(0,47)"
id="g4356">
<rect
style="color:#000000;fill:#c8c8c8;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4290"
width="59.431141"
height="22.25"
x="657"
y="-21.25"
rx="11.191579"
ry="11.125" />
<rect
style="color:#000000;fill:#454545;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4290-7"
width="56.111511"
height="19.75"
x="658.65979"
y="-20"
rx="10.566453"
ry="9.875" />
<rect
style="color:#000000;fill:#616161;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4290-7-4"
width="52.347717"
height="17.678572"
x="660.54169"
y="-18.964287"
rx="9.857687"
ry="8.8392859" />
<path
sodipodi:type="arc"
style="color:#000000;fill:url(#radialGradient4363);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path4328-1"
sodipodi:cx="684.125"
sodipodi:cy="-10.375"
sodipodi:rx="4.125"
sodipodi:ry="4.125"
d="m 688.25,-10.375 c 0,2.2781746 -1.84683,4.125 -4.125,4.125 -2.27817,0 -4.125,-1.8468254 -4.125,-4.125 0,-2.278175 1.84683,-4.125 4.125,-4.125 2.27817,0 4.125,1.846825 4.125,4.125 z"
transform="matrix(1.5794307,0,0,1.3030303,-393.81246,3.3939394)" />
<path
sodipodi:type="arc"
style="color:#000000;fill:#686868;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path4328"
sodipodi:cx="684.125"
sodipodi:cy="-10.375"
sodipodi:rx="4.125"
sodipodi:ry="4.125"
d="m 688.25,-10.375 c 0,2.2781746 -1.84683,4.125 -4.125,4.125 -2.27817,0 -4.125,-1.8468254 -4.125,-4.125 0,-2.278175 1.84683,-4.125 4.125,-4.125 2.27817,0 4.125,1.846825 4.125,4.125 z"
transform="matrix(1.2121212,0,0,1,-142.52685,0.25)" />
</g>
<g
transform="translate(-0.34375,27.09375)"
id="g4467">
<path
style="fill:#c2c2c2;fill-opacity:1;stroke:none"
d="m 774.65625,-3.9375 c -1.33604,0 -2.29162,0.563876 -2.96875,1.21875 l -4.125,4 C 766.91609,1.906396 766.34375,2.643917 766.34375,3.5 l 0,6.5625 c 0,2.103777 1.53455,2.84375 2.84375,2.84375 l 37.71875,0 c 1.3092,0 2.84375,-0.739973 2.84375,-2.84375 l 0,-6.5625 c 0,-0.856083 -0.60359,-1.593604 -1.25,-2.21875 l -4.125,-4 c -0.67713,-0.654874 -1.60146,-1.21875 -2.9375,-1.21875 z"
id="path4365"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sccssssssccss" />
<path
style="fill:#2d2d2d;fill-opacity:1;stroke:none"
d="m 775.53933,-2.9652282 c -1.24793,0 -2.14049,0.4987788 -2.77297,1.0780502 l -3.85296,3.538216 c -0.60378,0.5529754 -1.13838,1.2053525 -1.13838,1.9626042 l 0,5.8048855 c 0,1.8609043 1.43335,2.5154503 2.65621,2.5154503 l 35.23129,0 c 1.22286,0 2.65621,-0.654546 2.65621,-2.5154503 l 0,-5.8048855 c 0,-0.7572517 -0.56378,-1.4096288 -1.16757,-1.9626042 l -3.85296,-3.538216 c -0.63248,-0.5792714 -1.49585,-1.0780502 -2.74378,-1.0780502 z"
id="path4365-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sccssssssccss" />
<path
inkscape:connector-curvature="0"
style="color:#000000;fill:#444444;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 775.53125,-2.96875 c -0.57135,0 -1.04246,0.1399685 -1.46875,0.3125 0.31519,2.26319549 1.87842,5.75 3.78125,5.75 l 20.40625,0 c 1.90283,0 3.46606,-3.48680451 3.78125,-5.75 -0.42629,-0.1725315 -0.8974,-0.3125 -1.46875,-0.3125 l -25.03125,0 z"
id="rect4404" />
<path
inkscape:connector-curvature="0"
style="color:#000000;fill:#444444;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 778.46875,8.21875 c -1.81523,0 -3.30522,1.793811 -3.5625,3.71875 l 26.28125,0 c -0.25728,-1.924939 -1.74727,-3.71875 -3.5625,-3.71875 l -19.15625,0 z"
id="rect4404-8" />
</g>
<g
id="g4652">
<rect
style="color:#000000;fill:none;stroke:#c9c9c9;stroke-width:0.87128627;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4473"
width="8.1287136"
height="6.1287136"
x="820.43567"
y="27.435644"
rx="0.60415089"
ry="0.60100937" />
<rect
style="color:#000000;fill:none;stroke:#c9c9c9;stroke-width:0.87128627;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4473-5"
width="8.1287136"
height="6.1287136"
x="836.43567"
y="27.435644"
rx="0.60415089"
ry="0.60100937" />
<rect
style="color:#000000;fill:none;stroke:#c9c9c9;stroke-width:0.87128627;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4473-5-4"
width="8.1287136"
height="6.1287136"
x="828.43567"
y="38.435642"
rx="0.60415089"
ry="0.60100937" />
<path
style="fill:none;stroke:#c9c9c9;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 824.00003,33.625 0,2.375 17,0 0,-2.5"
id="path4515"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#c9c9c9;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 832.50003,36.113514 0,2.386486"
id="path4517"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(-0.53992,7.602922)"
id="g4626">
<path
style="color:#000000;fill:#c8c8c8;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 966.33909,19.798727 c 0,0 26.11947,1.000273 39.17921,1.000273 13.0597,0 39.1792,-1.000273 39.1792,-1.000273 5.4288,0 9.7992,4.370432 9.7992,9.799175 0,5.428743 -4.3704,9.799176 -9.7992,9.799176 0,0 -26.1195,-1.000078 -39.1792,-1.000078 -13.05974,0 -39.17921,1.000078 -39.17921,1.000078 -5.42874,0 -9.79917,-4.370433 -9.79917,-9.799176 0,-5.428743 4.37043,-9.799175 9.79917,-9.799175 z"
id="rect4290-79"
inkscape:connector-curvature="0"
sodipodi:nodetypes="szssszsss" />
<path
style="color:#000000;fill:#454545;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 966.73635,20.899759 c 0,0 25.85462,1.000241 38.78195,1.000241 12.9273,0 38.7819,-1.000241 38.7819,-1.000241 4.8188,0 8.6981,3.879372 8.6981,8.698144 0,4.818772 -3.8793,8.698144 -8.6981,8.698144 0,0 -25.8546,-1.000047 -38.7819,-1.000047 -12.92733,0 -38.78195,1.000047 -38.78195,1.000047 -4.81877,0 -8.69814,-3.879372 -8.69814,-8.698144 0,-4.818772 3.87937,-8.698144 8.69814,-8.698144 z"
id="rect4290-7-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="szssszsss" />
<path
style="color:#000000;fill:#616161;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 968.39548,21.812042 c 0,0 24.74847,0.999958 37.12272,0.999958 12.3742,0 37.1227,-0.999958 37.1227,-0.999958 4.3134,0 7.7859,3.472494 7.7859,7.785862 0,4.313367 -3.4725,7.785861 -7.7859,7.785861 0,0 -24.7485,-0.999765 -37.1227,-0.999765 -12.37425,0 -37.12272,0.999765 -37.12272,0.999765 -4.31337,0 -7.78586,-3.472494 -7.78586,-7.785861 0,-4.313368 3.47249,-7.785862 7.78586,-7.785862 z"
id="rect4290-7-4-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="szssszsss" />
<g
id="g4580">
<path
transform="matrix(1.2197818,0,0,1.0063199,135.67978,40.038472)"
d="m 688.25,-10.375 c 0,2.2781746 -1.84683,4.125 -4.125,4.125 -2.27817,0 -4.125,-1.8468254 -4.125,-4.125 0,-2.278175 1.84683,-4.125 4.125,-4.125 2.27817,0 4.125,1.846825 4.125,4.125 z"
sodipodi:ry="4.125"
sodipodi:rx="4.125"
sodipodi:cy="-10.375"
sodipodi:cx="684.125"
id="path4328-1-3"
style="color:#000000;fill:url(#radialGradient4637);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
<path
transform="matrix(0.93611155,0,0,0.77229203,329.74564,37.610434)"
d="m 688.25,-10.375 c 0,2.2781746 -1.84683,4.125 -4.125,4.125 -2.27817,0 -4.125,-1.8468254 -4.125,-4.125 0,-2.278175 1.84683,-4.125 4.125,-4.125 2.27817,0 4.125,1.846825 4.125,4.125 z"
sodipodi:ry="4.125"
sodipodi:rx="4.125"
sodipodi:cy="-10.375"
sodipodi:cx="684.125"
id="path4328-6"
style="color:#000000;fill:#686868;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
</g>
<g
id="g4580-4"
transform="matrix(-1,0,0,1,2011.0364,0)">
<path
transform="matrix(1.2197818,0,0,1.0063199,135.67978,40.038472)"
d="m 688.25,-10.375 c 0,2.2781746 -1.84683,4.125 -4.125,4.125 -2.27817,0 -4.125,-1.8468254 -4.125,-4.125 0,-2.278175 1.84683,-4.125 4.125,-4.125 2.27817,0 4.125,1.846825 4.125,4.125 z"
sodipodi:ry="4.125"
sodipodi:rx="4.125"
sodipodi:cy="-10.375"
sodipodi:cx="684.125"
id="path4328-1-3-5"
style="color:#000000;fill:url(#radialGradient4639);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
<path
transform="matrix(0.93611155,0,0,0.77229203,329.74564,37.610434)"
d="m 688.25,-10.375 c 0,2.2781746 -1.84683,4.125 -4.125,4.125 -2.27817,0 -4.125,-1.8468254 -4.125,-4.125 0,-2.278175 1.84683,-4.125 4.125,-4.125 2.27817,0 4.125,1.846825 4.125,4.125 z"
sodipodi:ry="4.125"
sodipodi:rx="4.125"
sodipodi:cy="-10.375"
sodipodi:cx="684.125"
id="path4328-6-3"
style="color:#000000;fill:#686868;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
</g>
</g>
</g>
</g>
sodipodi:nodetypes="ssssssssssssssssss"
inkscape:export-filename="/Users/bterkuile/companytools/development/rails/qrammer/app/assets/images/frames/tablet.png"
inkscape:export-xdpi="72.491959"
inkscape:export-ydpi="72.491959" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 23 KiB

+16 -13
View File
@@ -58,9 +58,9 @@ root.Qrammer =
eval(res)
return
window.location = '/' if res['message'] && !res['ok']
window.location = '/view_active_list' if res['ok']
load_active_orders: (supplier_id) ->
$.get('/suppliers/'+supplier_id+'/active_orders.json', (res) ->
window.location = '/user/active_list' if res['ok']
load_active_orders: () ->
$.get('/supplier/active_orders.json', (res) ->
body = $('#active-orders-table tbody')
body.find('tr').remove()
foot = $('#active-orders-table tfoot')
@@ -74,7 +74,7 @@ root.Qrammer =
process_callback = ( (ord) ->
->
my_btn = $(this)
$.post('/orders/'+ord.id+'/is_being_processed', {}, (res)-> my_btn.remove())
$.post('/supplier/mark_order_in_process', {order_id: ord.id}, (res)-> my_btn.remove())
)(order)
process_btn.click(process_callback)
@@ -82,7 +82,7 @@ root.Qrammer =
delivered_callback = ( (ord, r) ->
->
my_btn = $(this)
$.post('/orders/'+ord.id+'/is_delivered', {}, (res)-> r.slideUp('slow'))
$.post('/supplier/order_is_delivered', {order_id: ord.id}, (res)-> r.slideUp('slow'))
)(order, row)
delivered_btn.click(delivered_callback)
for product in order.products
@@ -98,7 +98,7 @@ root.Qrammer =
)
handle_active_user_list: (callback) ->
$.get('/user_list_info.json', (res) ->
$.get('/user/list_info.json', (res) ->
if !res.list_active
window.location = '/phone_home?list_closed=true'
return
@@ -118,7 +118,7 @@ root.Qrammer =
needs_help_container.html($('<button class="btn btn-info">I have a question</button>').click(Qrammer.list_needs_help)) #TODO TEXT
list_needs_help: ->
return unless window.active_list && !window.active_list.needs_help
$.post('/active_user_list_needs_help.json', (res) -> window.active_list = res; Qrammer.list_needs_help_default_action())
$.post('/user/needs_help.json', (res) -> window.active_list = res; Qrammer.list_needs_help_default_action())
list_needs_payment_default_action: ->
needs_payment_container = $('#list-needs-payment-button')
if needs_payment_container.length
@@ -128,10 +128,10 @@ root.Qrammer =
needs_payment_container.html($('<button class="btn btn-warning">Check please</button>').click(Qrammer.list_needs_payment)) #TODO TEXT
list_needs_payment: ->
return unless window.active_list && !window.active_list.needs_payment
$.post('/active_user_list_needs_payment.json', (res) -> window.active_list = res; Qrammer.list_needs_payment_default_action())
$.post('/user/list_needs_payment.json', (res) -> window.active_list = res; Qrammer.list_needs_payment_default_action())
load_active_lists: (supplier_id) ->
$.get('/suppliers/'+supplier_id+'/active_lists.json', (res) ->
load_active_lists: () ->
$.get('/supplier/active_lists.json', (res) ->
body = $('#active-lists-table tbody')
body.find('tr').remove()
foot = $('#active-lists-table tfoot')
@@ -142,7 +142,7 @@ root.Qrammer =
close_callback = ( (lst, r) ->
->
my_btn = $(this)
$.post('/lists/'+lst._id+'/is_closed', {}, (res)-> r.slideUp('slow'))
$.post('/supplier/close_list', {list_id: list._id}, (res)-> r.slideUp('slow'))
)(list, row)
close_btn.click(close_callback)
@@ -150,7 +150,7 @@ root.Qrammer =
needs_help_callback = ( (lst, r) ->
->
my_btn = $(this)
$.post('/lists/'+lst._id+'/is_helped', {}, (res)-> my_btn.remove() )
$.post('/supplier/mark_list_as_helped', {list_id: list._id}, (res)-> my_btn.remove() )
)(list, row)
needs_help_btn.click(needs_help_callback)
@@ -168,8 +168,11 @@ root.Qrammer =
#foot.append('<tr><td></td><td class="currency"><strong>'+Qrammer.currency(res.total_amount)+'</strong></td></tr>');
)
active_user_list: (list_id) ->
$.get('/lists/'+list_id+'/current.json', (res) ->
$.get('/user/active_list.json', (res) ->
window.active_list = res
unless res.list_active
window.location = '/user/list_history/'+res._id + '?list_closed=true'
return
Qrammer.handle_active_user_list_default_actions()
body = $('#active-list-table tbody')
foot = $('#active-list-table tfoot')
+1 -1
View File
@@ -15,7 +15,7 @@ class ApplicationController < ActionController::Base
end
def active_list
return nil unless session[:active_list_id]
return nil unless session[:active_list_id].present?
@active_list ||= List.find(session[:active_list_id])
end
+13 -60
View File
@@ -15,92 +15,45 @@ class DashboardController < ApplicationController
render layout: 'phone'
end
def create_list
@table = Table.find(params[:table_id])
if @table.occupied?
redirect_to root_path, alert: t('table.is_occupied')
else
@list = List.new(table: @table)
#@list.add_user(current_user)
@list.save
session[:active_list_id] = @list.id
redirect_to action: :show_products
end
end
def show_products
@supplier = Supplier.first
render layout: 'phone'
end
def order_active_products_list
respond_to do |format|
format.html do
redirect_to(root_path, alert: t('messages.cannot_order_without_list_id')) and return if params[:list_id].blank?
@list = List.find(params[:list_id])
redirect_to(root_path, alert: t('messages.cannot_order_on_non_active_list')) and return unless @list.active?
@list.place_order params[:products]
@list.place_order current_user, params[:products]
redirect_to root_path, notice: t('messages.order_is_placed')
end
format.js do
render js: js_alert(t('messages.cannot_order_without_list_id')) and return if params[:list_id].blank?
@list = List.find(params[:list_id])
render js: js_alert(t('messages.cannot_order_on_non_active_list')) and return unless @list.active?
@list.place_order params[:products]
@list.place_order current_user, params[:products]
render js: js_notice( t('messages.order_is_placed') )
end
end
end
def view_active_list
redirect_to(root_path, alert: t('messages.there_is_no_list_active')) and return unless session[:active_list_id].present?
render layout: 'phone'
end
##
# Displays the closed lists of the user
def user_history
render layout: 'phone'
end
def user_list_info
# GET /suppliers/1/product_list
# GET /suppliers/1/product_list.json
def product_list
@supplier = active_list.supplier
respond_to do |format|
format.html # show.html.erb
format.json do
render json: {list_active: false} and return unless session[:active_list_id].present?
render json: active_list.as_json.merge(list_active: true)
products = active_list.supplier.products
products.include_relation(:product_categories)
products.sort_by!{|p| p.product_category.try(:position) || 90000}
h = products.inject({}){|h, p| n = p.product_category.try(:name) || 'other'; h[n] ||= []; h[n] << p; h}
render json: h
end
end
end
def supplier_home
redirect_to active_orders_supplier_path(Supplier.first)
end
def supplier_lists
redirect_to active_lists_supplier_path(Supplier.first)
end
# POST /active_user_list_needs_help.json
def active_user_list_needs_help
respond_to do |format|
format.json do
render json: {list_active: false} and return unless session[:active_list_id].present?
active_list.needs_help = true
active_list.save
render json: active_list.as_json.merge(list_active: true)
end
end
end
# POST /active_user_list_needs_payment.json
def active_user_list_needs_payment
respond_to do |format|
format.json do
render json: {list_active: false} and return unless session[:active_list_id].present?
active_list.needs_payment = true
active_list.save
render json: active_list.as_json.merge(list_active: true)
end
end
end
end
+1 -42
View File
@@ -82,51 +82,10 @@ class ListsController < ApplicationController
end
end
def current
@list = List.find(params[:id])
@list.orders.include_relations(product_orders: :product)
respond_to do |format|
format.json do
h = @list.as_json
h[:orders] = []
list_total = 0.0
for order in @list.orders
ho = {products: []}
order_total = 0.0
for product_order in order.product_orders
order_total += (product_order.amount * product_order.price).round(2)
ho[:products] << {name: product_order.product.name, id: product_order.product_id, number: product_order.amount, price: product_order.price}
end
ho[:total_amount] = order_total.round(2)
ho[:state] = order.state
list_total += ho[:total_amount]
h[:orders] << ho
end
h[:total_amount] = list_total.round(2)
render json: h
end
end
end
# POST /orders/1/is_closed
def is_closed
@list = List.find(params[:id])
@list.close!
render nothing: true
end
# POST /orders/1/is_helped
def is_helped
@list = List.find(params[:id])
@list.needs_help = false
@list.save
render nothing: true
end
private
def set_relation_options
@tables = Table.all
@suppliers = Supplier.all
end
end
-14
View File
@@ -82,20 +82,6 @@ class OrdersController < ApplicationController
end
end
# POST /orders/1/is_being_processed
def is_being_processed
@order = Order.find(params[:id])
@order.is_being_processed!
render nothing: true
end
# POST /orders/1/is_delivered
def is_delivered
@order = Order.find(params[:id])
@order.is_delivered!
render nothing: true
end
private
def set_relation_options
+84
View File
@@ -0,0 +1,84 @@
class SupplierController < ApplicationController
before_filter :authenticate_supplier!
# GET /suppliers/1/active_orders
# GET /suppliers/1/active_orders.json
def active_orders
@supplier = current_supplier
respond_to do |format|
format.html { render layout: 'tablet' }
format.json do
h = @supplier.as_json
h[:orders] = []
list_total = 0.0
for order in @supplier.active_orders
ho = {products: []}
order_total = 0.0
for product_order in order.product_orders
order_total += (product_order.amount * product_order.price).round(2)
ho[:products] << {name: product_order.product.name, id: product_order.product_id, number: product_order.amount, price: product_order.price}
end
ho[:total_amount] = order_total.round(2)
ho[:state] = order.state
ho[:table_number] = order.table_number
ho[:id] = order.id
list_total += ho[:total_amount]
h[:orders] << ho
end
h[:total_amount] = list_total.round(2)
render json: h, layout: 'tablet'
end
end
end
# GET /suppliers/1/active_lists
# GET /suppliers/1/active_lists.json
def active_lists
@supplier = current_supplier
respond_to do |format|
format.html { render layout: 'tablet' }
format.json do
h = @supplier.as_json
h[:lists] = []
grand_total = 0.0
for list in @supplier.active_lists
hl = list.as_json
hl[:total_amount] = list.orders.inject(0.0){|sum, o| sum + o.product_orders.inject(0.0){|s, po| s + (po.amount * po.price).round(2)}}.round(2)
grand_total += hl[:total_amount]
h[:lists] << hl
end
h[:total_amount] = grand_total.round(2)
render json: h, layout: 'tablet'
end
end
end
# POST /supplier/close_list
def close_list
@list = List.find_by_supplier_id_and_id(current_supplier.id, params[:list_id])
@list.close!
render nothing: true
end
# POST /orders/1/is_helped
def mark_list_as_helped
@list = List.find_by_supplier_id_and_id(current_supplier.id, params[:list_id])
@list.needs_help = false
@list.save
render nothing: true
end
# POST /orders/1/is_being_processed
def mark_order_in_process
@order = Order.find_by_supplier_id_and_id(current_supplier.id, params[:order_id])
@order.is_being_processed!
render nothing: true
end
# POST /orders/1/is_delivered
def order_is_delivered
@order = Order.find_by_supplier_id_and_id(current_supplier.id, params[:order_id])
@order.is_delivered!
render nothing: true
end
end
-69
View File
@@ -82,75 +82,6 @@ class SuppliersController < ApplicationController
end
end
# GET /suppliers/1/product_list
# GET /suppliers/1/product_list.json
def product_list
@supplier = Supplier.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json do
products = @supplier.products
products.include_relation(:product_categories)
products.sort_by!{|p| p.product_category.try(:position) || 90000}
h = products.inject({}){|h, p| n = p.product_category.try(:name) || 'other'; h[n] ||= []; h[n] << p; h}
render json: h
end
end
end
# GET /suppliers/1/active_orders
# GET /suppliers/1/active_orders.json
def active_orders
@supplier = Supplier.find(params[:id])
respond_to do |format|
format.html { render layout: 'tablet' }
format.json do
h = @supplier.as_json
h[:orders] = []
list_total = 0.0
for order in @supplier.active_orders
ho = {products: []}
order_total = 0.0
for product_order in order.product_orders
order_total += (product_order.amount * product_order.price).round(2)
ho[:products] << {name: product_order.product.name, id: product_order.product_id, number: product_order.amount, price: product_order.price}
end
ho[:total_amount] = order_total.round(2)
ho[:state] = order.state
ho[:table_number] = order.table_number
ho[:id] = order.id
list_total += ho[:total_amount]
h[:orders] << ho
end
h[:total_amount] = list_total.round(2)
render json: h, layout: 'tablet'
end
end
end
# GET /suppliers/1/active_lists
# GET /suppliers/1/active_lists.json
def active_lists
@supplier = Supplier.find(params[:id])
respond_to do |format|
format.html { render layout: 'tablet' }
format.json do
h = @supplier.as_json
h[:lists] = []
grand_total = 0.0
for list in @supplier.active_lists
hl = list.as_json
hl[:total_amount] = list.orders.inject(0.0){|sum, o| sum + o.product_orders.inject(0.0){|s, po| s + (po.amount * po.price).round(2)}}.round(2)
grand_total += hl[:total_amount]
h[:lists] << hl
end
h[:total_amount] = grand_total.round(2)
render json: h, layout: 'tablet'
end
end
end
private
def set_relation_options
+111
View File
@@ -0,0 +1,111 @@
class UserController < ApplicationController
before_filter :authenticate_user!
alias :list :active_list
# POST /user/create_list {table_id: 1234}
def create_list
@table = Table.find(params[:table_id])
if @table.occupied?
redirect_to root_path, alert: t('table.is_occupied')
else
@list = List.new(table: @table, supplier_id: @table.supplier_id)
@list.add_user current_user
#@list.add_user(current_user)
@list.save
session[:active_list_id] = @list.id
redirect_to user_list_products_path
end
end
def list_products
@supplier = Supplier.first
render layout: 'phone'
end
# GET /user/current_list.json
# Information about the currently active list
# This information includes detailed order information
def active_list
respond_to do |format|
format.html do
redirect_to(root_path, alert: t('messages.there_is_no_list_active')) and return unless list.present?
render layout: 'phone'
end
format.json do
@list = list
@list.orders.include_relations(product_orders: :product)
h = @list.as_json
h[:orders] = []
h[:list_active] = @list.active?
list_total = 0.0
for order in @list.orders
ho = {products: []}
order_total = 0.0
for product_order in order.product_orders
order_total += (product_order.amount * product_order.price).round(2)
ho[:products] << {name: product_order.product.name, id: product_order.product_id, number: product_order.amount, price: product_order.price}
end
ho[:total_amount] = order_total.round(2)
ho[:state] = order.state
list_total += ho[:total_amount]
h[:orders] << ho
end
h[:total_amount] = list_total.round(2)
render json: h
end
end
end
# GET /user/list_info.json
# Information about the currently active list
# Fast version to verify wether the is is still currently active
def list_info
respond_to do |format|
format.json do
render json: {list_active: false} and return unless list.present?
render json: list.as_json.merge(list_active: true)
end
end
end
# POST /user/needs_help.json
def needs_help
respond_to do |format|
format.json do
render json: {list_active: false} and return unless list.present?
list.needs_help = true
list.save
render json: list.as_json.merge(list_active: true)
end
end
end
# POST /user/list_needs_payment.json
def list_needs_payment
respond_to do |format|
format.json do
render json: {list_active: false} and return unless list.present?
list.needs_payment = true
list.save
render json: list.as_json.merge(list_active: true)
end
end
end
##
# Displays the closed lists of the user
def list_history
render layout: 'phone'
end
##
# Displays a closed list of the user
# GET /user/list_history/:list_id
def history_list
@list = List.find(params[:list_id])
redirect_to user_root_path, alert: t('messages.illegal_history_list_attempt') and return unless @list.user_ids.include?(current_user.id)
render layout: 'phone'
end
end
+9 -3
View File
@@ -7,9 +7,13 @@ class List
property :closed_at, type: Time
has_many :orders, dependent: :destroy
belongs_to :table
belongs_to :supplier
has_and_belongs_to_many :users, storing_keys: true
validates :table_id, presence: true
validates :supplier_id, presence: true
view :by_supplier_id_and_id, key: [:supplier_id, :_id]
def close!
orders.map(&:close!)
@@ -30,9 +34,10 @@ class List
state == 'active'
end
def place_order(products)
return unless products.any?
@order = Order.create list: self, supplier: supplier
def place_order(user, products)
return false unless products.any?
return false unless user
@order = Order.create list: self, supplier: supplier, user: user
return unless @order.id
loaded_products = self.class.database.load_document products.keys
products.each do |product_id, number|
@@ -40,6 +45,7 @@ class List
product = loaded_products.find{|p| p.id == product_id} # to get the price
ProductOrder.create order: @order, product_id: product_id, amount: number, price: product.price if number > 0
end
@order
end
def as_json
+2
View File
@@ -10,12 +10,14 @@ class Order
has_many :product_orders, dependent: :destroy
#has_many :products, through: :product_orders
validates :supplier_id, presence: true
validates :user_id, presence: true
view :active_for_supplier_view, type: :custom, map_function: %[function(doc){
if(doc.ruby_class == 'Order' && (doc.state == 'placed' || doc.state == 'active')){
emit(doc.supplier_id, 1);
}
}], reduce_function: '_sum'
view :by_supplier_id_and_id, key: [:supplier_id, :_id]
def self.active_for_supplier(supplier_id)
database.view(active_for_supplier_view(key: supplier_id, reduce: false, include_docs: true))
+2 -2
View File
@@ -1,7 +1,7 @@
ul.nav.nav-tabs.nav-stacked
- if list_open?
li= link_to 'Place order', '/show_products?supplier_id=' + active_list.supplier.id
li= link_to 'Active list', view_active_list_path
li= link_to 'Place order', user_list_products_path(supplier_id: active_list.supplier.id)
li= link_to 'Active list', user_active_list_path
li= link_to 'Request bill', '#'
li= link_to 'Move table', '#'
li= link_to 'I have a question', '#'
+1 -1
View File
@@ -1,4 +1,4 @@
.page-header= title 'Select Qr code'
ul
- for table in @tables
li= link_to image_tag(url_for(qrcode_table_path(table, format: :png))), {action: :create_list, table_id: table.id}
li= link_to image_tag(url_for(qrcode_table_path(table, format: :png))), user_create_list_path(table_id: table.id)
@@ -1,2 +0,0 @@
.page-header= title 'User history'
p Todo
+1
View File
@@ -35,6 +35,7 @@ html lang="en"
li= link_to Table.model_name.human_plural, tables_path
li= link_to Product.model_name.human_plural, products_path
li= link_to List.model_name.human_plural, lists_path
li= link_to Order.model_name.human_plural, orders_path
li= link_to ProductCategory.model_name.human_plural, product_categories_path
.container
+2 -2
View File
@@ -30,8 +30,8 @@ html lang="en"
span.icon-bar
a.brand href=supplier_root_path Qrammer
ul.nav#top-navigation-list
li= link_to t('supplier.menu.active_orders', orders: Order.model_name.human_plural), supplier_orders_path
li= link_to t('supplier.menu.active_lists', lists: List.model_name.human_plural), supplier_lists_path
li= link_to t('supplier.menu.active_orders', orders: Order.model_name.human_plural), supplier_active_orders_path
li= link_to t('supplier.menu.active_lists', lists: List.model_name.human_plural), supplier_active_lists_path
.container.nav-collapse
.container
+5 -1
View File
@@ -19,7 +19,11 @@
.control-group class=(@list.errors[:table_id].any? ? 'error' : nil)
= f.label :table_id, Table.model_name.human, class: 'control-label'
.controls
= f.select :table_id, options_for_select(@tables.map{|a| [a.number, a.id]}), include_blank: nil
= f.collection_select :table_id, @tables, :id, :number, include_blank: nil
.control-group class=(@list.errors[:supplier_id].any? ? 'error' : nil)
= f.label :supplier_id, Supplier.model_name.human, class: 'control-label'
.controls
= f.collection_select :supplier_id, @suppliers, :id, :name, include_blank: nil
.form-actions
= f.submit nil, class: 'btn btn-primary'
'
+2
View File
@@ -9,6 +9,7 @@ div.page-header= title :index, model_class
th= model_class.human_attribute_name(:needs_payment)
th= model_class.human_attribute_name(:closed_at)
th= Table.model_name.human
th= Supplier.model_name.human
th= model_class.human_attribute_name(:created_at)
th=t 'helpers.actions'
tbody
@@ -19,6 +20,7 @@ div.page-header= title :index, model_class
td= list.needs_payment
td= list.closed_at
td= link_to_if list.table.present?, list.table.try(:number), list.table
td= link_to_if list.supplier.present?, list.supplier.try(:name), list.supplier
td=l list.created_at, format: :short
td
= link_to t('helpers.links.edit'), [:edit, list], class: 'btn btn-mini'
+3
View File
@@ -13,6 +13,9 @@ dl.dl-horizontal.show-list
- if @list.table.present?
dt= Table.model_name.human
dd= link_to @list.table.number, @list.table
- if @list.supplier.present?
dt= Supplier.model_name.human
dd= link_to @list.supplier.name, @list.supplier
.form-actions
= link_to t("helpers.links.back"), lists_path, class: 'btn'
+1 -1
View File
@@ -7,7 +7,7 @@
.control-group class=(@order.errors[:supplier_id].any? ? 'error' : nil)
= f.label :supplier_id, Supplier.model_name.human, class: 'control-label'
.controls
= f.select :supplier_id, options_for_select(@suppliers.map{|a| [a.name, a.id]}), include_blank: nil
= f.collection_select :supplier_id, @suppliers, :id, :name, include_blank: nil
.form-actions
= f.submit nil, class: 'btn btn-primary'
'
@@ -11,7 +11,7 @@ table#active-lists-table.table.table-striped
javascript:
var active_lists_interval;
jQuery(function(){
Qrammer.load_active_lists('#{@supplier.id}')
active_lists_interval = setInterval( "Qrammer.load_active_lists('#{@supplier.id}')", 7500);
Qrammer.load_active_lists()
active_lists_interval = setInterval('Qrammer.load_active_lists()', 7500);
});
@@ -10,7 +10,7 @@ table#active-orders-table.table
- content_for :footer do
javascript:
jQuery(function(){
Qrammer.load_active_orders('#{@supplier.id}')
setInterval( "Qrammer.load_active_orders('#{@supplier.id}')", 7500);
Qrammer.load_active_orders()
setInterval( 'Qrammer.load_active_orders()', 7500);
});
@@ -1,6 +1,6 @@
.page-header
h4= t('user.active_list.title', list: List.model_name.human)
= link_to t('helpers.links.place_order'), user_products_path, class: ['btn btn-primary']
= link_to t('helpers.links.place_order'), user_list_products_path, class: ['btn btn-primary']
span#list-needs-payment-button
span#list-needs-help-button
table#active-list-table.table.table-striped
+3
View File
@@ -0,0 +1,3 @@
.page-header= title 'User list history'
p Todo
= render template: 'lists/show'
+2
View File
@@ -0,0 +1,2 @@
.page-header= title 'User list history'
p Todo
@@ -26,7 +26,7 @@ table#active-order-table.table.table-striped.hide
javascript:
jQuery(function(){
Qrammer.handle_active_user_list(function(){
$.get('#{product_list_supplier_path(@supplier, format: :json).html_safe}', function(res){
$.get('/user/product_list.json', function(res){
window.products = res
body = $('#products-table tbody')
for(var category in window.products){
+1
View File
@@ -15,6 +15,7 @@ en:
cannot_order_on_non_active_list: You cannot place an order on a closed list
order_is_placed: Your order has been received in good order
the_list_has_been_closed: The %{list} has been closed
illegal_history_list_attempt: The list you want to access is not yours
action:
index:
label: Listing %{models}
+23 -23
View File
@@ -13,34 +13,34 @@ Qrammer::Application.routes.draw do
post :is_delivered
end
end
resources :suppliers do
member do
get :product_list
get :active_orders
get :active_lists
end
end
resources :lists do
member do
get :current
post :is_closed
post :is_helped
end
end
resources :suppliers
resources :lists
resources :products
resources :product_categories
match '/view_active_list' => 'dashboard#view_active_list', as: :view_active_list # depricated
match '/view_active_list' => 'dashboard#view_active_list', as: :user_active_list
get '/supplier' => 'supplier#active_orders', as: :supplier_root
get '/supplier/active_orders' => 'supplier#active_orders', as: :supplier_active_orders
get '/supplier/active_lists' => 'supplier#active_lists', as: :supplier_active_lists
post '/supplier/close_list' => 'supplier#close_list', as: :supplier_close_list
post '/supplier/mark_list_as_helped' => 'supplier#mark_list_as_helped', as: :supplier_mark_list_as_helped
post '/supplier/mark_order_in_process' => 'supplier#mark_order_in_process', as: :supplier_mark_order_in_process
post '/supplier/order_is_delivered' => 'supplier#order_is_delivered', as: :supplier_order_is_delivered
get '/user/active_list(.:format)' => 'user#active_list', as: :user_active_list
get '/user/list_info' => 'user#list_info', as: :user_list_info
post '/user/needs_help' => 'user#needs_help', as: :user_needs_help
post '/user/list_needs_payment' => 'user#list_needs_payment', as: :user_list_needs_payment
match '/user/create_list' => 'user#create_list', as: :user_create_list
get '/user/list_products' => 'user#list_products', as: :user_list_products
match '/phone_home' => 'dashboard#phone_home', as: :phone_root
match '/supplier_home' => 'dashboard#supplier_home', as: :supplier_root
match '/supplier_home' => 'dashboard#supplier_home', as: :supplier_orders
match '/supplier_lists' => 'dashboard#supplier_lists', as: :supplier_lists
match '/user_list_info' => 'dashboard#user_list_info', as: :user_list_info
match '/user_history' => 'dashboard#user_history', as: :user_history
match '/user/list_history' => 'user#list_history', as: :user_list_history
match '/user/list_history/:list_id' => 'user#history_list', as: :user_history_list
match '/show_products' => 'dashboard#show_products', as: :user_products
post '/active_user_list_needs_help' => 'dashboard#active_user_list_needs_help', as: :active_user_list_needs_help
post '/active_user_list_needs_payment' => 'dashboard#active_user_list_needs_payment', as: :active_user_list_needs_payment
match '/user/product_list(.:format)' => 'dashboard#product_list'
match "/:action", controller: 'dashboard'
# The priority is based upon order of creation: