Initial import from Docker volume
This commit is contained in:
47
model/fields/numeric.py
Executable file
47
model/fields/numeric.py
Executable file
@@ -0,0 +1,47 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from decimal import Decimal
|
||||
|
||||
from sql import Cast, CombiningQuery, Literal, Select
|
||||
|
||||
from trytond import backend
|
||||
|
||||
from .field import order_method
|
||||
from .float import Float
|
||||
|
||||
|
||||
class Numeric(Float):
|
||||
'''
|
||||
Define a numeric field (``decimal``).
|
||||
'''
|
||||
_type = 'numeric'
|
||||
_sql_type = 'NUMERIC'
|
||||
_py_type = Decimal
|
||||
|
||||
@order_method
|
||||
def convert_order(self, name, tables, Model):
|
||||
columns = super().convert_order(name, tables, Model)
|
||||
if backend.name == 'sqlite':
|
||||
# Must be cast because Decimal is stored as bytes
|
||||
columns = [Cast(c, self.sql_type().base) for c in columns]
|
||||
return columns
|
||||
|
||||
def _domain_column(self, operator, column):
|
||||
column = super()._domain_column(operator, column)
|
||||
if backend.name == 'sqlite':
|
||||
# Must be casted as Decimal is stored as bytes
|
||||
column = Cast(column, self.sql_type().base)
|
||||
return column
|
||||
|
||||
def _domain_value(self, operator, value):
|
||||
value = super(Numeric, self)._domain_value(operator, value)
|
||||
if backend.name == 'sqlite':
|
||||
if isinstance(value, (Select, CombiningQuery)):
|
||||
return value
|
||||
# Must be casted as Decimal is adapted to bytes
|
||||
type_ = self.sql_type().base
|
||||
if operator in ('in', 'not in'):
|
||||
return [Cast(Literal(v), type_) for v in value]
|
||||
elif value is not None:
|
||||
return Cast(Literal(value), type_)
|
||||
return value
|
||||
Reference in New Issue
Block a user