Modification : gère point_of_sale.patch dans ce module.
authorJulien Moutinho <julm+burette@autogeree.net>
Wed, 8 May 2013 22:20:59 +0000 (00:20 +0200)
committerJulien Moutinho <julm+burette@autogeree.net>
Thu, 9 May 2013 00:41:53 +0000 (02:41 +0200)
51 files changed:
__init__.py
__openerp__.py
controllers/__init__.py [new file with mode: 0644]
controllers/main.py [new file with mode: 0644]
point_of_sale.patch [deleted file]
pos_membership.py
static/src/css/pos.css [new file with mode: 0644]
static/src/css/pos_nohover.css [new file with mode: 0644]
static/src/img/backspace.png [new file with mode: 0644]
static/src/img/bancontact.png [new file with mode: 0644]
static/src/img/barcode.png [new file with mode: 0644]
static/src/img/bc-arrow.png [new file with mode: 0644]
static/src/img/bg.png [new file with mode: 0644]
static/src/img/default_category_photo.png [new file with mode: 0644]
static/src/img/grid-purple.png [new file with mode: 0644]
static/src/img/grid.png [new file with mode: 0644]
static/src/img/gtk-no.png [new file with mode: 0644]
static/src/img/gtk-yes.png [new file with mode: 0644]
static/src/img/headerbackground.jpg [new file with mode: 0644]
static/src/img/home.png [new file with mode: 0644]
static/src/img/icon.png [new file with mode: 0644]
static/src/img/icons/bancontact.svg [new file with mode: 0644]
static/src/img/icons/png48/face-monkey.png [new file with mode: 0644]
static/src/img/icons/png48/go-next.png [new file with mode: 0644]
static/src/img/icons/png48/go-previous.png [new file with mode: 0644]
static/src/img/icons/png48/help.png [new file with mode: 0644]
static/src/img/icons/png48/printer.png [new file with mode: 0644]
static/src/img/icons/png48/scale.png [new file with mode: 0644]
static/src/img/icons/png48/shut-down.png [new file with mode: 0644]
static/src/img/icons/png48/system-log-out.png [new file with mode: 0644]
static/src/img/icons/png48/validate.png [new file with mode: 0644]
static/src/img/icons/printer.svg [new file with mode: 0644]
static/src/img/icons/scale.svg [new file with mode: 0644]
static/src/img/icons/scan.svg [new file with mode: 0644]
static/src/img/icons/validate.svg [new file with mode: 0644]
static/src/img/logo.png [new file with mode: 0644]
static/src/img/pos_screenshot.jpg [new file with mode: 0644]
static/src/img/scale.png [new file with mode: 0644]
static/src/img/scan.png [new file with mode: 0644]
static/src/img/search.png [new file with mode: 0644]
static/src/img/search_reset.gif [new file with mode: 0644]
static/src/img/steps-arrow.png [new file with mode: 0644]
static/src/img/steps-bg.png [new file with mode: 0644]
static/src/img/validate-icon.png [new file with mode: 0644]
static/src/js/db.js [new file with mode: 0644]
static/src/js/main.js [new file with mode: 0644]
static/src/js/models.js [new file with mode: 0644]
static/src/js/screens.js [new file with mode: 0644]
static/src/js/widgets.js [new file with mode: 0644]
static/src/xml/pos.xml [new file with mode: 0644]
static/src/xml/pos_membership.xml [deleted file]

index ee06cef..67e0ed5 100644 (file)
@@ -21,5 +21,6 @@
 #
 ##############################################################################
 import pos_membership
+import controllers
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index 2ee6d8d..a73d3bb 100644 (file)
     'depends': ['membership', 'remembership', 'point_of_sale'],
     'init_xml': [],
     'data': [],
-    'js': [],
-    'css': [],
-    'qweb': ['static/src/xml/pos_membership.xml'],
+    'js': [
+       'static/src/js/db.js',
+       'static/src/js/models.js',
+       'static/src/js/widgets.js',
+       'static/src/js/screens.js',
+       'static/src/js/main.js',
+    ],
+    'css': [
+        'static/src/css/pos.css', # this is the default css with hover effects
+        #'static/src/css/pos_nohover.css', # this css has no hover effects (for resistive touchscreens)
+    ],
+    'qweb': ['static/src/xml/pos.xml'],
     'update_xml': [],
     'demo_xml': [],
     'test': [],
     'installable': True,
     'active': False,
+
 }
+
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/controllers/__init__.py b/controllers/__init__.py
new file mode 100644 (file)
index 0000000..8ee9bae
--- /dev/null
@@ -0,0 +1 @@
+import main
diff --git a/controllers/main.py b/controllers/main.py
new file mode 100644 (file)
index 0000000..7b2cdb2
--- /dev/null
@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+import os
+import openerp
+
+from openerp.addons.web.controllers.main import manifest_list, module_boot, html_template
+from openerp.addons.point_of_sale.controllers.main import PointOfSaleController
+
+class PointOfSaleController(PointOfSaleController):
+
+    @openerp.addons.web.http.httprequest
+    def app(self, req, s_action=None, **kw):
+        js = "\n        ".join('<script type="text/javascript" src="%s"></script>' % i for i in manifest_list(req, None, 'js'))
+        css = "\n        ".join('<link rel="stylesheet" href="%s">' % i for i in manifest_list(req, None, 'css'))
+
+        cookie = req.httprequest.cookies.get("instance0|session_id")
+        session_id = cookie.replace("%22","")
+        template = html_template.replace('<html','<html manifest="/pos/manifest?session_id=%s"'%session_id)
+        r = template % {
+            'js': js,
+            'css': css,
+            'modules': simplejson.dumps(module_boot(req)),
+            'init': 'var wc = new s.web.WebClient();wc.appendTo($(document.body));'
+        }
+        print ("DEV: [pos_membership] [controllers] [main] [app] return=%s" % str(r))
+        return r
+
+    @openerp.addons.web.http.httprequest
+    def manifest(self, req, **kwargs):
+        """ This generates a HTML5 cache manifest files that preloads the categories and products thumbnails 
+            and other ressources necessary for the point of sale to work offline """
+        ml = ["CACHE MANIFEST"]
+
+        # loading all the images in the static/src/img/* directories
+        def load_css_img(srcdir,dstdir):
+            for f in os.listdir(srcdir):
+                path = os.path.join(srcdir,f)
+                dstpath = os.path.join(dstdir,f)
+                if os.path.isdir(path) :
+                    load_css_img(path,dstpath)
+                elif f.endswith(('.png','.PNG','.jpg','.JPG','.jpeg','.JPEG','.gif','.GIF')):
+                    ml.append(dstpath)
+
+        imgdir = openerp.modules.get_module_resource('point_of_sale','static/src/img');
+        load_css_img(imgdir,'/point_of_sale/static/src/img')
+        
+        products = req.session.model('product.product')
+        for p in products.search_read([('pos_categ_id','!=',False)], ['name']):
+            product_id = p['id']
+            url = "/web/binary/image?session_id=%s&model=product.product&field=image&id=%s" % (req.session_id, product_id)
+            ml.append(url)
+        
+        categories = req.session.model('pos.category')
+        for c in categories.search_read([],['name']):
+            category_id = c['id']
+            url = "/web/binary/image?session_id=%s&model=pos.category&field=image&id=%s" % (req.session_id, category_id)
+            ml.append(url)
+        
+        partners = req.session.model('res.partner')
+        for c in partners.search_read([],['name']):
+            partner_id = c['id']
+            url = "/web/binary/image?session_id=%s&model=res.partner&field=image&id=%s" % (req.session_id, partner_id)
+            ml.append(url)
+
+        ml += ["NETWORK:","*"]
+        m = "\n".join(ml)
+
+        print ("DEV: [pos_membership] [controllers] [main] [manifest] return=%s" % m)
+        return m
+
+PointOfSaleController()
diff --git a/point_of_sale.patch b/point_of_sale.patch
deleted file mode 100644 (file)
index d8be7a1..0000000
+++ /dev/null
@@ -1,1258 +0,0 @@
-diff --git a/controllers/main.py b/controllers/main.py
-index b189c8f..d3743ac 100644
---- a/controllers/main.py
-+++ b/controllers/main.py
-@@ -29,7 +29,6 @@ class PointOfSaleController(openerp.addons.web.http.Controller):
-     def manifest(self, req, **kwargs):
-         """ This generates a HTML5 cache manifest files that preloads the categories and products thumbnails 
-             and other ressources necessary for the point of sale to work offline """
--
-         ml = ["CACHE MANIFEST"]
-         # loading all the images in the static/src/img/* directories
-@@ -56,10 +55,17 @@ class PointOfSaleController(openerp.addons.web.http.Controller):
-             category_id = c['id']
-             url = "/web/binary/image?session_id=%s&model=pos.category&field=image&id=%s" % (req.session_id, category_id)
-             ml.append(url)
-+        
-+        partners = req.session.model('res.partner')
-+        for c in partners.search_read([],['name']):
-+            partner_id = c['id']
-+            url = "/web/binary/image?session_id=%s&model=res.partner&field=image&id=%s" % (req.session_id, partner_id)
-+            ml.append(url)
-         ml += ["NETWORK:","*"]
-         m = "\n".join(ml)
-+        print ("DEV: [point_of_sale] [controllers] [main] return=%s" % m)
-         return m
-     @openerp.addons.web.http.jsonrequest
-diff --git a/point_of_sale.py b/point_of_sale.py
-index 7e8487b..371a07b 100644
---- a/point_of_sale.py
-+++ b/point_of_sale.py
-@@ -479,8 +479,22 @@ class pos_order(osv.osv):
-     _description = "Point of Sale"
-     _order = "id desc"
-+    def create_partner_from_ui(self, cr, uid, partners, context=None):
-+        print ("DEV: [point_of_sale] [create_partner_from_ui] partners=%s" % str(partners))
-+        partner_ids = []
-+        partner_obj = self.pool.get('res.partner')
-+        for tmp_partner in partners:
-+            partner = tmp_partner['data']
-+            partner_id = partner_obj.create(cr, uid, {
-+                'name': partner['name'],
-+            }, context)
-+            partner_ids.append(partner_id)
-+            #self.signal_paid(cr, uid, [partner_id])
-+        return partner_ids
-+
-     def create_from_ui(self, cr, uid, orders, context=None):
-         #_logger.info("orders: %r", orders)
-+        print ("DEV: [point_of_sale] [create_from_ui] order=", str(orders))
-         order_ids = []
-         for tmp_order in orders:
-             order = tmp_order['data']
-@@ -489,7 +503,8 @@ class pos_order(osv.osv):
-                 'user_id': order['user_id'] or False,
-                 'session_id': order['pos_session_id'],
-                 'lines': order['lines'],
--                'pos_reference':order['name']
-+                'pos_reference':order['name'],
-+                'partner_id':order['partner_id'],
-             }, context)
-             for payments in order['statement_ids']:
-diff --git a/static/src/css/pos.css b/static/src/css/pos.css
-index d9a4d6d..9357d5d 100644
---- a/static/src/css/pos.css
-+++ b/static/src/css/pos.css
-@@ -619,6 +619,200 @@
-     padding-top:15px;
- }
-+/*  ********* The partner list  ********* */
-+
-+.point-of-sale .partner-list {
-+    padding:10px !important;
-+}
-+
-+.point-of-sale .partner-list-scroller{
-+    -webkit-box-sizing: border-box;
-+       -moz-box-sizing: border-box;
-+        -ms-box-sizing: border-box;
-+            box-sizing: border-box;
-+    width:100%;
-+    height:100%;
-+    overflow: hidden;
-+}
-+.point-of-sale .partner-list-container {
-+    position:absolute;
-+    top:0px;
-+    bottom:0px;
-+    left:0px;
-+    right:0px;
-+}
-+
-+/*  a) the search box */
-+
-+.point-of-sale #partners-screen .searchbox {
-+    position: absolute;
-+    right: 2px;
-+}
-+.point-of-sale #partners-screen .searchbox input {
-+    width: 130px;
-+    border-radius: 11px;
-+    border: 1px solid #cecbcb;
-+    padding: 3px 19px;
-+    margin: 6px;
-+    background: url("../img/search.png") no-repeat 5px;
-+    background-color: white;
-+}
-+.point-of-sale #partners-screen .search-clear {
-+    position: absolute;
-+    top: 11px;
-+    right: 11px;
-+    cursor: pointer;
-+    display: none;
-+}
-+
-+.point-of-sale #partners-screen .search-create {
-+    position: absolute;
-+    top: 6px;
-+    right: 22px;
-+    cursor: pointer;
-+    display: none;
-+}
-+
-+
-+/*  b) the partner */
-+
-+.point-of-sale .partner {
-+    position:relative;
-+    vertical-align: top;
-+    display: inline-block;
-+    line-height: 100px;
-+    font-size: 11px;
-+    margin: 5px !important;
-+    width: 120px;
-+    height:120px;
-+    background:#fff;
-+    border: 1px solid #fff;
-+    border-radius: 3px;
-+    -webkit-box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480; 
-+       -moz-box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480; 
-+            box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480; 
-+}
-+
-+.point-of-sale .partner .partner-img {
-+    position: relative;
-+    width: 120px;
-+    height: 100px;
-+    background: white;
-+    text-align: center;
-+}
-+
-+.point-of-sale .partner .partner-img img {
-+    max-height: 100px;
-+    max-width:  120px;
-+}
-+
-+.point-of-sale .partner .price-tag {
-+    position: absolute;
-+    top: 2px;
-+    right: 2px;
-+    vertical-align: top;
-+    color: white;
-+    line-height: 13px;
-+    background: #7f82ac;
-+    padding: 2px 5px;
-+    border-radius: 3px;
-+    box-shadow: 0px 1px 0px #9A9CC5, 0px 3px 0px #7E86AC, 0px 3px 3px rgba(12, 14, 68, 0.67);
-+}
-+
-+.point-of-sale .partner .partner-name {
-+    position: absolute;
-+    -webkit-box-sizing: border-box;
-+       -moz-box-sizing: border-box;
-+        -ms-box-sizing: border-box;
-+            box-sizing: border-box;
-+    bottom:0;
-+    top:auto;
-+    line-height: 14px;
-+    width:100%;
-+    background: -webkit-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
-+    background:    -moz-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
-+    background:     -ms-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
-+    /* troublesome in latest webkit
-+    background:         linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
-+    */
-+    /*background:#FFF;*/
-+    padding: 3px;
-+    padding-top:15px;
-+}
-+
-+/*  c) the partner creation */
-+
-+.point-of-sale .pos-step-container {
-+    display: inline-block;
-+    font-size: 1.5em;
-+}
-+.point-of-sale .greyed-out{
-+    color: #AAA;
-+}
-+.point-of-sale .pos-step-container input{
-+    font-size: 1em;
-+    outline: none;
-+    border: none;
-+    padding: 0px 8px;
-+    padding-top: 8px;
-+    margin-left: 16px;
-+    border-radius: 5px;
-+    background: white;
-+    box-shadow: 0px -1px 0px #E2E2E2 inset,0px 1px 0px white inset, 0px 4px 0px #DDD inset, 0px 4px 8px rgba(0, 0, 0, 0.55) inset;
-+    color: #4c4c4c; 
-+    -webkit-animation: all 250ms linear;
-+}
-+
-+.point-of-sale .pos-step-container input:focus{
-+    box-shadow: 0px -1px 0px #C9CFFD inset,0px 1px 0px #B8C8FC inset, 0px 4px 0px #9FD5FF inset, 0px 4px 9px rgba(0, 31, 255, 0.55) inset;
-+    color: #5d7ad6;
-+    -webkit-animation: all 250ms linear;
-+}
-+
-+.point-of-sale .pos-partner-create-container {
-+    text-align: left;
-+    min-width: 500px;
-+    margin-top: 50px;
-+    padding: 40px;
-+    background-color: #f8f8f8;
-+    border-radius: 4px;
-+    box-shadow: 0px 1px 0px white,0px -1px 0px white, 0px 4px 0px #DFDFDF, 0px 10px 30px rgba(0, 0, 0, 0.21);
-+}
-+.point-of-sale .pos-partner-create-container .left-block{
-+    display: inline-block;
-+    width:49%;
-+    margin:0;
-+    padding:0;
-+    text-align:left;
-+}
-+.point-of-sale .pos-partner-create-container .header{
-+    margin-top: 0px;
-+    margin-bottom:20px;
-+    font-weight: bold;
-+}
-+.point-of-sale .pos-partner-create-container .infoline{
-+    margin-top:5px;
-+    margin-bottom:5px;
-+}
-+.point-of-sale .pos-partner-create-container .right-block{
-+    display: inline-block;
-+    width:49%;
-+    margin:0;
-+    padding:0;
-+    text-align:right;
-+}
-+.point-of-sale .pos-partner-create-container table {
-+    width: 100%;
-+    margin-bottom: 20px;
-+}
-+.point-of-sale .pos-partner-create-container td {
-+    vertical-align: middle;
-+}
-+.point-of-sale .pos-partner-create-container .partner-createline-type {
-+    font-size: 1em;
-+    font-weight: bold;
-+    margin-right:10px;
-+}
- /*  ********* The Screens  ********* */
-diff --git a/static/src/css/pos_nohover.css b/static/src/css/pos_nohover.css
-index 6f24abd..7dcb4f0 100644
---- a/static/src/css/pos_nohover.css
-+++ b/static/src/css/pos_nohover.css
-@@ -579,6 +579,175 @@
-     padding-top:15px;
- }
-+/*  ********* The partner list  ********* */
-+
-+.point-of-sale .partner-list {
-+    padding:10px;
-+}
-+
-+.point-of-sale .partner-list-scroller{
-+    -webkit-box-sizing: border-box;
-+       -moz-box-sizing: border-box;
-+        -ms-box-sizing: border-box;
-+            box-sizing: border-box;
-+    width:100%;
-+    height:100%;
-+    overflow: hidden;
-+}
-+.point-of-sale .partner-list-container {
-+    position:absolute;
-+    top:0px;
-+    bottom:0px;
-+    left:0px;
-+    right:0px;
-+    background: #eeedff;
-+}
-+
-+/*  a) the search box */
-+
-+.point-of-sale #partners-screen .searchbox {
-+    position: absolute;
-+    right: 2px;
-+}
-+.point-of-sale #partners-screen .searchbox input {
-+    width: 130px;
-+    border-radius: 11px;
-+    border: 1px solid #cecbcb;
-+    padding: 3px 19px;
-+    margin: 6px;
-+    background: url("../img/search.png") no-repeat 5px;
-+    background-color: white;
-+}
-+.point-of-sale #partners-screen .search-clear {
-+    position: absolute;
-+    top: 11px;
-+    right: 11px;
-+    cursor: pointer;
-+    display: none;
-+}
-+.point-of-sale #partners-screen .search-create {
-+    position: absolute;
-+    top: 6px;
-+    right: 22px;
-+    cursor: pointer;
-+    display: none;
-+}
-+
-+/*  b) the partner */
-+
-+.point-of-sale .partner {
-+    position:relative;
-+    vertical-align: top;
-+    display: inline-block;
-+    line-height: 100px;
-+    font-size: 11px;
-+    margin: 5px;
-+    width: 120px;
-+    height:120px;
-+    background:#fff;
-+    border: 1px solid #fff;
-+    border-radius: 3px;
-+    -webkit-box-shadow: 0px 1px 8px rgba(127,130,172,0.4);
-+       -moz-box-shadow: 0px 1px 8px rgba(127,130,172,0.4);
-+            box-shadow: 0px 1px 8px rgba(127,130,172,0.4);
-+}
-+
-+.point-of-sale .partner .partner-img {
-+    position: relative;
-+    width: 120px;
-+    height: 100px;
-+    background: white;
-+    text-align: center;
-+}
-+
-+.point-of-sale .partner .partner-img img {
-+    max-height: 100px;
-+    max-width:  120px;
-+}
-+
-+.point-of-sale .partner .price-tag {
-+    position: absolute;
-+    top: 2px;
-+    right: 2px;
-+    vertical-align: top;
-+    color: white;
-+    line-height: 14px;
-+    background: #7f82ac;
-+    padding: 2px 5px;
-+    border-radius: 3px;
-+}
-+
-+.point-of-sale .partner .partner-name {
-+    position: absolute;
-+    -webkit-box-sizing: border-box;
-+       -moz-box-sizing: border-box;
-+        -ms-box-sizing: border-box;
-+            box-sizing: border-box;
-+    bottom:0;
-+    top:auto;
-+    line-height: 14px;
-+    width:100%;
-+    background: -webkit-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
-+    background:    -moz-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
-+    background:     -ms-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
-+    background:         linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
-+    /*background:#FFF;*/
-+    padding: 3px;
-+    padding-top:15px;
-+}
-+
-+/*  c) the partner creation */
-+
-+.point-of-sale .pos-step-container {
-+    display: inline-block;
-+    font-size: 1.5em;
-+}
-+.point-of-sale .greyed-out{
-+    color: #AAA;
-+}
-+.point-of-sale .pos-step-container input{
-+    font-size: 1em;
-+}
-+
-+.point-of-sale .pos-partner-create-container {
-+    text-align: left;
-+    min-width: 500px;
-+}
-+.point-of-sale .pos-partner-create-container .left-block{
-+    display: inline-block;
-+    width:49%;
-+    margin:0;
-+    padding:0;
-+    text-align:left;
-+}
-+.point-of-sale .pos-partner-create-container .header{
-+    margin-top: 50px;
-+    margin-bottom:20px;
-+    font-weight: bold;
-+}
-+.point-of-sale .pos-partner-create-container .infoline{
-+    margin-top:5px;
-+    margin-bottom:5px;
-+}
-+.point-of-sale .pos-partner-create-container .right-block{
-+    display: inline-block;
-+    width:49%;
-+    margin:0;
-+    padding:0;
-+    text-align:right;
-+}
-+.point-of-sale .pos-partner-create-container table {
-+    width: 100%;
-+    margin-bottom: 20px;
-+}
-+.point-of-sale .pos-partner-create-container td {
-+    vertical-align: middle;
-+}
-+.point-of-sale .pos-partner-create-container .partner-createline-type {
-+    font-size: 1em;
-+    font-weight: bold;
-+    margin-right:10px;
-+}
- /*  ********* The Screens  ********* */
-diff --git a/static/src/js/db.js b/static/src/js/db.js
-index a79b111..93c71e9 100644
---- a/static/src/js/db.js
-+++ b/static/src/js/db.js
-@@ -40,6 +40,9 @@ function openerp_pos_db(instance, module){
-             //cache the data in memory to avoid roundtrips to the localstorage
-             this.cache = {};
-+            this.partner_search_string = '';
-+            this.partner_by_id = {};
-+            this.partner_list = [];
-             this.product_by_id = {};
-             this.product_by_ean13 = {};
-             this.product_by_category_id = {};
-@@ -196,6 +199,23 @@ function openerp_pos_db(instance, module){
-                 }
-             }
-         },
-+        _partner_search_string: function(partner){
-+            var str = '' + partner.id + ':' + partner.name;
-+            return str + '\n';
-+        },
-+        add_partners: function(partners){
-+            if(!partners instanceof Array){
-+                partners = [partners];
-+            }
-+            for(var i = 0, len = partners.length; i < len; i++){
-+                var partner = partners[i];
-+                //console.log("[db] [add_partners] partner.name:",partner.name);
-+                this.partner_by_id[partner.id] = partner;
-+                this.partner_list.push(partner);
-+                this.partner_search_string += this._partner_search_string(partner);
-+            }
-+                                              //console.log("[db] [add_partners] partner_search_string:", this.partner_search_string);
-+        },
-         add_packagings: function(packagings){
-             for(var i = 0, len = packagings.length; i < len; i++){
-                 var pack = packagings[i];
-@@ -225,6 +245,9 @@ function openerp_pos_db(instance, module){
-             }
-             return count;
-         },
-+        get_partner_by_id: function(id){
-+            return this.partner_by_id[id];
-+        },
-         get_product_by_id: function(id){
-             return this.product_by_id[id];
-         },
-@@ -266,13 +289,48 @@ function openerp_pos_db(instance, module){
-             }
-             return results;
-         },
-+        search_partner: function(query){
-+            var re = RegExp("([0-9]+):.*?"+query,"gi");
-+            var results = [];
-+            //console.log("[db] [search_partner] query:",query);
-+            for(var i = 0; i < this.limit; i++){
-+                r = re.exec(this.partner_search_string);
-+                if(r){
-+                  var id = Number(r[1]);
-+                  //console.log("[db] [search_partner] id:",id);
-+                  results.push(this.get_partner_by_id(id));
-+                }else{
-+                    break;
-+                }
-+            }
-+            return results;
-+        },
-+        get_partner_list: function(){
-+            return this.partner_list;
-+        },
-+        add_partner: function(partner){
-+            console.log("[PosLS] [add_partner] partner=", partner.name);
-+            var last_id = this.load('last_partner_id',0);
-+            var partners  = this.load('partners',[]);
-+            partners.push({id: last_id + 1, data: partner});
-+            this.save('last_partner_id',last_id+1);
-+            this.save('partners',partners);
-+        },
-         add_order: function(order){
-+            console.log("[PosLS] [add_order] order=", order);
-             var last_id = this.load('last_order_id',0);
-             var orders  = this.load('orders',[]);
-             orders.push({id: last_id + 1, data: order});
-             this.save('last_order_id',last_id+1);
-             this.save('orders',orders);
-         },
-+        remove_partner: function(partner_id){
-+            var partners = this.load('partners',[]);
-+            partners = _.filter(partners, function(partner){
-+                return partner.id !== partner_id;
-+            });
-+            this.save('partners',partners);
-+        },
-         remove_order: function(order_id){
-             var orders = this.load('orders',[]);
-             orders = _.filter(orders, function(order){
-@@ -280,6 +338,9 @@ function openerp_pos_db(instance, module){
-             });
-             this.save('orders',orders);
-         },
-+        get_partners: function(){
-+            return this.load('partners',[]);
-+        },
-         get_orders: function(){
-             return this.load('orders',[]);
-         },
-diff --git a/static/src/js/models.js b/static/src/js/models.js
-index d2cf15b..409f193 100644
---- a/static/src/js/models.js
-+++ b/static/src/js/models.js
-@@ -41,7 +41,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-             this.barcode_reader = new module.BarcodeReader({'pos': this});  // used to read barcodes
-             this.proxy = new module.ProxyDevice();              // used to communicate to the hardware devices via a local proxy
-             this.db = new module.PosLS();                       // a database used to store the products and categories
--            this.db.clear('products','categories');
-+            this.db.clear('products','categories','partners');
-             this.debug = jQuery.deparam(jQuery.param.querystring()).debug !== undefined;    //debug mode 
-             // default attributes values. If null, it will be loaded below.
-@@ -59,6 +59,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-                 'orders':           new module.OrderCollection(),
-                 //this is the product list as seen by the product list widgets, it will change based on the category filters
-                 'products':         new module.ProductCollection(), 
-+                'partners':         new module.PartnerCollection(),
-                 'cashRegisters':    null, 
-                 'bank_statements':  null,
-@@ -69,6 +70,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-                 'units_by_id':      null,
-                 'selectedOrder':    null,
-+                'selectedPartner':  null,
-             });
-             this.get('orders').bind('remove', function(){ self.on_removed_order(); });
-@@ -144,6 +146,10 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-                 }).then(function(partners){
-                     self.set('partner_list',partners);
-+                    return self.fetch('res.partner', ['name']);
-+                }).then(function(partners){
-+                    self.db.add_partners(partners);
-+
-                     return self.fetch('account.tax', ['amount', 'price_include', 'type']);
-                 }).then(function(taxes){
-                     self.set('taxes', taxes);
-@@ -256,12 +262,23 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-             }
-         },
-+        push_partner: function(partner) {
-+            console.log("[PosModel] [push_partner] partner=", partner.name);
-+            this.db.add_partner(partner);
-+            this.flush_partner();
-+        },
-         // saves the order locally and try to send it to the backend. 'record' is a bizzarely defined JSON version of the Order
-         push_order: function(record) {
-             this.db.add_order(record);
-             this.flush();
-         },
-+        add_new_partner: function(attr){
-+            var partner = new module.PartnerCreate({pos:this, name:attr.name});
-+            console.log("[PosModel] [add_new_partner] partner=", partner.get('name'));
-+            this.get('partners').add(partner);
-+            this.set('selectedPartner', partner);
-+        },
-         //creates a new empty order and sets it as the current order
-         add_new_order: function(){
-             var order = new module.Order({pos:this});
-@@ -269,6 +286,16 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-             this.set('selectedOrder', order);
-         },
-+        flush_partner: function() {
-+            //TODO make the mutex work 
-+            //this makes sure only one _int_flush is called at the same time
-+            /*
-+            return this.flush_mutex.exec(_.bind(function() {
-+                return this._flush_partner(0);
-+            }, this));
-+            */
-+            this._flush_partner(0);
-+        },
-         // attemps to send all pending orders ( stored in the pos_db ) to the server,
-         // and remove the successfully sent ones from the db once
-         // it has been confirmed that they have been sent correctly.
-@@ -282,6 +309,40 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-             */
-             this._flush(0);
-         },
-+        _flush_partner: function(index){
-+            var self = this;
-+            var partners = this.db.get_partners();
-+            self.set('nbr_pending_operations',partners.length);
-+
-+            var partner  = partners[index];
-+            console.log("[PosModel] [_flush_partner] index=", index);
-+            if(!partner){
-+                return;
-+            }
-+            console.log("[PosModel] [_flush_partner] partner=", partner.data.name);
-+            //try to push a partner to the server
-+            return (new instance.web.Model('pos.order')).get_func('create_partner_from_ui')([partner])
-+                .fail(function(unused, event){
-+                    //don't show error popup if it fails
-+                    event.preventDefault();
-+                    console.error('Failed to send partner:',partner);
-+                    self._flush_partner(index+1);
-+                })
-+                .done(function(args){
-+                    //remove from db if success
-+                    console.log("[PosModel] [_flush_partner] [.done] args=", args);
-+                    self.db.remove_partner(partner.id);
-+                    var name = partner.data.name;
-+                    p = {name:name, id:args[0]};
-+                    console.log("[PosModel] [_flush_partner] [.done] partner=", p);
-+                    self.db.add_partners([p]);
-+                    //self.set('selectedPartner', p);
-+                    //console.log("[PosModel] [_flush_partner] [.done] selectedPartner=", self.get('selectedPartner').name);
-+                    //console.log("[PosModel] [_flush_partner] [.done] selectedPartner.id=", self.get('selectedPartner').id);
-+                    self.get('selectedOrder').addPartner(p); // NOTE: set .id asynchronously..
-+                    self._flush_partner(index);
-+                });
-+        },
-         // attempts to send an order of index 'index' in the list of order to send. The index
-         // is used to skip orders that failed. do not call this method outside the mutex provided
-         // by flush() 
-@@ -295,6 +356,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-                 return;
-             }
-             //try to push an order to the server
-+            console.log("[PosModel] [_flush] order=", order);
-             (new instance.web.Model('pos.order')).get_func('create_from_ui')([order])
-                 .fail(function(unused, event){
-                     //don't show error popup if it fails 
-@@ -341,10 +403,22 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-             return instance.session.url('/web/binary/image', {model: 'product.product', field: 'image', id: this.get('id')});
-         },
-     });
-+    module.Partner = Backbone.Model.extend({
-+        initialize: function(attr, options) {
-+          this.name = attr.name;
-+          this.id   = attr.id;
-+        },
-+        get_image_url: function(){
-+            return instance.session.url('/web/binary/image', {model: 'res.partner', field: 'image', id: this.get('id')});
-+        },
-+    });
-     module.ProductCollection = Backbone.Collection.extend({
-         model: module.Product,
-     });
-+    module.PartnerCollection = Backbone.Collection.extend({
-+        model: module.Partner,
-+    });
-     // An orderline represent one element of the content of a client's shopping cart.
-     // An orderline contains a product, its quantity, its price, discount. etc. 
-@@ -598,6 +672,21 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-     });
-     
-+    module.PartnerCreate = Backbone.Model.extend({
-+        initialize: function(attr){
-+            Backbone.Model.prototype.initialize.apply(this, arguments);
-+            this.pos = attr.pos;
-+            this.name = attr.name;
-+            return this;
-+        },
-+        exportAsJSON: function() {
-+            console.log("[PartnerCreate] [exportAsJSON] name=",this.name);
-+            return {
-+                name: this.name,
-+            };
-+        },
-+    });
-+
-     // An order more or less represents the content of a client's shopping cart (the OrderLines) 
-     // plus the associated payment information (the PaymentLines) 
-     // there is always an active ('selected') order in the Pos, a new one is created
-@@ -643,6 +732,11 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-             }
-             this.selectLine(this.getLastOrderline());
-         },
-+        addPartner: function(partner, options){
-+            options = options || {};
-+            console.log("[Order] [addPartner] partner=", partner.name, " partner_id=", partner.id);
-+            this.set_client(partner);
-+        },
-         removeOrderline: function( line ){
-             this.get('orderLines').remove(line);
-             this.selectLine(this.getLastOrderline());
-@@ -747,6 +841,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-             var company = this.pos.get('company');
-             var shop    = this.pos.get('shop');
-             var date = new Date();
-+            console.log("[Order] [export_for_printing] this.get('client')=",this.get('client'));
-             return {
-                 orderlines: orderlines,
-@@ -804,7 +899,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
-                 lines: orderLines,
-                 statement_ids: paymentLines,
-                 pos_session_id: this.pos.get('pos_session').id,
--                partner_id: this.pos.get('client') ? this.pos.get('client').id : undefined,
-+                partner_id: this.get('client') ? this.get('client').id : undefined,
-                 user_id: this.pos.get('cashier') ? this.pos.get('cashier').id : this.pos.get('user').id,
-             };
-         },
-diff --git a/static/src/js/screens.js b/static/src/js/screens.js
-index eca4a3c..eb1986a 100644
---- a/static/src/js/screens.js
-+++ b/static/src/js/screens.js
-@@ -729,10 +729,54 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
-         },
-     });
-     
-+    module.PartnerScreenWidget = module.ScreenWidget.extend({
-+        template:'PartnerScreenWidget',
-+
-+        next_screen: 'products',
-+
-+        show_numpad:     false,
-+        show_leftpane:   false,
-+        init: function(parent, options) {
-+            this._super(parent,options);
-+            this.model = options.model;
-+            // TODO: this.pos.bind('change:selectedOrder', this.change_selected_order, this);
-+        },
-+
-+        start: function(){
-+            var self = this;
-+
-+            this.partner_search_widget = new module.PartnerSearchWidget(this,{});
-+            this.partner_search_widget.replace($('.placeholder-PartnerSearchWidget'));
-+
-+            this.partner_list_widget = new module.PartnerListWidget(this,{
-+                click_partner_action: function(partner){
-+                    self.pos.get('selectedOrder').addPartner(partner);
-+                    self.pos_widget.screen_selector.set_current_screen(self.next_screen);
-+                },
-+            });
-+            this.partner_list_widget.replace($('.placeholder-PartnerListWidget'));
-+        },
-+
-+        show: function(){
-+            this._super();
-+            var self = this;
-+
-+            this.partner_search_widget.reset_filter();
-+        },
-+
-+        close: function(){
-+            this._super();
-+            this.pos_widget.order_widget.set_numpad_state(null);
-+            this.pos_widget.payment_screen.set_numpad_state(null);
-+        },
-+
-+    });
-+    
-     module.ProductScreenWidget = module.ScreenWidget.extend({
-         template:'ProductScreenWidget',
-         scale_screen: 'scale_invite',
-+        back_screen: 'partner',
-         client_next_screen:  'client_payment',
-         show_numpad:     true,
-@@ -775,6 +819,16 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
-                         }
-                     });
-             }
-+
-+            this.back_button = this.add_action_button({
-+                    label: 'Back',
-+                    icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png',
-+                    click: function(){
-+                        self.pos.get('selectedOrder').get('orderLines').reset([]);
-+                        self.pos_widget.numpad.state.trigger('set_value','remove');
-+                        self.pos_widget.screen_selector.set_current_screen(self.back_screen);
-+                    },
-+                });
-         },
-         close: function(){
-@@ -846,6 +900,63 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
-         },
-     });
-+    module.PartnerCreateScreenWidget = module.ScreenWidget.extend({
-+        template: 'PartnerCreateScreenWidget',
-+        show_numpad: false,
-+        show_leftpane: false,
-+        back_screen: 'partner',
-+        next_screen: 'products',
-+        init: function(parent, options) {
-+            this._super(parent,options);
-+            this.model = options.model;
-+        },
-+        show: function(){
-+            this._super();
-+            var self = this;
-+
-+            this.back_button = this.add_action_button({
-+                    label: 'Back',
-+                    icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png',
-+                    click: function(){
-+                        self.pos_widget.screen_selector.set_current_screen(self.back_screen);
-+                    },
-+                });
-+            this.validate_button = this.add_action_button({
-+                    label: 'Validate',
-+                    name: 'validation',
-+                    icon: '/point_of_sale/static/src/img/icons/png48/validate.png',
-+                    click: function(){
-+                        self.validatePartner();
-+                    },
-+                });
-+            this.updatePartnerCreateSummary();
-+        },
-+        close: function(){
-+            this._super();
-+        },
-+        back: function() {
-+            this.pos_widget.screen_selector.set_current_screen(self.back_screen);
-+        },
-+        validatePartner: function() {
-+            var partner = this.pos.get('selectedPartner');
-+
-+            this.pos.push_partner(partner.exportAsJSON());
-+            this.pos.get('selectedOrder').addPartner({name:partner.name}); // NOTE: .id set asynchronously in .done()
-+            this.pos_widget.screen_selector.set_current_screen(this.next_screen);
-+        },
-+        renderElement: function() {
-+            this._super();
-+            this.updatePartnerCreateSummary();
-+        },
-+        updatePartnerCreateSummary: function() {
-+          var partner = this.pos.get('selectedPartner');
-+          if(partner){
-+            console.log("[PartnerCreateScreenWidget] [updatePartnerCreateSummary] partner=",partner.get('name'));
-+            this.$('#partner-create-name').html(partner.get('name'));
-+           }
-+        },
-+    });
-+
-     module.PaymentScreenWidget = module.ScreenWidget.extend({
-         template: 'PaymentScreenWidget',
-         back_screen: 'products',
-diff --git a/static/src/js/widgets.js b/static/src/js/widgets.js
-index 874c387..9b6c120 100644
---- a/static/src/js/widgets.js
-+++ b/static/src/js/widgets.js
-@@ -282,6 +282,27 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
-         },
-     });
-+    module.PartnerWidget = module.PosBaseWidget.extend({
-+        template: 'PartnerWidget',
-+        init: function(parent, options) {
-+            this._super(parent,options);
-+            this.model = options.model;
-+            this.next_screen = options.next_screen; //when a partner is clicked, this screen is set
-+            this.click_partner_action = options.click_partner_action; 
-+        },
-+        // returns the url of the partner thumbnail
-+        renderElement: function() {
-+            this._super();
-+            this.$('img').replaceWith(this.pos_widget.image_cache.get_image(this.model.get_image_url()));
-+            var self = this;
-+            $("a", this.$el).click(function(e){
-+                if(self.click_partner_action){
-+                    self.click_partner_action(self.model);
-+                }
-+            });
-+        },
-+    });
-+
-     module.ProductWidget = module.PosBaseWidget.extend({
-         template: 'ProductWidget',
-         init: function(parent, options) {
-@@ -289,6 +310,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
-             this.model = options.model;
-             this.model.attributes.weight = options.weight;
-             this.next_screen = options.next_screen; //when a product is clicked, this screen is set
-+            //this.back_screen = options.back_screen;
-             this.click_product_action = options.click_product_action; 
-         },
-         // returns the url of the product thumbnail
-@@ -465,6 +487,79 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
-     module.CategoryButton = module.PosBaseWidget.extend({
-     });
-+
-+    module.PartnerSearchWidget = module.PosBaseWidget.extend({
-+        template: 'PartnerSearchWidget',
-+        init: function(parent, options){
-+            var self = this;
-+            this._super(parent,options);
-+        },
-+
-+        get_image_url: function(partner){
-+            return instance.session.url('/web/binary/image', {model: 'res.partner', field: 'image', id: partner.id});
-+        },
-+
-+        renderElement: function(){
-+            var self = this;
-+            this._super();
-+            this.filter();
-+        },
-+        reset_filter: function(){
-+            this.renderElement();
-+            this.filter();
-+        },
-+        filter: function(category){
-+            var self = this;
-+
-+            var partners = self.pos.db.get_partner_list();
-+            self.pos.get('partners').reset(partners);
-+
-+            // filter the partners according to the search string
-+            this.$('.searchbox input').keyup(function(){
-+                query = $(this).val();
-+                if(query){
-+                    console.log("[PartnerSearchWidget] [filter]: query:", query);
-+                    var partners = self.pos.db.search_partner(query);
-+                    self.pos.get('partners').reset(partners);
-+                    //if(partners.length == 0) {
-+                      console.log("[PartnerSearchWidget] [filter]: no result");
-+                      self.query = query;
-+                      self.$('.search-create').fadeIn();
-+                    //}else{
-+                    //  self.$('.search-create').fadeOut();
-+                    //}
-+                    self.$('.search-clear').fadeIn();
-+                }else{
-+                    var partners = self.pos.db.get_partner_list();
-+                    self.pos.get('partners').reset(partners);
-+                    self.$('.search-clear').fadeOut();
-+                    self.$('.search-create').fadeOut();
-+                }
-+            });
-+
-+            //this.$('.searchbox input').click(function(){}); //Why ???
-+
-+            //reset the search when clicking on reset
-+            this.$('.search-clear').click(function(){
-+                var partners = self.pos.db.get_partner_list();
-+                self.pos.get('partners').reset(partners);
-+                self.$('.searchbox input').val('').focus();
-+                self.$('.search-clear').fadeOut();
-+                self.$('.search-create').fadeOut();
-+            });
-+            this.$('.search-create').click(function(){
-+                var partners = self.pos.db.get_partner_list();
-+                self.pos.get('partners').reset(partners);
-+                self.$('.searchbox input').val('').focus();
-+                self.$('.search-clear').fadeOut();
-+                self.$('.search-create').fadeOut();
-+                console.log("[PartnerSearchWidget] [filter] [search-create] query=",self.query);
-+                self.pos.add_new_partner({name:self.query});
-+                self.pos_widget.screen_selector.set_current_screen('partner_create');
-+            });
-+        },
-+    });
-+    
-     module.ProductCategoriesWidget = module.PosBaseWidget.extend({
-         template: 'ProductCategoriesWidget',
-         init: function(parent, options){
-@@ -588,7 +683,61 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
-             });
-         },
-     });
-+    
-+    module.PartnerListWidget = module.ScreenWidget.extend({
-+        template:'PartnerListWidget',
-+        init: function(parent, options) {
-+            var self = this;
-+            this._super(parent,options);
-+            this.model = options.model;
-+            this.partnerwidgets = [];
-+            //this.weight = options.weight || 0;
-+            this.show_scale = options.show_scale || false;
-+            this.next_screen = options.next_screen || false;
-+            this.click_partner_action = options.click_partner_action;
-+            this.pos.get('partners').bind('reset', function(){
-+                self.renderElement();
-+            });
-+        },
-+        renderElement: function() {
-+            var self = this;
-+            this._super();
-+
-+            // free subwidgets  memory from previous renders
-+            for(var i = 0, len = this.partnerwidgets.length; i < len; i++){
-+                this.partnerwidgets[i].destroy();
-+            }
-+            this.partnerwidgets = []; 
-+            if(this.scrollbar){
-+                this.scrollbar.destroy();
-+            }
-+            var partners = this.pos.get('partners').models || [];
-+            for(var i = 0, len = partners.length; i < len; i++){
-+                                                              //console.log("[PartnerListWidget] [renderElement]: partners[i].get('name')=",partners[i].get('name'));
-+                var partner = new module.PartnerWidget(self, {
-+                    model: partners[i],
-+                    click_partner_action: this.click_partner_action,
-+                });
-+                this.partnerwidgets.push(partner);
-+                partner.appendTo(this.$('.partner-list'));
-+            }
-+            this.scrollbar = new module.ScrollbarWidget(this,{
-+                target_widget:   this,
-+                target_selector: '.partner-list-scroller',
-+                on_show: function(){
-+                    self.$('.partner-list-scroller').css({'padding-right':'62px'},100);
-+                },
-+                on_hide: function(){
-+                    self.$('.partner-list-scroller').css({'padding-right':'0px'},100);
-+                },
-+            });
-+
-+            this.scrollbar.replace(this.$('.placeholder-ScrollbarWidget'));
-+
-+        },
-+    });
-+    
-     module.ProductListWidget = module.ScreenWidget.extend({
-         template:'ProductListWidget',
-         init: function(parent, options) {
-@@ -599,6 +748,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
-             this.weight = options.weight || 0;
-             this.show_scale = options.show_scale || false;
-             this.next_screen = options.next_screen || false;
-+            //this.back_screen = options.back_screen || false;
-             this.click_product_action = options.click_product_action;
-             this.pos.get('products').bind('reset', function(){
-@@ -899,6 +1049,9 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
-             // --------  Screens ---------
-+            this.partner_screen = new module.PartnerScreenWidget(this,{});
-+            this.partner_screen.appendTo($('#rightpane'));
-+
-             this.product_screen = new module.ProductScreenWidget(this,{});
-             this.product_screen.appendTo($('#rightpane'));
-@@ -908,6 +1061,9 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
-             this.payment_screen = new module.PaymentScreenWidget(this, {});
-             this.payment_screen.appendTo($('#rightpane'));
-+            this.partner_create_screen = new module.PartnerCreateScreenWidget(this, {});
-+            this.partner_create_screen.appendTo($('#rightpane'));
-+
-             this.welcome_screen = new module.WelcomeScreenWidget(this,{});
-             this.welcome_screen.appendTo($('#rightpane'));
-@@ -993,6 +1149,8 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
-                     'scale':    this.scale_screen,
-                     'receipt' : this.receipt_screen,
-                     'welcome' : this.welcome_screen,
-+                    'partner' : this.partner_screen,
-+                    'partner_create' : this.partner_create_screen,
-                 },
-                 popup_set:{
-                     'help': this.help_popup,
-@@ -1003,7 +1161,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
-                     'choose-receipt': this.choose_receipt_popup,
-                 },
-                 default_client_screen: 'welcome',
--                default_cashier_screen: 'products',
-+                default_cashier_screen: 'partner',
-                 default_mode: this.pos.iface_self_checkout ?  'client' : 'cashier',
-             });
-diff --git a/static/src/xml/pos.xml b/static/src/xml/pos.xml
-index 3da76ec..6aabe35 100644
---- a/static/src/xml/pos.xml
-+++ b/static/src/xml/pos.xml
-@@ -185,6 +185,49 @@
-         </div>
-     </t>
-+    <t t-name="PartnerSearchWidget">
-+        <header>
-+            <div class="searchbox">
-+                <input placeholder="Search Products" />
-+                <img class="search-create" src="/point_of_sale/static/src/img/validate-icon.png" />
-+                <img class="search-clear" src="/point_of_sale/static/src/img/search_reset.gif" />
-+            </div>
-+        </header>
-+    </t>
-+
-+    <t t-name="PartnerListWidget">
-+        <div class='partner-list-container'>
-+            <div class="partner-list-scroller">
-+                <ol id="partners-screen-ol" class="partner-list">
-+                </ol>
-+            </div>
-+            <div class="shadow-top"></div>
-+            <span class="placeholder-ScrollbarWidget" />
-+        </div>
-+    </t>
-+
-+    <t t-name="PartnerScreenWidget">
-+        <div id="partners-screen" class="screen">
-+            <table class="layout-table">
-+
-+                <tr class="header-row">
-+                    <td class="header-cell">
-+                        <span class="placeholder-PartnerSearchWidget" />
-+                    </td>
-+                </tr>
-+
-+                <tr class="content-row">
-+                    <td class="content-cell">
-+                        <div class="content-container">
-+                            <span class="placeholder-PartnerListWidget" />
-+                        </div>
-+                    </td>
-+                </tr>
-+
-+            </table>
-+        </div>
-+    </t>
-+
-     <t t-name="ScaleScreenWidget">
-         <div class="scale-screen screen">
-             <header><h2>Product Weighting</h2></header>
-@@ -210,6 +253,41 @@
-         </div>
-     </t>
-+    <t t-name="PartnerCreateScreenWidget">
-+        <div id="partner-create-screen" class="screen">
-+            <header><h2>Partner Create</h2></header>
-+            <div class="pos-step-container">
-+                <div class="pos-partner-create-container">
-+                    <br />
-+                    <div class="header">
-+                        <span class="left-block">
-+                            Name:
-+                        </span>
-+                        <span class='right-block' id="partner-create-name"></span>
-+                                                                                              <!--
-+                        <span class="left-block">
-+                            Name2:
-+                        </span>
-+                        <span class='right-block'>
-+                          <t t-if="widget.model.get('name')"/>
-+                        </span>
-+                                                                                              -->
-+                    </div>
-+                    <!--<table id="partner-createlines">
-+                    </table>-->
-+                    <div class="footer">
-+                        <div class="infoline">
-+                            <span class='left-block'>
-+                                Address:
-+                            </span>
-+                            <span class='right-block' id="partner-create-address"></span>
-+                        </div>
-+                    </div>
-+                </div>
-+            </div>
-+        </div>
-+    </t>
-+
-     <t t-name="PaymentScreenWidget">
-         <div id="payment-screen" class="screen">
-             <header><h2>Payment</h2></header>
-@@ -370,6 +448,30 @@
-         </div>
-     </t>
-+    <t t-name="PartnerWidget">
-+        <li class='partner'>
-+            <a href="#">
-+                <div class="partner-img">
-+                    <img src='' /> <!-- the partner thumbnail -->
-+                    <!--<t t-if="!widget.model.get('to_weight')">
-+                        <span class="price-tag">
-+                            <t t-esc="widget.format_currency(widget.model.get('price'))"/>
-+                        </span>
-+                    </t>
-+                    <t t-if="widget.model.get('to_weight')">
-+                        <span class="price-tag">
-+                            <t t-esc="widget.format_currency(widget.model.get('price'))+'/Kg'"/>
-+                        </span>
-+                    </t>-->
-+                </div>
-+                <div class="partner-name">
-+                    <t t-esc="widget.model.get('name')"/>
-+                    <!--(<t t-esc="widget.model.get('id')"/>)-->
-+                </div>
-+            </a>
-+        </li>
-+    </t>
-+
-     <t t-name="ProductWidget">
-         <li class='product'>
-             <a href="#">
index 49483cb..76fbfba 100644 (file)
@@ -38,6 +38,73 @@ STATE = [
     ('paid', 'Paid Member'),
 ]
 
+class pos_order(osv.osv):
+    _inherit = 'pos.order'
+
+    def create_partner_from_ui(self, cr, uid, partners, context=None):
+        print ("DEV: [pos_membership] [create_partner_from_ui] partners=%s" % str(partners))
+        partner_ids = []
+        partner_obj = self.pool.get('res.partner')
+        for tmp_partner in partners:
+            partner = tmp_partner['data']
+            partner_id = partner_obj.create(cr, uid, {
+                'name': partner['name'],
+            }, context)
+            partner_ids.append(partner_id)
+            #self.signal_paid(cr, uid, [partner_id])
+        return partner_ids
+
+    def create_from_ui(self, cr, uid, orders, context=None):
+        # NOTE: copied from openerp/addons/point_of_sale/point_of_sale.py
+        #_logger.info("orders: %r", orders)
+        print ("DEV: [pos_membership] [create_from_ui] order=", str(orders))
+        order_ids = []
+        for tmp_order in orders:
+            order = tmp_order['data']
+            order_id = self.create(cr, uid, {
+                'name': order['name'],
+                'user_id': order['user_id'] or False,
+                'session_id': order['pos_session_id'],
+                'lines': order['lines'],
+                'pos_reference':order['name'],
+                #-- BEGIN pos_membership
+                'partner_id':order['partner_id'],
+                #-- END pos_membership
+            }, context)
+
+            for payments in order['statement_ids']:
+                payment = payments[2]
+                self.add_payment(cr, uid, order_id, {
+                    'amount': payment['amount'] or 0.0,
+                    'payment_date': payment['name'],
+                    'statement_id': payment['statement_id'],
+                    'payment_name': payment.get('note', False),
+                    'journal': payment['journal_id']
+                }, context=context)
+
+            if order['amount_return']:
+                session = self.pool.get('pos.session').browse(cr, uid, order['pos_session_id'], context=context)
+                cash_journal = session.cash_journal_id
+                cash_statement = False
+                if not cash_journal:
+                    cash_journal_ids = filter(lambda st: st.journal_id.type=='cash', session.statement_ids)
+                    if not len(cash_journal_ids):
+                        raise osv.except_osv( _('error!'),
+                            _("No cash statement found for this session. Unable to record returned cash."))
+                    cash_journal = cash_journal_ids[0].journal_id
+                self.add_payment(cr, uid, order_id, {
+                    'amount': -order['amount_return'],
+                    'payment_date': time.strftime('%Y-%m-%d %H:%M:%S'),
+                    'payment_name': _('return'),
+                    'journal': cash_journal.id,
+                }, context=context)
+            order_ids.append(order_id)
+            wf_service = netsvc.LocalService("workflow")
+            wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr)
+        return order_ids
+
+pos_order()
+
 class membership_line(osv.osv):
     '''Member line'''
     _inherit = 'membership.membership_line'
diff --git a/static/src/css/pos.css b/static/src/css/pos.css
new file mode 100644 (file)
index 0000000..6ecf585
--- /dev/null
@@ -0,0 +1,196 @@
+/* NOTE: adapted from openerp/addons/point_of_sale/static/src/css/pos.css */
+
+/*  ********* The partner list  ********* */
+
+.point-of-sale .partner-list {
+    padding:10px !important;
+}
+
+.point-of-sale .partner-list-scroller{
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+        -ms-box-sizing: border-box;
+            box-sizing: border-box;
+    width:100%;
+    height:100%;
+    overflow: hidden;
+}
+.point-of-sale .partner-list-container {
+    position:absolute;
+    top:0px;
+    bottom:0px;
+    left:0px;
+    right:0px;
+}
+
+/*  a) the search box */
+
+.point-of-sale #partners-screen .searchbox {
+    position: absolute;
+    right: 2px;
+}
+.point-of-sale #partners-screen .searchbox input {
+    width: 130px;
+    border-radius: 11px;
+    border: 1px solid #cecbcb;
+    padding: 3px 19px;
+    margin: 6px;
+    background: url("../img/search.png") no-repeat 5px;
+    background-color: white;
+}
+.point-of-sale #partners-screen .search-clear {
+    position: absolute;
+    top: 11px;
+    right: 11px;
+    cursor: pointer;
+    display: none;
+}
+
+.point-of-sale #partners-screen .search-create {
+    position: absolute;
+    top: 6px;
+    right: 22px;
+    cursor: pointer;
+    display: none;
+}
+
+
+/*  b) the partner */
+
+.point-of-sale .partner {
+    position:relative;
+    vertical-align: top;
+    display: inline-block;
+    line-height: 100px;
+    font-size: 11px;
+    margin: 5px !important;
+    width: 120px;
+    height:120px;
+    background:#fff;
+    border: 1px solid #fff;
+    border-radius: 3px;
+    -webkit-box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480; 
+       -moz-box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480; 
+            box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480; 
+}
+
+.point-of-sale .partner .partner-img {
+    position: relative;
+    width: 120px;
+    height: 100px;
+    background: white;
+    text-align: center;
+}
+
+.point-of-sale .partner .partner-img img {
+    max-height: 100px;
+    max-width:  120px;
+}
+
+.point-of-sale .partner .price-tag {
+    position: absolute;
+    top: 2px;
+    right: 2px;
+    vertical-align: top;
+    color: white;
+    line-height: 13px;
+    background: #7f82ac;
+    padding: 2px 5px;
+    border-radius: 3px;
+    box-shadow: 0px 1px 0px #9A9CC5, 0px 3px 0px #7E86AC, 0px 3px 3px rgba(12, 14, 68, 0.67);
+}
+
+.point-of-sale .partner .partner-name {
+    position: absolute;
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+        -ms-box-sizing: border-box;
+            box-sizing: border-box;
+    bottom:0;
+    top:auto;
+    line-height: 14px;
+    width:100%;
+    background: -webkit-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
+    background:    -moz-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
+    background:     -ms-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
+    /* troublesome in latest webkit
+    background:         linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
+    */
+    /*background:#FFF;*/
+    padding: 3px;
+    padding-top:15px;
+}
+
+/*  c) the partner creation */
+
+.point-of-sale .pos-step-container {
+    display: inline-block;
+    font-size: 1.5em;
+}
+.point-of-sale .greyed-out{
+    color: #AAA;
+}
+.point-of-sale .pos-step-container input{
+    font-size: 1em;
+    outline: none;
+    border: none;
+    padding: 0px 8px;
+    padding-top: 8px;
+    margin-left: 16px;
+    border-radius: 5px;
+    background: white;
+    box-shadow: 0px -1px 0px #E2E2E2 inset,0px 1px 0px white inset, 0px 4px 0px #DDD inset, 0px 4px 8px rgba(0, 0, 0, 0.55) inset;
+    color: #4c4c4c; 
+    -webkit-animation: all 250ms linear;
+}
+
+.point-of-sale .pos-step-container input:focus{
+    box-shadow: 0px -1px 0px #C9CFFD inset,0px 1px 0px #B8C8FC inset, 0px 4px 0px #9FD5FF inset, 0px 4px 9px rgba(0, 31, 255, 0.55) inset;
+    color: #5d7ad6;
+    -webkit-animation: all 250ms linear;
+}
+
+.point-of-sale .pos-partner-create-container {
+    text-align: left;
+    min-width: 500px;
+    margin-top: 50px;
+    padding: 40px;
+    background-color: #f8f8f8;
+    border-radius: 4px;
+    box-shadow: 0px 1px 0px white,0px -1px 0px white, 0px 4px 0px #DFDFDF, 0px 10px 30px rgba(0, 0, 0, 0.21);
+}
+.point-of-sale .pos-partner-create-container .left-block{
+    display: inline-block;
+    width:49%;
+    margin:0;
+    padding:0;
+    text-align:left;
+}
+.point-of-sale .pos-partner-create-container .header{
+    margin-top: 0px;
+    margin-bottom:20px;
+    font-weight: bold;
+}
+.point-of-sale .pos-partner-create-container .infoline{
+    margin-top:5px;
+    margin-bottom:5px;
+}
+.point-of-sale .pos-partner-create-container .right-block{
+    display: inline-block;
+    width:49%;
+    margin:0;
+    padding:0;
+    text-align:right;
+}
+.point-of-sale .pos-partner-create-container table {
+    width: 100%;
+    margin-bottom: 20px;
+}
+.point-of-sale .pos-partner-create-container td {
+    vertical-align: middle;
+}
+.point-of-sale .pos-partner-create-container .partner-createline-type {
+    font-size: 1em;
+    font-weight: bold;
+    margin-right:10px;
+}
diff --git a/static/src/css/pos_nohover.css b/static/src/css/pos_nohover.css
new file mode 100644 (file)
index 0000000..9ffd9d2
--- /dev/null
@@ -0,0 +1,171 @@
+/* NOTE: adapted from openerp/addons/point_of_sale/static/src/css/pos_nohover.css */
+
+/*  ********* The partner list  ********* */
+
+.point-of-sale .partner-list {
+    padding:10px;
+}
+
+.point-of-sale .partner-list-scroller{
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+        -ms-box-sizing: border-box;
+            box-sizing: border-box;
+    width:100%;
+    height:100%;
+    overflow: hidden;
+}
+.point-of-sale .partner-list-container {
+    position:absolute;
+    top:0px;
+    bottom:0px;
+    left:0px;
+    right:0px;
+    background: #eeedff;
+}
+
+/*  a) the search box */
+
+.point-of-sale #partners-screen .searchbox {
+    position: absolute;
+    right: 2px;
+}
+.point-of-sale #partners-screen .searchbox input {
+    width: 130px;
+    border-radius: 11px;
+    border: 1px solid #cecbcb;
+    padding: 3px 19px;
+    margin: 6px;
+    background: url("../img/search.png") no-repeat 5px;
+    background-color: white;
+}
+.point-of-sale #partners-screen .search-clear {
+    position: absolute;
+    top: 11px;
+    right: 11px;
+    cursor: pointer;
+    display: none;
+}
+.point-of-sale #partners-screen .search-create {
+    position: absolute;
+    top: 6px;
+    right: 22px;
+    cursor: pointer;
+    display: none;
+}
+
+/*  b) the partner */
+
+.point-of-sale .partner {
+    position:relative;
+    vertical-align: top;
+    display: inline-block;
+    line-height: 100px;
+    font-size: 11px;
+    margin: 5px;
+    width: 120px;
+    height:120px;
+    background:#fff;
+    border: 1px solid #fff;
+    border-radius: 3px;
+    -webkit-box-shadow: 0px 1px 8px rgba(127,130,172,0.4);
+       -moz-box-shadow: 0px 1px 8px rgba(127,130,172,0.4);
+            box-shadow: 0px 1px 8px rgba(127,130,172,0.4);
+}
+
+.point-of-sale .partner .partner-img {
+    position: relative;
+    width: 120px;
+    height: 100px;
+    background: white;
+    text-align: center;
+}
+
+.point-of-sale .partner .partner-img img {
+    max-height: 100px;
+    max-width:  120px;
+}
+
+.point-of-sale .partner .price-tag {
+    position: absolute;
+    top: 2px;
+    right: 2px;
+    vertical-align: top;
+    color: white;
+    line-height: 14px;
+    background: #7f82ac;
+    padding: 2px 5px;
+    border-radius: 3px;
+}
+
+.point-of-sale .partner .partner-name {
+    position: absolute;
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+        -ms-box-sizing: border-box;
+            box-sizing: border-box;
+    bottom:0;
+    top:auto;
+    line-height: 14px;
+    width:100%;
+    background: -webkit-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
+    background:    -moz-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
+    background:     -ms-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
+    background:         linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1));
+    /*background:#FFF;*/
+    padding: 3px;
+    padding-top:15px;
+}
+
+/*  c) the partner creation */
+
+.point-of-sale .pos-step-container {
+    display: inline-block;
+    font-size: 1.5em;
+}
+.point-of-sale .greyed-out{
+    color: #AAA;
+}
+.point-of-sale .pos-step-container input{
+    font-size: 1em;
+}
+
+.point-of-sale .pos-partner-create-container {
+    text-align: left;
+    min-width: 500px;
+}
+.point-of-sale .pos-partner-create-container .left-block{
+    display: inline-block;
+    width:49%;
+    margin:0;
+    padding:0;
+    text-align:left;
+}
+.point-of-sale .pos-partner-create-container .header{
+    margin-top: 50px;
+    margin-bottom:20px;
+    font-weight: bold;
+}
+.point-of-sale .pos-partner-create-container .infoline{
+    margin-top:5px;
+    margin-bottom:5px;
+}
+.point-of-sale .pos-partner-create-container .right-block{
+    display: inline-block;
+    width:49%;
+    margin:0;
+    padding:0;
+    text-align:right;
+}
+.point-of-sale .pos-partner-create-container table {
+    width: 100%;
+    margin-bottom: 20px;
+}
+.point-of-sale .pos-partner-create-container td {
+    vertical-align: middle;
+}
+.point-of-sale .pos-partner-create-container .partner-createline-type {
+    font-size: 1em;
+    font-weight: bold;
+    margin-right:10px;
+}
diff --git a/static/src/img/backspace.png b/static/src/img/backspace.png
new file mode 100644 (file)
index 0000000..705051d
Binary files /dev/null and b/static/src/img/backspace.png differ
diff --git a/static/src/img/bancontact.png b/static/src/img/bancontact.png
new file mode 100644 (file)
index 0000000..bd4f63d
Binary files /dev/null and b/static/src/img/bancontact.png differ
diff --git a/static/src/img/barcode.png b/static/src/img/barcode.png
new file mode 100644 (file)
index 0000000..fc780b9
Binary files /dev/null and b/static/src/img/barcode.png differ
diff --git a/static/src/img/bc-arrow.png b/static/src/img/bc-arrow.png
new file mode 100644 (file)
index 0000000..0485c59
Binary files /dev/null and b/static/src/img/bc-arrow.png differ
diff --git a/static/src/img/bg.png b/static/src/img/bg.png
new file mode 100644 (file)
index 0000000..d54b630
Binary files /dev/null and b/static/src/img/bg.png differ
diff --git a/static/src/img/default_category_photo.png b/static/src/img/default_category_photo.png
new file mode 100644 (file)
index 0000000..25af75e
Binary files /dev/null and b/static/src/img/default_category_photo.png differ
diff --git a/static/src/img/grid-purple.png b/static/src/img/grid-purple.png
new file mode 100644 (file)
index 0000000..2f0f433
Binary files /dev/null and b/static/src/img/grid-purple.png differ
diff --git a/static/src/img/grid.png b/static/src/img/grid.png
new file mode 100644 (file)
index 0000000..35dbab0
Binary files /dev/null and b/static/src/img/grid.png differ
diff --git a/static/src/img/gtk-no.png b/static/src/img/gtk-no.png
new file mode 100644 (file)
index 0000000..047ddcd
Binary files /dev/null and b/static/src/img/gtk-no.png differ
diff --git a/static/src/img/gtk-yes.png b/static/src/img/gtk-yes.png
new file mode 100644 (file)
index 0000000..01fb373
Binary files /dev/null and b/static/src/img/gtk-yes.png differ
diff --git a/static/src/img/headerbackground.jpg b/static/src/img/headerbackground.jpg
new file mode 100644 (file)
index 0000000..cec8fa7
Binary files /dev/null and b/static/src/img/headerbackground.jpg differ
diff --git a/static/src/img/home.png b/static/src/img/home.png
new file mode 100644 (file)
index 0000000..53d0b22
Binary files /dev/null and b/static/src/img/home.png differ
diff --git a/static/src/img/icon.png b/static/src/img/icon.png
new file mode 100644 (file)
index 0000000..9054576
Binary files /dev/null and b/static/src/img/icon.png differ
diff --git a/static/src/img/icons/bancontact.svg b/static/src/img/icons/bancontact.svg
new file mode 100644 (file)
index 0000000..7060407
--- /dev/null
@@ -0,0 +1,1114 @@
+<?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="scan.svg"
+   version="1.0"
+   inkscape:export-filename="/home/fva/Code/openerp/src/addons/trunk-pos-fva/point_of_sale/static/src/img/scan.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,209.74433,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,193.40013,-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,166.34639,-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,188.33278,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,188.33278,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,192.23948,-2.080838)" /><radialGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient2341"
+     id="radialGradient2339"
+     gradientUnits="userSpaceOnUse"
+     gradientTransform="matrix(4.100086,0,0,-4.201322,186.56334,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,109.75238,-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,188.75475,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,194.17244,-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="#linearGradient5048"
+     id="linearGradient5083"
+     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="radialGradient5085"
+     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="radialGradient5087"
+     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="#linearGradient4977"
+     id="linearGradient5089"
+     gradientUnits="userSpaceOnUse"
+     x1="23.6875"
+     y1="32"
+     x2="23.75"
+     y2="45.25" /><filter
+     inkscape:collect="always"
+     id="filter5243"><feGaussianBlur
+       inkscape:collect="always"
+       stdDeviation="0.6535853"
+       id="feGaussianBlur5245" /></filter></defs><sodipodi:namedview
+   inkscape:cy="24.435456"
+   inkscape:cx="20.268092"
+   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,234.88396,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 213.38103,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 238.72503,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 214.76145,29 -0.0457,15.090942 -11.84279,0 L 202.76145,29 l 12,0 z"
+   clip-rule="evenodd"
+   sodipodi:nodetypes="ccccc"
+   inkscape:connector-curvature="0" /><path
+   sodipodi:nodetypes="ccccccccc"
+   id="path2357"
+   d="m 213.54191,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 198.96898,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 213.76145,30 0,14.090942 -9.81103,0 L 203.76145,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 211.33831,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 211.22377,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 216.2092,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 216.09162,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 194.6028,20.613129 194.31124,27.236494 216.13067,8.980075 216.06034,3.0867443 194.6028,20.613129 z"
+   id="path1536"
+   sodipodi:nodetypes="ccccc"
+   inkscape:connector-curvature="0" /><path
+   sodipodi:nodetypes="ccccc"
+   id="path2337"
+   d="m 216.24522,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 218.86368,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="218.26923"
+   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 218.86857,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(132.18771,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(143.14786,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(137.13746,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(125.91213,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,131.83019,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,177.66659,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(135.19291,-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,135.13372,-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,136.45954,-1.4857225)" /><path
+   transform="matrix(0.6928006,0,0,0.69727163,142.8508,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,165.84459,-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(135.2592,-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(135.19291,-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,141.5084,5.3595919)" /><g
+   id="g4628"
+   transform="translate(135.19291,-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,193.18079,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="-92.352005"
+   y="-140.67993"
+   transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)" /><rect
+   y="-129.543"
+   x="-92.329903"
+   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,130.11353,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
+   style="display:inline"
+   id="g4874"
+   transform="matrix(0.01936185,0,0,0.01859457,41.505849,29.496203)"><rect
+     y="-150.69685"
+     x="-1559.2523"
+     height="478.35718"
+     width="1339.6335"
+     id="rect4876"
+     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" /><path
+     sodipodi:nodetypes="cccc"
+     id="path4878"
+     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(#radialGradient4896);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(#radialGradient4898);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="path4880"
+     sodipodi:nodetypes="cccc"
+     inkscape:connector-curvature="0" /></g><g
+   transform="translate(89,-11.125)"
+   id="g5031"><g
+     style="display:inline"
+     id="g5033"
+     transform="matrix(0.01936185,0,0,0.01859457,41.505849,40.621203)"><rect
+       y="-150.69685"
+       x="-1559.2523"
+       height="478.35718"
+       width="1339.6335"
+       id="rect5035"
+       style="opacity:0.40206185;color:#000000;fill:url(#linearGradient5083);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" /><path
+       sodipodi:nodetypes="cccc"
+       id="path5037"
+       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(#radialGradient5085);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(#radialGradient5087);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="path5039"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" /></g><g
+     transform="translate(-0.96783034,-2.9168155)"
+     id="g5041"><rect
+       style="fill:#eaeaea;fill-opacity:1;stroke:none"
+       id="rect5043"
+       width="29.256544"
+       height="18.119614"
+       x="10.297243"
+       y="27.449707"
+       rx="1.9470588"
+       ry="1.9470588" /><g
+       id="g5045"><g
+         id="g5047"><rect
+           rx="1.9313381"
+           y="27.517153"
+           x="10.510214"
+           height="17.982044"
+           width="29.020325"
+           id="rect5049"
+           style="fill:none;stroke:#646464;stroke-width:0.99927008;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           ry="1.9313381" /></g><rect
+         rx="1.0032353"
+         y="28.489801"
+         x="11.532422"
+         height="16.005489"
+         width="26.967867"
+         id="rect5051"
+         style="fill:none;stroke:#ffffff;stroke-width:0.99249077;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         ry="1.0032353" /></g></g><g
+     id="g5053"
+     transform="matrix(1,0,0,0.9039548,0,2.5932203)"><rect
+       y="27"
+       x="13.0625"
+       height="11.0625"
+       width="1"
+       id="rect5055"
+       style="fill:#000000;fill-opacity:1;stroke:none" /><rect
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="rect5057"
+       width="1"
+       height="11.0625"
+       x="15.0625"
+       y="27" /><rect
+       y="27"
+       x="18"
+       height="11.0625"
+       width="1"
+       id="rect5059"
+       style="fill:#000000;fill-opacity:1;stroke:none" /><rect
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="rect5061"
+       width="2"
+       height="11.0625"
+       x="19.9375"
+       y="27" /><rect
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="rect5063"
+       width="1"
+       height="11.0625"
+       x="22.9375"
+       y="27" /><rect
+       y="27"
+       x="25.9375"
+       height="11.0625"
+       width="2.0625"
+       id="rect5065"
+       style="fill:#000000;fill-opacity:1;stroke:none" /><rect
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="rect5067"
+       width="1.125"
+       height="11.0625"
+       x="28.9375"
+       y="27" /><rect
+       y="27"
+       x="30.9375"
+       height="11.0625"
+       width="1.125"
+       id="rect5069"
+       style="fill:#000000;fill-opacity:1;stroke:none" /><rect
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="rect5071"
+       width="1.125"
+       height="11.0625"
+       x="33.9375"
+       y="27" /></g><text
+     xml:space="preserve"
+     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"
+     x="12.981453"
+     y="40.195068"
+     id="text5073"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan5075"
+       x="12.981453"
+       y="40.195068"
+       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">5 92102431 8</tspan></text>
+<rect
+     style="fill:#ff0000;fill-opacity:1;stroke:none"
+     id="rect5077"
+     width="30"
+     height="1"
+     x="9.0625"
+     y="31.0625" /><rect
+     y="31.0625"
+     x="9.0625"
+     height="1"
+     width="30"
+     id="rect5079"
+     style="fill:#ff0000;fill-opacity:1;stroke:none;filter:url(#filter4971)" /><path
+     style="opacity:0.29787233;fill:url(#linearGradient5089);fill-opacity:1;stroke:none"
+     d="M 9.0625,32.0625 20,47.875 28.9375,47.9375 39,32.0625 z"
+     id="path5081"
+     inkscape:connector-curvature="0" /></g><g
+   id="g5153"
+   transform="translate(-0.375,0.125)"><rect
+     style="fill:#eaeaea;fill-opacity:1;stroke:none"
+     id="rect4884"
+     width="29.256544"
+     height="18.119614"
+     x="9.3294125"
+     y="13.407891"
+     rx="1.9470588"
+     ry="1.9470588" /><rect
+     rx="1.9313381"
+     y="12.503065"
+     x="9.5423832"
+     height="18.954315"
+     width="29.020325"
+     id="rect4890"
+     style="fill:none;stroke:#2055a8;stroke-width:0.99927008;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     ry="1.9313381" /><rect
+     ry="1.0032355"
+     style="fill:none;stroke:#ffffff;stroke-width:0.99249083;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     id="rect4892"
+     width="26.967867"
+     height="16.933567"
+     x="10.564591"
+     y="13.519909"
+     rx="1.0032353" /><text
+     sodipodi:linespacing="125%"
+     id="text5127"
+     y="17.738876"
+     x="12.598053"
+     style="font-size:4.47580385px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2055a8;fill-opacity:1;stroke:none;font-family:Sans"
+     xml:space="preserve"><tspan
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#2055a8;fill-opacity:1;font-family:Umpush;-inkscape-font-specification:Umpush Bold"
+       y="17.738876"
+       x="12.598053"
+       id="tspan5129"
+       sodipodi:role="line">Bancontact</tspan></text>
+<text
+     xml:space="preserve"
+     style="font-size:4.67030001px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2055a8;fill-opacity:1;stroke:none;font-family:Sans"
+     x="12.626733"
+     y="29.062328"
+     id="text5131"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan5133"
+       x="12.626733"
+       y="29.062328"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#2055a8;fill-opacity:1;font-family:Umpush;-inkscape-font-specification:Umpush Bold">Mistercash</tspan></text>
+<rect
+     y="21.973692"
+     x="13.037281"
+     height="2.032932"
+     width="12.241786"
+     id="rect5135"
+     style="fill:#2055a8;fill-opacity:1;stroke:none" /><rect
+     transform="scale(-1,-1)"
+     style="fill:#ffd91c;fill-opacity:1;stroke:none"
+     id="rect5145"
+     width="12.330174"
+     height="2.032932"
+     x="-35.045982"
+     y="-22.058022" /><rect
+     y="-27.366743"
+     x="-38.048687"
+     height="3.6166389"
+     width="2.9610093"
+     id="rect5147"
+     style="fill:#ffd91c;fill-opacity:1;stroke:none"
+     transform="matrix(-1,0,0.53766595,-0.84315795,0,0)" /><rect
+     transform="matrix(1,0,-0.53766595,0.84315795,0,0)"
+     style="fill:#2055a8;fill-opacity:1;stroke:none"
+     id="rect5137"
+     width="2.9610093"
+     height="3.6166389"
+     x="37.977596"
+     y="24.850821" /></g></svg>
\ No newline at end of file
diff --git a/static/src/img/icons/png48/face-monkey.png b/static/src/img/icons/png48/face-monkey.png
new file mode 100644 (file)
index 0000000..1a57c9e
Binary files /dev/null and b/static/src/img/icons/png48/face-monkey.png differ
diff --git a/static/src/img/icons/png48/go-next.png b/static/src/img/icons/png48/go-next.png
new file mode 100644 (file)
index 0000000..bcd343d
Binary files /dev/null and b/static/src/img/icons/png48/go-next.png differ
diff --git a/static/src/img/icons/png48/go-previous.png b/static/src/img/icons/png48/go-previous.png
new file mode 100644 (file)
index 0000000..0a084ad
Binary files /dev/null and b/static/src/img/icons/png48/go-previous.png differ
diff --git a/static/src/img/icons/png48/help.png b/static/src/img/icons/png48/help.png
new file mode 100644 (file)
index 0000000..8c56bd4
Binary files /dev/null and b/static/src/img/icons/png48/help.png differ
diff --git a/static/src/img/icons/png48/printer.png b/static/src/img/icons/png48/printer.png
new file mode 100644 (file)
index 0000000..9747f37
Binary files /dev/null and b/static/src/img/icons/png48/printer.png differ
diff --git a/static/src/img/icons/png48/scale.png b/static/src/img/icons/png48/scale.png
new file mode 100644 (file)
index 0000000..3070c56
Binary files /dev/null and b/static/src/img/icons/png48/scale.png differ
diff --git a/static/src/img/icons/png48/shut-down.png b/static/src/img/icons/png48/shut-down.png
new file mode 100644 (file)
index 0000000..8478ab1
Binary files /dev/null and b/static/src/img/icons/png48/shut-down.png differ
diff --git a/static/src/img/icons/png48/system-log-out.png b/static/src/img/icons/png48/system-log-out.png
new file mode 100644 (file)
index 0000000..edd6e34
Binary files /dev/null and b/static/src/img/icons/png48/system-log-out.png differ
diff --git a/static/src/img/icons/png48/validate.png b/static/src/img/icons/png48/validate.png
new file mode 100644 (file)
index 0000000..75372c8
Binary files /dev/null and b/static/src/img/icons/png48/validate.png differ
diff --git a/static/src/img/icons/printer.svg b/static/src/img/icons/printer.svg
new file mode 100644 (file)
index 0000000..4c702dc
--- /dev/null
@@ -0,0 +1,502 @@
+<?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>
diff --git a/static/src/img/icons/scale.svg b/static/src/img/icons/scale.svg
new file mode 100644 (file)
index 0000000..a04a62a
--- /dev/null
@@ -0,0 +1,797 @@
+<?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>
\ No newline at end of file
diff --git a/static/src/img/icons/scan.svg b/static/src/img/icons/scan.svg
new file mode 100644 (file)
index 0000000..4d753ac
--- /dev/null
@@ -0,0 +1,984 @@
+<?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>
\ No newline at end of file
diff --git a/static/src/img/icons/validate.svg b/static/src/img/icons/validate.svg
new file mode 100644 (file)
index 0000000..be4c675
--- /dev/null
@@ -0,0 +1,201 @@
+<?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>
diff --git a/static/src/img/logo.png b/static/src/img/logo.png
new file mode 100644 (file)
index 0000000..9cf5eb0
Binary files /dev/null and b/static/src/img/logo.png differ
diff --git a/static/src/img/pos_screenshot.jpg b/static/src/img/pos_screenshot.jpg
new file mode 100644 (file)
index 0000000..1e884eb
Binary files /dev/null and b/static/src/img/pos_screenshot.jpg differ
diff --git a/static/src/img/scale.png b/static/src/img/scale.png
new file mode 100644 (file)
index 0000000..8f66d1f
Binary files /dev/null and b/static/src/img/scale.png differ
diff --git a/static/src/img/scan.png b/static/src/img/scan.png
new file mode 100644 (file)
index 0000000..c0bc93d
Binary files /dev/null and b/static/src/img/scan.png differ
diff --git a/static/src/img/search.png b/static/src/img/search.png
new file mode 100644 (file)
index 0000000..d1705e9
Binary files /dev/null and b/static/src/img/search.png differ
diff --git a/static/src/img/search_reset.gif b/static/src/img/search_reset.gif
new file mode 100644 (file)
index 0000000..9d4253e
Binary files /dev/null and b/static/src/img/search_reset.gif differ
diff --git a/static/src/img/steps-arrow.png b/static/src/img/steps-arrow.png
new file mode 100644 (file)
index 0000000..fe86913
Binary files /dev/null and b/static/src/img/steps-arrow.png differ
diff --git a/static/src/img/steps-bg.png b/static/src/img/steps-bg.png
new file mode 100644 (file)
index 0000000..cfe810a
Binary files /dev/null and b/static/src/img/steps-bg.png differ
diff --git a/static/src/img/validate-icon.png b/static/src/img/validate-icon.png
new file mode 100644 (file)
index 0000000..a7d0260
Binary files /dev/null and b/static/src/img/validate-icon.png differ
diff --git a/static/src/js/db.js b/static/src/js/db.js
new file mode 100644 (file)
index 0000000..044e9be
--- /dev/null
@@ -0,0 +1,70 @@
+function openerp_pos_membership_db(instance, module){
+       module.PosLS = module.PosLS.extend({
+               init: function(options){
+                       //console.log("[pos_membership] [PosLS] [init]: options=", options, "this=", this);
+                       this._super(this, options);
+                       this.partner_search_string = '';
+                       this.partner_by_id = {};
+                       this.partner_list = [];
+                },
+               _partner_search_string: function(partner){
+                       var str = '' + partner.id + ':' + partner.name;
+                       return str + '\n';
+                },
+               add_partners: function(partners){
+                       if(!partners instanceof Array){
+                               partners = [partners];
+                        }
+                       //console.log("[pos_membership] [add_partners] :", partners);
+                       for(var i = 0, len = partners.length; i < len; i++){
+                               var partner = partners[i];
+                               //console.log("[db] [add_partners] partner.name:",partner.name);
+                               this.partner_by_id[partner.id] = partner;
+                               this.partner_list.push(partner);
+                               this.partner_search_string += this._partner_search_string(partner);
+                        }
+                       //console.log("[db] [add_partners] partner_search_string:", this.partner_search_string);
+                },
+               get_partner_by_id: function(id){
+                       return this.partner_by_id[id];
+                },
+               search_partner: function(query){
+                       var re = RegExp("([0-9]+):.*?"+query,"gi");
+                       var results = [];
+                       //console.log("[db] [search_partner] query:",query);
+                       for(var i = 0; i < this.limit; i++){
+                               r = re.exec(this.partner_search_string);
+                               if(r){
+                                       var id = Number(r[1]);
+                                       //console.log("[db] [search_partner] id:",id);
+                                       results.push(this.get_partner_by_id(id));
+                                }
+                               else{
+                                       break;
+                                }
+                        }
+                       return results;
+                },
+               get_partner_list: function(){
+                       return this.partner_list;
+                },
+               add_partner: function(partner){
+                       //console.log("[pos_membership] [PosLS] [add_partner] partner=", partner.name);
+                       var last_id = this.load('last_partner_id',0);
+                       var partners  = this.load('partners',[]);
+                       partners.push({id: last_id + 1, data: partner});
+                       this.save('last_partner_id',last_id+1);
+                       this.save('partners',partners);
+                },
+               remove_partner: function(partner_id){
+                       var partners = this.load('partners',[]);
+                       partners = _.filter(partners, function(partner){
+                               return partner.id !== partner_id;
+                        });
+                       this.save('partners',partners);
+                },
+               get_partners: function(){
+                       return this.load('partners',[]);
+                },
+        });
+ }
diff --git a/static/src/js/main.js b/static/src/js/main.js
new file mode 100644 (file)
index 0000000..5448712
--- /dev/null
@@ -0,0 +1,8 @@
+openerp.pos_membership = function(instance) {
+       var module = instance.point_of_sale;
+       //console.log("[pos_membership] [instance.point_of_sale]");
+       openerp_pos_membership_db(instance,module);      // import db.js
+       openerp_pos_membership_models(instance,module);  // import models.js
+       openerp_pos_membership_screens(instance,module); // import screens.js
+       openerp_pos_membership_widgets(instance,module); // import widgets.js
+ };
diff --git a/static/src/js/models.js b/static/src/js/models.js
new file mode 100644 (file)
index 0000000..93f8271
--- /dev/null
@@ -0,0 +1,254 @@
+function openerp_pos_membership_models(instance, module){
+       //module.PosModel = instance.point_of_sale.PosModel.extend({})
+       module.PosModel = module.PosModel.extend({
+               initialize: function(session, attributes) {
+                       //console.log("[pos_membership] [PosModel] [initialize]");
+                       //PosModel.prototype.initialize.apply(this, arguments);
+                       module.PosModel.__super__.initialize.call(this, session, attributes);
+                       this.partner_search_string = '';
+                       this.partner_by_id = {};
+                       this.partner_list = [];
+                       this.db.clear('partners');
+                       this.set({
+                               'partners': new module.PartnerCollection(),
+                               'selectedPartner': null,
+                        });
+                },
+               load_server_data: function(){
+                       var self = this;
+                       //console.log("[point_of_sale] [PosModel] [load_server_data]", "this.session=", this.session);
+                       
+                       var loaded = self.fetch('res.users',['name','company_id'],[['id','=',this.session.uid]]) 
+                               .then(function(users){
+                                       //console.log("[point_of_sale] [PosModel] [load_server_data]", "users=", users);
+                                       self.set('user',users[0]);
+                                       
+                                       return self.fetch('res.company',
+                                       [
+                                               'currency_id',
+                                               'email',
+                                               'website',
+                                               'company_registry',
+                                               'vat',
+                                               'name',
+                                               'phone',
+                                               'partner_id',
+                                       ],
+                                       [['id','=',users[0].company_id[0]]]);
+                               }).then(function(companies){
+                                       self.set('company',companies[0]);
+                                       
+                                       return self.fetch('res.partner',['contact_address'],[['id','=',companies[0].partner_id[0]]]);
+                               }).then(function(company_partners){
+                                       self.get('company').contact_address = company_partners[0].contact_address;
+                                       
+                                       return self.fetch('res.currency',['symbol','position','rounding','accuracy'],[['id','=',self.get('company').currency_id[0]]]);
+                               }).then(function(currencies){
+                                       self.set('currency',currencies[0]);
+                                       
+                                       return self.fetch('product.uom', null, null);
+                               }).then(function(units){
+                                       self.set('units',units);
+                                       var units_by_id = {};
+                                       for(var i = 0, len = units.length; i < len; i++){
+                                               units_by_id[units[i].id] = units[i];
+                                        }
+                                       self.set('units_by_id',units_by_id);
+                                       
+                                       return self.fetch('product.packaging', null, null);
+                               }).then(function(packagings){
+                                       self.set('product.packaging',packagings);
+                                       
+                                       return self.fetch('res.users', ['name','ean13'], [['ean13', '!=', false]]);
+                               }).then(function(users){
+                                       self.set('user_list',users);
+                                       
+                                       return self.fetch('res.partner', ['name','ean13'], [['ean13', '!=', false]]);
+                               }).then(function(partners){
+                                       self.set('partner_list',partners);
+                                       
+                                       // NOTE: le moment du chargement des partners est important
+                                       //       et doit être effectué vers ici,
+                                       //       c'est pourquoi load_server_data() est recopiée en entier.
+                                       // BEGIN pos_membership
+                                       return self.fetch('res.partner', ['name']);
+                               }).then(function(partners){
+                                       self.db.add_partners(partners);
+                                       // END pos_membership
+                                       
+                                       return self.fetch('account.tax', ['amount', 'price_include', 'type']);
+                               }).then(function(taxes){
+                                       self.set('taxes', taxes);
+                                       
+                                       return self.fetch(
+                                               'pos.session', 
+                                               ['id', 'journal_ids','name','user_id','config_id','start_at','stop_at'],
+                                               [['state', '=', 'opened'], ['user_id', '=', self.session.uid]]
+                                        );
+                               }).then(function(sessions){
+                                       self.set('pos_session', sessions[0]);
+                                       
+                                       return self.fetch(
+                                               'pos.config',
+                                               ['name','journal_ids','shop_id','journal_id',
+                                                'iface_self_checkout', 'iface_led', 'iface_cashdrawer',
+                                                'iface_payment_terminal', 'iface_electronic_scale', 'iface_barscan', 'iface_vkeyboard',
+                                                'iface_print_via_proxy','iface_cashdrawer','state','sequence_id','session_ids'],
+                                               [['id','=', self.get('pos_session').config_id[0]]]
+                                       );
+                               }).then(function(configs){
+                                       var pos_config = configs[0];
+                                       //console.log("[pos_membership] config=", pos_config);
+                                       self.set('pos_config', pos_config);
+                                       self.iface_electronic_scale    =  !!pos_config.iface_electronic_scale;
+                                       self.iface_print_via_proxy     =  !!pos_config.iface_print_via_proxy;
+                                       self.iface_vkeyboard           =  !!pos_config.iface_vkeyboard;
+                                       self.iface_self_checkout       =  !!pos_config.iface_self_checkout;
+                                       self.iface_cashdrawer          =  !!pos_config.iface_cashdrawer;
+                                       
+                                       return self.fetch('sale.shop',[],[['id','=',pos_config.shop_id[0]]]);
+                               }).then(function(shops){
+                                       self.set('shop',shops[0]);
+                                       
+                                       return self.fetch('product.packaging',['ean','product_id']);
+                               }).then(function(packagings){
+                                       self.db.add_packagings(packagings);
+                                       
+                                       return self.fetch('pos.category', ['id','name','parent_id','child_id','image'])
+                               }).then(function(categories){
+                                       self.db.add_categories(categories);
+                                       
+                                       return self.fetch(
+                                               'product.product', 
+                                               ['name', 'list_price','price','pos_categ_id', 'taxes_id', 'ean13', 
+                                                'to_weight', 'uom_id', 'uos_id', 'uos_coeff', 'mes_type', 'description_sale', 'description'],
+                                               [['sale_ok','=',true],['available_in_pos','=',true]],
+                                               {pricelist: self.get('shop').pricelist_id[0]} // context for price
+                                       );
+                               }).then(function(products){
+                                       self.db.add_products(products);
+                                       
+                                       return self.fetch(
+                                               'account.bank.statement',
+                                               ['account_id','currency','journal_id','state','name','user_id','pos_session_id'],
+                                               [['state','=','open'],['pos_session_id', '=', self.get('pos_session').id]]
+                                        );
+                               }).then(function(bank_statements){
+                                       var journals = new Array();
+                                       _.each(bank_statements,function(statement) {
+                                           journals.push(statement.journal_id[0])
+                                       });
+                                       self.set('bank_statements', bank_statements);
+                                       return self.fetch('account.journal', undefined, [['id','in', journals]]);
+                               }).then(function(journals){
+                                       self.set('journals',journals);
+                                       
+                                       // associate the bank statements with their journals.
+                                       var bank_statements = self.get('bank_statements');
+                                       for(var i = 0, ilen = bank_statements.length; i < ilen; i++){
+                                               for(var j = 0, jlen = journals.length; j < jlen; j++){
+                                                       if(bank_statements[i].journal_id[0] === journals[j].id){
+                                                               bank_statements[i].journal = journals[j];
+                                                               bank_statements[i].self_checkout_payment_method = journals[j].self_checkout_payment_method;
+                                                       }
+                                               }
+                                       }
+                                       self.set({'cashRegisters' : new module.CashRegisterCollection(self.get('bank_statements'))});
+                               });
+                       return loaded;
+                },
+               push_partner: function(partner) {
+                       //console.log("[pos_membership] [PosModel] [push_partner] partner=", partner.name);
+                       this.db.add_partner(partner);
+                       this.flush_partner();
+                },
+               add_new_partner: function(attr){
+                       var partner = new module.PartnerCreate({pos:this, name:attr.name});
+                       //console.log("[pos_membership] [PosModel] [add_new_partner] partner=", partner.get('name'));
+                       this.get('partners').add(partner);
+                       this.set('selectedPartner', partner);
+                },
+               flush_partner: function() {
+                       //TODO make the mutex work 
+                       //this makes sure only one _int_flush is called at the same time
+                       //return this.flush_mutex.exec(_.bind(function() {
+                       //    return this._flush_partner(0);
+                       //}, this));
+                       this._flush_partner(0);
+                },
+               _flush_partner: function(index){
+                       var self = this;
+                       var partners = this.db.get_partners();
+                       self.set('nbr_pending_operations',partners.length);
+                       
+                       var partner = partners[index];
+                       var selectedOrder = self.get('selectedOrder');
+                       //console.log("[pos_membership] [PosModel] [_flush_partner] index=", index);
+                       if(!partner){
+                               return;
+                        }
+                       //console.log("[pos_membership] [PosModel] [_flush_partner] partner=", partner.data.name);
+                       //try to push a partner to the server
+                       return (new instance.web.Model('pos.order')).get_func('create_partner_from_ui')([partner])
+                               .fail(function(unused, event){
+                                       //don't show error popup if it fails
+                                       event.preventDefault();
+                                       console.error('Failed to send partner:',partner);
+                                       self._flush_partner(index+1);
+                                })
+                               .done(function(args){
+                                       //remove from db if success
+                                       //console.log("[pos_membership] [PosModel] [_flush_partner] [.done] args=", args);
+                                       self.db.remove_partner(partner.id);
+                                       var name = partner.data.name;
+                                       p = {name:name, id:args[0]};
+                                       //console.log("[pos_membership] [PosModel] [_flush_partner] [.done] partner=", p);
+                                       self.db.add_partners([p]);
+                                       //self.set('selectedPartner', p);
+                                       //console.log("[pos_membership] [PosModel] [_flush_partner] [.done] selectedPartner=", self.get('selectedPartner').name);
+                                       //console.log("[pos_membership] [PosModel] [_flush_partner] [.done] selectedPartner.id=", self.get('selectedPartner').id);
+                                       selectedOrder.addPartner(p); // NOTE: set .id asynchronously..
+                                       self._flush_partner(index);
+                                });
+                },
+        });
+       module.Partner = Backbone.Model.extend({
+               initialize: function(attr, options) {
+                       this.name = attr.name;
+                       this.id   = attr.id;
+                },
+               get_image_url: function(){
+                       return instance.session.url('/web/binary/image', {model: 'res.partner', field: 'image', id: this.get('id')});
+                },
+        });
+       module.PartnerCollection = Backbone.Collection.extend({
+               model: module.Partner,
+        });
+       module.PartnerCreate = Backbone.Model.extend({
+               initialize: function(attr){
+                       Backbone.Model.prototype.initialize.apply(this, arguments);
+                       this.pos = attr.pos;
+                       this.name = attr.name;
+                       return this;
+                },
+               exportAsJSON: function() {
+                       //console.log("[PartnerCreate] [exportAsJSON] name=",this.name);
+                       return {
+                               name: this.name,
+                        };
+                },
+        });
+       module.Order = module.Order.extend({
+               addPartner: function(partner, options){
+                       options = options || {};
+                       //console.log("[Order] [addPartner] partner=", partner.name, " partner_id=", partner.id);
+                       this.set_client(partner);
+                },
+               exportAsJSON: function() {
+                       var json = module.Order.__super__.exportAsJSON.call(this);
+                       json['partner_id'] = this.get('client') ? this.get('client').id : undefined;
+                       //console.log("[Order] [exportAsJSON] json=", json);
+                       return json;
+                },
+        });
+ }
diff --git a/static/src/js/screens.js b/static/src/js/screens.js
new file mode 100644 (file)
index 0000000..3e35a81
--- /dev/null
@@ -0,0 +1,120 @@
+function openerp_pos_membership_screens(instance, module){
+       module.PartnerScreenWidget = module.ScreenWidget.extend({
+               template:'PartnerScreenWidget',
+               
+               next_screen: 'products',
+               
+               show_numpad:     false,
+               show_leftpane:   false,
+               init: function(parent, options) {
+                       //console.log("[pos_membership] [PartnerScreenWidget] [init]");
+                       this._super(parent, options);
+                       this.model = options.model;
+                       // TODO: this.pos.bind('change:selectedOrder', this.change_selected_order, this);
+                },
+               start: function(){
+                       //console.log("[pos_membership] [PartnerScreenWidget] [start]");
+                       var self = this;
+                       
+                       this.partner_search_widget = new module.PartnerSearchWidget(this,{});
+                       this.partner_search_widget.replace($('.placeholder-PartnerSearchWidget'));
+                       
+                       this.partner_list_widget = new module.PartnerListWidget(this,{
+                               click_partner_action: function(partner){
+                                       self.pos.get('selectedOrder').addPartner(partner);
+                                       self.pos_widget.screen_selector.set_current_screen(self.next_screen);
+                                },
+                        });
+                       this.partner_list_widget.replace($('.placeholder-PartnerListWidget'));
+                },
+               show: function(){
+                       //console.log("[pos_membership] [PartnerScreenWidget] [show]");
+                       this._super();
+                       
+                       this.partner_search_widget.renderElement();
+                       
+                       if(this.pos.iface_vkeyboard){
+                               this.pos_widget.onscreen_keyboard.connect();
+                        }
+                },
+               close: function(){
+                       this._super();
+                       this.pos_widget.order_widget.set_numpad_state(null);
+                       this.pos_widget.payment_screen.set_numpad_state(null);
+                },
+        });
+       module.ProductScreenWidget = module.ProductScreenWidget.extend({
+               back_screen: 'partner',
+               show: function(){
+                       this._super();
+                       var self = this;
+                       this.back_button = this.add_action_button({
+                               label: 'Back',
+                               icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png',
+                               click: function(){
+                                       self.pos.get('selectedOrder').get('orderLines').reset([]);
+                                       self.pos_widget.numpad.state.trigger('set_value','remove');
+                                       self.pos_widget.screen_selector.set_current_screen(self.back_screen);
+                                },
+                        });
+                },
+        });
+       module.PartnerCreateScreenWidget = module.ScreenWidget.extend({
+               template: 'PartnerCreateScreenWidget',
+               show_numpad: false,
+               show_leftpane: false,
+               back_screen: 'partner',
+               next_screen: 'products',
+               init: function(parent, options) {
+                       this._super(parent, options);
+                       this.model = options.model;
+                },
+               show: function(){
+                       //console.log("[pos_membership] [PartnerCreateScreenWidget] [show]");
+                       this._super();
+                       var self = this;
+                       
+                       this.back_button = this.add_action_button({
+                               label: 'Back',
+                               icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png',
+                               click: function(){
+                                       self.pos_widget.screen_selector.set_current_screen(self.back_screen);
+                                },
+                        });
+                       this.validate_button = this.add_action_button({
+                               label: 'Validate',
+                               name: 'validation',
+                               icon: '/point_of_sale/static/src/img/icons/png48/validate.png',
+                               click: function(){
+                                       self.validatePartner();
+                                },
+                        });
+                       this.updatePartnerCreateSummary();
+                },
+               close: function(){
+                       this._super();
+                },
+               back: function() {
+                       this.pos_widget.screen_selector.set_current_screen(self.back_screen);
+                },
+               validatePartner: function() {
+                       var partner = this.pos.get('selectedPartner');
+                       
+                       this.pos.push_partner(partner.exportAsJSON());
+                       this.pos.get('selectedOrder').addPartner({name:partner.name}); // NOTE: .id set asynchronously in .done()
+                       this.pos_widget.screen_selector.set_current_screen(this.next_screen);
+                },
+               renderElement: function() {
+                       //console.log("[pos_membership] [PartnerCreateScreenWidget] [renderElement]");
+                       this._super();
+                       this.updatePartnerCreateSummary();
+                },
+               updatePartnerCreateSummary: function() {
+                       var partner = this.pos.get('selectedPartner');
+                       if(partner){
+                               //console.log("[pos_membership] [PartnerCreateScreenWidget] [updatePartnerCreateSummary] partner=",partner.get('name'));
+                               this.$('#partner-create-name').html(partner.get('name'));
+                        }
+                },
+        });
+ }
diff --git a/static/src/js/widgets.js b/static/src/js/widgets.js
new file mode 100644 (file)
index 0000000..a123afb
--- /dev/null
@@ -0,0 +1,279 @@
+function openerp_pos_membership_widgets(instance, module){
+       module.PartnerWidget = module.PosBaseWidget.extend({
+               template: 'PartnerWidget',
+               init: function(parent, options){
+                       this._super(parent,options);
+                       this.model = options.model;
+                       this.next_screen = options.next_screen; //when a partner is clicked, this screen is set
+                       this.click_partner_action = options.click_partner_action; 
+                },
+               renderElement: function(){
+                // NOTE: returns the url of the partner thumbnail
+                       //console.log("[pos_membership] [PartnerWidget] [renderElement]");
+                       this._super();
+                       this.$('img').replaceWith(this.pos_widget.image_cache.get_image(this.model.get_image_url()));
+                       var self = this;
+                       $("a", this.$el).click(function(e){
+                               if(self.click_partner_action){
+                                       self.click_partner_action(self.model);
+                                }
+                        });
+                },
+        });
+       module.PartnerSearchWidget = module.PosBaseWidget.extend({
+               template: 'PartnerSearchWidget',
+               init: function(parent, options){
+                       var self = this;
+                       this._super(parent,options);
+                },
+               get_image_url: function(partner){
+                       return instance.session.url('/web/binary/image', {model: 'res.partner', field: 'image', id: partner.id});
+                },
+               renderElement: function(){
+                       //console.log("[pos_membership] [PartnerSearchWidget] [renderElement]");
+                       var self = this;
+                       this._super();
+                       this.filter();
+                },
+               filter: function(category){
+                       var self = this;
+                       
+                       var partners = self.pos.db.get_partner_list();
+                       //console.log("[pos_membership] [PartnerSearchWidget] [filter] partners=",partners);
+                       self.pos.get('partners').reset(partners);
+                       
+                       this.$('.searchbox input').keyup(function(){
+                               query = $(this).val();
+                               if(query){
+                                       //console.log("[pos_membership] [PartnerSearchWidget] [filter]: query:", query);
+                                       var partners = self.pos.db.search_partner(query);
+                                       self.pos.get('partners').reset(partners);
+                                       //if(partners.length == 0) {
+                                               //console.log("[pos_membership] [PartnerSearchWidget] [filter]: no result");
+                                               self.query = query;
+                                               self.$('.search-create').fadeIn();
+                                       //}else{
+                                       //      self.$('.search-create').fadeOut();
+                                       //}
+                                       self.$('.search-clear').fadeIn();
+                                }
+                               else{
+                                       var partners = self.pos.db.get_partner_list();
+                                       self.pos.get('partners').reset(partners);
+                                       self.$('.search-clear').fadeOut();
+                                       self.$('.search-create').fadeOut();
+                                }
+                        });
+                       this.$('.searchbox input').click(function(){}); //Why ???
+                       this.$('.search-clear').click(function(){
+                               var partners = self.pos.db.get_partner_list();
+                               self.pos.get('partners').reset(partners);
+                               self.$('.searchbox input').val('').focus();
+                               self.$('.search-clear').fadeOut();
+                               self.$('.search-create').fadeOut();
+                        });
+                       this.$('.search-create').click(function(){
+                               var partners = self.pos.db.get_partner_list();
+                               self.pos.get('partners').reset(partners);
+                               self.$('.searchbox input').val('').focus();
+                               self.$('.search-clear').fadeOut();
+                               self.$('.search-create').fadeOut();
+                               //console.log("[pos_membership] [PartnerSearchWidget] [filter] [search-create] query=",self.query);
+                               self.pos.add_new_partner({name:self.query});
+                               self.pos_widget.screen_selector.set_current_screen('partner_create');
+                        });
+                },
+        });
+       module.PartnerListWidget = module.ScreenWidget.extend({
+               template:'PartnerListWidget',
+               init: function(parent, options) {
+                       //console.log("[pos_membership] [PartnerListWidget] [init]");
+                       var self = this;
+                       this._super(parent, options);
+                       this.model = options.model;
+                       this.partnerwidgets = [];
+                       this.weight = options.weight || 0;
+                       this.show_scale = options.show_scale || false;
+                       this.next_screen = options.next_screen || false;
+                       this.back_screen = options.back_screen || false;
+                       this.click_partner_action = options.click_partner_action;
+                       
+                       this.pos.get('partners').bind('reset', function(){
+                               //console.log("[pos_membership] [PartnerListWidget] [bind] [reset]");
+                               self.renderElement();
+                        });
+                },
+               renderElement: function() {
+                       //console.log("[pos_membership] [PartnerListWidget] [renderElement]");
+                       var self = this;
+                       this._super();
+                       
+                       // free subwidgets memory from previous renders
+                       for(var i = 0, len = this.partnerwidgets.length; i < len; i++){
+                               this.partnerwidgets[i].destroy();
+                        }
+                       this.partnerwidgets = []; 
+                       if(this.scrollbar){
+                               this.scrollbar.destroy();
+                        }
+                       var partners = this.pos.get('partners').models || [];
+                       for(var i = 0, len = partners.length; i < len; i++){
+                               //console.log("[pos_membership] [PartnerListWidget] [renderElement]: partners[i].get('name')=",partners[i].get('name'));
+                               var partner = new module.PartnerWidget(self, {
+                                       model: partners[i],
+                                       click_partner_action: this.click_partner_action,
+                                });
+                               this.partnerwidgets.push(partner);
+                               partner.appendTo(this.$('.partner-list'));
+                        }
+                       this.scrollbar = new module.ScrollbarWidget(this,{
+                               target_widget: this,
+                               target_selector: '.partner-list-scroller',
+                               on_show: function(){
+                                       self.$('.partner-list-scroller').css({'padding-right':'62px'},100);
+                                },
+                               on_hide: function(){
+                                       self.$('.partner-list-scroller').css({'padding-right':'0px'},100);
+                                },
+                        });
+                       
+                       this.scrollbar.replace(this.$('.placeholder-ScrollbarWidget'));
+                },
+        });
+       module.PosWidget = module.PosWidget.extend({
+               build_widgets: function() {
+                       var self = this;
+                       
+                       // --------  Screens ---------
+                       
+                       // BEGIN pos_membership
+                       this.partner_screen = new module.PartnerScreenWidget(this,{});
+                       this.partner_screen.appendTo($('#rightpane'));
+                       // END pos_membership
+                       
+                       this.product_screen = new module.ProductScreenWidget(this,{});
+                       this.product_screen.appendTo($('#rightpane'));
+                       
+                       this.receipt_screen = new module.ReceiptScreenWidget(this, {});
+                       this.receipt_screen.appendTo($('#rightpane'));
+                       
+                       this.payment_screen = new module.PaymentScreenWidget(this, {});
+                       this.payment_screen.appendTo($('#rightpane'));
+                       
+                       // BEGIN pos_membership
+                       this.partner_create_screen = new module.PartnerCreateScreenWidget(this, {});
+                       this.partner_create_screen.appendTo($('#rightpane'));
+                       // END pos_membership
+                       
+                       this.welcome_screen = new module.WelcomeScreenWidget(this,{});
+                       this.welcome_screen.appendTo($('#rightpane'));
+                       
+                       this.client_payment_screen = new module.ClientPaymentScreenWidget(this, {});
+                       this.client_payment_screen.appendTo($('#rightpane'));
+                       
+                       this.scale_invite_screen = new module.ScaleInviteScreenWidget(this, {});
+                       this.scale_invite_screen.appendTo($('#rightpane'));
+                       
+                       this.scale_screen = new module.ScaleScreenWidget(this,{});
+                       this.scale_screen.appendTo($('#rightpane'));
+                       
+                       // --------  Popups ---------
+                       
+                       this.help_popup = new module.HelpPopupWidget(this, {});
+                       this.help_popup.appendTo($('.point-of-sale'));
+                       
+                       this.error_popup = new module.ErrorPopupWidget(this, {});
+                       this.error_popup.appendTo($('.point-of-sale'));
+                       
+                       this.error_product_popup = new module.ProductErrorPopupWidget(this, {});
+                       this.error_product_popup.appendTo($('.point-of-sale'));
+                       
+                       this.error_session_popup = new module.ErrorSessionPopupWidget(this, {});
+                       this.error_session_popup.appendTo($('.point-of-sale'));
+                       
+                       this.choose_receipt_popup = new module.ChooseReceiptPopupWidget(this, {});
+                       this.choose_receipt_popup.appendTo($('.point-of-sale'));
+                       
+                       this.error_negative_price_popup = new module.ErrorNegativePricePopupWidget(this, {});
+                       this.error_negative_price_popup.appendTo($('.point-of-sale'));
+                       
+                       // --------  Misc ---------
+                       
+                       this.notification = new module.SynchNotificationWidget(this,{});
+                       this.notification.appendTo(this.$('#rightheader'));
+                       
+                       this.username   = new module.UsernameWidget(this,{});
+                       this.username.replace(this.$('.placeholder-UsernameWidget'));
+                       
+                       this.action_bar = new module.ActionBarWidget(this);
+                       this.action_bar.appendTo($(".point-of-sale #rightpane"));
+                       
+                       this.left_action_bar = new module.ActionBarWidget(this);
+                       this.left_action_bar.appendTo($(".point-of-sale #leftpane"));
+                       
+                       this.paypad = new module.PaypadWidget(this, {});
+                       this.paypad.replace($('#placeholder-PaypadWidget'));
+                       
+                       this.numpad = new module.NumpadWidget(this);
+                       this.numpad.replace($('#placeholder-NumpadWidget'));
+                       
+                       this.order_widget = new module.OrderWidget(this, {});
+                       this.order_widget.replace($('#placeholder-OrderWidget'));
+                       
+                       this.onscreen_keyboard = new module.OnscreenKeyboardWidget(this, {
+                               'keyboard_model': 'simple'
+                        });
+                       this.onscreen_keyboard.appendTo($(".point-of-sale #content")); 
+                       
+                       this.close_button = new module.HeaderButtonWidget(this,{
+                               label:'Close',
+                               action: function(){ self.try_close(); },
+                        });
+                       this.close_button.appendTo(this.$('#rightheader'));
+                       
+                       this.client_button = new module.HeaderButtonWidget(this,{
+                               label:'Self-Checkout',
+                               action: function(){ self.screen_selector.set_user_mode('client'); },
+                        });
+                       this.client_button.appendTo(this.$('#rightheader'));
+                       
+                       
+                       // --------  Screen Selector ---------
+                       
+                       this.screen_selector = new module.ScreenSelector({
+                               pos: this.pos,
+                               screen_set:{
+                                       'products': this.product_screen,
+                                       'payment' : this.payment_screen,
+                                       'client_payment' : this.client_payment_screen,
+                                       'scale_invite' : this.scale_invite_screen,
+                                       'scale':    this.scale_screen,
+                                       'receipt' : this.receipt_screen,
+                                       'welcome' : this.welcome_screen,
+                                       // BEGIN pos_membership
+                                       'partner' : this.partner_screen,
+                                       'partner_create' : this.partner_create_screen,
+                                       // END pos_membership
+                                },
+                               popup_set:{
+                                       'help': this.help_popup,
+                                       'error': this.error_popup,
+                                       'error-product': this.error_product_popup,
+                                       'error-session': this.error_session_popup,
+                                       'error-negative-price': this.error_negative_price_popup,
+                                       'choose-receipt': this.choose_receipt_popup,
+                                },
+                               default_client_screen: 'welcome',
+                               // BEGIN pos_membership
+                               default_cashier_screen: 'partner',
+                               // END pos_membership
+                               default_mode: this.pos.iface_self_checkout ?  'client' : 'cashier',
+                        });
+                       
+                       if(this.pos.debug){
+                               this.debug_widget = new module.DebugWidget(this);
+                               this.debug_widget.appendTo(this.$('#content'));
+                        }
+                },
+        });
+ }
diff --git a/static/src/xml/pos.xml b/static/src/xml/pos.xml
new file mode 100644 (file)
index 0000000..3320f9d
--- /dev/null
@@ -0,0 +1,99 @@
+<templates id="template" xml:space="preserve">
+       <t t-extend="NumpadWidget">
+               <t t-jquery="#numpad-minus" t-operation="replace"></t>
+        </t>
+       <t t-name="PartnerSearchWidget">
+               <header>
+                       <div class="searchbox">
+                               <input placeholder="Search Products" />
+                               <img class="search-create" src="/point_of_sale/static/src/img/validate-icon.png" />
+                               <img class="search-clear" src="/point_of_sale/static/src/img/search_reset.gif" />
+                        </div>
+                </header>
+        </t>
+       <t t-name="PartnerListWidget">
+               <div class='partner-list-container'>
+                       <div class="partner-list-scroller">
+                               <ol id="partners-screen-ol" class="partner-list">
+                                </ol>
+                        </div>
+                       <div class="shadow-top"></div>
+                       <span class="placeholder-ScrollbarWidget" />
+                </div>
+        </t>
+       <t t-name="PartnerScreenWidget">
+               <div id="partners-screen" class="screen">
+                       <table class="layout-table">
+                               <tr class="header-row">
+                                       <td class="header-cell">
+                                               <span class="placeholder-PartnerSearchWidget" />
+                                        </td>
+                                </tr>
+                               <tr class="content-row">
+                                       <td class="content-cell">
+                                               <div class="content-container">
+                                                       <span class="placeholder-PartnerListWidget" />
+                                                </div>
+                                        </td>
+                                </tr>
+                        </table>
+                </div>
+        </t>
+       <t t-name="PartnerCreateScreenWidget">
+               <div id="partner-create-screen" class="screen">
+                       <header><h2>Partner Create</h2></header>
+                       <div class="pos-step-container">
+                               <div class="pos-partner-create-container">
+                                       <br />
+                                       <div class="header">
+                                               <span class="left-block">
+                                                       Name:
+                                                </span>
+                                               <span class='right-block' id="partner-create-name"></span>
+                                                                                       <!--
+                                               <span class="left-block">
+                                                       Name2:
+                                                </span>
+                                               <span class='right-block'>
+                                                       <t t-if="widget.model.get('name')"/>
+                                                </span>
+                                                                                       -->
+                                        </div>
+                                       <!--<table id="partner-createlines">
+                                        </table>-->
+                                       <div class="footer">
+                                               <div class="infoline">
+                                                       <span class='left-block'>
+                                                               Address:
+                                                        </span>
+                                                       <span class='right-block' id="partner-create-address"></span>
+                                                </div>
+                                        </div>
+                                </div>
+                        </div>
+                </div>
+        </t>
+       <t t-name="PartnerWidget">
+               <li class='partner'>
+                       <a href="#">
+                               <div class="partner-img">
+                                       <img src='' /> <!-- the partner thumbnail -->
+                                       <!--<t t-if="!widget.model.get('to_weight')">
+                                               <span class="price-tag">
+                                                       <t t-esc="widget.format_currency(widget.model.get('price'))"/>
+                                                </span>
+                                        </t>
+                                       <t t-if="widget.model.get('to_weight')">
+                                               <span class="price-tag">
+                                                       <t t-esc="widget.format_currency(widget.model.get('price'))+'/Kg'"/>
+                                                </span>
+                                        </t>-->
+                                </div>
+                               <div class="partner-name">
+                                       <t t-esc="widget.model.get('name')"/>
+                                       <!--(<t t-esc="widget.model.get('id')"/>)-->
+                                </div>
+                        </a>
+                </li>
+        </t>
+ </templates>
diff --git a/static/src/xml/pos_membership.xml b/static/src/xml/pos_membership.xml
deleted file mode 100644 (file)
index 0bd4311..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<templates id="template" xml:space="preserve">
-       <t t-extend="NumpadWidget">
-               <t t-jquery="#numpad-minus" t-operation="replace"></t>
-       </t>
- </templates>