Openerp 在odoo-8中的QWEB报告中输入参数
你好!有人能帮我解决我的问题吗?我已经在odoo中创建了一个报告,该报告有一个用户输入,可以在生成pdf报告(如odoo中的每个部门休假报告)之前按员工和日期周期过滤报告,但生成的pdf为空时。我只是按照部门报告代码复制假期 这是我的示例代码这是Reporting菜单中的菜单 瞬态模型Openerp 在odoo-8中的QWEB报告中输入参数,openerp,odoo-8,openerp-8,Openerp,Odoo 8,Openerp 8,你好!有人能帮我解决我的问题吗?我已经在odoo中创建了一个报告,该报告有一个用户输入,可以在生成pdf报告(如odoo中的每个部门休假报告)之前按员工和日期周期过滤报告,但生成的pdf为空时。我只是按照部门报告代码复制假期 这是我的示例代码这是Reporting菜单中的菜单 瞬态模型 class payslip_per_Employee(models.TransientModel): _name = 'payroll.payslip.employee' employee_id = field
class payslip_per_Employee(models.TransientModel):
_name = 'payroll.payslip.employee'
employee_id = fields.Many2one('hr.employee', 'Employee', required=True)
month_of_from = fields.Selection(genx.MONTH_SELECTION, 'From the Month of', required=True, default = 1)
month_quarter_from = fields.Selection(MONTH_QUARTER_SELECTION, 'Month Quarter', required=True, default = 1)
month_year_from = fields.Integer('Year', required=True, default = genx.YEAR_NOW)
month_of_to = fields.Selection(genx.MONTH_SELECTION, 'To the Month of', required=True, default = 12)
month_quarter_to = fields.Selection(MONTH_QUARTER_SELECTION, 'Month Quarter', required=True, default = 2)
month_year_to = fields.Integer('Year', required=True, default = genx.YEAR_NOW)
def print_report(self, cr, uid, ids, context=None):
data = self.read(cr, uid, ids, context=context)[0]
datas = {
'ids': [],
'model': 'ir.ui.menu',
'form': data
}
return {
'type': 'ir.actions.report.xml',
'report_name': 'hr_payroll_ezra.report_payslip_employee',
'datas': datas,
}
<data>
<record id="view_payslip_per_employee" model="ir.ui.view">
<field name="name">payroll.payslip.employee.form</field>
<field name="model">payroll.payslip.employee</field>
<field name="arch" type="xml">
<form string="Payslip Employee">
<group>
<field name="employee_id" />
<field name="month_of_from"/>
<field name="month_quarter_from"/>
<field name="month_year_from"/>
<field name="month_of_to"/>
<field name="month_quarter_to"/>
<field name="month_year_to"/>
</group>
<footer>
<button name="print_report" string="Print" type="object" class="oe_highlight"/> or
<button string="Cancel" special="cancel" class="oe_link"/>
</footer>
</form>
</field>
</record>`enter code here`
<record id="action_payslip_per_employee" model="ir.actions.act_window">
<field name="name">Payslip Employee</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">payroll.payslip.employee</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<menuitem
name="Payslip Employee"
parent="hr.menu_hr_reporting_timesheet"
action="action_payslip_per_employee"
id="menu_payslip_per_employee"
icon="STOCK_PRINT"/>
</data>
瞬态模型中的MyXML
class payslip_per_Employee(models.TransientModel):
_name = 'payroll.payslip.employee'
employee_id = fields.Many2one('hr.employee', 'Employee', required=True)
month_of_from = fields.Selection(genx.MONTH_SELECTION, 'From the Month of', required=True, default = 1)
month_quarter_from = fields.Selection(MONTH_QUARTER_SELECTION, 'Month Quarter', required=True, default = 1)
month_year_from = fields.Integer('Year', required=True, default = genx.YEAR_NOW)
month_of_to = fields.Selection(genx.MONTH_SELECTION, 'To the Month of', required=True, default = 12)
month_quarter_to = fields.Selection(MONTH_QUARTER_SELECTION, 'Month Quarter', required=True, default = 2)
month_year_to = fields.Integer('Year', required=True, default = genx.YEAR_NOW)
def print_report(self, cr, uid, ids, context=None):
data = self.read(cr, uid, ids, context=context)[0]
datas = {
'ids': [],
'model': 'ir.ui.menu',
'form': data
}
return {
'type': 'ir.actions.report.xml',
'report_name': 'hr_payroll_ezra.report_payslip_employee',
'datas': datas,
}
<data>
<record id="view_payslip_per_employee" model="ir.ui.view">
<field name="name">payroll.payslip.employee.form</field>
<field name="model">payroll.payslip.employee</field>
<field name="arch" type="xml">
<form string="Payslip Employee">
<group>
<field name="employee_id" />
<field name="month_of_from"/>
<field name="month_quarter_from"/>
<field name="month_year_from"/>
<field name="month_of_to"/>
<field name="month_quarter_to"/>
<field name="month_year_to"/>
</group>
<footer>
<button name="print_report" string="Print" type="object" class="oe_highlight"/> or
<button string="Cancel" special="cancel" class="oe_link"/>
</footer>
</form>
</field>
</record>`enter code here`
<record id="action_payslip_per_employee" model="ir.actions.act_window">
<field name="name">Payslip Employee</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">payroll.payslip.employee</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<menuitem
name="Payslip Employee"
parent="hr.menu_hr_reporting_timesheet"
action="action_payslip_per_employee"
id="menu_payslip_per_employee"
icon="STOCK_PRINT"/>
</data>
payroll.paysslip.employee.form
工资单
或
`在这里输入代码`
工资单雇员
ir.actions.act\u窗口
工资单
形式
形式
新的
我的QWEB报告
<data>
<report
id="payroll_payslip_employee_ezra"
model="hr.payroll.detail"
string="Employee Payslip"
report_type="qweb-html"
name="hr_payroll_ezra.report_payslip_employee"
file="hr_payroll_ezra.report_payslip_employee"
attachment_use="True"
attachment="object.name+'.pdf'"/>
我的QWEB代码太长,无法发布,在将值传递给报表时是否遗漏了什么?请帮忙
再次感谢您的帮助您的报表视图还需要一个抽象模型。 我已经为我的POS销售详细信息报告尝试了示例代码。 像您这样的瞬态模型强>
import psycopg2
import pytz
from odoo import api, fields, models
from odoo.exceptions import UserError
from datetime import datetime
class PosDetails(models.TransientModel):
_inherit = 'pos.details.wizard'
ticket_type = fields.Selection([('s','Single'),('g','Group')],string="By Ticket Type")
user_id = fields.Many2one(
comodel_name='res.users', string='By Salesman',
help="Person who uses the cash register. It can be a reliever, a student or an interim employee."
)
@api.multi
def generate_report(self):
data = {'date_start': self.start_date, 'date_stop': self.end_date, 'ticket_type': self.ticket_type, 'user_id': self.user_id.id, 'config_ids': self.pos_config_ids.ids}
return self.env['report'].get_action(
[], 'point_of_sale.report_saledetails', data=data)
class ReportSaleDetails(models.AbstractModel):
_inherit = 'report.point_of_sale.report_saledetails'
@api.model
def get_sale_details(self, date_start=False, date_stop=False, ticket_type=False, user_id=False, configs=False):
""" Serialise the orders of the day information
params: date_start, date_stop string representing the datetime of order
"""
if not configs:
configs = self.env['pos.config'].search([])
user_tz = pytz.timezone(self.env.context.get('tz') or self.env.user.tz or 'UTC')
today = user_tz.localize(fields.Datetime.from_string(fields.Date.context_today(self)))
today = today.astimezone(pytz.timezone('UTC'))
if date_start:
date_start = fields.Datetime.from_string(date_start)
else:
# start by default today 00:00:00
date_start = today
if date_stop:
# set time to 23:59:59
date_stop = fields.Datetime.from_string(date_stop)
else:
# stop by default today 23:59:59
date_stop = today + timedelta(days=1, seconds=-1)
# avoid a date_stop smaller than date_start
date_stop = max(date_stop, date_start)
date_start = fields.Datetime.to_string(date_start)
date_stop = fields.Datetime.to_string(date_stop)
if user_id != False:
orders = self.env['pos.order'].search([
('date_order', '>=', date_start),
('date_order', '<=', date_stop),
('user_id','=', user_id),
('state', 'in', ['paid','invoiced','done']),
('config_id', 'in', configs.ids)])
elif user_id == False:
orders = self.env['pos.order'].search([
('date_order', '>=', date_start),
('date_order', '<=', date_stop),
('state', 'in', ['paid','invoiced','done']),
('config_id', 'in', configs.ids)])
user_currency = self.env.user.company_id.currency_id
需要添加的示例抽象模型强>
import psycopg2
import pytz
from odoo import api, fields, models
from odoo.exceptions import UserError
from datetime import datetime
class PosDetails(models.TransientModel):
_inherit = 'pos.details.wizard'
ticket_type = fields.Selection([('s','Single'),('g','Group')],string="By Ticket Type")
user_id = fields.Many2one(
comodel_name='res.users', string='By Salesman',
help="Person who uses the cash register. It can be a reliever, a student or an interim employee."
)
@api.multi
def generate_report(self):
data = {'date_start': self.start_date, 'date_stop': self.end_date, 'ticket_type': self.ticket_type, 'user_id': self.user_id.id, 'config_ids': self.pos_config_ids.ids}
return self.env['report'].get_action(
[], 'point_of_sale.report_saledetails', data=data)
class ReportSaleDetails(models.AbstractModel):
_inherit = 'report.point_of_sale.report_saledetails'
@api.model
def get_sale_details(self, date_start=False, date_stop=False, ticket_type=False, user_id=False, configs=False):
""" Serialise the orders of the day information
params: date_start, date_stop string representing the datetime of order
"""
if not configs:
configs = self.env['pos.config'].search([])
user_tz = pytz.timezone(self.env.context.get('tz') or self.env.user.tz or 'UTC')
today = user_tz.localize(fields.Datetime.from_string(fields.Date.context_today(self)))
today = today.astimezone(pytz.timezone('UTC'))
if date_start:
date_start = fields.Datetime.from_string(date_start)
else:
# start by default today 00:00:00
date_start = today
if date_stop:
# set time to 23:59:59
date_stop = fields.Datetime.from_string(date_stop)
else:
# stop by default today 23:59:59
date_stop = today + timedelta(days=1, seconds=-1)
# avoid a date_stop smaller than date_start
date_stop = max(date_stop, date_start)
date_start = fields.Datetime.to_string(date_start)
date_stop = fields.Datetime.to_string(date_stop)
if user_id != False:
orders = self.env['pos.order'].search([
('date_order', '>=', date_start),
('date_order', '<=', date_stop),
('user_id','=', user_id),
('state', 'in', ['paid','invoiced','done']),
('config_id', 'in', configs.ids)])
elif user_id == False:
orders = self.env['pos.order'].search([
('date_order', '>=', date_start),
('date_order', '<=', date_stop),
('state', 'in', ['paid','invoiced','done']),
('config_id', 'in', configs.ids)])
user_currency = self.env.user.company_id.currency_id
class ReportSaleDetails(models.AbstractModel):
_inherit='report.point\u of\u sale.report\u saledetails'
@api.model
def get_sale_详情(self,date_start=False,date_stop=False,ticket_type=False,user_id=False,configs=False):
“”“序列化当天的订单信息
params:date\u start,date\u stop字符串表示订单的日期时间
"""
如果未配置:
configs=self.env['pos.config'].search([])
user_tz=pytz.timezone(self.env.context.get('tz')或self.env.user.tz或'UTC'))
today=user_tz.localize(fields.Datetime.from_字符串(fields.Date.context_today(self)))
今天=今天.astimezone(pytz.timezone('UTC'))
如果开始日期为:
日期\u开始=字段.Datetime.from\u字符串(日期\u开始)
其他:
#默认情况下从今天00:00:00开始
开始日期=今天
如果停止日期:
#将时间设置为23:59:59
date\u stop=fields.Datetime.from\u字符串(date\u stop)
其他:
#默认今天停止23:59:59
日期=今天+时间差(天=1,秒=1)
#避免停止日期小于开始日期
停止日期=最大值(停止日期、开始日期)
date\u start=fields.Datetime.to\u字符串(date\u start)
date\u stop=fields.Datetime.to\u字符串(date\u stop)
如果用户_id!=错误:
订单=self.env['pos.order'].搜索([
('date_order','>=',date_start),
('date_order','=',date_start),
('date_order',您还可以发布与报表相关的.py文件以及报表视图文件(由引导类和xml标记组成)你知道这个标签“表单”的用途吗:数据?是的,我对Qweb有足够的了解如何在Qweb中传递一个输入参数?我刚刚按照每个部门休假中的代码进行了操作。它是否在Odoo-8中工作?你可以检查我们的Odoo插件中当前存在的报告的向导类型