trytonpsk-syncronize_companies/sale.py

295 lines
9.4 KiB
Python

# 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 trytond.pool import PoolMeta, Pool
from trytond.transaction import Transaction
from trytond.pyson import Eval
# 'InvoicesStart'
_ZERO = Decimal('0.00')
def get_shops_user():
User = Pool().get('res.user')
user = User(Transaction().user)
shops = [s.id for s in user.shops]
return shops
class Sale(metaclass=PoolMeta):
__name__ = 'sale.sale'
class SaleIncomeDailyStart(metaclass=PoolMeta):
__name__ = 'sale_pos.sale_income_daily.start'
@classmethod
def __setup__(cls):
super(SaleIncomeDailyStart, cls).__setup__()
cls.shop.domain.append(
('id', 'in', Eval('context', {}).get('shops', -1))
)
# class SaleDailyReport(metaclass=PoolMeta):
# __name__ = 'sale_goal.sale_daily_report'
#
# @classmethod
# def get_context(cls, records, header, data):
# # report_context = super(SaleDailyReport, cls).get_context(records, data)
# report_context = {}
# pool = Pool()
# Sale = pool.get('sale.sale')
# User = pool.get('res.user')
# Company = pool.get('company.company')
# company = Company(data['company'])
# Journal = pool.get('account.statement.journal')
# user_ = User(Transaction().user)
#
# dom_sales = [
# ('company', '=', data['company']),
# ('sale_date', '=', data['sale_date']),
# ('number', '!=', None),
# ]
# states_sale = ['confirmed', 'processing', 'done']
# if data['include_canceled']:
# states_sale.append('cancel')
# dom_sales.append(('state', 'in', states_sale))
#
# journal_name = ''
# if data['journal']:
# dom_sales.append(('payments.statement.journal', '=', data['journal']))
# journal = Journal(data['journal'])
# journal_name = journal.name.upper()
#
# ctx = {
# 'company': user_.company.id,
# 'user': user_.id,
# 'shops': [s.id for s in user_.shops],
# 'shop': user_.shop.id,
# }
# with Transaction().set_context(ctx):
# sales = Sale.search(dom_sales, order=[('number', 'ASC')])
#
# untaxed_amount_ = []
# tax_amount_ = []
# total_amount_ = []
# total_amount_ = []
# total_journal_paid_ = []
# sequence = 0
#
# for sale in sales:
# sequence += 1
#
# setattr(sale, 'sequence', sequence)
# journal_paid = _ZERO
# if data['journal'] and sale.state != 'cancel':
# for p in sale.payments:
# if p.statement.journal.id == data['journal']:
# journal_paid += p.amount
# total_journal_paid_.append(journal_paid)
#
# setattr(sale, 'journal_paid', journal_paid)
# if not hasattr(sale, 'sale_device'):
# setattr(sale, 'sale_device', None)
# if sale.state == 'cancel':
# continue
#
# untaxed_amount_.append(sale.untaxed_amount)
# tax_amount_.append(sale.tax_amount)
# total_amount_.append(sale.total_amount)
#
# report_context['data'] = data
# report_context['records'] = sales
# report_context['total_amount'] = sum(total_amount_)
# report_context['tax_amount'] = sum(tax_amount_)
# report_context['untaxed_amount'] = sum(untaxed_amount_)
# report_context['date'] = data['sale_date']
# report_context['company'] = company.party.name
# report_context['journal'] = journal_name
# report_context['total_journal_paid'] = sum(total_journal_paid_)
# return report_context
# class SaleMonthByShopStart(metaclass=PoolMeta):
# __name__ = 'sale_goal.sale_month_shop.start'
#
# @classmethod
# def __setup__(cls):
# super(SaleMonthByShopStart, cls).__setup__()
# cls.shop.domain.append(
# ('id', 'in', Eval('context', {}).get('shops', -1))
# )
class SaleGoalAnnualRankingStart(metaclass=PoolMeta):
__name__ = 'sale_goal.annual_ranking.start'
@classmethod
def __setup__(cls):
super(SaleGoalAnnualRankingStart, cls).__setup__()
cls.shop.domain.append(
('id', 'in', Eval('context', {}).get('shops', -1))
)
class SaleDetailedStart(metaclass=PoolMeta):
__name__ = 'sale_pos.sale_detailed.start'
@classmethod
def __setup__(cls):
super(SaleDetailedStart, cls).__setup__()
cls.shop.domain.append(
('id', 'in', Eval('context', {}).get('shops', -1))
)
class SaleDetailedReport(metaclass=PoolMeta):
__name__ = 'sale_pos.report_sale_detailed'
@classmethod
def get_context(cls, records, header, data):
# report_context = super(SaleDetailedReport, cls).get_context(records, data)
report_context = {}
pool = Pool()
Sale = pool.get('sale.sale')
SaleLine = pool.get('sale.line')
Company = pool.get('company.company')
User = pool.get('res.user')
user_ = User(Transaction().user)
ctx = {
'company': user_.company.id,
'user': user_.id,
'shops': [s.id for s in user_.shops],
'shop': user_.shop.id,
}
sales_line_dom = [
('sale.sale_date', '>=', data['start_date']),
('sale.sale_date', '<=', data['end_date']),
('sale.company', '=', data['company']),
('sale.state', 'in', ['processing', 'done']),
]
if data['salesman']:
sales_line_dom.append(
('sale.salesman', '=', data['salesman'])
)
if data['shop']:
sales_line_dom.append(
('sale.shop', '=', data['shop'])
)
if data['party']:
sales_line_dom.append(
('sale.party', '=', data['party'])
)
if data['product']:
sales_line_dom.append(
('product', '=', data['product'])
)
with Transaction().set_context(ctx):
start_lines = SaleLine.search(sales_line_dom, order=[('sale.sale_date', 'ASC')])
lines = []
amount = []
amount_w_tax = []
for line in start_lines:
if line.type == 'line' and not line.product:
Sale.raise_user_error('sale_not_product', line.sale.number)
is_invoiced = False
if line.sale.invoices:
for inv in line.sale.invoices:
if inv.state not in ['draft', 'cancel']:
is_invoiced = True
if is_invoiced:
lines.append(line)
amount.append(line.amount)
amount_w_tax.append(line.amount_w_tax)
else:
lines.append(line)
amount.append(line.amount)
amount_w_tax.append(line.amount_w_tax)
report_context['data'] = data
report_context['amount'] = sum(amount)
report_context['amount_w_tax'] = sum(amount_w_tax)
report_context['records'] = lines
report_context['company'] = Company(data['company'])
return report_context
class ShopDailySummaryStart(metaclass=PoolMeta):
__name__ = 'sale_pos.shop_daily_summary.start'
@classmethod
def __setup__(cls):
super(ShopDailySummaryStart, cls).__setup__()
cls.shop.domain.append(
('id', 'in', Eval('context', {}).get('shops', -1))
)
class PortfolioDetailedReport(metaclass=PoolMeta):
__name__ = 'party.portfolio_detailed.report'
@classmethod
def get_domain_invoice(cls, domain, data):
shops = get_shops_user()
dom = [('shop', 'in', shops)]
domain.extend(dom)
return domain
class ExpiredPortfolioReport(metaclass=PoolMeta):
__name__ = 'invoice_report.expired_portfolio_report'
@classmethod
def get_domain_invoice(cls, data):
domain = super(ExpiredPortfolioReport, cls).get_domain_invoice(data)
shops = get_shops_user()
if shops:
dom = [('shop', 'in', shops)]
domain.extend(dom)
return domain
# class InvoicesStart(metaclass=PoolMeta):
# __name__ = 'invoice_report.print_invoices.start'
#
# @classmethod
# def __setup__(cls):
# super(InvoicesStart, cls).__setup__()
# cls.shop.domain.append(
# ('id', 'in', Eval('context', {}).get('shops', -1))
# )
class PortfolioBySalesmanReport(metaclass=PoolMeta):
__name__ = 'sale_salesman.portfolio_by_salesman.report'
# Overwrite method what generated domain of invoices
@classmethod
def get_domain_invoice(cls, domain, data):
domain = super(PortfolioBySalesmanReport, cls).get_domain_invoice(
domain, data)
shops = get_shops_user()
if shops:
domain.append(('shop', 'in', shops))
return domain
class MovesInvoicesReport(metaclass=PoolMeta):
__name__ = 'account_invoice.moves_report'
@classmethod
def get_domain_invoice(cls, data):
dom_invoices = super(MovesInvoicesReport, cls).get_domain_invoice(data)
shops = get_shops_user()
if shops:
dom_invoices.append(('shop', 'in', shops))
return dom_invoices