def index(self, akey=None, android=None, **kwargs): u""" Отображение главной страницы Args: akey (str): нажатая на интерфейсе кнопка (down/up) для фиксации инциндентов по отсутствию ценника или товара в БД tid (int): номер задания ТСД (не используется) uid (int): идентификатор пользователя ТСД (не используется) zope_addr (str): адрес возврата к zope-серверу username (str): имя пользователя ТСД (не используется) Returns: Возвращается шаблон ``index_android`` или ``task`` в зависимости от используемого устройства (андроид или нет) """ if not hasattr(self.session, 'FB_user'): self.session.FB_user = CONFIG.get('db', 'user') self.session.FB_password = CONFIG.get('db', 'pass') self.ifaceSes.client_ip = cherrypy.request.remote.ip if is_android(cherrypy.request.headers) or android: template = tmpl.index_android else: template = tmpl.task if akey and akey in ('down', 'up'): try: DB.execProc('GM_PRICECHECKER_UPDATE', (self.ifaceSes.id_sharttask, 1 if akey == 'down' else 2, None, None), 'None') except Exception, e: cherrypy.log('Exception GM_PRICECHECKER_UPDATE: %s' % str(e))
class Owners(DB.Model): id = DB.Column(DB.Integer, primary_key=True, autoincrement=True); name = DB.Column(DB.String(80)); notation = DB.Column(DB.Text, nullable=True); created_by = DB.Column(DB.Integer, DB.ForeignKey('users.id')); created_at = DB.Column(DB.DateTime); updated_by = DB.Column(DB.Integer, DB.ForeignKey('users.id')); updated_at = DB.Column(DB.DateTime, nullable=True); def __init__(self, name, notation, created_at, updated_at): self.name = name; self.notation = notation; self.created_at = datetime.datetime.now(); self.updated_at = self.created_at;
class District(DB.Model): id = DB.Column(DB.Integer, primary_key=True, autoincrement=True) name = DB.Column(DB.String(20)) created_by = DB.Column(DB.Integer, DB.ForeignKey('users.id')) created_at = DB.Column(DB.DateTime) updated_by = DB.Column(DB.Integer, DB.ForeignKey('users.id')) updated_at = DB.Column(DB.DateTime, nullable=True) def __init__(self, name, created_at, updated_at): self.name = name self.created_at = datetime.datetime.now() self.updated_at = self.created_at
def price_audio(self, price, js=0, **kwargs): u""" Генерация аудиофайла для цены Args: price (float): цена, для которой будет сгенерирован аудиофайл Returns: dict: { * success (bool): успешность генерации аудиофайла * url (str): путь до сгенерированного аудиофайла * error (st): текст ошибки } Note: Генерация аудиофайла происходит только при отсутствии его на диске. Таким образом при замене аудиоисходников необходимо очистить кеш сгенерированных аудиофайлов цен на диске. Warnings: Для генерации аудиофайлов используется доработанная для python2.5 версия ``pydub``. Оригинальную версию использовать нельзя. """ try: res = DB.execSql( "SELECT C(VBOOL) AS RES FROM CONFIGPRICE WHERE NAME = 'VOICEPLCHECK'", (), 'one') if res and res['RES'].strip() != '1': res = { 'success': False, 'url': None, 'error': 'VOICEPLCHECK in CONFIGPRICE not set to "1"' } return json.dumps(res) if js else res except Exception: # в случае проблем с БД должна генерация должна быть включена pass if '.' in str(price) and int(str(price).split('.')[-1]) == 0: price = '%d' % int(float(price)) else: price = '%0.2f' % float(price) filepath = '/usr/local/tander/libexec/tsdserver/static/audioprice/' filename = '%s/%s.wav' % (filepath, price) fileurl = '/audioprice/%s.wav' % price if os.path.exists(filename): res = {'success': True, 'url': fileurl, 'error': None} return json.dumps(res) if js else res try: from pydub import AudioSegment except ImportError, e: res = {'success': False, 'url': None, 'error': str(e)} return json.dumps(res) if js else res
def taskAction(self, artbarcode=None, id_art=None, weight=None, **kwargs): u""" Отображение информации по товару по его ШК для Windows Args: artbarcode (str): ШК товара id_art (int): id товара weight (float): вес товара Returns: Возвращается шаблон ``index_android`` или ``task`` в зависимости от используемого устройства (андроид или нет) """ if is_android(cherrypy.request.headers): template = tmpl.index_android else: template = tmpl.task if not hasattr(self.session, 'FB_user'): self.session.FB_user = CONFIG.get('db', 'user') self.session.FB_password = CONFIG.get('db', 'pass') self.ifaceSes.client_ip = cherrypy.request.remote.ip if not id_art and not artbarcode: return template(listart=None, artname=None, jsbodyload='init()') if artbarcode: self.ifaceSes.barcode = artbarcode if not id_art: try: listart = DB.execProc('PPRINT_INFO_BARCODE2', (artbarcode, None, None, None)) data = DB.execProc('PARSE_GS1_BARCODE', (artbarcode, '01', None, None, None)) except Exception, e: cherrypy.log( 'Exception PPRINT_INFO_BARCODE2/PARSE_GS1_BARCODE for %s: %s' % (artbarcode, str(e))) return template( listart=None, artname=None, jsbodyload='init()', mes= 'Товар по штрих-коду не найден. Обратитесь на сервисную службу за информацией [1]', ) shortbarcode = data[0]['VAL'] if data else artbarcode self.ifaceSes.barcode = shortbarcode if not listart: try: DB.execProc('GM_PRICECHECKER_ADDTASK2', (shortbarcode, None, self.ifaceSes.client_ip, None, None), 'None') except Exception, e: cherrypy.log( 'Exception GM_PRICECHECKER_ADDTASK2 for %s: %s' % (shortbarcode, str(e))) finally:
def artbarcodeinfo(self, artbarcode, mockup=None, **kwargs): u""" Отображение информации по товару по его ШК для Android (AJAX JSON) Args: artbarcode (str): ШК товара Returns: dict: { * price: цена строкой за единицу товара * pricew: цена строкой за вес * split_price_r: рубли числом за единицу товара * split_price_k: копейки строкой за единицу товара * split_price_w_r: рубли числом за вес * split_price_w_k: копейки строкой за вес * unit: единица товара (шт/кг) * unit_ex: расширенная единица товара (шт/кг/л) * artname: наименование товара * isweight: признак весового товара, * rest: остатки товара с округлением до 3 знаков после запятой * weight: вес товара * id_art: id товара * artbarcode: ШК товара * price_audio: результат работы метода :func:`~modules.GENERIC.PRICECHECK.module.price_audio` * version: версия модуля * error: ошибка выполнения метода } """ if mockup or artbarcode[:6] == 'mockup': return json.dumps({ 'price': '123.45', # строка за ед 'pricew': '678.90', # строка за вес 'split_price_r': 123, 'split_price_k': 45, 'split_price_w_r': 678, 'split_price_w_k': 90, 'unit': u'кг', 'unit_ex': u'кг', 'artname': 'some mockup article', 'isweight': True, 'rest': 135.79, 'weight': 100, 'id_art': 666, 'artbarcode': artbarcode, 'version': self.VERSION }) not_found_msg = 'Товар по штрих-коду не найден. Обратитесь на сервисную службу за информацией'.decode( 'cp1251') if not hasattr(self.session, 'FB_user'): self.session.FB_user = CONFIG.get('db', 'user') self.session.FB_password = CONFIG.get('db', 'pass') self.ifaceSes.client_ip = cherrypy.request.remote.ip try: listart = DB.execProc('PPRINT_INFO_BARCODE2', (artbarcode, None, None, None)) data = DB.execProc('PARSE_GS1_BARCODE', (artbarcode, '01', None, None, None)) except Exception, e: cherrypy.log( 'Exception PPRINT_INFO_BARCODE2/PARSE_GS1_BARCODE for %s: %s' % (artbarcode, str(e))) return json.dumps({ 'error': not_found_msg, 'version': self.VERSION, 'e': str(e) })
except Exception, e: cherrypy.log( 'Exception PPRINT_INFO_BARCODE2/PARSE_GS1_BARCODE for %s: %s' % (artbarcode, str(e))) return json.dumps({ 'error': not_found_msg, 'version': self.VERSION, 'e': str(e) }) artbarcode = data[0]['VAL'] if len(data) else artbarcode if not listart: try: DB.execProc( 'GM_PRICECHECKER_ADDTASK2', (artbarcode, None, self.ifaceSes.client_ip, None, None), 'None') except Exception, e: cherrypy.log('Exception GM_PRICECHECKER_ADDTASK2 for %s: %s' % (artbarcode, str(e))) finally: return json.dumps({ 'error': not_found_msg, 'version': self.VERSION, 'e': 'not listart' }) if listart[0]['MODE'] != 'ART': return json.dumps({ 'error': not_found_msg, 'version': self.VERSION,
class Laterals(DB.Model): id = DB.Column(DB.Integer, primary_key=True, autoincrement=True) name = DB.Column(DB.String(20)) lateral_location = DB.Column(DB.Text, nullable=True) location_gps = DB.Column(DB.Text, nullable=True) metered = DB.Column(DB.Boolean) created_by = DB.Column(DB.Integer, DB.ForeignKey('users.id')) created_at = DB.Column(DB.DateTime) updated_by = DB.Column(DB.Integer, DB.ForeignKey('users.id')) updated_at = DB.Column(DB.DateTime, nullable=True) def __init__(self, name, lateral_location, location_gps, metered, created_at, updated_at): self.lateral_location = lateral_location self.location_gps = location_gps self.metered = metered self.created_at = datetime.datetime.now() self.updated_at = self.created_at