add filter view for shops of user

This commit is contained in:
Camilo Sarmiento 2020-10-23 18:10:10 -05:00
parent 89802f6a91
commit a2032a2c78
5 changed files with 257 additions and 62 deletions

View File

@ -12,16 +12,21 @@ def register():
company.ConnectionCompanies,
sale.Sale,
sale.SaleIncomeDailyStart,
sale.SaleMonthByShopStart,
sale.SaleGoalAnnualRankingStart,
sale.SaleDetailedStart,
sale.ShopDailySummaryStart,
account.PrintBalanceSheetCOLGAAPStart,
account.PrintIncomeStatementCOLGAAPStart,
module='syncronize_companies', type_='model')
Pool.register(
sale.SaleIncomeDailyReport,
sale.SaleDailyReport,
sale.SaleDetailedReport,
sale.PortfolioDetailedReport,
account.BalanceSheetCOLGAAP,
account.IncomeStatementCOLGAAP,
module='syncronize_companies', type_='report')
Pool.register(
sale.SaleIncomeDaily,
account.PrintBalanceSheetCOLGAAP,
account.PrintIncomeStatementCOLGAAP,
module='syncronize_companies', type_='wizard')

View File

@ -15,6 +15,42 @@
<field name="name">print_income_statement_colgaap_start_form</field>
</record>
<record model="ir.rule.group" id="rule_group_voucher">
<field name="model" search="[('model', '=', 'account.voucher')]"/>
<field name="default_p" eval="False"/>
<field name="global_p" eval="False"/>
</record>
<record model="ir.rule" id="rule_voucher1">
<field name="domain"
eval="[('create_uid', '=', Eval('user', {}).get('id', []))]"
pyson="1"/>
<field name="rule_group" ref="rule_group_voucher"/>
</record>
<record model="ir.rule.group" id="rule_group_purchase">
<field name="model" search="[('model', '=', 'purchase.purchase')]"/>
<field name="default_p" eval="False"/>
<field name="global_p" eval="False"/>
</record>
<record model="ir.rule" id="rule_purchase1">
<field name="domain"
eval="[('create_uid', '=', Eval('user', {}).get('id', []))]"
pyson="1"/>
<field name="rule_group" ref="rule_group_purchase"/>
</record>
<record model="ir.rule.group" id="rule_group_party">
<field name="model" search="[('model', '=', 'party.party')]"/>
<field name="default_p" eval="False"/>
<field name="global_p" eval="False"/>
</record>
<record model="ir.rule" id="rule_party1">
<field name="domain"
eval="[('create_uid', '=', Eval('user', {}).get('id', []))]"
pyson="1"/>
<field name="rule_group" ref="rule_group_party"/>
</record>
</data>
</tryton>

269
sale.py
View File

@ -14,8 +14,9 @@ from trytond.wizard import (
from trytond.report import Report
__all__ = [
'SaleIncomeDailyStart', 'SaleIncomeDaily',
'SaleIncomeDailyReport',
'SaleIncomeDailyStart', 'SaleDailyReport',
'SaleMonthByShopStart', 'SaleGoalMonthRankingReport', 'SaleDetailedStart',
'SaleDetailedReport', 'ShopDailySummaryStart', 'PortfolioDetailedReport'
]
_ZERO = Decimal('0.00')
@ -24,74 +25,226 @@ _ZERO = Decimal('0.00')
class Sale(metaclass=PoolMeta):
__name__ = 'sale.sale'
@classmethod
def get_records_income_daily_report(cls, args, ctx):
report_context = {}
pool = Pool()
Report = pool._pool['TODOREPUESTOS']['report']['sale_pos.report_sale_detailed']
report_context = Report.get_context({}, args['data'])
return report_context
class SaleIncomeDailyStart(metaclass=PoolMeta):
__name__ = 'sale_pos.sale_income_daily.start'
sincronize = fields.Boolean('Syncronize')
@classmethod
def __setup__(cls):
super(SaleIncomeDailyStart, cls).__setup__()
cls.shop.domain.append(
('id', 'in', Eval('context', {}).get('shops', -1))
)
class SaleIncomeDaily(metaclass=PoolMeta):
__name__ = 'sale_pos.sale_income_daily'
def do_print_(self, action):
action, data = super(SaleIncomeDaily, self).do_print_(action)
data['sincronize'] = self.start.sincronize
return action, data
class SaleIncomeDailyReport(metaclass=PoolMeta):
__name__ = 'sale_pos.sale_income_daily_report'
class SaleDailyReport(metaclass=PoolMeta):
__name__ = 'sale_goal.sale_daily_report'
@classmethod
def get_context(cls, records, data):
report_context = super(SaleIncomeDailyReport, cls).get_context(records, data)
Company = Pool().get('company.company')
# 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'])
result = {}
sync = data['sincronize']
if sync:
date_ = {
'__class__': 'date',
'year': data['date'].year,
'month': data['date'].month,
'day': data['date'].day,
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,
}
data['date'] = date_
data['sincronize'] = [False]
data['shop'] = None
with Transaction().set_context(ctx):
sales = Sale.search(dom_sales, order=[('number', 'ASC')])
args = {
'records': records,
'data': data,
}
for sync in company.connection_companies:
api_ = 'http://' + sync.api_connection + '/'+ sync.database
route = api_ + '/' + 'report_context'
data_ = json.dumps({
'database': sync.database,
'report_name': 'sale_pos.sale_income_daily_report',
'args': args,
})
res = requests.get(route, data=data_)
print(res)
print(res.text)
result = res.json()
untaxed_amount_ = []
tax_amount_ = []
total_amount_ = []
total_amount_ = []
total_journal_paid_ = []
sequence = 0
for k in result.keys():
if isinstance(result[k], (int, float, Decimal)):
report_context[k] += int(result[k])
elif isinstance(result[k], list):
report_context[k].extend(result[k])
if k == 'shop':
report_context[k] += result[k] + ' '
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, 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(Report):
__name__ = 'party.portfolio_detailed.report'
@classmethod
def get_domain_invoice(cls, domain, data):
User = Pool().get('res.user')
user = User(Transaction().user)
shops = [s.id for s in user.shops]
dom = [('shop', 'in', shops)]
domain.extend(dom)
return domain

View File

@ -3,11 +3,11 @@
<tryton>
<data>
<!-- report Income Daily report -->
<record model="ir.ui.view" id="sincronize_income_daily_start_view_form">
<!-- <record model="ir.ui.view" id="sincronize_income_daily_start_view_form">
<field name="model">sale_pos.sale_income_daily.start</field>
<field name="inherit" ref="sale_pos.sale_income_daily_start_view_form"/>
<field name="name">sale_income_daily_start_form</field>
</record>
</record> -->
</data>

View File

@ -4,6 +4,7 @@ depends:
company
sale
sale_pos
invoice_report
xml:
company.xml
sale.xml