[hw_scanner] implementation of the server side component of the barcode scanner proxy
[odoo/odoo.git] / addons / hw_proxy / controllers / main.py
1 # -*- coding: utf-8 -*-
2 import logging
3 import simplejson
4 import os
5 import openerp
6 import time
7 import random
8 import subprocess
9 import usb.core
10 import escpos 
11 import escpos.printer
12
13 from openerp import http
14 from openerp.http import request
15 from openerp.addons.web.controllers.main import manifest_list, module_boot, html_template
16
17 _logger = logging.getLogger(__name__)
18
19 class Proxy(http.Controller):
20     def __init__(self):
21         self.scale = 'closed'
22         self.scale_weight = 0.0
23         pass
24
25     def connected_usb_devices(self,devices):
26         connected = []
27         for device in devices:
28             if usb.core.find(idVendor=device['vendor'], idProduct=device['product']) != None:
29                 connected.append(device)
30         return connected
31
32     @http.route('/hw_proxy/test_connection', type='json', auth='admin')
33     def test_connection(self):
34         _logger.info('Received Connection Test from the Point of Sale');
35
36     @http.route('/hw_proxy/scan_item_success', type='json', auth='admin')
37     def scan_item_success(self, ean):
38         """
39         A product has been scanned with success
40         """
41         print 'scan_item_success: ' + str(ean)
42
43     @http.route('/hw_proxy/scan_item_error_unrecognized', type='json', auth='admin')
44     def scan_item_error_unrecognized(self, ean):
45         """
46         A product has been scanned without success
47         """
48         print 'scan_item_error_unrecognized: ' + str(ean)
49
50     @http.route('/hw_proxy/help_needed', type='json', auth='admin')
51     def help_needed(self):
52         """
53         The user wants an help (ex: light is on)
54         """
55         print "help_needed"
56
57     @http.route('/hw_proxy/help_canceled', type='json', auth='admin')
58     def help_canceled(self):
59         """
60         The user stops the help request
61         """
62         print "help_canceled"
63
64     @http.route('/hw_proxy/weighting_start', type='json', auth='admin')
65     def weighting_start(self):
66         if self.scale == 'closed':
67             print "Opening (Fake) Connection to Scale..."
68             self.scale = 'open'
69             self.scale_weight = 0.0
70             time.sleep(0.1)
71             print "... Scale Open."
72         else:
73             print "WARNING: Scale already Connected !!!"
74
75     @http.route('/hw_proxy/weighting_read_kg', type='json', auth='admin')
76     def weighting_read_kg(self):
77         if self.scale == 'open':
78             print "Reading Scale..."
79             time.sleep(0.025)
80             self.scale_weight += 0.01
81             print "... Done."
82             return self.scale_weight
83         else:
84             print "WARNING: Reading closed scale !!!"
85             return 0.0
86
87     @http.route('/hw_proxy/weighting_end', type='json', auth='admin')
88     def weighting_end(self):
89         if self.scale == 'open':
90             print "Closing Connection to Scale ..."
91             self.scale = 'closed'
92             self.scale_weight = 0.0
93             time.sleep(0.1)
94             print "... Scale Closed."
95         else:
96             print "WARNING: Scale already Closed !!!"
97
98     @http.route('/hw_proxy/payment_request', type='json', auth='admin')
99     def payment_request(self, price):
100         """
101         The PoS will activate the method payment 
102         """
103         print "payment_request: price:"+str(price)
104         return 'ok'
105
106     @http.route('/hw_proxy/payment_status', type='json', auth='admin')
107     def payment_status(self):
108         print "payment_status"
109         return { 'status':'waiting' } 
110
111     @http.route('/hw_proxy/payment_cancel', type='json', auth='admin')
112     def payment_cancel(self):
113         print "payment_cancel"
114
115     @http.route('/hw_proxy/transaction_start', type='json', auth='admin')
116     def transaction_start(self):
117         print 'transaction_start'
118
119     @http.route('/hw_proxy/transaction_end', type='json', auth='admin')
120     def transaction_end(self):
121         print 'transaction_end'
122
123     @http.route('/hw_proxy/cashier_mode_activated', type='json', auth='admin')
124     def cashier_mode_activated(self):
125         print 'cashier_mode_activated'
126
127     @http.route('/hw_proxy/cashier_mode_deactivated', type='json', auth='admin')
128     def cashier_mode_deactivated(self):
129         print 'cashier_mode_deactivated'
130
131     @http.route('/hw_proxy/open_cashbox', type='json', auth='admin')
132     def open_cashbox(self):
133         print 'open_cashbox'
134
135     @http.route('/hw_proxy/print_receipt', type='json', auth='admin')
136     def print_receipt(self, receipt):
137         print 'print_receipt' + str(receipt)
138
139     @http.route('/hw_proxy/is_scanner_connected', type='json', auth='admin')
140     def print_receipt(self, receipt):
141         print 'is_scanner_connected?' 
142         return False
143
144     @http.route('/hw_proxy/scanner', type='json', auth='admin')
145     def print_receipt(self, receipt):
146         print 'scanner' 
147         time.sleep(10)
148         return ''
149
150     @http.route('/hw_proxy/log', type='json', auth='admin')
151     def log(self, arguments):
152         _logger.info(' '.join(str(v) for v in arguments))
153
154     @http.route('/hw_proxy/print_pdf_invoice', type='json', auth='admin')
155     def print_pdf_invoice(self, pdfinvoice):
156         print 'print_pdf_invoice' + str(pdfinvoice)
157
158