Example #1
0
    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))
Example #2
0
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;
Example #3
0
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
Example #4
0
    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
Example #5
0
    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:
Example #6
0
    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)
            })
Example #7
0
        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,
Example #8
0
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