first commit
This commit is contained in:
64
modules/sale_point/sale_reporting.py
Normal file
64
modules/sale_point/sale_reporting.py
Normal file
@@ -0,0 +1,64 @@
|
||||
# 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 sql import Literal
|
||||
from sql.operators import Concat
|
||||
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class AbstractMixin:
|
||||
__slots__ = ()
|
||||
|
||||
@classmethod
|
||||
def _pos_sale_line(cls, length, index, company_id=None):
|
||||
pool = Pool()
|
||||
Company = pool.get('company.company')
|
||||
Line = pool.get('sale.point.sale.line')
|
||||
Point = pool.get('sale.point')
|
||||
Sale = pool.get('sale.point.sale')
|
||||
|
||||
line = Line.__table__()
|
||||
point = Point.__table__()
|
||||
sale = Sale.__table__()
|
||||
if company_id is not None and company_id >= 0:
|
||||
company = Company(company_id)
|
||||
currency_id = company.currency.id
|
||||
else:
|
||||
currency_id = None
|
||||
return (line
|
||||
.join(sale, condition=line.sale == sale.id)
|
||||
.join(point, condition=sale.point == point.id)
|
||||
.select(
|
||||
(line.id * length + index).as_('id'),
|
||||
*cls._pos_sale_line_columns(line, point, sale, currency_id),
|
||||
where=sale.state.in_(cls._pos_sale_states())
|
||||
& (sale.company == company_id),
|
||||
))
|
||||
|
||||
@classmethod
|
||||
def _pos_sale_line_columns(cls, line, point, sale, currency):
|
||||
try:
|
||||
columns = super()._pos_sale_line_columns(
|
||||
line, point, sale, currency)
|
||||
except AttributeError:
|
||||
columns = []
|
||||
return [
|
||||
line.product.as_('product'),
|
||||
line.quantity.as_('quantity'),
|
||||
line.unit_list_price.as_('unit_price'),
|
||||
Concat('sale.point.sale,', line.sale).as_('order'),
|
||||
sale.date.as_('date'),
|
||||
sale.company.as_('company'),
|
||||
Literal(currency).as_('currency'),
|
||||
Literal(None).as_('customer'),
|
||||
point.storage_location.as_('location'),
|
||||
point.address.as_('shipment_address'),
|
||||
] + columns
|
||||
|
||||
@classmethod
|
||||
def _lines(cls):
|
||||
return super()._lines() + [cls._pos_sale_line]
|
||||
|
||||
@classmethod
|
||||
def _pos_sale_states(cls):
|
||||
return ['done', 'posted']
|
||||
Reference in New Issue
Block a user