[MERGE] point_of_sale & co. : large js cleanup / refactor.

- See the branch's commit messages for details on the work done.
This commit is contained in:
Frédéric van der Essen
2014-12-31 15:37:47 +01:00
55 changed files with 2415 additions and 5885 deletions
+30 -22
View File
@@ -44,6 +44,7 @@ html {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
font-family: sans-serif;
}
table {
border-spacing: 0px;
border-collapse: collapse;
@@ -501,7 +502,7 @@ td {
/* ********* The leftpane contains the order, numpad and paypad ********* */
.pos .pos-leftpane {
.pos .leftpane {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
@@ -513,7 +514,7 @@ td {
bottom:0;
border-right: solid 1px #CECBCB;
}
.pos .pos-leftpane .pads {
.pos .leftpane .pads {
background: #F0EEEE;
white-space: nowrap;
}
@@ -640,7 +641,6 @@ td {
.pos .rightpane {
position: absolute;
top: 0;
/*bottom: 105px;*/
bottom:0;
left: 440px;
right: 0;
@@ -1222,6 +1222,7 @@ td {
}
body {
margin: 0;
color: white !important;
}
.oe_leftbar,
.pos .pos-topheader,
@@ -1861,12 +1862,12 @@ td {
box-shadow: 0px 10px 20px rgba(0,0,0,0.4);
z-index:1200;
}
.pos .popup .comment{
.pos .popup .body {
font-weight: normal;
font-size: 18px;
margin: 0px 16px 16px 16px;
}
.pos .popup .comment.traceback {
.pos .popup .body.traceback {
height: 264px;
overflow: auto;
font-size: 14px;
@@ -1876,17 +1877,6 @@ td {
-moz-user-select: text;
user-select: text;
}
.pos .popup .comment.traceback {
height: 264px;
overflow: auto;
font-size: 12px;
text-align: left;
white-space: pre-wrap;
font-family: 'Inconsolata';
-webkit-user-select: text;
-moz-user-select: text;
user-select: text;
}
.pos .popup .footer{
position:absolute;
bottom:0;
@@ -1964,7 +1954,7 @@ td {
outline: none;
box-shadow: 0px 0px 0px 3px #6EC89B;
}
.pos .popup.popup-selection .message {
.pos .popup.popup-selection .title {
margin-top: 0;
}
.pos .popup.popup-selection .selection {
@@ -1986,12 +1976,23 @@ td {
.pos .popup.popup-selection .selection-item:nth-child(even) {
background: rgb(247,247,247);
}
.pos .popup.popup-number {
width: 300px;
margin-left: -150px;
}
.pos .popup-number .footer{
text-align: center;
}
.pos .popup-number .footer .button{
float: none;
display: inline-block;
}
.pos .popup-numpad {
margin: 12px auto;
text-align: left;
width: 244px;
width: 250px;
}
.pos .popup-number .message {
.pos .popup-number .title {
margin-top: 0;
}
.pos .popup-numpad .input-button,
@@ -2013,20 +2014,27 @@ td {
}
.pos .popup.popup-password {
width: 238px;
margin-left: -119px;
width: 250px;
margin-left: -125;
}
.pos .popup-password .mode-button.add,
.pos .popup-password .input-button.dot {
display: none;
}
.pos .popup-password .popup-numpad {
width: 182px;
width: 190px;
}
.pos .popup-password .popup-input {
width: 70%;
-webkit-text-security: disc;
}
.pos .popup-password .footer{
text-align: center;
}
.pos .popup-password .footer .button{
float: none;
display: inline-block;
}
/* ********* The Webkit Scrollbar ********* */
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 916 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

@@ -1,502 +0,0 @@
<?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:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="printer.svg"
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices"
inkscape:version="0.46"
sodipodi:version="0.32"
id="svg2994"
height="48px"
width="48px"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs3">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 24 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="48 : 24 : 1"
inkscape:persp3d-origin="24 : 16 : 1"
id="perspective79" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6719"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
inkscape:collect="always"
id="linearGradient5060">
<stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop5062" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5064" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6717"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
id="linearGradient5048">
<stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" />
<stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient6715"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<linearGradient
id="linearGradient4762">
<stop
style="stop-color:#ffffff;stop-opacity:0.12371134;"
offset="0.0000000"
id="stop4764" />
<stop
id="stop4768"
offset="0.10344828"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop4766" />
</linearGradient>
<linearGradient
id="linearGradient4741">
<stop
id="stop4743"
offset="0.0000000"
style="stop-color:#dcdcda;stop-opacity:1.0000000;" />
<stop
id="stop4745"
offset="1.0000000"
style="stop-color:#bab9b7;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient4733">
<stop
id="stop4735"
offset="0.0000000"
style="stop-color:#000000;stop-opacity:0.23711340;" />
<stop
id="stop4737"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4698">
<stop
id="stop4700"
offset="0.0000000"
style="stop-color:#fffffd;stop-opacity:1.0000000;" />
<stop
style="stop-color:#bbbbb9;stop-opacity:1.0000000;"
offset="0.50000000"
id="stop4706" />
<stop
id="stop4702"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient4688">
<stop
id="stop4690"
offset="0.0000000"
style="stop-color:#666666;stop-opacity:1.0000000;" />
<stop
id="stop4692"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4680"
inkscape:collect="always">
<stop
id="stop4682"
offset="0"
style="stop-color:#f7f6f5;stop-opacity:1;" />
<stop
id="stop4684"
offset="1"
style="stop-color:#f7f6f5;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4668">
<stop
id="stop4670"
offset="0"
style="stop-color:#8e8d87;stop-opacity:1;" />
<stop
style="stop-color:#cbc9c1;stop-opacity:1.0000000;"
offset="0.27586207"
id="stop4676" />
<stop
id="stop4672"
offset="1.0000000"
style="stop-color:#8e8d87;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient259">
<stop
id="stop260"
offset="0.0000000"
style="stop-color:#e0e0e0;stop-opacity:1.0000000;" />
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.40546969"
id="stop4886" />
<stop
style="stop-color:#cdcdcd;stop-opacity:1.0000000;"
offset="0.53448278"
id="stop4884" />
<stop
id="stop261"
offset="1.0000000"
style="stop-color:#494949;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient15662">
<stop
id="stop15664"
offset="0.0000000"
style="stop-color:#ffffff;stop-opacity:0.0000000;" />
<stop
id="stop15666"
offset="1.0000000"
style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
r="2.1227016"
fy="26.925594"
fx="9.1295490"
cy="26.925594"
cx="9.1295490"
gradientUnits="userSpaceOnUse"
id="radialGradient1433"
xlink:href="#linearGradient4698"
inkscape:collect="always" />
<linearGradient
y2="72.064316"
x2="9.9128132"
y1="57.227650"
x1="9.8698082"
gradientTransform="matrix(2.772086,0.000000,0.000000,0.360739,0.618718,2.883883)"
gradientUnits="userSpaceOnUse"
id="linearGradient1447"
xlink:href="#linearGradient4733"
inkscape:collect="always" />
<linearGradient
y2="54.136139"
x2="10.338233"
y1="64.652260"
x1="10.338233"
gradientTransform="matrix(2.369844,0.000000,0.000000,0.421969,0.000000,2.000000)"
gradientUnits="userSpaceOnUse"
id="linearGradient1451"
xlink:href="#linearGradient4680"
inkscape:collect="always" />
<linearGradient
y2="62.282467"
x2="9.7052784"
y1="70.724976"
x1="9.7316532"
gradientTransform="matrix(2.369844,0.000000,0.000000,0.421969,0.000000,2.000000)"
gradientUnits="userSpaceOnUse"
id="linearGradient1453"
xlink:href="#linearGradient4688"
inkscape:collect="always" />
<linearGradient
y2="19.337463"
x2="20.717800"
y1="25.140253"
x1="20.771229"
gradientTransform="matrix(1.198769,0,0,0.853565,-0.143086,2.034513)"
gradientUnits="userSpaceOnUse"
id="linearGradient1456"
xlink:href="#linearGradient15662"
inkscape:collect="always" />
<linearGradient
y2="25.247311"
x2="24.789707"
y1="3.6785457"
x1="25.056711"
gradientTransform="matrix(0.94571,0,0,1.076032,5.016683e-2,4.095404)"
gradientUnits="userSpaceOnUse"
id="linearGradient1459"
xlink:href="#linearGradient259"
inkscape:collect="always" />
<linearGradient
y2="58.831264"
x2="15.487823"
y1="32.539238"
x1="15.387969"
gradientTransform="matrix(1.492569,0,0,0.668741,8.188072e-2,2)"
gradientUnits="userSpaceOnUse"
id="linearGradient1464"
xlink:href="#linearGradient4762"
inkscape:collect="always" />
<linearGradient
y2="88.294930"
x2="18.972126"
y1="88.294930"
x1="1.8456430"
gradientTransform="matrix(2.291824,0,0,0.434269,8.855179e-2,2)"
gradientUnits="userSpaceOnUse"
id="linearGradient1468"
xlink:href="#linearGradient4741"
inkscape:collect="always" />
<linearGradient
y2="88.294933"
x2="18.972126"
y1="88.294933"
x1="1.8456431"
gradientTransform="matrix(2.30272,0,0,0.437918,0,0.584034)"
gradientUnits="userSpaceOnUse"
id="linearGradient1471"
xlink:href="#linearGradient4668"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
inkscape:window-y="160"
inkscape:window-x="491"
inkscape:window-height="688"
inkscape:window-width="872"
inkscape:guide-bbox="true"
showguides="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
showgrid="false"
inkscape:current-layer="layer1"
inkscape:cy="4.6034265"
inkscape:cx="29.124539"
inkscape:zoom="1"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="0.090196078"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:showpageshadow="false" />
<metadata
id="metadata4">
<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>Printer</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<cc:license
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
<dc:source>http://jimmac.musichall.cz</dc:source>
<dc:subject>
<rdf:Bag>
<rdf:li>printer</rdf:li>
<rdf:li>local</rdf:li>
<rdf:li>laser</rdf:li>
<rdf:li>bubblejet</rdf:li>
<rdf:li>inkjet</rdf:li>
<rdf:li>print</rdf:li>
<rdf:li>output</rdf:li>
<rdf:li>cups</rdf:li>
<rdf:li>lpd</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/publicdomain/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
inkscape:label="Layer 1"
id="layer1">
<g
transform="matrix(2.311016e-2,0,0,2.271533e-2,44.68502,39.36099)"
id="g6707">
<rect
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect6709"
width="1339.6335"
height="478.35718"
x="-1559.2523"
y="-150.69685" />
<path
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
id="path6711"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
id="path6713"
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<rect
ry="1.7115477"
rx="1.7115483"
y="36.004189"
x="4.75"
height="6.4915943"
width="38.4375"
id="rect4652"
style="fill:url(#linearGradient1471);fill-opacity:1;stroke:#595959;stroke-width:0.99999982;stroke-miterlimit:4;stroke-opacity:1" />
<path
sodipodi:nodetypes="cssssssssssss"
id="rect4609"
d="M 7.1308961,21.5 L 40.870615,21.5 C 41.255661,21.5 41.747648,21.788155 42.051049,22.223919 C 42.354451,22.659684 43.787518,24.83394 44.109448,25.297964 C 44.431378,25.761987 44.502397,26.201852 44.502397,26.774049 L 44.502397,38.850951 C 44.502397,39.764524 43.770402,40.5 42.861152,40.5 L 5.1403596,40.5 C 4.2311094,40.5 3.4991138,39.764524 3.4991138,38.850951 L 3.4991138,26.774049 C 3.4991138,26.280031 3.6002798,25.571641 3.9455202,25.120718 C 4.3811666,24.551713 5.5498664,22.57277 5.8581276,22.153118 C 6.1663887,21.733467 6.7324461,21.5 7.1308961,21.5 z "
style="color:#000000;fill:url(#linearGradient1468);fill-opacity:1;fill-rule:nonzero;stroke:#676767;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="cssssssss"
id="path4718"
d="M 7.4246212,21.975532 C 6.9218931,21.975532 6.3048776,22.053784 6.0546019,22.46703 L 4.1542523,25.604816 C 3.8721285,26.070648 4.1881986,26.868141 5.0873106,26.868141 L 42.730786,26.868141 C 44.040732,26.868141 43.950533,25.858073 43.663844,25.428039 L 41.896077,22.776389 C 41.575544,22.295589 41.459199,21.975532 40.65864,21.975532 L 7.4246212,21.975532 z "
style="fill:#fbfbfb;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1464);stroke-width:0.94696712;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 7.60536,22.445756 L 40.432673,22.445756 C 40.798351,22.445756 41.265592,22.718629 41.553733,23.131283 C 41.841873,23.543938 42.849964,25.160945 43.155701,25.60036 C 43.461437,26.039775 43.59127,26.456312 43.59127,26.998164 L 43.59127,38.279261 C 43.59127,39.144385 43.457547,39.528356 42.594031,39.528356 L 5.5322268,39.528356 C 4.6687108,39.528356 4.4726047,39.144385 4.4726047,38.279261 L 4.4726047,26.998164 C 4.4726047,26.530345 4.6934498,25.859523 5.0213249,25.432514 C 5.435059,24.893685 6.1038541,23.461633 6.3966101,23.064237 C 6.6893662,22.666841 7.2269515,22.445756 7.60536,22.445756 z "
id="path4750"
sodipodi:nodetypes="cssssssssssss" />
<path
sodipodi:nodetypes="ccccccc"
id="rect15391"
d="M 11.672962,4.4999475 L 36.325116,4.4999475 C 36.975881,4.4999475 37.49978,5.0100777 37.49978,5.6437371 L 37.49978,24.348176 L 10.498298,24.348176 L 10.498298,5.6437371 C 10.498298,5.0100777 11.022197,4.4999475 11.672962,4.4999475 z "
style="color:#000000;fill:url(#linearGradient1459);fill-opacity:1;fill-rule:nonzero;stroke:#898989;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
<rect
style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1456);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
id="rect15660"
width="25.000576"
height="18.836374"
x="11.498513"
y="5.4992466"
ry="0.17677675"
rx="0.17677672" />
<rect
ry="1.7115483"
rx="1.7115483"
y="27.375000"
x="6.8750000"
height="5.1875000"
width="33.750000"
id="rect4678"
style="fill:url(#linearGradient1451);fill-opacity:1.0000000;stroke:url(#linearGradient1453);stroke-width:1.0000000;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000" />
<path
transform="translate(0.000000,2.000000)"
d="M 10.871767 27.626486 A 1.2816310 1.2816310 0 1 1 8.3085046,27.626486 A 1.2816310 1.2816310 0 1 1 10.871767 27.626486 z"
sodipodi:ry="1.2816310"
sodipodi:rx="1.2816310"
sodipodi:cy="27.626486"
sodipodi:cx="9.5901356"
id="path4696"
style="fill:url(#radialGradient1433);fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
sodipodi:type="arc" />
<path
sodipodi:nodetypes="csscssssc"
id="path4731"
d="M 11.743718,25.416053 L 37.306218,25.478553 C 37.993716,25.480234 38.294038,25.107558 38.243718,24.478553 L 38.118718,22.916053 L 39.984835,22.916053 C 40.797335,22.916053 40.975035,23.108616 41.172335,23.478553 L 41.672335,24.416053 C 42.199130,25.403793 43.483508,26.390165 42.170495,26.390165 C 37.667784,26.390165 13.993718,26.041053 11.743718,25.416053 z "
style="fill:url(#linearGradient1447);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;opacity:0.36571429" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
d="M 43.488808,26.5 L 4.5111805,26.5"
id="path4760"
sodipodi:nodetypes="cc" />
<g
transform="translate(0.000000,2.000000)"
style="opacity:0.43575415"
id="g4849">
<rect
y="7.0000000"
x="14.000000"
height="1.0000000"
width="19.000000"
id="rect4833"
style="color:#000000;fill:#000000;fill-opacity:0.29239765;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<rect
style="color:#000000;fill:#000000;fill-opacity:0.29239765;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="rect4835"
width="19.000000"
height="1.0000000"
x="14.000000"
y="9.0000000" />
<rect
y="11.000000"
x="14.000000"
height="1.0000000"
width="19.000000"
id="rect4837"
style="color:#000000;fill:#000000;fill-opacity:0.29239765;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<rect
style="color:#000000;fill:#000000;fill-opacity:0.29239765;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="rect4839"
width="11.000000"
height="1.0000000"
x="14.000000"
y="13.000000" />
<rect
style="color:#000000;fill:#000000;fill-opacity:0.29239765;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="rect4843"
width="19.000000"
height="1.0000000"
x="14.000000"
y="17.000000" />
<rect
y="19.000000"
x="14.000000"
height="1.0000000"
width="19.000000"
id="rect4845"
style="color:#000000;fill:#000000;fill-opacity:0.29239765;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 22 KiB

@@ -1,797 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
overflow="visible"
enable-background="new 0 0 128 129.396"
xml:space="preserve"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="go-home.svg"
version="1.0"
inkscape:export-filename="/home/tigert/My Downloads/go-home.png"
inkscape:export-xdpi="90.000000"
inkscape:export-ydpi="90.000000"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata367"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><cc:license
rdf:resource="http://creativecommons.org/licenses/publicdomain/" /><dc:title></dc:title><dc:creator><cc:Agent><dc:title>Jakub Steiner</dc:title></cc:Agent></dc:creator><dc:source>http://jimmac.musichall.cz</dc:source><dc:subject><rdf:Bag><rdf:li>home</rdf:li><rdf:li>return</rdf:li><rdf:li>go</rdf:li><rdf:li>default</rdf:li><rdf:li>user</rdf:li><rdf:li>directory</rdf:li></rdf:Bag></dc:subject><dc:contributor><cc:Agent><dc:title>Tuomas Kuosmanen</dc:title></cc:Agent></dc:contributor></cc:Work><cc:License
rdf:about="http://creativecommons.org/licenses/publicdomain/"><cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /></cc:License></rdf:RDF></metadata><defs
id="defs365"><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 24 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="48 : 24 : 1"
inkscape:persp3d-origin="24 : 16 : 1"
id="perspective92" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient5031"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" /><linearGradient
inkscape:collect="always"
id="linearGradient5060"><stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop5062" /><stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5064" /></linearGradient><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient5029"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" /><linearGradient
id="linearGradient5048"><stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" /><stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" /><stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient5027"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" /><linearGradient
id="linearGradient2406"><stop
style="stop-color:#7c7e79;stop-opacity:1;"
offset="0"
id="stop2408" /><stop
id="stop2414"
offset="0.1724138"
style="stop-color:#848681;stop-opacity:1;" /><stop
style="stop-color:#898c86;stop-opacity:1;"
offset="1"
id="stop2410" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2390"><stop
style="stop-color:#919191;stop-opacity:1;"
offset="0"
id="stop2392" /><stop
style="stop-color:#919191;stop-opacity:0;"
offset="1"
id="stop2394" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2378"><stop
style="stop-color:#575757;stop-opacity:1;"
offset="0"
id="stop2380" /><stop
style="stop-color:#575757;stop-opacity:0;"
offset="1"
id="stop2382" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2368"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2370" /><stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2372" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2349"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2351" /><stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop2353" /></linearGradient><linearGradient
id="linearGradient2341"><stop
id="stop2343"
offset="0"
style="stop-color:#000000;stop-opacity:1;" /><stop
id="stop2345"
offset="1"
style="stop-color:#000000;stop-opacity:0;" /></linearGradient><linearGradient
id="linearGradient2329"><stop
style="stop-color:#000000;stop-opacity:0.18556701;"
offset="0"
id="stop2331" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop2333" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2319"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2321" /><stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop2323" /></linearGradient><linearGradient
id="linearGradient2307"><stop
style="stop-color:#edd400;stop-opacity:1;"
offset="0"
id="stop2309" /><stop
style="stop-color:#998800;stop-opacity:1;"
offset="1"
id="stop2311" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2299"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2301" /><stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2303" /></linearGradient><linearGradient
id="XMLID_2_"
gradientUnits="userSpaceOnUse"
x1="80.223602"
y1="117.5205"
x2="48.046001"
y2="59.7995"
gradientTransform="matrix(0.314683,0.000000,0.000000,0.314683,4.128264,3.742874)">
<stop
offset="0"
style="stop-color:#CCCCCC"
id="stop17" />
<stop
offset="0.9831"
style="stop-color:#FFFFFF"
id="stop19" />
<midPointStop
offset="0"
style="stop-color:#CCCCCC"
id="midPointStop48" />
<midPointStop
offset="0.5"
style="stop-color:#CCCCCC"
id="midPointStop50" />
<midPointStop
offset="0.9831"
style="stop-color:#FFFFFF"
id="midPointStop52" />
</linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#XMLID_2_"
id="linearGradient1514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.336922,0,0,0.166888,73.490762,15.46151)"
x1="52.006104"
y1="166.1331"
x2="14.049017"
y2="-42.218513" /><linearGradient
id="XMLID_39_"
gradientUnits="userSpaceOnUse"
x1="64.387703"
y1="65.124001"
x2="64.387703"
y2="35.569"
gradientTransform="matrix(0.354101,0,0,0.354101,57.146561,-0.08364921)">
<stop
offset="0"
style="stop-color:#FFFFFF"
id="stop336" />
<stop
offset="0.8539"
style="stop-color:#FF6200"
id="stop338" />
<stop
offset="1"
style="stop-color:#F25D00"
id="stop340" />
<midPointStop
offset="0"
style="stop-color:#FFFFFF"
id="midPointStop335" />
<midPointStop
offset="0.5"
style="stop-color:#FFFFFF"
id="midPointStop337" />
<midPointStop
offset="0.8539"
style="stop-color:#FF6200"
id="midPointStop339" />
<midPointStop
offset="0.5"
style="stop-color:#FF6200"
id="midPointStop341" />
<midPointStop
offset="1"
style="stop-color:#F25D00"
id="midPointStop343" />
</linearGradient><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2299"
id="radialGradient2305"
cx="7.5326638"
cy="24.202574"
fx="7.5326638"
fy="24.202574"
r="8.2452128"
gradientTransform="matrix(4.100086,0,0,4.201322,30.092822,-78.53967)"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2307"
id="radialGradient2313"
cx="19.985598"
cy="36.77816"
fx="19.985598"
fy="36.77816"
r="1.0821035"
gradientTransform="matrix(1.125263,0,0,0.982744,52.079204,0.565787)"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2319"
id="radialGradient2325"
cx="20.443665"
cy="37.425829"
fx="20.443665"
fy="37.425829"
r="1.0821035"
gradientTransform="matrix(1.125263,0,0,0.982744,52.079204,0.731106)"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2329"
id="linearGradient2335"
x1="17.602522"
y1="26.057423"
x2="17.682528"
y2="32.654099"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.898789,0,0,1.071914,55.985907,-2.080838)" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2341"
id="radialGradient2339"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(4.100086,0,0,-4.201322,50.309773,105.3535)"
cx="11.68129"
cy="19.554111"
fx="11.68129"
fy="19.554111"
r="8.2452126" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2349"
id="radialGradient2355"
cx="24.023088"
cy="40.56913"
fx="24.023088"
fy="40.56913"
r="16.28684"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.431250,1.157278e-15,23.07369)"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2368"
id="radialGradient2374"
cx="29.913452"
cy="30.442923"
fx="29.913452"
fy="30.442923"
r="4.0018832"
gradientTransform="matrix(3.751495,0,0,3.147818,-26.501188,-65.70704)"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2378"
id="radialGradient2384"
cx="24.195112"
cy="10.577631"
fx="24.195112"
fy="10.577631"
r="15.242914"
gradientTransform="matrix(1.125263,-3.585417e-8,4.269819e-8,1.340059,52.501178,1.355395)"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2390"
id="linearGradient2396"
x1="30.603519"
y1="37.337803"
x2="30.603519"
y2="36.112415"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.263867,0,0,0.859794,-6.499556,8.390924)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2406"
id="linearGradient2412"
x1="17.850183"
y1="28.939463"
x2="19.040216"
y2="41.03223"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.888785,0,0,1.08932,57.918872,-1.524336)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient4689"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient4691"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient4693"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" /></defs><sodipodi:namedview
inkscape:cy="7.1533137"
inkscape:cx="51.448666"
inkscape:zoom="4"
inkscape:window-height="1056"
inkscape:window-width="1855"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="0.21568627"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:showpageshadow="false"
inkscape:window-x="1431"
inkscape:window-y="24"
inkscape:current-layer="svg2"
fill="#555753"
showgrid="false"
stroke="#a40000"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-global="false"
inkscape:window-maximized="1"><inkscape:grid
type="xygrid"
id="grid3818" /></sodipodi:namedview>
<g
style="display:inline"
id="g5022"
transform="matrix(0.02158196,0,0,0.01859457,98.630392,41.63767)"><rect
y="-150.69685"
x="-1559.2523"
height="478.35718"
width="1339.6335"
id="rect4173"
style="opacity:0.40206185;color:#000000;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" /><path
sodipodi:nodetypes="cccc"
id="path5058"
d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z"
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
inkscape:connector-curvature="0" /><path
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z"
id="path5018"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" /></g><path
style="color:#000000;fill:url(#linearGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:#757575;stroke-width:1.0000006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
d="m 77.127458,8.1833733 5.957459,0 c 0.839732,0 13.886475,15.4353277 13.886475,16.3406587 l -0.443521,18.496745 c 0,0.905333 -0.67603,1.634177 -1.515762,1.634177 l -31.457277,0 c -0.839733,0 -1.515763,-0.728844 -1.515763,-1.634177 l 0.05648,-18.496745 c 0,-0.905331 14.192179,-16.3406587 15.031911,-16.3406587 z"
id="rect1512"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" /><path
style="fill:none"
id="path5"
d="m 102.47146,45.735573 -45.324901,0 0,-45.32489746 45.324901,0 0,45.32489746 z"
inkscape:connector-curvature="0" /><path
style="fill:url(#linearGradient2335);fill-opacity:1;fill-rule:evenodd"
id="path2327"
d="m 78.507882,29 -0.04574,15.090942 -11.842791,0 L 66.507882,29 l 12,0 z"
clip-rule="evenodd"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" /><path
sodipodi:nodetypes="ccccccccc"
id="path2357"
d="m 77.288341,9.405584 5.559097,0 c 0.783582,0 13.000869,14.399588 13.000869,15.244172 l -0.347158,18.212311 c 0,0.459259 -0.143737,0.653465 -0.512375,0.653465 l -31.387202,0.01428 c -0.368638,0 -0.583964,-0.07992 -0.583964,-0.45355 L 63.23295,24.649756 c 0,-0.844584 13.271812,-15.244172 14.055391,-15.244172 z"
style="opacity:0.3125;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
inkscape:connector-curvature="0" /><path
clip-rule="evenodd"
d="m 62.715412,27.943053 -0.05426,2.595194 18.368164,-13.179254 15.286395,11.154428 0.07131,-0.311714 L 80.016568,12.297576 62.715412,27.943053 z"
id="path23"
style="opacity:0.2;fill:url(#radialGradient2384);fill-opacity:1;fill-rule:evenodd"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" /><path
clip-rule="evenodd"
d="m 77.507882,30 0,14.090942 -9.811029,0 L 67.507882,30 l 10,0 z"
id="path188"
style="fill:url(#linearGradient2412);fill-opacity:1;fill-rule:evenodd"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" /><path
style="opacity:0.40909089;fill:url(#radialGradient2325);fill-opacity:1;fill-rule:evenodd"
id="path2315"
d="m 75.084738,36.44767 c 0.67279,0 1.216616,0.474605 1.216616,1.058507 0,0.589811 -0.543826,1.068355 -1.216616,1.068355 -0.672272,0 -1.218686,-0.478544 -1.218686,-1.068355 5.15e-4,-0.583902 0.546414,-1.058507 1.218686,-1.058507 z"
clip-rule="evenodd"
inkscape:connector-curvature="0" /><path
clip-rule="evenodd"
d="m 74.970196,35.932229 c 0.672789,0 1.216615,0.474605 1.216615,1.058507 0,0.589809 -0.543826,1.068353 -1.216615,1.068353 -0.672273,0 -1.218687,-0.478544 -1.218687,-1.068353 5.15e-4,-0.583902 0.546414,-1.058507 1.218687,-1.058507 z"
id="path217"
style="fill:url(#radialGradient2313);fill-opacity:1;fill-rule:evenodd"
inkscape:connector-curvature="0" /><path
d="m 79.95563,11.559337 18.92706,17.169868 0.494679,0.391991 0.403676,-0.171385 -0.37287,-0.761673 -0.277614,-0.223436 -19.174931,-15.572306 -19.389515,15.743335 -0.237602,0.14412 -0.21671,0.706786 0.43342,0.129248 0.384554,-0.308423 19.025853,-17.248125 z"
id="path342"
style="fill:url(#XMLID_39_)"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" /><path
style="fill:#ef2929;stroke:#a40000"
id="path362"
d="m 79.83805,2.2713382 -21.881738,18.1013368 -0.624729,7.165928 1.999936,2.064323 c 0,0 20.407381,-17.157285 20.624093,-17.327963 l 19.63254,17.54326 1.898428,-2.323997 L 99.870785,20.382852 79.955612,2.1668788 79.83805,2.2713382 z"
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0" />
<path
style="opacity:0.40909089;color:#000000;fill:url(#radialGradient2305);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
d="M 58.349227,20.613129 58.057672,27.236494 79.877101,8.980075 79.806773,3.0867443 58.349227,20.613129 z"
id="path1536"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" /><path
sodipodi:nodetypes="ccccc"
id="path2337"
d="M 79.991645,8.7509884 80.091105,2.9098867 99.420068,20.56184 100.91188,27.062652 79.991645,8.7509884 z"
style="opacity:0.13636367;color:#000000;fill:url(#radialGradient2339);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
inkscape:connector-curvature="0" /><path
style="opacity:0.31818183;color:#000000;fill:none;stroke:#ffffff;stroke-width:0.99999934;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
d="m 82.61011,27.719824 9.039995,0 c 0.770595,0 1.390967,0.62037 1.390967,1.390967 l -0.008,9.079221 c 0,0.770596 -0.596322,1.265969 -1.366918,1.265969 l -9.056083,0 c -0.770597,0 -1.390967,-0.620373 -1.390967,-1.390969 l 0,-8.954221 c 0,-0.770597 0.62037,-1.390967 1.390967,-1.390967 z"
id="rect2361"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" /><rect
style="color:#000000;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:#757575;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
id="rect3263"
width="10.001333"
height="9.9624557"
x="82.015648"
y="28.514256"
rx="0.38128215"
ry="0.38128215" /><path
style="opacity:0.39772728;color:#000000;fill:url(#radialGradient2374);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999958;marker:none;visibility:visible;display:inline;overflow:visible"
d="m 82.615,34.408261 c 3.617983,0.331177 5.527724,-1.445704 8.868152,-1.55274 L 91.507882,29.00603 82.59627,29 82.615,34.408261 z"
id="rect2363"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" /><g
transform="translate(-4.065864,2.0108349)"
id="g4739"><path
sodipodi:type="arc"
style="fill:#6adb4d;fill-opacity:1;stroke:#34781d;stroke-width:1.05264175;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4741"
sodipodi:cx="25.367456"
sodipodi:cy="8.2694378"
sodipodi:rx="5.3033009"
sodipodi:ry="5.3033009"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
transform="matrix(0.95416667,0,0,0.94583333,1.405743,0.73519001)" /><path
transform="matrix(0.77083333,0,0,0.77916666,6.0564434,2.1576238)"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
sodipodi:ry="5.3033009"
sodipodi:rx="5.3033009"
sodipodi:cy="8.2694378"
sodipodi:cx="25.367456"
id="path4743"
style="fill:none;stroke:#b3ff9a;stroke-width:1.29034114;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" /></g><g
id="g4733"
transform="translate(6.8942911,5.0160386)"><path
transform="matrix(0.95416667,0,0,0.94583333,1.405743,0.73519001)"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
sodipodi:ry="5.3033009"
sodipodi:rx="5.3033009"
sodipodi:cy="8.2694378"
sodipodi:cx="25.367456"
id="path4735"
style="fill:#6adb4d;fill-opacity:1;stroke:#34781d;stroke-width:1.05264175;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" /><path
sodipodi:type="arc"
style="fill:none;stroke:#b3ff9a;stroke-width:1.29034114;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4737"
sodipodi:cx="25.367456"
sodipodi:cy="8.2694378"
sodipodi:rx="5.3033009"
sodipodi:ry="5.3033009"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
transform="matrix(0.77083333,0,0,0.77916666,6.0564434,2.1576238)" /></g><g
transform="translate(0.88388347,7.0268736)"
id="g4727"><path
sodipodi:type="arc"
style="fill:#6adb4d;fill-opacity:1;stroke:#34781d;stroke-width:1.05264175;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4729"
sodipodi:cx="25.367456"
sodipodi:cy="8.2694378"
sodipodi:rx="5.3033009"
sodipodi:ry="5.3033009"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
transform="matrix(0.95416667,0,0,0.94583333,1.405743,0.73519001)" /><path
transform="matrix(0.77083333,0,0,0.77916666,6.0564434,2.1576238)"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
sodipodi:ry="5.3033009"
sodipodi:rx="5.3033009"
sodipodi:cy="8.2694378"
sodipodi:cx="25.367456"
id="path4731"
style="fill:none;stroke:#b3ff9a;stroke-width:1.29034114;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" /></g><g
id="g4723"
transform="translate(-10.341437,5.9662134)"><path
transform="matrix(0.95416667,0,0,0.94583333,1.405743,0.73519001)"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
sodipodi:ry="5.3033009"
sodipodi:rx="5.3033009"
sodipodi:cy="8.2694378"
sodipodi:cx="25.367456"
id="path4719"
style="fill:#6adb4d;fill-opacity:1;stroke:#34781d;stroke-width:1.05264175;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" /><path
sodipodi:type="arc"
style="fill:none;stroke:#b3ff9a;stroke-width:1.29034114;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4721"
sodipodi:cx="25.367456"
sodipodi:cy="8.2694378"
sodipodi:rx="5.3033009"
sodipodi:ry="5.3033009"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
transform="matrix(0.77083333,0,0,0.77916666,6.0564434,2.1576238)" /></g><g
id="g4695"
transform="matrix(1.1326331,0,0,0.44340824,-4.4233826,2.4215088)"><rect
style="fill:#8a8a8a;fill-opacity:1;stroke:none"
id="rect4697"
width="29.256544"
height="18.119614"
x="10.297243"
y="27.449707"
rx="1.7190553"
ry="4.3911204" /><g
id="g4699"><g
id="g4701"><rect
rx="1.7051755"
y="27.517153"
x="10.510214"
height="17.982044"
width="29.020325"
id="rect4703"
style="fill:none;stroke:#646464;stroke-width:1.41005611;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
ry="4.3556657" /></g><rect
rx="0.88575488"
y="29.624025"
x="11.337327"
height="13.83156"
width="27.319036"
id="rect4705"
style="fill:none;stroke:#b3b3b3;stroke-width:1.40048993;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
ry="2.2625546" /></g></g><g
transform="matrix(0.01936185,0,0,0.01859457,41.413021,40.621203)"
id="g4681"
style="display:inline"><rect
style="opacity:0.40206185;color:#000000;fill:url(#linearGradient4689);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
id="rect4683"
width="1339.6335"
height="478.35718"
x="-1559.2523"
y="-150.69685" /><path
inkscape:connector-curvature="0"
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient4691);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z"
id="path4685"
sodipodi:nodetypes="cccc" /><path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path4687"
d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z"
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient4693);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" /></g><g
id="g4672"
transform="translate(-1.0606602,-2.9168155)"><rect
ry="1.9470588"
rx="1.9470588"
y="27.449707"
x="10.297243"
height="18.119614"
width="29.256544"
id="rect4658"
style="fill:#dddddd;fill-opacity:1;stroke:none" /><g
id="g4667"><g
id="g4664"><rect
ry="1.9313381"
style="fill:none;stroke:#646464;stroke-width:0.99927008;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4660"
width="29.020325"
height="17.982044"
x="10.510214"
y="27.517153"
rx="1.9313381" /></g><rect
ry="1.0032353"
style="fill:none;stroke:#f6f6f6;stroke-width:0.99249077;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4662"
width="26.967867"
height="16.005489"
x="11.532422"
y="28.489801"
rx="1.0032353" /></g></g><path
transform="matrix(1.0023678,0,0,0.95596394,-1.1198557,-0.0273148)"
d="m 35,33 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
sodipodi:ry="10"
sodipodi:rx="10"
sodipodi:cy="33"
sodipodi:cx="25"
id="path4679"
style="fill:#b8b8b8;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:type="arc" /><path
sodipodi:type="arc"
style="fill:#b8b8b8;fill-opacity:1;fill-rule:evenodd;stroke:#646464;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path3820"
sodipodi:cx="25"
sodipodi:cy="33"
sodipodi:rx="10"
sodipodi:ry="10"
d="m 35,33 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
transform="matrix(0.94933484,0,0,0.95596394,0.2059695,-1.4857225)" /><path
transform="matrix(0.6928006,0,0,0.69727163,6.5972285,8.0344445)"
d="m 35,33 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
sodipodi:ry="10"
sodipodi:rx="10"
sodipodi:cy="33"
sodipodi:cx="25"
id="path4590"
style="fill:#f4f4f4;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:type="arc" /><g
id="g4644"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,29.591021,-10.924363)"><rect
style="fill:#232323;fill-opacity:1;stroke:none"
id="rect4646"
width="0.68500972"
height="1.1490486"
x="24.638252"
y="26.853086" /><rect
y="37.990021"
x="24.660349"
height="1.1490486"
width="0.68500972"
id="rect4648"
style="fill:#232323;fill-opacity:1;stroke:none" /></g><g
id="g4600"
style="fill:#a2a2a2;fill-opacity:1"
transform="translate(-0.99436894,-2.3643883)"><rect
style="fill:#a2a2a2;fill-opacity:1;stroke:none"
id="rect4602"
width="1"
height="5.9375"
x="40.742825"
y="-1.6325631"
transform="matrix(0.67898035,0.73415645,-0.73415645,0.67898035,0,0)" /><path
sodipodi:type="arc"
style="fill:#a2a2a2;fill-opacity:1;stroke:none"
id="path4604"
sodipodi:cx="25.03125"
sodipodi:cy="33.03125"
sodipodi:rx="1.03125"
sodipodi:ry="0.96875"
d="M 26.0625,33.03125 C 26.0625,33.566276 25.600794,34 25.03125,34 24.461706,34 24,33.566276 24,33.03125 c 0,-0.535026 0.461706,-0.96875 1.03125,-0.96875 0.569544,0 1.03125,0.433724 1.03125,0.96875 z"
transform="matrix(0.95714504,0,0,1.0228099,1.028519,-0.77553647)" /></g><g
id="g4596"
transform="translate(-1.0606602,-2.9168155)"><rect
transform="matrix(0.67898035,0.73415645,-0.73415645,0.67898035,0,0)"
y="-1.6325631"
x="40.742825"
height="5.9375"
width="1"
id="rect4592"
style="fill:#ff2121;fill-opacity:1;stroke:none" /><path
transform="matrix(0.95714504,0,0,1.0228099,1.028519,-0.77553647)"
d="M 26.0625,33.03125 C 26.0625,33.566276 25.600794,34 25.03125,34 24.461706,34 24,33.566276 24,33.03125 c 0,-0.535026 0.461706,-0.96875 1.03125,-0.96875 0.569544,0 1.03125,0.433724 1.03125,0.96875 z"
sodipodi:ry="0.96875"
sodipodi:rx="1.03125"
sodipodi:cy="33.03125"
sodipodi:cx="25.03125"
id="path4594"
style="fill:#ff2121;fill-opacity:1;stroke:none"
sodipodi:type="arc" /></g><path
sodipodi:type="arc"
style="fill:none;stroke:#646464;stroke-width:1.37966764;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4608"
sodipodi:cx="25"
sodipodi:cy="33"
sodipodi:rx="10"
sodipodi:ry="10"
d="m 35,33 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
transform="matrix(0.74693846,0,0,0.74919978,5.2548304,5.3595919)" /><g
id="g4628"
transform="translate(-1.0606602,-2.9168155)"><rect
y="26.853086"
x="24.638252"
height="1.1490486"
width="0.68500972"
id="rect4624"
style="fill:#232323;fill-opacity:1;stroke:none" /><rect
style="fill:#232323;fill-opacity:1;stroke:none"
id="rect4626"
width="0.68500972"
height="1.1490486"
x="24.660349"
y="37.990021" /></g><g
id="g4632"
transform="matrix(0,1,-1,0,56.927223,5.087457)"><rect
style="fill:#232323;fill-opacity:1;stroke:none"
id="rect4634"
width="0.68500972"
height="1.1490486"
x="24.638252"
y="26.853086" /><rect
y="37.990021"
x="24.660349"
height="1.1490486"
width="0.68500972"
id="rect4636"
style="fill:#232323;fill-opacity:1;stroke:none" /></g><rect
style="fill:#232323;fill-opacity:1;stroke:none"
id="rect4640"
width="0.68500972"
height="1.1490486"
x="3.9938221"
y="-44.334118"
transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)" /><rect
y="-33.197182"
x="4.0159187"
height="1.1490486"
width="0.68500972"
id="rect4642"
style="fill:#232323;fill-opacity:1;stroke:none"
transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)" /><g
transform="matrix(1.2021267,0,0,0.11694557,-6.1400423,11.401153)"
id="g4707"><rect
ry="16.649275"
rx="1.6196786"
y="27.449707"
x="10.297243"
height="18.119614"
width="29.256544"
id="rect4709"
style="fill:#d4d4d4;fill-opacity:1;stroke:none" /><g
id="g4711"><g
id="g4713"><rect
ry="16.514845"
style="fill:none;stroke:#646464;stroke-width:2.66511464;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4715"
width="29.020325"
height="17.982044"
x="10.510214"
y="27.517153"
rx="1" /></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 34 KiB

@@ -1,984 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
overflow="visible"
enable-background="new 0 0 128 129.396"
xml:space="preserve"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="scale.svg"
version="1.0"
inkscape:export-filename="/home/fva/Code/openerp/src/addons/trunk-pos-fva/point_of_sale/static/src/img/scale.png"
inkscape:export-xdpi="600"
inkscape:export-ydpi="600"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata367"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><cc:license
rdf:resource="http://creativecommons.org/licenses/publicdomain/" /><dc:title></dc:title><dc:creator><cc:Agent><dc:title>Jakub Steiner</dc:title></cc:Agent></dc:creator><dc:source>http://jimmac.musichall.cz</dc:source><dc:subject><rdf:Bag><rdf:li>home</rdf:li><rdf:li>return</rdf:li><rdf:li>go</rdf:li><rdf:li>default</rdf:li><rdf:li>user</rdf:li><rdf:li>directory</rdf:li></rdf:Bag></dc:subject><dc:contributor><cc:Agent><dc:title>Tuomas Kuosmanen</dc:title></cc:Agent></dc:contributor></cc:Work><cc:License
rdf:about="http://creativecommons.org/licenses/publicdomain/"><cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /></cc:License></rdf:RDF></metadata><defs
id="defs365"><linearGradient
inkscape:collect="always"
id="linearGradient4977"><stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="0"
id="stop4979" /><stop
style="stop-color:#ff0000;stop-opacity:0"
offset="1"
id="stop4981" /></linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 24 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="48 : 24 : 1"
inkscape:persp3d-origin="24 : 16 : 1"
id="perspective92" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient5031"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" /><linearGradient
inkscape:collect="always"
id="linearGradient5060"><stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop5062" /><stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5064" /></linearGradient><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient5029"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" /><linearGradient
id="linearGradient5048"><stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" /><stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" /><stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient5027"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" /><linearGradient
id="linearGradient2406"><stop
style="stop-color:#7c7e79;stop-opacity:1;"
offset="0"
id="stop2408" /><stop
id="stop2414"
offset="0.1724138"
style="stop-color:#848681;stop-opacity:1;" /><stop
style="stop-color:#898c86;stop-opacity:1;"
offset="1"
id="stop2410" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2390"><stop
style="stop-color:#919191;stop-opacity:1;"
offset="0"
id="stop2392" /><stop
style="stop-color:#919191;stop-opacity:0;"
offset="1"
id="stop2394" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2378"><stop
style="stop-color:#575757;stop-opacity:1;"
offset="0"
id="stop2380" /><stop
style="stop-color:#575757;stop-opacity:0;"
offset="1"
id="stop2382" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2368"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2370" /><stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2372" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2349"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2351" /><stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop2353" /></linearGradient><linearGradient
id="linearGradient2341"><stop
id="stop2343"
offset="0"
style="stop-color:#000000;stop-opacity:1;" /><stop
id="stop2345"
offset="1"
style="stop-color:#000000;stop-opacity:0;" /></linearGradient><linearGradient
id="linearGradient2329"><stop
style="stop-color:#000000;stop-opacity:0.18556701;"
offset="0"
id="stop2331" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop2333" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2319"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2321" /><stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop2323" /></linearGradient><linearGradient
id="linearGradient2307"><stop
style="stop-color:#edd400;stop-opacity:1;"
offset="0"
id="stop2309" /><stop
style="stop-color:#998800;stop-opacity:1;"
offset="1"
id="stop2311" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient2299"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2301" /><stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2303" /></linearGradient><linearGradient
id="XMLID_2_"
gradientUnits="userSpaceOnUse"
x1="80.223602"
y1="117.5205"
x2="48.046001"
y2="59.7995"
gradientTransform="matrix(0.314683,0.000000,0.000000,0.314683,4.128264,3.742874)">
<stop
offset="0"
style="stop-color:#CCCCCC"
id="stop17" />
<stop
offset="0.9831"
style="stop-color:#FFFFFF"
id="stop19" />
<midPointStop
offset="0"
style="stop-color:#CCCCCC"
id="midPointStop48" />
<midPointStop
offset="0.5"
style="stop-color:#CCCCCC"
id="midPointStop50" />
<midPointStop
offset="0.9831"
style="stop-color:#FFFFFF"
id="midPointStop52" />
</linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#XMLID_2_"
id="linearGradient1514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.336922,0,0,0.166888,143.49433,15.46151)"
x1="52.006104"
y1="166.1331"
x2="14.049017"
y2="-42.218513" /><linearGradient
id="XMLID_39_"
gradientUnits="userSpaceOnUse"
x1="64.387703"
y1="65.124001"
x2="64.387703"
y2="35.569"
gradientTransform="matrix(0.354101,0,0,0.354101,127.15013,-0.08364921)">
<stop
offset="0"
style="stop-color:#FFFFFF"
id="stop336" />
<stop
offset="0.8539"
style="stop-color:#FF6200"
id="stop338" />
<stop
offset="1"
style="stop-color:#F25D00"
id="stop340" />
<midPointStop
offset="0"
style="stop-color:#FFFFFF"
id="midPointStop335" />
<midPointStop
offset="0.5"
style="stop-color:#FFFFFF"
id="midPointStop337" />
<midPointStop
offset="0.8539"
style="stop-color:#FF6200"
id="midPointStop339" />
<midPointStop
offset="0.5"
style="stop-color:#FF6200"
id="midPointStop341" />
<midPointStop
offset="1"
style="stop-color:#F25D00"
id="midPointStop343" />
</linearGradient><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2299"
id="radialGradient2305"
cx="7.5326638"
cy="24.202574"
fx="7.5326638"
fy="24.202574"
r="8.2452128"
gradientTransform="matrix(4.100086,0,0,4.201322,100.09639,-78.53967)"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2307"
id="radialGradient2313"
cx="19.985598"
cy="36.77816"
fx="19.985598"
fy="36.77816"
r="1.0821035"
gradientTransform="matrix(1.125263,0,0,0.982744,122.08278,0.565787)"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2319"
id="radialGradient2325"
cx="20.443665"
cy="37.425829"
fx="20.443665"
fy="37.425829"
r="1.0821035"
gradientTransform="matrix(1.125263,0,0,0.982744,122.08278,0.731106)"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2329"
id="linearGradient2335"
x1="17.602522"
y1="26.057423"
x2="17.682528"
y2="32.654099"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.898789,0,0,1.071914,125.98948,-2.080838)" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2341"
id="radialGradient2339"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(4.100086,0,0,-4.201322,120.31334,105.3535)"
cx="11.68129"
cy="19.554111"
fx="11.68129"
fy="19.554111"
r="8.2452126" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2349"
id="radialGradient2355"
cx="24.023088"
cy="40.56913"
fx="24.023088"
fy="40.56913"
r="16.28684"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.431250,1.157278e-15,23.07369)"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2368"
id="radialGradient2374"
cx="29.913452"
cy="30.442923"
fx="29.913452"
fy="30.442923"
r="4.0018832"
gradientTransform="matrix(3.751495,0,0,3.147818,43.502383,-65.70704)"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2378"
id="radialGradient2384"
cx="24.195112"
cy="10.577631"
fx="24.195112"
fy="10.577631"
r="15.242914"
gradientTransform="matrix(1.125263,-3.585417e-8,4.269819e-8,1.340059,122.50475,1.355395)"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2390"
id="linearGradient2396"
x1="30.603519"
y1="37.337803"
x2="30.603519"
y2="36.112415"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.263867,0,0,0.859794,-6.499556,8.390924)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2406"
id="linearGradient2412"
x1="17.850183"
y1="28.939463"
x2="19.040216"
y2="41.03223"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.888785,0,0,1.08932,127.92244,-1.524336)" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient4689"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient4691"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient4693"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient4894"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient4896"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient4898"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" /><filter
inkscape:collect="always"
id="filter4971"
x="-0.064853556"
width="1.1297071"
y="-1.9456067"
height="4.8912134"><feGaussianBlur
inkscape:collect="always"
stdDeviation="0.81066946"
id="feGaussianBlur4973" /></filter><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4977"
id="linearGradient4983"
x1="23.6875"
y1="32"
x2="23.75"
y2="45.25"
gradientUnits="userSpaceOnUse" /></defs><sodipodi:namedview
inkscape:cy="-2.746436"
inkscape:cx="31.130127"
inkscape:zoom="8"
inkscape:window-height="1176"
inkscape:window-width="1855"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="0.21568627"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:showpageshadow="false"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:current-layer="svg2"
fill="#555753"
showgrid="true"
stroke="#a40000"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-global="false"
inkscape:window-maximized="1"><inkscape:grid
type="xygrid"
id="grid3818" /></sodipodi:namedview>
<g
style="display:inline"
id="g5022"
transform="matrix(0.02158196,0,0,0.01859457,168.63396,41.63767)"><rect
y="-150.69685"
x="-1559.2523"
height="478.35718"
width="1339.6335"
id="rect4173"
style="opacity:0.40206185;color:#000000;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" /><path
sodipodi:nodetypes="cccc"
id="path5058"
d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z"
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
inkscape:connector-curvature="0" /><path
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z"
id="path5018"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" /></g><path
style="color:#000000;fill:url(#linearGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:#757575;stroke-width:1.0000006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
d="m 147.13103,8.1833733 5.95746,0 c 0.83973,0 13.88647,15.4353277 13.88647,16.3406587 l -0.44352,18.496745 c 0,0.905333 -0.67603,1.634177 -1.51576,1.634177 l -31.45728,0 c -0.83973,0 -1.51576,-0.728844 -1.51576,-1.634177 l 0.0565,-18.496745 c 0,-0.905331 14.19218,-16.3406587 15.03191,-16.3406587 z"
id="rect1512"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" /><path
style="fill:none"
id="path5"
d="m 172.47503,45.735573 -45.3249,0 0,-45.32489746 45.3249,0 0,45.32489746 z"
inkscape:connector-curvature="0" /><path
style="fill:url(#linearGradient2335);fill-opacity:1;fill-rule:evenodd"
id="path2327"
d="m 148.51145,29 -0.0457,15.090942 -11.84279,0 L 136.51145,29 l 12,0 z"
clip-rule="evenodd"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" /><path
sodipodi:nodetypes="ccccccccc"
id="path2357"
d="m 147.29191,9.405584 5.5591,0 c 0.78358,0 13.00087,14.399588 13.00087,15.244172 l -0.34716,18.212311 c 0,0.459259 -0.14374,0.653465 -0.51237,0.653465 l -31.38721,0.01428 c -0.36863,0 -0.58396,-0.07992 -0.58396,-0.45355 l 0.21534,-18.426506 c 0,-0.844584 13.27181,-15.244172 14.05539,-15.244172 z"
style="opacity:0.3125;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
inkscape:connector-curvature="0" /><path
clip-rule="evenodd"
d="m 132.71898,27.943053 -0.0543,2.595194 18.36817,-13.179254 15.28639,11.154428 0.0713,-0.311714 -16.37045,-15.904131 -17.30116,15.645477 z"
id="path23"
style="opacity:0.2;fill:url(#radialGradient2384);fill-opacity:1;fill-rule:evenodd"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" /><path
clip-rule="evenodd"
d="m 147.51145,30 0,14.090942 -9.81103,0 L 137.51145,30 l 10,0 z"
id="path188"
style="fill:url(#linearGradient2412);fill-opacity:1;fill-rule:evenodd"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" /><path
style="opacity:0.40909089;fill:url(#radialGradient2325);fill-opacity:1;fill-rule:evenodd"
id="path2315"
d="m 145.08831,36.44767 c 0.67279,0 1.21662,0.474605 1.21662,1.058507 0,0.589811 -0.54383,1.068355 -1.21662,1.068355 -0.67227,0 -1.21869,-0.478544 -1.21869,-1.068355 5.2e-4,-0.583902 0.54642,-1.058507 1.21869,-1.058507 z"
clip-rule="evenodd"
inkscape:connector-curvature="0" /><path
clip-rule="evenodd"
d="m 144.97377,35.932229 c 0.67279,0 1.21661,0.474605 1.21661,1.058507 0,0.589809 -0.54382,1.068353 -1.21661,1.068353 -0.67228,0 -1.21869,-0.478544 -1.21869,-1.068353 5.2e-4,-0.583902 0.54641,-1.058507 1.21869,-1.058507 z"
id="path217"
style="fill:url(#radialGradient2313);fill-opacity:1;fill-rule:evenodd"
inkscape:connector-curvature="0" /><path
d="m 149.9592,11.559337 18.92706,17.169868 0.49468,0.391991 0.40368,-0.171385 -0.37287,-0.761673 -0.27762,-0.223436 -19.17493,-15.572306 -19.38951,15.743335 -0.23761,0.14412 -0.21671,0.706786 0.43342,0.129248 0.38456,-0.308423 19.02585,-17.248125 z"
id="path342"
style="fill:url(#XMLID_39_)"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" /><path
style="fill:#ef2929;stroke:#a40000"
id="path362"
d="m 149.84162,2.2713382 -21.88174,18.1013368 -0.62473,7.165928 1.99994,2.064323 c 0,0 20.40738,-17.157285 20.62409,-17.327963 l 19.63254,17.54326 1.89843,-2.323997 -1.61579,-7.111374 -19.91518,-18.2159732 -0.11756,0.1044594 z"
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0" />
<path
style="opacity:0.40909089;color:#000000;fill:url(#radialGradient2305);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
d="M 128.3528,20.613129 128.06124,27.236494 149.88067,8.980075 149.81034,3.0867443 128.3528,20.613129 z"
id="path1536"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" /><path
sodipodi:nodetypes="ccccc"
id="path2337"
d="m 149.99522,8.7509884 0.0995,-5.8411017 19.32896,17.6519533 1.49181,6.500812 -20.92023,-18.3116636 z"
style="opacity:0.13636367;color:#000000;fill:url(#radialGradient2339);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
inkscape:connector-curvature="0" /><path
style="opacity:0.31818183;color:#000000;fill:none;stroke:#ffffff;stroke-width:0.99999934;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
d="m 152.61368,27.719824 9.04,0 c 0.77059,0 1.39096,0.62037 1.39096,1.390967 l -0.008,9.079221 c 0,0.770596 -0.59632,1.265969 -1.36691,1.265969 l -9.05609,0 c -0.77059,0 -1.39096,-0.620373 -1.39096,-1.390969 l 0,-8.954221 c 0,-0.770597 0.62037,-1.390967 1.39096,-1.390967 z"
id="rect2361"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" /><rect
style="color:#000000;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:#757575;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
id="rect3263"
width="10.001333"
height="9.9624557"
x="152.01923"
y="28.514256"
rx="0.38128215"
ry="0.38128215" /><path
style="opacity:0.39772728;color:#000000;fill:url(#radialGradient2374);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999958;marker:none;visibility:visible;display:inline;overflow:visible"
d="m 152.61857,34.408261 c 3.61798,0.331177 5.52773,-1.445704 8.86815,-1.55274 l 0.0247,-3.849491 -8.91161,-0.006 0.0187,5.408261 z"
id="rect2363"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" /><g
transform="translate(65.937707,2.0108349)"
id="g4739"><path
sodipodi:type="arc"
style="fill:#6adb4d;fill-opacity:1;stroke:#34781d;stroke-width:1.05264175;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4741"
sodipodi:cx="25.367456"
sodipodi:cy="8.2694378"
sodipodi:rx="5.3033009"
sodipodi:ry="5.3033009"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
transform="matrix(0.95416667,0,0,0.94583333,1.405743,0.73519001)" /><path
transform="matrix(0.77083333,0,0,0.77916666,6.0564434,2.1576238)"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
sodipodi:ry="5.3033009"
sodipodi:rx="5.3033009"
sodipodi:cy="8.2694378"
sodipodi:cx="25.367456"
id="path4743"
style="fill:none;stroke:#b3ff9a;stroke-width:1.29034114;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" /></g><g
id="g4733"
transform="translate(76.897863,5.0160386)"><path
transform="matrix(0.95416667,0,0,0.94583333,1.405743,0.73519001)"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
sodipodi:ry="5.3033009"
sodipodi:rx="5.3033009"
sodipodi:cy="8.2694378"
sodipodi:cx="25.367456"
id="path4735"
style="fill:#6adb4d;fill-opacity:1;stroke:#34781d;stroke-width:1.05264175;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" /><path
sodipodi:type="arc"
style="fill:none;stroke:#b3ff9a;stroke-width:1.29034114;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4737"
sodipodi:cx="25.367456"
sodipodi:cy="8.2694378"
sodipodi:rx="5.3033009"
sodipodi:ry="5.3033009"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
transform="matrix(0.77083333,0,0,0.77916666,6.0564434,2.1576238)" /></g><g
transform="translate(70.887455,7.0268736)"
id="g4727"><path
sodipodi:type="arc"
style="fill:#6adb4d;fill-opacity:1;stroke:#34781d;stroke-width:1.05264175;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4729"
sodipodi:cx="25.367456"
sodipodi:cy="8.2694378"
sodipodi:rx="5.3033009"
sodipodi:ry="5.3033009"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
transform="matrix(0.95416667,0,0,0.94583333,1.405743,0.73519001)" /><path
transform="matrix(0.77083333,0,0,0.77916666,6.0564434,2.1576238)"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
sodipodi:ry="5.3033009"
sodipodi:rx="5.3033009"
sodipodi:cy="8.2694378"
sodipodi:cx="25.367456"
id="path4731"
style="fill:none;stroke:#b3ff9a;stroke-width:1.29034114;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" /></g><g
id="g4723"
transform="translate(59.662134,5.9662134)"><path
transform="matrix(0.95416667,0,0,0.94583333,1.405743,0.73519001)"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
sodipodi:ry="5.3033009"
sodipodi:rx="5.3033009"
sodipodi:cy="8.2694378"
sodipodi:cx="25.367456"
id="path4719"
style="fill:#6adb4d;fill-opacity:1;stroke:#34781d;stroke-width:1.05264175;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" /><path
sodipodi:type="arc"
style="fill:none;stroke:#b3ff9a;stroke-width:1.29034114;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4721"
sodipodi:cx="25.367456"
sodipodi:cy="8.2694378"
sodipodi:rx="5.3033009"
sodipodi:ry="5.3033009"
d="m 30.670757,8.2694378 c 0,2.9289322 -2.374368,5.3033012 -5.303301,5.3033012 -2.928932,0 -5.3033,-2.374369 -5.3033,-5.3033012 0,-2.9289322 2.374368,-5.3033009 5.3033,-5.3033009 2.928933,0 5.303301,2.3743687 5.303301,5.3033009 z"
transform="matrix(0.77083333,0,0,0.77916666,6.0564434,2.1576238)" /></g><g
id="g4695"
transform="matrix(1.1326331,0,0,0.44340824,65.580189,2.4215088)"><rect
style="fill:#8a8a8a;fill-opacity:1;stroke:none"
id="rect4697"
width="29.256544"
height="18.119614"
x="10.297243"
y="27.449707"
rx="1.7190553"
ry="4.3911204" /><g
id="g4699"><g
id="g4701"><rect
rx="1.7051755"
y="27.517153"
x="10.510214"
height="17.982044"
width="29.020325"
id="rect4703"
style="fill:none;stroke:#646464;stroke-width:1.41005611;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
ry="4.3556657" /></g><rect
rx="0.88575488"
y="29.624025"
x="11.337327"
height="13.83156"
width="27.319036"
id="rect4705"
style="fill:none;stroke:#b3b3b3;stroke-width:1.40048993;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
ry="2.2625546" /></g></g><g
transform="matrix(0.01936185,0,0,0.01859457,111.41659,40.621203)"
id="g4681"
style="display:inline"><rect
style="opacity:0.40206185;color:#000000;fill:url(#linearGradient4689);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
id="rect4683"
width="1339.6335"
height="478.35718"
x="-1559.2523"
y="-150.69685" /><path
inkscape:connector-curvature="0"
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient4691);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z"
id="path4685"
sodipodi:nodetypes="cccc" /><path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path4687"
d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z"
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient4693);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" /></g><g
id="g4672"
transform="translate(68.942911,-2.9168155)"><rect
ry="1.9470588"
rx="1.9470588"
y="27.449707"
x="10.297243"
height="18.119614"
width="29.256544"
id="rect4658"
style="fill:#dddddd;fill-opacity:1;stroke:none" /><g
id="g4667"><g
id="g4664"><rect
ry="1.9313381"
style="fill:none;stroke:#646464;stroke-width:0.99927008;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4660"
width="29.020325"
height="17.982044"
x="10.510214"
y="27.517153"
rx="1.9313381" /></g><rect
ry="1.0032353"
style="fill:none;stroke:#f6f6f6;stroke-width:0.99249077;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4662"
width="26.967867"
height="16.005489"
x="11.532422"
y="28.489801"
rx="1.0032353" /></g></g><path
transform="matrix(1.0023678,0,0,0.95596394,68.883716,-0.0273148)"
d="m 35,33 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
sodipodi:ry="10"
sodipodi:rx="10"
sodipodi:cy="33"
sodipodi:cx="25"
id="path4679"
style="fill:#b8b8b8;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:type="arc" /><path
sodipodi:type="arc"
style="fill:#b8b8b8;fill-opacity:1;fill-rule:evenodd;stroke:#646464;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path3820"
sodipodi:cx="25"
sodipodi:cy="33"
sodipodi:rx="10"
sodipodi:ry="10"
d="m 35,33 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
transform="matrix(0.94933484,0,0,0.95596394,70.209541,-1.4857225)" /><path
transform="matrix(0.6928006,0,0,0.69727163,76.6008,8.0344445)"
d="m 35,33 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
sodipodi:ry="10"
sodipodi:rx="10"
sodipodi:cy="33"
sodipodi:cx="25"
id="path4590"
style="fill:#f4f4f4;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:type="arc" /><g
id="g4644"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,99.594592,-10.924363)"><rect
style="fill:#232323;fill-opacity:1;stroke:none"
id="rect4646"
width="0.68500972"
height="1.1490486"
x="24.638252"
y="26.853086" /><rect
y="37.990021"
x="24.660349"
height="1.1490486"
width="0.68500972"
id="rect4648"
style="fill:#232323;fill-opacity:1;stroke:none" /></g><g
id="g4600"
style="fill:#a2a2a2;fill-opacity:1"
transform="translate(69.009202,-2.3643883)"><rect
style="fill:#a2a2a2;fill-opacity:1;stroke:none"
id="rect4602"
width="1"
height="5.9375"
x="40.742825"
y="-1.6325631"
transform="matrix(0.67898035,0.73415645,-0.73415645,0.67898035,0,0)" /><path
sodipodi:type="arc"
style="fill:#a2a2a2;fill-opacity:1;stroke:none"
id="path4604"
sodipodi:cx="25.03125"
sodipodi:cy="33.03125"
sodipodi:rx="1.03125"
sodipodi:ry="0.96875"
d="M 26.0625,33.03125 C 26.0625,33.566276 25.600794,34 25.03125,34 24.461706,34 24,33.566276 24,33.03125 c 0,-0.535026 0.461706,-0.96875 1.03125,-0.96875 0.569544,0 1.03125,0.433724 1.03125,0.96875 z"
transform="matrix(0.95714504,0,0,1.0228099,1.028519,-0.77553647)" /></g><g
id="g4596"
transform="translate(68.942911,-2.9168155)"><rect
transform="matrix(0.67898035,0.73415645,-0.73415645,0.67898035,0,0)"
y="-1.6325631"
x="40.742825"
height="5.9375"
width="1"
id="rect4592"
style="fill:#ff2121;fill-opacity:1;stroke:none" /><path
transform="matrix(0.95714504,0,0,1.0228099,1.028519,-0.77553647)"
d="M 26.0625,33.03125 C 26.0625,33.566276 25.600794,34 25.03125,34 24.461706,34 24,33.566276 24,33.03125 c 0,-0.535026 0.461706,-0.96875 1.03125,-0.96875 0.569544,0 1.03125,0.433724 1.03125,0.96875 z"
sodipodi:ry="0.96875"
sodipodi:rx="1.03125"
sodipodi:cy="33.03125"
sodipodi:cx="25.03125"
id="path4594"
style="fill:#ff2121;fill-opacity:1;stroke:none"
sodipodi:type="arc" /></g><path
sodipodi:type="arc"
style="fill:none;stroke:#646464;stroke-width:1.37966764;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path4608"
sodipodi:cx="25"
sodipodi:cy="33"
sodipodi:rx="10"
sodipodi:ry="10"
d="m 35,33 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
transform="matrix(0.74693846,0,0,0.74919978,75.258402,5.3595919)" /><g
id="g4628"
transform="translate(68.942911,-2.9168155)"><rect
y="26.853086"
x="24.638252"
height="1.1490486"
width="0.68500972"
id="rect4624"
style="fill:#232323;fill-opacity:1;stroke:none" /><rect
style="fill:#232323;fill-opacity:1;stroke:none"
id="rect4626"
width="0.68500972"
height="1.1490486"
x="24.660349"
y="37.990021" /></g><g
id="g4632"
transform="matrix(0,1,-1,0,126.93079,5.087457)"><rect
style="fill:#232323;fill-opacity:1;stroke:none"
id="rect4634"
width="0.68500972"
height="1.1490486"
x="24.638252"
y="26.853086" /><rect
y="37.990021"
x="24.660349"
height="1.1490486"
width="0.68500972"
id="rect4636"
style="fill:#232323;fill-opacity:1;stroke:none" /></g><rect
style="fill:#232323;fill-opacity:1;stroke:none"
id="rect4640"
width="0.68500972"
height="1.1490486"
x="-45.50618"
y="-93.834114"
transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)" /><rect
y="-82.697182"
x="-45.484081"
height="1.1490486"
width="0.68500972"
id="rect4642"
style="fill:#232323;fill-opacity:1;stroke:none"
transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)" /><g
transform="matrix(1.2021267,0,0,0.11694557,63.863529,11.401153)"
id="g4707"><rect
ry="16.649275"
rx="1.6196786"
y="27.449707"
x="10.297243"
height="18.119614"
width="29.256544"
id="rect4709"
style="fill:#d4d4d4;fill-opacity:1;stroke:none" /><g
id="g4711"><g
id="g4713"><rect
ry="16.514845"
style="fill:none;stroke:#646464;stroke-width:2.66511464;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4715"
width="29.020325"
height="17.982044"
x="10.510214"
y="27.517153"
rx="1" /></g></g></g><g
id="g4985"
transform="translate(0,-11.125)"><g
transform="matrix(0.01936185,0,0,0.01859457,41.505849,40.621203)"
id="g4874"
style="display:inline"><rect
style="opacity:0.40206185;color:#000000;fill:url(#linearGradient4894);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
id="rect4876"
width="1339.6335"
height="478.35718"
x="-1559.2523"
y="-150.69685" /><path
inkscape:connector-curvature="0"
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient4896);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z"
id="path4878"
sodipodi:nodetypes="cccc" /><path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path4880"
d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z"
style="opacity:0.40206185;color:#000000;fill:url(#radialGradient4898);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" /></g><g
id="g4882"
transform="translate(-0.96783034,-2.9168155)"><rect
ry="1.9470588"
rx="1.9470588"
y="27.449707"
x="10.297243"
height="18.119614"
width="29.256544"
id="rect4884"
style="fill:#eaeaea;fill-opacity:1;stroke:none" /><g
id="g4886"><g
id="g4888"><rect
ry="1.9313381"
style="fill:none;stroke:#646464;stroke-width:0.99927008;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4890"
width="29.020325"
height="17.982044"
x="10.510214"
y="27.517153"
rx="1.9313381" /></g><rect
ry="1.0032353"
style="fill:none;stroke:#ffffff;stroke-width:0.99249077;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4892"
width="26.967867"
height="16.005489"
x="11.532422"
y="28.489801"
rx="1.0032353" /></g></g><g
transform="matrix(1,0,0,0.9039548,0,2.5932203)"
id="g4922"><rect
style="fill:#000000;fill-opacity:1;stroke:none"
id="rect4900"
width="1"
height="11.0625"
x="13.0625"
y="27" /><rect
y="27"
x="15.0625"
height="11.0625"
width="1"
id="rect4902"
style="fill:#000000;fill-opacity:1;stroke:none" /><rect
style="fill:#000000;fill-opacity:1;stroke:none"
id="rect4904"
width="1"
height="11.0625"
x="18"
y="27" /><rect
y="27"
x="19.9375"
height="11.0625"
width="2"
id="rect4906"
style="fill:#000000;fill-opacity:1;stroke:none" /><rect
y="27"
x="22.9375"
height="11.0625"
width="1"
id="rect4908"
style="fill:#000000;fill-opacity:1;stroke:none" /><rect
style="fill:#000000;fill-opacity:1;stroke:none"
id="rect4910"
width="2.0625"
height="11.0625"
x="25.9375"
y="27" /><rect
y="27"
x="28.9375"
height="11.0625"
width="1.125"
id="rect4912"
style="fill:#000000;fill-opacity:1;stroke:none" /><rect
style="fill:#000000;fill-opacity:1;stroke:none"
id="rect4914"
width="1.125"
height="11.0625"
x="30.9375"
y="27" /><rect
y="27"
x="33.9375"
height="11.0625"
width="1.125"
id="rect4916"
style="fill:#000000;fill-opacity:1;stroke:none" /></g><text
sodipodi:linespacing="125%"
id="text4918"
y="40.195068"
x="12.981453"
style="font-size:36.59571838px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:3.65957189px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-family:Inconsolata;-inkscape-font-specification:Inconsolata Medium"
y="40.195068"
x="12.981453"
id="tspan4920"
sodipodi:role="line">5 92102431 8</tspan></text>
<rect
y="31.0625"
x="9.0625"
height="1"
width="30"
id="rect4933"
style="fill:#ff0000;fill-opacity:1;stroke:none" /><rect
style="fill:#ff0000;fill-opacity:1;stroke:none;filter:url(#filter4971)"
id="rect4957"
width="30"
height="1"
x="9.0625"
y="31.0625" /><path
inkscape:connector-curvature="0"
id="path4975"
d="M 9.0625,32.0625 20,47.875 28.9375,47.9375 39,32.0625 z"
style="opacity:0.29787233;fill:url(#linearGradient4983);fill-opacity:1;stroke:none" /></g></svg>

Before

Width:  |  Height:  |  Size: 41 KiB

@@ -1,201 +0,0 @@
<?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:xlink="http://www.w3.org/1999/xlink"
version="1.1"
width="48"
height="48"
id="svg11300">
<defs
id="defs3">
<linearGradient
id="linearGradient1442">
<stop
id="stop1444"
style="stop-color:#73d216;stop-opacity:1"
offset="0" />
<stop
id="stop1446"
style="stop-color:#4e9a06;stop-opacity:1"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient8662">
<stop
id="stop8664"
style="stop-color:#000000;stop-opacity:1"
offset="0" />
<stop
id="stop8666"
style="stop-color:#000000;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient8650">
<stop
id="stop8652"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop8654"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
cx="24.837126"
cy="36.421127"
r="15.644737"
fx="24.837126"
fy="36.421127"
id="radialGradient1444"
xlink:href="#linearGradient8662"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.536723,0,16.87306)" />
<radialGradient
cx="15.987216"
cy="1.5350308"
r="17.171415"
fx="15.987216"
fy="1.5350308"
id="radialGradient3006"
xlink:href="#linearGradient8650"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,2.046729,1.55761,0,2.91297,-22.93354)" />
<radialGradient
cx="35.292667"
cy="20.494493"
r="16.9562"
fx="35.292667"
fy="20.494493"
id="radialGradient3009"
xlink:href="#linearGradient1442"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,0.843022,-1.020168,0,46.422124,1.41307)" />
<linearGradient
x1="46.5"
y1="27"
x2="80.5"
y2="27"
id="linearGradient3785"
xlink:href="#linearGradient1442"
gradientUnits="userSpaceOnUse" />
<linearGradient
x1="47.703129"
y1="26.804157"
x2="58.338215"
y2="26.804157"
id="linearGradient3807"
xlink:href="#linearGradient8650"
gradientUnits="userSpaceOnUse" />
<linearGradient
x1="58.968754"
y1="24.609373"
x2="75.09375"
y2="24.609373"
id="linearGradient3817"
xlink:href="#linearGradient8650"
gradientUnits="userSpaceOnUse" />
<linearGradient
x1="46.5"
y1="27"
x2="80.5"
y2="27"
id="linearGradient3825"
xlink:href="#linearGradient1442"
gradientUnits="userSpaceOnUse" />
<linearGradient
x1="47.703129"
y1="26.804157"
x2="58.338215"
y2="26.804157"
id="linearGradient3827"
xlink:href="#linearGradient8650"
gradientUnits="userSpaceOnUse" />
<linearGradient
x1="58.968754"
y1="24.609373"
x2="75.09375"
y2="24.609373"
id="linearGradient3829"
xlink:href="#linearGradient8650"
gradientUnits="userSpaceOnUse" />
</defs>
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
<dc:title></dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>go</rdf:li>
<rdf:li>lower</rdf:li>
<rdf:li>down</rdf:li>
<rdf:li>arrow</rdf:li>
<rdf:li>pointer</rdf:li>
<rdf:li>&gt;</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:contributor>
<cc:Agent>
<dc:title>Andreas Nilsson</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/publicdomain/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1">
<path
d="m 40.481863,36.421127 a 15.644737,8.3968935 0 1 1 -31.2894745,0 15.644737,8.3968935 0 1 1 31.2894745,0 z"
transform="matrix(0.90685456,0,0,0.595458,-2.8361621,15.68775)"
id="path8660"
style="opacity:0.20454544;color:#000000;fill:url(#radialGradient1444);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
<g
transform="translate(-40.03125,-3.65625)"
id="g3819">
<path
d="M 52,23 47,28 59,40 80,19 75,14 59,30 z"
id="path3002"
style="fill:url(#linearGradient3825);fill-opacity:1;stroke:#3a7304;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
d="M 52,24.417969 48.411612,28 59,38.601563 78.585938,19 75,15.414063 59,31.40625 z"
id="path3787"
style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
d="m 51.968752,23.734374 -4.265625,4.25 0.995256,1.104854 8.485282,0.04052 z"
id="path3799"
style="opacity:0.34893619;fill:url(#linearGradient3827);fill-opacity:1;stroke:none" />
<path
d="m 60.913297,28.932676 8.536072,0.01148 9.931219,-9.897748 -4.349335,-4.296415 z"
id="path3809"
style="opacity:0.26382979;fill:url(#linearGradient3829);fill-opacity:1;stroke:none" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 760 B

@@ -0,0 +1,634 @@
openerp.point_of_sale.load_chrome = function load_chrome(instance, module){ //module is instance.point_of_sale
"use strict";
var QWeb = instance.web.qweb;
var _t = instance.web._t;
/* -------- The Order Selector -------- */
// Allows the cashier to create / delete and
// switch between orders.
module.OrderSelectorWidget = module.PosBaseWidget.extend({
template: 'OrderSelectorWidget',
init: function(parent, options) {
this._super(parent, options);
this.pos.get('orders').bind('add remove change',this.renderElement,this);
this.pos.bind('change:selectedOrder',this.renderElement,this);
},
get_order_by_uid: function(uid) {
var orders = this.pos.get_order_list();
for (var i = 0; i < orders.length; i++) {
if (orders[i].uid === uid) {
return orders[i];
}
}
return undefined;
},
order_click_handler: function(event,$el) {
var order = this.get_order_by_uid($el.data('uid'));
if (order) {
this.pos.set_order(order);
}
},
neworder_click_handler: function(event, $el) {
this.pos.add_new_order();
},
deleteorder_click_handler: function(event, $el) {
var self = this;
var order = this.pos.get_order();
if (!order) {
return;
} else if ( !order.is_empty() ){
this.gui.show_popup('confirm',{
'title': _t('Destroy Current Order ?'),
'body': _t('You will lose any data associated with the current order'),
confirm: function(){
self.pos.delete_current_order();
},
});
} else {
this.pos.delete_current_order();
}
},
renderElement: function(){
var self = this;
this._super();
this.$('.order-button.select-order').click(function(event){
self.order_click_handler(event,$(this));
});
this.$('.neworder-button').click(function(event){
self.neworder_click_handler(event,$(this));
});
this.$('.deleteorder-button').click(function(event){
self.deleteorder_click_handler(event,$(this));
});
},
});
/* ------- The User Name Widget ------- */
// Displays the current cashier's name and allows
// to switch between cashiers.
module.UsernameWidget = module.PosBaseWidget.extend({
template: 'UsernameWidget',
init: function(parent, options){
var options = options || {};
this._super(parent,options);
},
renderElement: function(){
var self = this;
this._super();
this.$el.click(function(){
self.click_username();
});
},
click_username: function(){
var self = this;
this.gui.select_user({
'security': true,
'current_user': this.pos.get_cashier(),
'title': _t('Change Cashier'),
}).then(function(user){
self.pos.set_cashier(user);
self.renderElement();
});
},
get_name: function(){
var user = this.pos.cashier || this.pos.user;
if(user){
return user.name;
}else{
return "";
}
},
});
/* -------- The Header Button --------- */
// Used to quickly add buttons with simple
// labels and actions to the point of sale
// header.
module.HeaderButtonWidget = module.PosBaseWidget.extend({
template: 'HeaderButtonWidget',
init: function(parent, options){
options = options || {};
this._super(parent, options);
this.action = options.action;
this.label = options.label;
},
renderElement: function(){
var self = this;
this._super();
if(this.action){
this.$el.click(function(){
self.action();
});
}
},
show: function(){ this.$el.removeClass('oe_hidden'); },
hide: function(){ this.$el.addClass('oe_hidden'); },
});
/* --------- The Debug Widget --------- */
// The debug widget lets the user control
// and monitor the hardware and software status
// without the use of the proxy, or to access
// the raw locally stored db values, useful
// for debugging
module.DebugWidget = module.PosBaseWidget.extend({
template: "DebugWidget",
eans:{
admin_badge: '0410100000006',
client_badge: '0420200000004',
invalid_ean: '1232456',
soda_33cl: '5449000000996',
oranges_kg: '2100002031410',
lemon_price: '2301000001560',
unknown_product: '9900000000004',
},
events:[
'open_cashbox',
'print_receipt',
'scale_read',
],
minimized: false,
init: function(parent,options){
this._super(parent,options);
var self = this;
this.minimized = false;
// for dragging the debug widget around
this.dragging = false;
this.dragpos = {x:0, y:0};
function eventpos(event){
if(event.touches && event.touches[0]){
return {x: event.touches[0].screenX, y: event.touches[0].screenY};
}else{
return {x: event.screenX, y: event.screenY};
}
}
this.dragend_handler = function(event){
self.dragging = false;
};
this.dragstart_handler = function(event){
self.dragging = true;
self.dragpos = eventpos(event);
};
this.dragmove_handler = function(event){
if(self.dragging){
var top = this.offsetTop;
var left = this.offsetLeft;
var pos = eventpos(event);
var dx = pos.x - self.dragpos.x;
var dy = pos.y - self.dragpos.y;
self.dragpos = pos;
this.style.right = 'auto';
this.style.bottom = 'auto';
this.style.left = left + dx + 'px';
this.style.top = top + dy + 'px';
}
event.preventDefault();
event.stopPropagation();
};
},
start: function(){
var self = this;
this.el.addEventListener('mouseleave', this.dragend_handler);
this.el.addEventListener('mouseup', this.dragend_handler);
this.el.addEventListener('touchend', this.dragend_handler);
this.el.addEventListener('touchcancel',this.dragend_handler);
this.el.addEventListener('mousedown', this.dragstart_handler);
this.el.addEventListener('touchstart', this.dragstart_handler);
this.el.addEventListener('mousemove', this.dragmove_handler);
this.el.addEventListener('touchmove', this.dragmove_handler);
this.$('.toggle').click(function(){
var content = self.$('.content');
var bg = self.$el;
if(!self.minimized){
content.animate({'height':'0'},200);
}else{
content.css({'height':'auto'});
}
self.minimized = !self.minimized;
});
this.$('.button.set_weight').click(function(){
var kg = Number(self.$('input.weight').val());
if(!isNaN(kg)){
self.pos.proxy.debug_set_weight(kg);
}
});
this.$('.button.reset_weight').click(function(){
self.$('input.weight').val('');
self.pos.proxy.debug_reset_weight();
});
this.$('.button.custom_ean').click(function(){
var ean = self.pos.barcode_reader.sanitize_ean(self.$('input.ean').val() || '0');
self.$('input.ean').val(ean);
self.pos.barcode_reader.scan(ean);
});
this.$('.button.reference').click(function(){
self.pos.barcode_reader.scan(self.$('input.ean').val());
});
this.$('.button.show_orders').click(function(){
self.gui.show_popup('unsent-orders');
});
this.$('.button.delete_orders').click(function(){
self.gui.show_popup('confirm',{
'title': _t('Delete Unsent Orders ?'),
'body': _t('This operation will permanently destroy all unsent orders from the local storage. You will lose all the data. This operation cannot be undone.'),
confirm: function(){
self.pos.db.remove_all_orders();
self.pos.set({synch: { state:'connected', pending: 0 }});
},
});
});
this.$('.button.show_unpaid_orders').click(function(){
self.gui.show_popup('unpaid-orders');
});
this.$('.button.delete_unpaid_orders').click(function(){
self.gui.show_popup('confirm',{
'title': _t('Delete Unpaid Orders ?'),
'body': _t('This operation will permanently destroy all unpaid orders from all sessions that have been put in the local storage. You will lose all the data and exit the point of sale. This operation cannot be undone.'),
confirm: function(){
self.pos.db.remove_all_unpaid_orders();
window.location = '/';
},
});
});
_.each(this.eans, function(ean, name){
self.$('.button.'+name).click(function(){
self.$('input.ean').val(ean);
self.pos.barcode_reader.scan(ean);
});
});
_.each(this.events, function(name){
self.pos.proxy.add_notification(name,function(){
self.$('.event.'+name).stop().clearQueue().css({'background-color':'#6CD11D'});
self.$('.event.'+name).animate({'background-color':'#1E1E1E'},2000);
});
});
},
});
/* --------- The Status Widget -------- */
// Base class for widgets that want to display
// status in the point of sale header.
module.StatusWidget = module.PosBaseWidget.extend({
status: ['connected','connecting','disconnected','warning'],
set_status: function(status,msg){
var self = this;
for(var i = 0; i < this.status.length; i++){
this.$('.js_'+this.status[i]).addClass('oe_hidden');
}
this.$('.js_'+status).removeClass('oe_hidden');
if(msg){
this.$('.js_msg').removeClass('oe_hidden').html(msg);
}else{
this.$('.js_msg').addClass('oe_hidden').html('');
}
},
});
/* ------- Synch. Notifications ------- */
// Displays if there are orders that could
// not be submitted, and how many.
module.SynchNotificationWidget = module.StatusWidget.extend({
template: 'SynchNotificationWidget',
start: function(){
var self = this;
this.pos.bind('change:synch', function(pos,synch){
self.set_status(synch.state, synch.pending);
});
this.$el.click(function(){
self.pos.push_order();
});
},
});
/* --------- The Proxy Status --------- */
// Displays the status of the hardware proxy
// (connected, disconnected, errors ... )
module.ProxyStatusWidget = module.StatusWidget.extend({
template: 'ProxyStatusWidget',
set_smart_status: function(status){
if(status.status === 'connected'){
var warning = false;
var msg = ''
if(this.pos.config.iface_scan_via_proxy){
var scanner = status.drivers.scanner ? status.drivers.scanner.status : false;
if( scanner != 'connected' && scanner != 'connecting'){
warning = true;
msg += _t('Scanner');
}
}
if( this.pos.config.iface_print_via_proxy ||
this.pos.config.iface_cashdrawer ){
var printer = status.drivers.escpos ? status.drivers.escpos.status : false;
if( printer != 'connected' && printer != 'connecting'){
warning = true;
msg = msg ? msg + ' & ' : msg;
msg += _t('Printer');
}
}
if( this.pos.config.iface_electronic_scale ){
var scale = status.drivers.scale ? status.drivers.scale.status : false;
if( scale != 'connected' && scale != 'connecting' ){
warning = true;
msg = msg ? msg + ' & ' : msg;
msg += _t('Scale');
}
}
msg = msg ? msg + ' ' + _t('Offline') : msg;
this.set_status(warning ? 'warning' : 'connected', msg);
}else{
this.set_status(status.status,'');
}
},
start: function(){
var self = this;
this.set_smart_status(this.pos.proxy.get('status'));
this.pos.proxy.on('change:status',this,function(eh,status){ //FIXME remove duplicate changes
self.set_smart_status(status.newValue);
});
this.$el.click(function(){
self.pos.connect_to_proxy();
});
},
});
/*--------------------------------------*\
| THE CHROME |
\*======================================*/
// The Chrome is the main widget that contains
// all other widgets in the PointOfSale.
//
// It is the first object instanciated and the
// starting point of the point of sale code.
//
// It is mainly composed of :
// - a header, containing the list of orders
// - a leftpane, containing the list of bought
// products (orderlines)
// - a rightpane, containing the screens
// (see pos_screens.js)
// - popups
// - an onscreen keyboard
// - .gui which controls the switching between
// screens and the showing/closing of popups
module.Chrome = module.PosBaseWidget.extend({
template: 'Chrome',
init: function() {
var self = this;
this._super(arguments[0],{});
this.started = new $.Deferred(); // resolves when DOM is online
this.ready = new $.Deferred(); // resolves when the whole GUI has been loaded
this.pos = new module.PosModel(this.session,{chrome:this});
this.gui = new module.Gui({pos: this.pos, chrome: this});
this.chrome = this; // So that chrome's childs have chrome set automatically
this.pos.gui = this.gui;
this.widget = {}; // contains references to subwidgets instances
this.pos.ready.done(function(){
self.build_chrome();
self.build_widgets();
self.disable_rubberbanding();
self.ready.resolve();
self.loading_hide();
}).fail(function(err){ // error when loading models data from the backend
self.loading_error(err);
});
},
build_chrome: function() {
// remove default webclient handlers that induce click delay
$(document).off();
$(window).off();
$('html').off();
$('body').off();
$(self.$el).parent().off();
$('document').off();
$('.oe_web_client').off();
$('.openerp_webclient_container').off();
FastClick.attach(document.body);
instance.webclient.set_content_full_screen(true);
this.renderElement();
if(this.pos.config.iface_big_scrollbars){
this.$el.addClass('big-scrollbars');
}
},
disable_rubberbanding: function(){
// prevent the pos body from being scrollable.
document.body.addEventListener('touchmove',function(event){
var node = event.target;
while(node){
if(node.classList && node.classList.contains('touch-scrollable')){
return;
}
node = node.parentNode;
}
event.preventDefault();
});
},
loading_error: function(err){
var self = this;
var title = err.message;
var body = err.stack;
if(err.message === 'XmlHttpRequestError '){
title = 'Network Failure (XmlHttpRequestError)';
body = 'The Point of Sale could not be loaded due to a network problem.\n Please check your internet connection.';
}else if(err.message === 'OpenERP Server Error'){
title = err.data.message;
body = err.data.debug;
}
if( typeof body !== 'string' ){
body = 'Traceback not available.';
}
var popup = $(QWeb.render('ErrorTracebackPopupWidget',{
widget: { title: title , body: body },
}));
popup.find('.button').click(function(){
self.gui.close();
});
popup.css({ zindex: 9001 });
popup.appendTo(this.$el);
},
loading_progress: function(fac){
this.$('.loader .loader-feedback').removeClass('oe_hidden');
this.$('.loader .progress').removeClass('oe_hidden').css({'width': ''+Math.floor(fac*100)+'%'});
},
loading_message: function(msg,progress){
this.$('.loader .loader-feedback').removeClass('oe_hidden');
this.$('.loader .message').text(msg);
if (typeof progress !== 'undefined') {
this.loading_progress(progress);
} else {
this.$('.loader .progress').addClass('oe_hidden');
}
},
loading_skip: function(callback){
if(callback){
this.$('.loader .loader-feedback').removeClass('oe_hidden');
this.$('.loader .button.skip').removeClass('oe_hidden');
this.$('.loader .button.skip').off('click');
this.$('.loader .button.skip').click(callback);
}else{
this.$('.loader .button.skip').addClass('oe_hidden');
}
},
loading_hide: function(){
this.$('.loader').animate({opacity:0},1500,'swing',function(){self.$('.loader').addClass('oe_hidden');});
},
loading_show: function(){
this.$('.loader').removeClass('oe_hidden').animate({opacity:1},150,'swing');
},
widgets: [
{
'name': 'order_selector',
'widget': module.OrderSelectorWidget,
'replace': '.placeholder-OrderSelectorWidget',
},{
'name': 'proxy_status',
'widget': module.ProxyStatusWidget,
'append': '.pos-rightheader',
'condition': function(){ return this.pos.config.use_proxy },
},{
'name': 'notification',
'widget': module.SynchNotificationWidget,
'append': '.pos-rightheader',
},{
'name': 'close_button',
'widget': module.HeaderButtonWidget,
'append': '.pos-rightheader',
'args': {
label: _t('Close'),
action: function(){
var self = this;
if (!this.confirmed) {
this.$el.addClass('confirm');
this.$el.text(_t('Confirm'));
this.confirmed = setTimeout(function(){
self.$el.removeClass('confirm');
self.$el.text(_t('Close'));
self.confirmed = false;
},2000);
} else {
clearTimeout(this.confirmed);
this.gui.close();
}
},
}
},{
'name': 'username',
'widget': module.UsernameWidget,
'replace': '.placeholder-UsernameWidget',
},{
'name': 'keyboard',
'widget': module.OnscreenKeyboardWidget,
'replace': '.placeholder-OnscreenKeyboardWidget',
},{
'name': 'debug',
'widget': module.DebugWidget,
'append': '.pos-content',
'condition': function(){ return this.pos.debug },
},
],
// This method instantiates all the screens, widgets, etc.
build_widgets: function() {
var self = this;
for (var i = 0; i < this.widgets.length; i++) {
var def = this.widgets[i];
if ( !def.condition || def.condition.call(this) ) {
var args = typeof def.args === 'function' ? def.args(this) : def.args;
var w = new def.widget(this, args || {});
if (def.replace) {
w.replace(this.$(def.replace));
} else if (def.append) {
w.appendTo(this.$(def.append));
} else if (def.prepend) {
w.prependTo(this.$(def.prepend));
} else {
w.appendTo(this.$el);
}
this.widget[def.name] = w;
}
}
this.screens = {};
for (var i = 0; i < this.gui.screen_classes.length; i++) {
var classe = this.gui.screen_classes[i];
if (!classe.condition || classe.condition.call(this)) {
var screen = new classe.widget(this,{});
screen.appendTo(this.$('.screens'));
this.screens[classe.name] = screen;
this.gui.add_screen(classe.name, screen);
}
}
this.popups = {};
for (var i = 0; i < this.gui.popup_classes.length; i++) {
var classe = this.gui.popup_classes[i];
if (!classe.condition || classe.condition.call(this)) {
var popup = new classe.widget(this,{});
popup.appendTo(this.$('.popups'));
this.popups[classe.name] = popup;
this.gui.add_popup(classe.name, popup);
}
}
this.gui.set_startup_screen('products');
this.gui.set_default_screen('products');
},
destroy: function() {
this.pos.destroy();
instance.webclient.set_content_full_screen(false);
this._super();
}
});
}
@@ -416,9 +416,9 @@ openerp.point_of_sale.load_devices = function load_devices(instance,module){ //m
send_printing_job();
},function(error){
if (error) {
self.pos.pos_widget.screen_selector.show_popup('error-traceback',{
'message': _t('Printing Error: ') + error.data.message,
'comment': error.data.debug,
self.pos.chrome.screen_selector.show_popup('error-traceback',{
'title': _t('Printing Error: ') + error.data.message,
'body': error.data.debug,
});
return;
}
+340
View File
@@ -0,0 +1,340 @@
// this file contains the Gui, which is the pos 'controller'.
// It contains high level methods to manipulate the interface
// such as changing between screens, creating popups, etc.
//
// it is available to all pos objects trough the '.gui' field.
openerp.point_of_sale.load_gui = function load_gui(instance, module) {
"use strict";
var QWeb = instance.web.qweb;
var _t = instance.web._t;
module.Gui = instance.web.Class.extend({
screen_classes: [],
popup_classes: [],
init: function(options){
var self = this;
this.pos = options.pos;
this.chrome = options.chrome;
this.screen_instances = {};
this.popup_instances = {};
this.default_screen = null;
this.startup_screen = null;
this.current_popup = null;
this.current_screen = null;
this.chrome.ready.then(function(){
var order = self.pos.get_order();
if (order) {
self.show_saved_screen(order);
} else {
self.show_screen(self.startup_screen);
}
self.pos.bind('change:selectedOrder', function(){
self.show_saved_screen(self.pos.get_order());
});
});
},
/* ---- Gui: SCREEN MANIPULATION ---- */
// register a screen widget to the gui,
// it must have been inserted into the dom.
add_screen: function(name, screen){
screen.hide();
this.screen_instances[name] = screen;
},
// sets the screen that will be displayed
// for new orders
set_default_screen: function(name){
this.default_screen = name;
},
// sets the screen that will be displayed
// when no orders are present
set_startup_screen: function(name) {
this.startup_screen = name;
},
// display the screen saved in an order,
// called when the user changes the current order
// no screen saved ? -> display default_screen
// no order ? -> display startup_screen
show_saved_screen: function(order,options) {
options = options || {};
this.close_popup();
if (order) {
this.show_screen(order.get_screen_data('screen') ||
options.default_screen ||
this.default_screen,
null,'refresh');
} else {
this.show_screen(this.startup_screen);
}
},
// display a screen.
// If there is an order, the screen will be saved in the order
// - params: used to load a screen with parameters, for
// example loading a 'product_details' screen for a specific product.
// - refresh: if you want the screen to cycle trough show / hide even
// if you are already on the same screen.
show_screen: function(screen_name,params,refresh) {
var screen = this.screen_instances[screen_name];
if (!screen) {
console.error("ERROR: show_screen("+screen_name+") : screen not found");
}
this.close_popup();
var order = this.pos.get_order();
if (order) {
var old_screen_name = order.get_screen_data('screen');
order.set_screen_data('screen',screen_name);
if(params){
order.set_screen_data('params',params);
}
if( screen_name !== old_screen_name ){
order.set_screen_data('previous-screen',old_screen_name);
}
}
if (refresh || screen !== this.current_screen) {
if (this.current_screen) {
this.current_screen.close();
this.current_screen.hide();
}
this.current_screen = screen;
this.current_screen.show();
}
},
// returns the current screen.
get_current_screen: function() {
return this.pos.get_order() ? ( this.pos.get_order().get_screen_data('screen') || this.default_screen ) : this.startup_screen;
},
// goes to the previous screen (as specified in the order). The history only
// goes 1 deep ...
back: function() {
var previous = this.pos.get_order().get_screen_data('previous-screen');
if (previous) {
this.show_screen(previous);
}
},
// returns the parameter specified when this screen was displayed
get_current_screen_param: function(param) {
if (this.pos.get_order()) {
var params = this.pos.get_order().get_screen_data('params');
return params ? params[param] : undefined;
} else {
return undefined;
}
},
/* ---- Gui: POPUP MANIPULATION ---- */
// registers a new popup in the GUI.
// the popup must have been previously inserted
// into the dom.
add_popup: function(name, popup) {
popup.hide();
this.popup_instances[name] = popup;
},
// displays a popup. Popup do not stack,
// are not remembered by the order, and are
// closed by screen changes or new popups.
show_popup: function(name,options) {
if (this.current_popup) {
this.close_popup();
}
this.current_popup = this.popup_instances[name];
this.current_popup.show(options);
},
// close the current popup.
close_popup: function() {
if (this.current_popup) {
this.current_popup.close();
this.current_popup.hide();
this.current_popup = null;
}
},
/* ---- Gui: ACCESS CONTROL ---- */
// A Generic UI that allow to select a user from a list.
// It returns a deferred that resolves with the selected user
// upon success. Several options are available :
// - security: passwords will be asked
// - only_managers: restricts the list to managers
// - current_user: password will not be asked if this
// user is selected.
// - title: The title of the user selection list.
select_user: function(options){
options = options || {};
var self = this;
var def = new $.Deferred();
var list = [];
for (var i = 0; i < this.pos.users.length; i++) {
var user = this.pos.users[i];
if (!options.only_managers || user.role === 'manager') {
list.push({
'label': user.name,
'item': user,
});
}
}
this.show_popup('selection',{
'title': options.title || _t('Select User'),
list: list,
confirm: function(user){ def.resolve(user); },
cancel: function(){ def.reject(); },
});
return def.then(function(user){
if (options.security && user !== options.current_user && user.pos_security_pin) {
return self.ask_password(user.pos_security_pin).then(function(){
return user;
});
} else {
return user;
}
});
},
// Ask for a password, and checks if it this
// the same as specified by the function call.
// returns a deferred that resolves on success,
// fails on failure.
ask_password: function(password) {
var self = this;
var ret = new $.Deferred();
if (password) {
this.gui.show_popup('password',{
'title': _t('Password ?'),
confirm: function(pw) {
if (pw !== password) {
self.show_popup('error',_t('Incorrect Password'));
ret.reject();
} else {
ret.resolve();
}
},
});
} else {
ret.resolve();
}
return ret;
},
// checks if the current user (or the user provided) has manager
// access rights. If not, a popup is shown allowing the user to
// temporarily login as an administrator.
// This method returns a deferred, that succeeds with the
// manager user when the login is successfull.
sudo: function(user){
var def = new $.Deferred();
user = user || this.pos.get_cashier();
if (user.role === 'manager') {
return new $.Deferred().resolve(user);
} else {
return this.select_user({
security: true,
only_managers: true,
title: _t('Login as a Manager'),
})
}
},
/* ---- Gui: CLOSING THE POINT OF SALE ---- */
close: function() {
var self = this;
this.chrome.loading_show();
this.chrome.loading_message(_t('Closing ...'));
this.pos.push_order().then(function(){
return new instance.web.Model("ir.model.data").get_func("search_read")([['name', '=', 'action_client_pos_menu']], ['res_id'])
.pipe(function(res) {
window.location = '/web#action=' + res[0]['res_id'];
},function(err,event) {
event.preventDefault();
self.show_popup('error',{
'title': _t('Could not close the point of sale.'),
'body': _t('Your internet connection is probably down.'),
});
self.chrome.widget.close_button.renderElement();
});
});
},
/* ---- Gui: KEYBOARD INPUT ---- */
// This is a helper to handle numpad keyboard input.
// - buffer: an empty or number string
// - input: '[0-9],'+','-','.','CLEAR','BACKSPACE'
// - options: 'firstinput' -> will clear buffer if
// input is '[0-9]' or '.'
// returns the new buffer containing the modifications
// (the original is not touched)
numpad_input: function(buffer, input, options) {
var options = options || {};
var newbuf = buffer.slice(0);
if (input === '.') {
if (options.firstinput) {
newbuf = "0.";
}else if (!newbuf.length || newbuf === '-') {
newbuf += "0.";
} else if (newbuf.indexOf('.') < 0){
newbuf = newbuf + '.';
}
} else if (input === 'CLEAR') {
newbuf = "";
} else if (input === 'BACKSPACE') {
newbuf = newbuf.substring(0,newbuf.length - 1);
} else if (input === '+') {
if ( newbuf[0] === '-' ) {
newbuf = newbuf.substring(1,newbuf.length);
}
} else if (input === '-') {
if ( newbuf[0] === '-' ) {
newbuf = newbuf.substring(1,newbuf.length);
} else {
newbuf = '-' + newbuf;
}
} else if (input[0] === '+' && !isNaN(parseFloat(input))) {
newbuf = '' + ((parseFloat(newbuf) || 0) + parseFloat(input));
} else if (!isNaN(parseInt(input))) {
if (options.firstinput) {
newbuf = '' + input;
} else {
newbuf += input;
}
}
return newbuf;
},
});
module.Gui.define_screen = function (classe) {
module.Gui.prototype.screen_classes.push(classe);
};
module.Gui.define_popup = function (classe) {
module.Gui.prototype.popup_classes.push(classe);
};
};
@@ -5,7 +5,7 @@ openerp.point_of_sale.load_keyboard = function load_keyboard(instance, module){
// A Widget that displays an onscreen keyboard.
// There are two options when creating the widget :
//
// * 'keyboard_model' : 'simple' | 'full' (default)
// * 'keyboard_model' : 'simple' (default) | 'full'
// The 'full' emulates a PC keyboard, while 'simple' emulates an 'android' one.
//
// * 'input_selector : (default: '.searchbox input')
@@ -21,7 +21,7 @@ openerp.point_of_sale.load_keyboard = function load_keyboard(instance, module){
this._super(parent,options);
options = options || {};
this.keyboard_model = options.keyboard_model || 'full';
this.keyboard_model = options.keyboard_model || 'simple';
if(this.keyboard_model === 'full'){
this.template = 'OnscreenKeyboardFull';
}
+12 -9
View File
@@ -4,21 +4,24 @@ openerp.point_of_sale = function(openerp) {
var module = openerp.point_of_sale;
openerp.point_of_sale.load_db(openerp,module); // import db.js
openerp.point_of_sale.load_db(openerp,module);
openerp.point_of_sale.load_models(openerp,module); // import pos_models.js
openerp.point_of_sale.load_models(openerp,module);
openerp.point_of_sale.load_basewidget(openerp,module); // import pos_basewidget.js
openerp.point_of_sale.load_basewidget(openerp,module);
openerp.point_of_sale.load_keyboard(openerp,module); // import pos_keyboard_widget.js
openerp.point_of_sale.load_keyboard(openerp,module);
openerp.point_of_sale.load_screens(openerp,module); // import pos_screens.js
openerp.point_of_sale.load_gui(openerp,module);
openerp.point_of_sale.load_devices(openerp,module); // import pos_devices.js
openerp.point_of_sale.load_popups(openerp,module);
openerp.point_of_sale.load_widgets(openerp,module); // import pos_widgets.js
openerp.point_of_sale.load_screens(openerp,module);
openerp.web.client_actions.add('pos.ui', 'openerp.point_of_sale.PosWidget');
openerp.point_of_sale.load_devices(openerp,module);
openerp.point_of_sale.load_chrome(openerp,module);
openerp.web.client_actions.add('pos.ui', 'openerp.point_of_sale.Chrome');
};
+117 -30
View File
@@ -3,7 +3,6 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
var QWeb = instance.web.qweb;
var _t = instance.web._t;
var barcode_parser_module = instance.barcodes;
var round_di = instance.web.round_decimals;
var round_pr = instance.web.round_precision
@@ -24,7 +23,8 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
var self = this;
this.session = session;
this.flush_mutex = new $.Mutex(); // used to make sure the orders are sent to the server once at time
this.pos_widget = attributes.pos_widget;
this.chrome = attributes.chrome;
this.gui = attributes.gui;
this.proxy = new module.ProxyDevice(this); // used to communicate to the hardware devices via a local proxy
this.barcode_reader = new module.BarcodeReader({'pos': this, proxy:this.proxy});
@@ -34,7 +34,6 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
this.debug = jQuery.deparam(jQuery.param.querystring()).debug !== undefined; //debug mode
// Business data; loaded from the server at launch
this.accounting_precision = 2; //TODO
this.company_logo = null;
this.company_logo_base64 = '';
this.currency = null;
@@ -73,18 +72,23 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
this.get('orders').bind('remove', function(order,_unused_,options){
self.on_removed_order(order,options.index,options.reason);
});
// We fetch the backend data on the server asynchronously. this is done only when the pos user interface is launched,
// Any change on this data made on the server is thus not reflected on the point of sale until it is relaunched.
// when all the data has loaded, we compute some stuff, and declare the Pos ready to be used.
this.ready = this.load_server_data()
.then(function(){
if(self.config.use_proxy){
return self.connect_to_proxy();
}
}); // used to read barcodes);
this.ready = this.load_server_data().then(function(){
return self.after_load_server_data();
});;
},
after_load_server_data: function(){
this.barcode_reader.connect();
this.load_orders();
this.set_start_order();
this.push_order();
if(this.config.use_proxy){
return this.connect_to_proxy();
}
},
// releases ressources holds by the model at the end of life of the posmodel
destroy: function(){
// FIXME, should wait for flushing, return a deferred to indicate successfull destruction
@@ -93,18 +97,19 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
this.barcode_reader.disconnect();
this.barcode_reader.disconnect_from_proxy();
},
connect_to_proxy: function(){
var self = this;
var done = new $.Deferred();
this.barcode_reader.disconnect_from_proxy();
this.pos_widget.loading_message(_t('Connecting to the PosBox'),0);
this.pos_widget.loading_skip(function(){
this.chrome.loading_message(_t('Connecting to the PosBox'),0);
this.chrome.loading_skip(function(){
self.proxy.stop_searching();
});
this.proxy.autoconnect({
force_ip: self.config.proxy_ip || undefined,
progress: function(prog){
self.pos_widget.loading_progress(prog);
self.chrome.loading_progress(prog);
},
}).then(function(){
if(self.config.iface_scan_via_proxy){
@@ -116,13 +121,6 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
return done;
},
// helper function to load data from the server. Obsolete use the models loader below.
fetch: function(model, fields, domain, ctx){
this._load_progress = (this._load_progress || 0) + 0.05;
this.pos_widget.loading_message(_t('Loading')+' '+model,this._load_progress);
return new instance.web.Model(model).query(fields).filter(domain).context(ctx).all()
},
// Server side model loaders. This is the list of the models that need to be loaded from
// the server. The models are loaded one by one by this list's order. The 'loaded' callback
// is used to store the data in the appropriate place once it has been loaded. This callback
@@ -397,7 +395,7 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
}, {
label: 'barcodes',
loaded: function(self) {
var barcode_parser = new barcode_parser_module.BarcodeParser({'nomenclature_id': self.config.barcode_nomenclature_id});
var barcode_parser = new instance.barcodes.BarcodeParser({'nomenclature_id': self.config.barcode_nomenclature_id});
self.barcode_reader.set_barcode_parser(barcode_parser);
return barcode_parser.is_loaded();
},
@@ -417,7 +415,7 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
loaded.resolve();
}else{
var model = self.models[index];
self.pos_widget.loading_message(_t('Loading')+' '+(model.label || model.model || ''), progress);
self.chrome.loading_message(_t('Loading')+' '+(model.label || model.model || ''), progress);
var cond = typeof model.condition === 'function' ? model.condition(self,tmp) : true;
if (!cond) {
@@ -593,7 +591,6 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
var self = this;
if(order){
this.proxy.log('push_order',order.export_as_JSON());
this.db.add_order(order.export_as_JSON());
}
@@ -649,7 +646,7 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
transfer.pipe(function(order_server_id){
// generate the pdf and download it
self.pos_widget.do_action('point_of_sale.pos_invoice_report',{additional_context:{
self.chrome.do_action('point_of_sale.pos_invoice_report',{additional_context:{
active_ids:order_server_id,
}});
@@ -722,9 +719,9 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
if (error.data.exception_type == 'warning') {
delete error.data.debug;
}
self.pos_widget.screen_selector.show_popup('error-traceback',{
message: error.data.message,
comment: error.data.debug
self.gui.show_popup('error-traceback',{
'title': error.data.message,
'body': error.data.debug
});
}
// prevent an error popup creation by the rpc failure
@@ -756,6 +753,96 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
},
});
// Add fields to the list of read fields when a model is loaded
// by the point of sale.
// e.g: module.load_fields("product.product",['price','category'])
module.load_fields = function(model_name, fields) {
if (!(fields instanceof Array)) {
fields = [fields];
}
var models = module.PosModel.prototype.models;
for (var i = 0; i < models.length; i++) {
var model = models[i];
if (model.model === model_name) {
// if 'fields' is empty all fields are loaded, so we do not need
// to modify the array
if ((model.fields instanceof Array) && model.fields.length > 0) {
model.fields = model.fields.concat(fields || []);
}
}
}
};
// Loads openerp models at the point of sale startup.
// load_models take an array of model loader declarations.
// - The models will be loaded in the array order.
// - If no openerp model name is provided, no server data
// will be loaded, but the system can be used to preprocess
// data before load.
// - loader arguments can be functions that return a dynamic
// value. The function takes the PosModel as the first argument
// and a temporary object that is shared by all models, and can
// be used to store transient information between model loads.
// - There is no dependency management. The models must be loaded
// in the right order. Newly added models are loaded at the end
// but the after / before options can be used to load directly
// before / after another model.
//
// models: [{
// model: [string] the name of the openerp model to load.
// label: [string] The label displayed during load.
// fields: [[string]|function] the list of fields to be loaded.
// Empty Array / Null loads all fields.
// order: [[string]|function] the models will be ordered by
// the provided fields
// domain: [domain|function] the domain that determines what
// models need to be loaded. Null loads everything
// ids: [[id]|function] the id list of the models that must
// be loaded. Overrides domain.
// context: [Dict|function] the openerp context for the model read
// condition: [function] do not load the models if it evaluates to
// false.
// loaded: [function(self,model)] this function is called once the
// models have been loaded, with the data as second argument
// if the function returns a deferred, the next model will
// wait until it resolves before loading.
// }]
//
// options:
// before: [string] The model will be loaded before the named models
// (applies to both model name and label)
// after: [string] The model will be loaded after the (last loaded)
// named model. (applies to both model name and label)
//
module.load_models = function(models,options) {
options = options || {};
if (!(models instanceof Array)) {
models = [models];
}
var pmodels = module.PosModel.prototype.models;
var index = pmodels.length;
if (options.before) {
for (var i = 0; i < pmodels.length; i++) {
if ( pmodels[i].model === options.before ||
pmodels[i].label === options.before ){
index = i;
break;
}
}
} else if (options.after) {
for (var i = 0; i < pmodels.length; i++) {
if ( pmodels[i].model === options.after ||
pmodels[i].label === options.after ){
index = i + 1;
}
}
}
pmodels.splice.apply(pmodels,[index,0].concat(models));
};
var orderline_id = 1;
// An orderline represent one element of the content of a client's shopping cart.
@@ -1107,7 +1194,7 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
this.pos = options.pos;
this.selected_orderline = undefined;
this.selected_paymentline = undefined;
this.screen_data = {}; // see ScreenSelector
this.screen_data = {}; // see Gui
this.temporary = options.temporary || false;
this.creation_date = new Date();
this.to_invoice = false;
@@ -1236,7 +1323,7 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
qweb.default_dict = _.clone(QWeb.default_dict);
qweb.add_template('<templates><t t-name="subreceipt">'+subreceipt+'</t></templates>');
return qweb.render('subreceipt',{'pos':self.pos,'widget':self.pos.pos_widget,'order':self, 'receipt': receipt}) ;
return qweb.render('subreceipt',{'pos':self.pos,'widget':self.pos.chrome,'order':self, 'receipt': receipt}) ;
}
}
@@ -0,0 +1,246 @@
// This file contains the Popups.
// Popups must be loaded and named in chrome.js.
// They are instanciated / destroyed with the .gui.show_popup()
// and .gui.close_popup() methods.
openerp.point_of_sale.load_popups = function load_popups(instance, module) {
"use strict";
module.PopupWidget = module.PosBaseWidget.extend({
init: function(parent, args) {
this._super(parent, args);
this.options = {};
},
events: {
'click .button.cancel': 'click_cancel',
'click .button.confirm': 'click_confirm',
'click .selection-item': 'click_item',
'click .input-button': 'click_numpad',
'click .mode-button': 'click_numpad',
},
// show the popup !
show: function(options){
if(this.$el){
this.$el.removeClass('oe_hidden');
}
if (typeof options === 'string') {
this.options = {title: options};
} else {
this.options = options || {};
}
this.renderElement();
// popups block the barcode reader ...
if (this.pos.barcode_reader) {
this.pos.barcode_reader.save_callbacks();
this.pos.barcode_reader.reset_action_callbacks();
}
},
// called before hide, when a popup is closed.
// extend this if you want a custom action when the
// popup is closed.
close: function(){
if (this.pos.barcode_reader) {
this.pos.barcode_reader.restore_callbacks();
}
},
// hides the popup. keep in mind that this is called in
// the initialization pass of the pos instantiation,
// so you don't want to do anything fancy in here
hide: function(){
if (this.$el) {
this.$el.addClass('oe_hidden');
}
},
// what happens when we click cancel
// ( it should close the popup and do nothing )
click_cancel: function(){
this.gui.close_popup();
if (this.options.cancel) {
this.options.cancel.call(this);
}
},
// what happens when we confirm the action
click_confirm: function(){
this.gui.close_popup();
if (this.options.confirm) {
this.options.confirm.call(this);
}
},
// Since Widget does not support extending the events declaration
// we declared them all in the top class.
click_item: function(){},
click_numad: function(){},
});
module.ErrorPopupWidget = module.PopupWidget.extend({
template:'ErrorPopupWidget',
show: function(options){
this._super(options);
$('body').append('<audio src="/point_of_sale/static/src/sounds/error.wav" autoplay="true"></audio>');
},
});
module.Gui.define_popup({name:'error', widget:module.ErrorPopupWidget});
module.ErrorTracebackPopupWidget = module.ErrorPopupWidget.extend({
template:'ErrorTracebackPopupWidget',
});
module.Gui.define_popup({name:'error-traceback', widget:module.ErrorTracebackPopupWidget});
module.ErrorBarcodePopupWidget = module.ErrorPopupWidget.extend({
template:'ErrorBarcodePopupWidget',
show: function(barcode){
this._super({barcode: barcode});
},
});
module.Gui.define_popup({name:'error-barcode', widget:module.ErrorBarcodePopupWidget});
module.ConfirmPopupWidget = module.PopupWidget.extend({
template: 'ConfirmPopupWidget',
});
module.Gui.define_popup({name:'confirm', widget:module.ConfirmPopupWidget});
/**
* A popup that allows the user to select one item from a list.
*
* show_popup('selection',{
* title: "Popup Title",
* list: [
* { label: 'foobar', item: 45 },
* { label: 'bar foo', item: 'stuff' },
* ],
* confirm: function(item) {
* // get the item selected by the user.
* },
* cancel: function(){
* // user chose nothing
* }
* });
*/
module.SelectionPopupWidget = module.PopupWidget.extend({
template: 'SelectionPopupWidget',
show: function(options){
options = options || {};
var self = this;
this._super();
this.list = options.list || [];
this.renderElement();
this.$('.selection-item').click(function(){
if (options.confirm) {
var item = self.list[parseInt($(this).data('item-index'))];
item = item ? item.item : item;
options.confirm.call(self,item);
}
});
},
click_item : function(event) {
this.gui.close_popup();
if (this.options.confirm) {
var item = self.list[parseInt($(event.target).data('item-index'))];
item = item ? item.item : item;
}
}
});
module.Gui.define_popup({name:'selection', widget:module.SelectionPopupWidget});
module.TextInputPopupWidget = module.PopupWidget.extend({
template: 'TextInputPopupWidget',
show: function(options){
options = options || {};
var self = this;
this._super();
this.renderElement();
this.$('input,textarea').focus();
this.$('.button.confirm').click(function(){
});
},
click_confirm: function(){
var value = self.$('input,textarea').val();
self.gui.close_popup();
if( this.options.confirm ){
this.options.confirm.call(self,value);
}
},
});
module.Gui.define_popup({name:'textinput', widget:module.TextInputPopupWidget});
module.TextAreaPopupWidget = module.TextInputPopupWidget.extend({
template: 'TextAreaPopupWidget',
});
module.Gui.define_popup({name:'textarea', widget:module.TextAreaPopupWidget});
module.NumberPopupWidget = module.PopupWidget.extend({
template: 'NumberPopupWidget',
show: function(options){
options = options || {};
var self = this;
this._super();
this.inputbuffer = options.value || '';
this.renderElement();
this.firstinput = true;
},
click_numpad: function(event){
var newbuf = this.gui.numpad_input(
this.inputbuffer,
$(event.target).data('action'),
{'firstinput': this.firstinput});
this.firstinput = (newbuf.length === 0);
if (newbuf !== this.inputbuffer) {
this.inputbuffer = newbuf;
this.$('.value').text(this.inputbuffer);
}
},
click_confirm: function(event){
this.gui.close_popup();
if( this.options.confirm ){
this.options.confirm.call(this,this.inputbuffer);
}
},
});
module.Gui.define_popup({name:'number', widget:module.NumberPopupWidget});
module.PasswordPopupWidget = module.NumberPopupWidget.extend({
renderElement: function(){
this._super();
this.$('.popup').addClass('popup-password');
},
});
module.Gui.define_popup({name:'password', widget:module.PasswordPopupWidget});
module.UnsentOrdersPopupWidget = module.ConfirmPopupWidget.extend({
template: 'UnsentOrdersPopupWidget',
});
module.Gui.define_popup({name:'unsent-orders', widget:module.UnsentOrdersPopupWidget});
module.UnpaidOrdersPopupWidget = module.ConfirmPopupWidget.extend({
template: 'UnpaidOrdersPopupWidget',
});
module.Gui.define_popup({name:'unpaid-orders', widget:module.UnpaidOrdersPopupWidget});
};
File diff suppressed because it is too large Load Diff
@@ -17,8 +17,9 @@ openerp.point_of_sale.load_basewidget = function load_basewidget(instance, modul
init:function(parent,options){
this._super(parent);
options = options || {};
this.pos = options.pos || (parent ? parent.pos : undefined);
this.pos_widget = options.pos_widget || (parent ? parent.pos_widget : undefined);
this.pos = options.pos || (parent ? parent.pos : undefined);
this.chrome = options.chrome || (parent ? parent.chrome : undefined);
this.gui = options.gui || (parent ? parent.gui : undefined);
},
format_currency: function(amount,precision){
var currency = (this.pos && this.pos.currency) ? this.pos.currency : {symbol:'$', position: 'after', rounding: 0.01, decimals: 2};
File diff suppressed because it is too large Load Diff
+84 -145
View File
@@ -3,7 +3,7 @@
-->
<templates id="template" xml:space="preserve">
<t t-name="PosWidget">
<t t-name="Chrome">
<div class="pos">
<div class="pos-topheader">
<div class="pos-branding">
@@ -18,35 +18,11 @@
<div class="pos-content">
<div class="pos-leftpane">
<div class='window'>
<div class='subwindow'>
<div class='subwindow-container'>
<div class='subwindow-container-fix'>
<div class="placeholder-OrderWidget"></div>
</div>
</div>
</div>
<div class='subwindow collapsed'>
<div class='subwindow-container'>
<div class='subwindow-container-fix pads'>
<div class="control-buttons oe_hidden"></div>
<div class="placeholder-ActionpadWidget"></div>
<div class="placeholder-NumpadWidget"></div>
</div>
</div>
</div>
</div>
</div>
<div class="rightpane">
<div class='window'>
<div class='subwindow'>
<div class='subwindow-container'>
<div class='subwindow-container-fix screens'>
</div>
<div class='window'>
<div class='subwindow'>
<div class='subwindow-container'>
<div class='subwindow-container-fix screens'>
<!-- here go the screens -->
</div>
</div>
</div>
@@ -55,6 +31,10 @@
<div class="placeholder-OnscreenKeyboardWidget"></div>
</div>
<div class='popups'>
<!-- here go the popups -->
</div>
<div class="loader">
<div class='loader-feedback oe_hidden'>
<h1 class='message'>Loading</h1>
@@ -67,18 +47,6 @@
</div>
</div>
&lt;!--[if IE]&gt;
<div class='not-supported-browser'>
<div class='message'>
<img src='/point_of_sale/static/src/img/pos_screenshot.jpg' />
<p>
The Point of Sale is not supported by Microsoft Internet Explorer. Please use
a modern browser like <a href="http://www.mozilla.org/firefox/" target="_blank">Mozilla Firefox</a>
or <a href="http://www.google.com/chrome" target="_blank">Google Chrome</a>.
</p>
</div>
</div>
&lt;![endif]--&gt;
</div>
</t>
@@ -125,6 +93,12 @@
<div>There are pending operations that could not be saved into the database, are you sure you want to exit?</div>
</t>
<t t-name="ActionButtonWidget">
<div class='control-button'>
<t t-esc='widget.label' />
</div>
</t>
<t t-name="ActionpadWidget">
<div class="actionpad">
<button class='button set-customer'>
@@ -157,7 +131,7 @@
<button class="input-button number-char">0</button>
<button class="input-button number-char">.</button>
<button class="input-button numpad-backspace">
<img src="/point_of_sale/static/src/img/backspace.png" width="24" height="21" />
<img style="pointer-events: none;" src="/point_of_sale/static/src/img/backspace.png" width="24" height="21" />
</button>
<br />
</div>
@@ -224,23 +198,47 @@
<t t-name="ProductScreenWidget">
<div class="product-screen screen">
<table class="layout-table">
<tr class="header-row">
<td class="header-cell">
<span class="placeholder-ProductCategoriesWidget" />
</td>
</tr>
<tr class="content-row">
<td class="content-cell">
<div class="content-container">
<span class="placeholder-ProductListWidget" />
<div class="leftpane">
<div class='window'>
<div class='subwindow'>
<div class='subwindow-container'>
<div class='subwindow-container-fix'>
<div class="placeholder-OrderWidget"></div>
</div>
</div>
</td>
</tr>
</div>
</table>
<div class='subwindow collapsed'>
<div class='subwindow-container'>
<div class='subwindow-container-fix pads'>
<div class="control-buttons oe_hidden"></div>
<div class="placeholder-ActionpadWidget"></div>
<div class="placeholder-NumpadWidget"></div>
</div>
</div>
</div>
</div>
</div>
<div class="rightpane">
<table class="layout-table">
<tr class="header-row">
<td class="header-cell">
<span class="placeholder-ProductCategoriesWidget" />
</td>
</tr>
<tr class="content-row">
<td class="content-cell">
<div class="content-container">
<span class="placeholder-ProductListWidget" />
</div>
</td>
</tr>
</table>
</div>
</div>
</t>
@@ -797,72 +795,13 @@
</receipt>
</t>
<t t-name="FullscreenPopupWidget">
<div class="modal-dialog">
<div class="popup popup-fullscreen">
<p class="message">Fullscreen Setup</p>
<t t-if='widget.ismobile()'>
<p class="comment">
The best way to make the point of sale fullscreen on mobile
devices is to add the point of sale to your home screen. On
iPhone and iPad this is done by tapping <img src='/point_of_sale/static/src/img/ios-share-icon.png' />
and then <i>Add to Homescreen</i>
</p>
<p class='comment'>
This also works on Android with the Chrome Beta Browser, using the <i>Add to Homescreen</i> option
in the browser's menu.
</p>
<p class='comment'>
If you want to work in fullscreen just this time tap the <i>Go Fullscreen</i> button.
</p>
</t>
<t t-if='!widget.ismobile()'>
<p class="comment">
The best way to make the point of sale fullscreen on desktop
and laptops is to launch your browser in kiosk mode. Please
refer to your browser's documentation for the specific
instructions.
</p>
<p class="comment">
If you want to work in fullscreen just this time, click the <i> Go Fullscreen</i> button.
</p>
</t>
<div class="footer">
<div class="button fullscreen">
Go Fullscreen
</div>
<div class="button cancel">
Cancel
</div>
</div>
</div>
</div>
</t>
<t t-name="ErrorInvoiceTransferPopupWidget">
<div class="modal-dialog">
<div class="popup popup-invoice">
<p class="message">The Order could not be sent to the server for invoicing. Invoices cannot be generated
in offline mode. Please check your internet connection and try again.</p>
<div class="footer">
<div class="button">
Ok
</div>
</div>
</div>
</div>
</t>
<t t-name="ErrorPopupWidget">
<div class="modal-dialog">
<div class="popup popup-error">
<p class="message"><t t-esc=" widget.message || 'Error' " /></p>
<p class="comment"><t t-esc=" widget.comment || '' "/></p>
<p class="title"><t t-esc=" widget.options.title || 'Error' " /></p>
<p class="body"><t t-esc=" widget.options.body || '' "/></p>
<div class="footer">
<div class="button">
<div class="button cancel">
Ok
</div>
</div>
@@ -873,10 +812,10 @@
<t t-name="ErrorTracebackPopupWidget">
<div class="modal-dialog">
<div class="popup popup-error">
<p class="message"><t t-esc=" widget.message || 'Error' " /></p>
<p class="comment traceback"><t t-esc=" widget.comment || '' "/></p>
<p class="title"><t t-esc=" widget.options.title || 'Error' " /></p>
<p class="body traceback"><t t-esc=" widget.options.body || '' "/></p>
<div class="footer">
<div class="button">
<div class="button cancel">
Ok
</div>
</div>
@@ -887,10 +826,10 @@
<t t-name="ErrorTracebackPopupWidget">
<div class="modal-dialog">
<div class="popup popup-error">
<p class="message"><t t-esc=" widget.message || 'Error' " /></p>
<p class="comment traceback"><t t-esc=" widget.comment || '' "/></p>
<p class="title"><t t-esc=" widget.options.title || 'Error' " /></p>
<p class="body traceback"><t t-esc=" widget.options.body || '' "/></p>
<div class="footer">
<div class="button">
<div class="button cancel">
Ok
</div>
</div>
@@ -901,16 +840,16 @@
<t t-name="ErrorBarcodePopupWidget">
<div class="modal-dialog">
<div class="popup popup-barcode">
<p class="message">Unknown Barcode
<p class="title">Unknown Barcode
<br />
<span class='barcode'><t t-esc="widget.barcode" /></span>
<span class='barcode'><t t-esc="widget.options.barcode" /></span>
</p>
<p class="comment">
<p class="body">
The Point of Sale could not find any product, client, employee
or action associated with the scanned barcode.
</p>
<div class="footer">
<div class="button">
<div class="button cancel">
Ok
</div>
</div>
@@ -921,8 +860,8 @@
<t t-name="ConfirmPopupWidget">
<div class="modal-dialog">
<div class="popup popup-confirm">
<p class="message"><t t-esc=" widget.message || 'Confirm ?' " /></p>
<p class="comment"><t t-esc=" widget.comment || '' "/></p>
<p class="title"><t t-esc=" widget.options.title || 'Confirm ?' " /></p>
<p class="body"><t t-esc=" widget.options.body || '' "/></p>
<div class="footer">
<div class="button confirm">
Confirm
@@ -938,8 +877,8 @@
<t t-name="TextInputPopupWidget">
<div class="modal-dialog">
<div class="popup popup-textinput">
<p class="message"><t t-esc=" widget.message || '' " /></p>
<input type='text' t-att-value="widget.value || ''"></input>
<p class="title"><t t-esc=" widget.options.title || '' " /></p>
<input type='text' t-att-value="widget.options.value || ''"></input>
<div class="footer">
<div class="button confirm">
Ok
@@ -955,8 +894,8 @@
<t t-name="TextAreaPopupWidget">
<div class="modal-dialog">
<div class="popup popup-textinput">
<p class="message"><t t-esc=" widget.message || '' " /></p>
<textarea rows="10" cols="40"><t t-esc="widget.value" /></textarea>
<p class="title"><t t-esc=" widget.options.title || '' " /></p>
<textarea rows="10" cols="40"><t t-esc="widget.options.value" /></textarea>
<div class="footer">
<div class="button confirm">
Ok
@@ -972,14 +911,14 @@
<t t-name="UnsentOrdersPopupWidget">
<div class="modal-dialog">
<div class="popup popup-unsent-orders">
<p class="message">Unsent Orders</p>
<p class="title">Unsent Orders</p>
<t t-if='widget.pos.db.get_orders().length === 0'>
<p class='comment'>
<p class='body'>
There are no unsent orders
</p>
</t>
<t t-if='widget.pos.db.get_orders().length > 0'>
<p class='comment traceback'>
<p class='body traceback'>
<t t-esc='JSON.stringify(widget.pos.db.get_orders(),null,2)' />
</p>
</t>
@@ -995,14 +934,14 @@
<t t-name="UnpaidOrdersPopupWidget">
<div class="modal-dialog">
<div class="popup popup-unpaid-orders">
<p class="message">Unpaid Orders</p>
<p class="title">Unpaid Orders</p>
<t t-if='widget.pos.db.get_unpaid_orders().length === 0'>
<p class='comment'>
<p class='body'>
There are no unpaid orders
</p>
</t>
<t t-if='widget.pos.db.get_unpaid_orders().length > 0'>
<p class='comment traceback'>
<p class='body traceback'>
<t t-esc='JSON.stringify(widget.pos.db.get_unpaid_orders(),null,2)' />
</p>
</t>
@@ -1018,7 +957,7 @@
<t t-name="SelectionPopupWidget">
<div class="modal-dialog">
<div class="popup popup-selection">
<p class="message"><t t-esc=" widget.message || 'Select' " /></p>
<p class="title"><t t-esc=" widget.options.title || 'Select' " /></p>
<div class='selection scrollable-y touch-scrollable'>
<t t-foreach="widget.list || []" t-as="item">
<div class='selection-item' t-att-data-item-index='item_index'>
@@ -1038,7 +977,7 @@
<t t-name="NumberPopupWidget">
<div class="modal-dialog">
<div class="popup popup-number">
<p class="message"><t t-esc=" widget.message || '' " /></p>
<p class="title"><t t-esc=" widget.options.title || '' " /></p>
<div class='popup-input value active'>
<t t-esc='widget.inputbuffer' />
</div>
@@ -1062,7 +1001,7 @@
<button class="input-button number-char" data-action='0'>0</button>
<button class="input-button number-char dot" data-action='.'>.</button>
<button class="input-button numpad-backspace" data-action='BACKSPACE' >
<img src="/point_of_sale/static/src/img/backspace.png" width="24" height="21" />
<img style="pointer-events: none;" src="/point_of_sale/static/src/img/backspace.png" width="24" height="21" />
</button>
<br />
</div>
+4 -2
View File
@@ -11,9 +11,11 @@
<script type="text/javascript" src="/point_of_sale/static/src/js/db.js"></script>
<script type="text/javascript" src="/point_of_sale/static/src/js/models.js"></script>
<script type="text/javascript" src="/point_of_sale/static/src/js/widget_base.js"></script>
<script type="text/javascript" src="/point_of_sale/static/src/js/widget_keyboard.js"></script>
<script type="text/javascript" src="/point_of_sale/static/src/js/widgets.js"></script>
<script type="text/javascript" src="/point_of_sale/static/src/js/keyboard.js"></script>
<script type="text/javascript" src="/point_of_sale/static/src/js/chrome.js"></script>
<script type="text/javascript" src="/point_of_sale/static/src/js/devices.js"></script>
<script type="text/javascript" src="/point_of_sale/static/src/js/gui.js"></script>
<script type="text/javascript" src="/point_of_sale/static/src/js/popups.js"></script>
<script type="text/javascript" src="/point_of_sale/static/src/js/screens.js"></script>
<script type="text/javascript" src="/point_of_sale/static/src/js/tests.js"></script>
</xpath>
+2
View File
@@ -24,6 +24,8 @@
<link rel="apple-touch-icon" sizes="120x120" href="/point_of_sale/static/src/img/touch-icon-iphone-retina.png"/>
<link rel="apple-touch-icon" sizes="152x152" href="/point_of_sale/static/src/img/touch-icon-ipad-retina.png"/>
<style> body { background: #222; } </style>
<link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon"/>
<link rel="stylesheet" href="/point_of_sale/static/src/fonts/lato/stylesheet.css" />
<link rel="stylesheet" href="/web/static/lib/fontawesome/css/font-awesome.css" />
+15 -20
View File
@@ -5,28 +5,23 @@ openerp.pos_discount = function(instance){
QWeb.add_template('/pos_discount/static/src/xml/discount.xml');
module.PosWidget.include({
build_widgets: function(){
var self = this;
this._super();
if(!this.pos.config.discount_product_id){
return;
module.DiscountButton = module.ActionButtonWidget.extend({
template: 'DiscountButton',
button_click: function(){
var order = this.pos.get_order();
var product = this.pos.db.get_product_by_id(this.pos.config.discount_product_id[0]);
var discount = - this.pos.config.discount_pc/ 100.0 * order.get_total_with_tax();
if( discount < 0 ){
order.add_product(product, { price: discount });
}
},
});
var discount = $(QWeb.render('DiscountButton'));
discount.click(function(){
var order = self.pos.get_order();
var product = self.pos.db.get_product_by_id(self.pos.config.discount_product_id[0]);
var discount = - self.pos.config.discount_pc/ 100.0 * order.get_total_tax_included();
if( discount < 0 ){
order.add_product(product, { price: discount });
}
});
discount.appendTo(this.$('.control-buttons'));
this.$('.control-buttons').removeClass('oe_hidden');
module.define_action_button({
'name': 'discount',
'widget': module.DiscountButton,
'condition': function(){
return this.pos.config.discount_product_id;
},
});
+80 -93
View File
@@ -4,67 +4,65 @@ openerp.pos_loyalty = function(instance){
var round_pr = instance.web.round_precision
var QWeb = instance.web.qweb;
var models = module.PosModel.prototype.models;
for (var i = 0; i < models.length; i++) {
var model = models[i];
if (model.model === 'res.partner') {
model.fields.push('loyalty_points');
} else if (model.model === 'product.product') {
// load loyalty after products
models.push(i+1,0,{
model: 'loyalty.program',
condition: function(self){ return !!self.config.loyalty_id[0]; },
fields: ['name','pp_currency','pp_product','pp_order','rounding'],
domain: function(self){ return [['id','=',self.config.loyalty_id[0]]]; },
loaded: function(self,loyalties){ self.loyalty = loyalties[0]; },
},{
model: 'loyalty.rule',
condition: function(self){ return !!self.loyalty; },
fields: ['name','type','product_id','category_id','cumulative','pp_product','pp_currency'],
domain: function(self){ return [['loyalty_program_id','=',self.loyalty.id]]; },
loaded: function(self,rules){
module.load_fields('res.partner','loyalty_points');
self.loyalty.rules = rules;
self.loyalty.rules_by_product_id = {};
self.loyalty.rules_by_category_id = {};
module.load_models([
{
model: 'loyalty.program',
condition: function(self){ return !!self.config.loyalty_id[0]; },
fields: ['name','pp_currency','pp_product','pp_order','rounding'],
domain: function(self){ return [['id','=',self.config.loyalty_id[0]]]; },
loaded: function(self,loyalties){
self.loyalty = loyalties[0];
console.log('loyalty',self.loyalty);
},
},{
model: 'loyalty.rule',
condition: function(self){ return !!self.loyalty; },
fields: ['name','type','product_id','category_id','cumulative','pp_product','pp_currency'],
domain: function(self){ return [['loyalty_program_id','=',self.loyalty.id]]; },
loaded: function(self,rules){
for (var i = 0; i < rules.length; i++){
var rule = rules[i];
if (rule.type === 'product') {
if (!self.loyalty.rules_by_product_id[rule.product_id[0]]) {
self.loyalty.rules_by_product_id[rule.product_id[0]] = [rule];
} else if (rule.cumulative) {
self.loyalty.rules_by_product_id[rule.product_id[0]].unshift(rule);
} else {
self.loyalty.rules_by_product_id[rule.product_id[0]].push(rule);
}
} else if (rule.type === 'category') {
var category = self.db.get_category_by_id(rule.category_id[0]);
if (!self.loyalty.rules_by_category_id[category.id]) {
self.loyalty.rules_by_category_id[category.id] = [rule];
} else if (rule.cumulative) {
self.loyalty.rules_by_category_id[category.id].unshift(rule);
} else {
self.loyalty.rules_by_category_id[category.id].push(rule);
}
self.loyalty.rules = rules;
self.loyalty.rules_by_product_id = {};
self.loyalty.rules_by_category_id = {};
for (var i = 0; i < rules.length; i++){
var rule = rules[i];
if (rule.type === 'product') {
if (!self.loyalty.rules_by_product_id[rule.product_id[0]]) {
self.loyalty.rules_by_product_id[rule.product_id[0]] = [rule];
} else if (rule.cumulative) {
self.loyalty.rules_by_product_id[rule.product_id[0]].unshift(rule);
} else {
self.loyalty.rules_by_product_id[rule.product_id[0]].push(rule);
}
} else if (rule.type === 'category') {
var category = self.db.get_category_by_id(rule.category_id[0]);
if (!self.loyalty.rules_by_category_id[category.id]) {
self.loyalty.rules_by_category_id[category.id] = [rule];
} else if (rule.cumulative) {
self.loyalty.rules_by_category_id[category.id].unshift(rule);
} else {
self.loyalty.rules_by_category_id[category.id].push(rule);
}
}
},
},{
model: 'loyalty.reward',
condition: function(self){ return !!self.loyalty; },
fields: ['name','type','minimum_points','gift_product_id','point_cost','discount_product_id','discount','point_value','point_product_id'],
domain: function(self){ return [['loyalty_program_id','=',self.loyalty.id]]; },
loaded: function(self,rewards){
self.loyalty.rewards = rewards;
self.loyalty.rewards_by_id = {};
for (var i = 0; i < rewards.length;i++) {
self.loyalty.rewards_by_id[rewards[i].id] = rewards[i];
}
},
});
}
}
}
},
},{
model: 'loyalty.reward',
condition: function(self){ return !!self.loyalty; },
fields: ['name','type','minimum_points','gift_product_id','point_cost','discount_product_id','discount','point_value','point_product_id'],
domain: function(self){ return [['loyalty_program_id','=',self.loyalty.id]]; },
loaded: function(self,rewards){
self.loyalty.rewards = rewards;
self.loyalty.rewards_by_id = {};
for (var i = 0; i < rewards.length;i++) {
self.loyalty.rewards_by_id[rewards[i].id] = rewards[i];
}
},
},
],{'after': 'product.product'});
var _super_orderline = module.Orderline;
module.Orderline = module.Orderline.extend({
@@ -243,14 +241,11 @@ openerp.pos_loyalty = function(instance){
return;
} else if (reward.type === 'gift') {
var product = this.pos.db.get_product_by_id(reward.gift_product_id[0]);
if (!product) {
this.pos.pos_widget.screen_selector.show_popup('error',{
'message':'Configuration Error',
'comment':'The product associated with the reward "'+reward.name+'" could not be found. Make sure it is available for sale in the point of sale.',
});
return;
}
var line = this.add_product(product, {
price: 0,
quantity: 1,
@@ -271,11 +266,8 @@ openerp.pos_loyalty = function(instance){
}
var product = this.pos.db.get_product_by_id(reward.discount_product_id[0]);
if (!product) { //FIXME, move this as a server side constraint
this.pos.pos_widget.screen_selector.show_popup('error',{
'message':'Configuration Error',
'comment':'The product associated with the reward "'+reward.name+'" could not be found. Make sure it is available for sale in the point of sale.',
});
if (!product) {
return;
}
@@ -294,11 +286,7 @@ openerp.pos_loyalty = function(instance){
var order_total = this.get_total_with_tax();
var product = this.pos.db.get_product_by_id(reward.point_product_id[0]);
if (!product) { //FIXME, move this as a server side constraint
this.pos.pos_widget.screen_selector.show_popup('error',{
'message':'Configuration Error',
'comment':'The product associated with the reward "'+reward.name+'" could not be found. Make sure it is available for sale in the point of sale.',
});
if (!product) {
return;
}
@@ -309,6 +297,7 @@ openerp.pos_loyalty = function(instance){
if ( spendable < 0.00001 ) {
return;
}
var line = this.add_product(product, {
quantity: -spendable,
merge: false,
@@ -324,6 +313,7 @@ openerp.pos_loyalty = function(instance){
}
_super.prototype.validate.apply(this,arguments);
},
export_for_printing: function(){
var json = _super.prototype.export_for_printing.apply(this,arguments);
if (this.pos.loyalty && this.get_client()) {
@@ -338,6 +328,7 @@ openerp.pos_loyalty = function(instance){
}
return json;
},
export_as_JSON: function(){
var json = _super.prototype.export_as_JSON.apply(this,arguments);
json.loyalty_points = this.get_new_points();
@@ -345,21 +336,22 @@ openerp.pos_loyalty = function(instance){
},
});
module.PosWidget.include({
loyalty_reward_click: function(){
module.LoyaltyButton = module.ActionButtonWidget.extend({
template: 'LoyaltyButton',
button_click: function(){
var self = this;
var order = this.pos.get_order();
var client = order.get_client();
if (!client) {
this.screen_selector.set_current_screen('clientlist');
this.gui.show_screen('clientlist');
return;
}
var rewards = order.get_available_rewards();
if (rewards.length === 0) {
this.screen_selector.show_popup('error',{
'message': 'No Rewards Available',
'comment': 'There are no rewards available for this customer as part of the loyalty program',
this.gui.show_popup('error',{
'title': 'No Rewards Available',
'body': 'There are no rewards available for this customer as part of the loyalty program',
});
return;
} else if (rewards.length === 1 && this.pos.loyalty.rewards.length === 1) {
@@ -373,8 +365,8 @@ openerp.pos_loyalty = function(instance){
item: rewards[i],
});
}
this.screen_selector.show_popup('selection',{
'message': 'Please select a reward',
this.gui.show_popup('selection',{
'title': 'Please select a reward',
'list': list,
'confirm': function(reward){
order.apply_reward(reward);
@@ -382,21 +374,16 @@ openerp.pos_loyalty = function(instance){
});
}
},
build_widgets: function(){
var self = this;
this._super();
if(this.pos.loyalty && this.pos.loyalty.rewards.length ){
var button = $(QWeb.render('LoyaltyButton'));
button.click(function(){ self.loyalty_reward_click(); });
button.appendTo(this.$('.control-buttons'));
this.$('.control-buttons').removeClass('oe_hidden');
}
},
});
module.define_action_button({
'name': 'loyalty',
'widget': module.LoyaltyButton,
'condition': function(){
return this.pos.loyalty && this.pos.loyalty.rewards.length;
},
});
module.OrderWidget.include({
update_summary: function(){
this._super();
+21 -35
View File
@@ -1,9 +1,9 @@
function openerp_restaurant_floors(instance,module){
openerp.pos_restaurant.load_floors = function(instance,module){
var QWeb = instance.web.qweb;
var _t = instance.web._t;
// At POS Startup, load the floors, and add them to the pos model
module.PosModel.prototype.models.push({
module.load_models({
model: 'restaurant.floor',
fields: ['name','background_image','table_ids','sequence'],
domain: function(self){ return [['pos_config_id','=',self.config.id]] },
@@ -25,7 +25,7 @@ function openerp_restaurant_floors(instance,module){
// At POS Startup, after the floors are loaded, load the tables, and associate
// them with their floor.
module.PosModel.prototype.models.push({
module.load_models({
model: 'restaurant.table',
fields: ['name','width','height','position_h','position_v','shape','floor_id','color'],
loaded: function(self,tables){
@@ -324,11 +324,11 @@ function openerp_restaurant_floors(instance,module){
if (this.editing) {
this.toggle_editing();
}
this.pos_widget.order_selector.show();
this.chrome.widget.order_selector.show();
},
show: function(){
this._super();
this.pos_widget.order_selector.hide();
this.chrome.widget.order_selector.hide();
for (var i = 0; i < this.table_widgets.length; i++) {
this.table_widgets[i].renderElement();
}
@@ -393,8 +393,8 @@ function openerp_restaurant_floors(instance,module){
tool_rename_table: function(){
var self = this;
if (this.selected_table) {
this.pos_widget.screen_selector.show_popup('textinput',{
'message':_t('Table Name ?'),
this.gui.show_popup('textinput',{
'title':_t('Table Name ?'),
'value': this.selected_table.table.name,
'confirm': function(value) {
self.selected_table.set_table_name(value);
@@ -441,8 +441,8 @@ function openerp_restaurant_floors(instance,module){
tool_trash_table: function(){
var self = this;
if (this.selected_table) {
this.pos_widget.screen_selector.show_popup('confirm',{
'message':_t('Are you sure ?'),
this.gui.show_popup('confirm',{
'title': _t('Are you sure ?'),
'comment':_t('Removing a table cannot be undone'),
'confirm': function(){
self.selected_table.trash();
@@ -562,36 +562,21 @@ function openerp_restaurant_floors(instance,module){
},
});
module.Gui.define_screen({
'name': 'floors',
'widget': module.FloorScreenWidget,
'condition': function(){
return this.pos.config.iface_floorplan;
},
});
// Add the FloorScreen to the GUI, and set it as the default screen
module.PosWidget.include({
module.Chrome.include({
build_widgets: function(){
var self = this;
this._super();
if (this.pos.config.iface_floorplan) {
this.floors_screen = new module.FloorScreenWidget(this,{});
this.floors_screen.appendTo(this.$('.screens'));
this.screen_selector.add_screen('floors',this.floors_screen);
this.screen_selector.change_default_screen('floors');
}
},
});
// when the floor plan is activated, we need to go back to the floor plan
// when an order is completed. Usually on order completion, a new order is
// set as the current one. Now, we set the new order to null.
// load_saved_screen() is called whenever the current order is changed, and
// will detect this, and set the current screen to the default_screen,
// which is the floor plan.
module.ScreenSelector.include({
load_saved_screen: function(){
if (this.pos.config.iface_floorplan) {
if (!this.pos.get_order()) {
this.set_current_screen(this.default_screen,null,'refresh');
} else {
this._super({default_screen:'products'});
}
} else {
this._super.apply(this,arguments);
this.gui.set_startup_screen('floors');
}
},
});
@@ -756,4 +741,5 @@ function openerp_restaurant_floors(instance,module){
}
},
});
}
};
+9 -7
View File
@@ -1,14 +1,16 @@
openerp.pos_restaurant = function(instance){
openerp.pos_restaurant = function(openerp){
var module = instance.point_of_sale;
var module = openerp.point_of_sale;
openerp_restaurant_notes(instance,module);
openerp.pos_restaurant.load_notes(openerp,module);
openerp_restaurant_splitbill(instance,module);
openerp.pos_restaurant.load_splitbill(openerp,module);
openerp_restaurant_printbill(instance,module);
openerp.pos_restaurant.load_printbill(openerp,module);
openerp_restaurant_floors(instance,module);
openerp.pos_restaurant.load_floors(openerp,module);
openerp.pos_restaurant.load_multiprint(openerp,module);
openerp_restaurant_multiprint(instance,module);
};
@@ -1,4 +1,4 @@
function openerp_restaurant_multiprint(instance,module){
openerp.pos_restaurant.load_multiprint = function(instance,module){
var QWeb = instance.web.qweb;
var _t = instance.web._t;
@@ -33,7 +33,7 @@ function openerp_restaurant_multiprint(instance,module){
},
});
module.PosModel.prototype.models.push({
module.load_models({
model: 'restaurant.printer',
fields: ['name','proxy_ip','product_categories_ids'],
domain: null,
@@ -220,41 +220,42 @@ function openerp_restaurant_multiprint(instance,module){
},
});
module.PosWidget.include({
build_widgets: function(){
var self = this;
this._super();
if(this.pos.printers.length){
var submitorder = $(QWeb.render('SubmitOrderButton'));
submitorder.click(function(){
var order = self.pos.get('selectedOrder');
if(order.hasChangesToPrint()){
order.printChanges();
order.saveChanges();
self.pos_widget.order_widget.update_summary();
}
});
submitorder.appendTo(this.$('.control-buttons'));
this.$('.control-buttons').removeClass('oe_hidden');
module.SubmitOrderButton = module.ActionButtonWidget.extend({
'template': 'SubmitOrderButton',
button_click: function(){
var order = this.pos.get_order();
if(order.hasChangesToPrint()){
order.printChanges();
order.saveChanges();
}
},
hilight: function(hi){
if (hi) {
this.$el.addClass('highlight');
} else {
this.$el.removeClass('highlight');
}
},
});
module.define_action_button({
'name': 'submit_order',
'widget': module.SubmitOrderButton,
'condition': function() {
return this.pos.printers.length;
},
});
module.OrderWidget.include({
update_summary: function(){
this._super();
var order = this.pos.get('selectedOrder');
if(order.hasChangesToPrint()){
this.pos_widget.$('.order-submit').addClass('highlight');
}else{
this.pos_widget.$('.order-submit').removeClass('highlight');
var changes = this.pos.get_order().hasChangesToPrint();
if (this.getParent().action_buttons &&
this.getParent().action_buttons.submit_order) {
this.getParent().action_buttons.submit_order.highlight(changes);
}
},
});
}
};
+13 -16
View File
@@ -1,4 +1,4 @@
function openerp_restaurant_notes(instance,module){
openerp.pos_restaurant.load_notes = function(instance,module){
"use strict";
var QWeb = instance.web.qweb;
@@ -41,13 +41,12 @@ function openerp_restaurant_notes(instance,module){
},
});
module.PosWidget.include({
orderline_note_click: function(){
var self = this;
module.OrderlineNoteButton = module.ActionButtonWidget.extend({
template: 'OrderlineNoteButton',
button_click: function(){
var line = this.pos.get_order().get_selected_orderline();
if (line) {
this.screen_selector.show_popup('textarea',{
this.gui.show_popup('textarea',{
message: _t('Orderline Note'),
value: line.get_note(),
confirm: function(note) {
@@ -56,16 +55,14 @@ function openerp_restaurant_notes(instance,module){
});
}
},
build_widgets: function(){
var self = this;
this._super();
});
if (this.pos.config.iface_orderline_notes) {
var button = $(QWeb.render('OrderlineNoteButton'));
button.click(function(){ self.orderline_note_click(); });
button.appendTo(this.$('.control-buttons'));
this.$('.control-buttons').removeClass('oe_hidden');
}
module.define_action_button({
'name': 'orderline_note',
'widget': module.OrderlineNoteButton,
'condition': function(){
return this.pos.config.iface_orderline_notes;
},
});
}
};
@@ -1,29 +1,27 @@
function openerp_restaurant_printbill(instance,module){
openerp.pos_restaurant.load_printbill = function(instance,module){
var QWeb = instance.web.qweb;
var _t = instance.web._t;
module.PosWidget.include({
build_widgets: function(){
var self = this;
this._super();
if(this.pos.config.iface_printbill){
var printbill = $(QWeb.render('PrintBillButton'));
printbill.click(function(){
var order = self.pos.get('selectedOrder');
if(order.get_orderlines().length > 0){
var receipt = order.export_for_printing();
receipt.bill = true;
self.pos.proxy.print_receipt(QWeb.render('BillReceipt',{
receipt: receipt, widget: self, pos: self.pos, order: order,
}));
}
});
printbill.appendTo(this.$('.control-buttons'));
this.$('.control-buttons').removeClass('oe_hidden');
module.PrintBillButton = module.ActionButtonWidget.extend({
template: 'PrintBillButton',
button_click: function(){
var order = this.pos.get('selectedOrder');
if(order.get_orderlines().length > 0){
var receipt = order.export_for_printing();
receipt.bill = true;
this.pos.proxy.print_receipt(QWeb.render('BillReceipt',{
receipt: receipt, widget: this, pos: this.pos, order: order,
}));
}
},
});
}
module.define_action_button({
'name': 'print_bill',
'widget': module.PrintBillButton,
'condition': function(){
return this.pos.config.iface_printbill;
},
});
};
@@ -1,11 +1,9 @@
function openerp_restaurant_splitbill(instance, module){
openerp.pos_restaurant.load_splitbill = function(instance, module){
var QWeb = instance.web.qweb;
var _t = instance.web._t;
module.SplitbillScreenWidget = module.ScreenWidget.extend({
template: 'SplitbillScreenWidget',
show_leftpane: false,
previous_screen: 'products',
renderElement: function(){
@@ -29,7 +27,7 @@ function openerp_restaurant_splitbill(instance, module){
this.$('.orderlines').append(linewidget);
}
this.$('.back').click(function(){
self.pos_widget.screen_selector.set_current_screen(self.previous_screen);
self.gui.show_screen(self.previous_screen);
});
},
@@ -102,7 +100,7 @@ function openerp_restaurant_splitbill(instance, module){
if(full){
this.pos_widget.screen_selector.set_current_screen('payment');
this.gui.show_screen('payment');
}else{
for(var id in splitlines){
var split = splitlines[id];
@@ -157,27 +155,29 @@ function openerp_restaurant_splitbill(instance, module){
},
});
module.PosWidget.include({
build_widgets: function(){
var self = this;
this._super();
module.Gui.define_screen({
'name': 'splitbill',
'widget': module.SplitbillScreenWidget,
'condition': function(){
return this.pos.config.iface_splitbill;
},
});
if(this.pos.config.iface_splitbill){
this.splitbill_screen = new module.SplitbillScreenWidget(this,{});
this.splitbill_screen.appendTo(this.$('.screens'));
this.screen_selector.add_screen('splitbill',this.splitbill_screen);
var splitbill = $(QWeb.render('SplitbillButton'));
splitbill.click(function(){
if(self.pos.get_order().get_orderlines().length > 0){
self.pos_widget.screen_selector.set_current_screen('splitbill');
}
});
splitbill.appendTo(this.$('.control-buttons'));
this.$('.control-buttons').removeClass('oe_hidden');
module.SplitbillButton = module.ActionButtonWidget.extend({
template: 'SplitbillButton',
button_click: function(){
if(this.pos.get_order().get_orderlines().length > 0){
self.gui.show_screen('splitbill');
}
},
});
}
module.define_action_button({
'name': 'splitbill',
'widget': module.SplitbillButton,
'condition': function(){
return this.pos.config.iface_splitbill;
},
});
};
+1 -1
View File
@@ -13,12 +13,12 @@
<template id="assets_frontend" inherit_id="web.assets_common">
<xpath expr="." position="inside">
<script type="text/javascript" src="/pos_restaurant/static/lib/js/jquery.event.drag-2.2.js"></script>
<script type="text/javascript" src="/pos_restaurant/static/src/js/main.js"></script>
<script type="text/javascript" src="/pos_restaurant/static/src/js/multiprint.js"></script>
<script type="text/javascript" src="/pos_restaurant/static/src/js/splitbill.js"></script>
<script type="text/javascript" src="/pos_restaurant/static/src/js/printbill.js"></script>
<script type="text/javascript" src="/pos_restaurant/static/src/js/floors.js"></script>
<script type="text/javascript" src="/pos_restaurant/static/src/js/notes.js"></script>
<script type="text/javascript" src="/pos_restaurant/static/src/js/main.js"></script>
</xpath>
</template>