Как загрузить простое древовидное представление в pdf, так как у меня нет поля one2many для использования тега foreach для циклического просмотра - PullRequest
1 голос
/ 09 ноября 2019

Привет! Я создал простое древовидное представление с использованием SQL-запроса, но теперь я также хотел загрузить его, но не могу, потому что у меня нет ни одного поля one2many, поэтому я не знаю, как зациклить еще это

Сейчас он дает мне отчет по одной строке на каждой странице, но я хотел, чтобы все строки были вместе, и я хочу, чтобы они были в формате pdf, а не в формате xls. Я попытался сохранить полученные данные в массиве, но у меня это не работает, и я не знаю, можем ли мы это сделать или нет

class PostgresReport(models.Model):
     '''
This module is responsible for all of the requisition related operations.
'''
    _name = 'purchase.comp'
    _auto = False
    #all fields
    name = fields.Char(string = 'Purchase Order')
    origin = fields.Char(string ='Purchase Agreement')
    date_order = fields.Datetime('Order Date', index=True, copy=False)
    state = fields.Selection([
        ('draft', 'RFQ'),
        ('sent', 'RFQ Sent'),
        ('to approve', 'To Approve'),
        ('purchase', 'Purchase Order'),
        ('done', 'Locked'),
        ('cancel', 'Cancelled')
    ], string='Status', readonly=True, index=True, copy=False, default='draft', track_visibility='onchange')
    product_id = fields.Char(string='Product')
    product_qty = fields.Float(string='Quantity')
    price_unit = fields.Float(string='Unit Price')
    price_subtotal = fields.Monetary(string='Subtotal', store=True)
    vendor = fields.Char(string='Vendor')
    currency_id = fields.Char('Currency')

'''
    This function is responsible for fetching data from 3 different tables and displaying it
'''
    @api.model_cr
    def init(self, _logger=None):
        """ Event Question main report """
        query = []

        tools.drop_view_if_exists(self._cr, 'purchase_comp')
        view = self._cr.execute(""" CREATE VIEW purchase_comp AS (
               SELECT 
                    b.id as id,
                    a.name as "name",
                    a.origin as "origin",
                    a.date_order as "date_order",
                    a.state as "state",
                    b.name as "product_id",
                    b.product_qty as "product_qty",
                    b.price_unit as "price_unit",
                    b.price_subtotal as "price_subtotal",
                    c.display_name as "vendor",
                    d.name as "currency_id"


                FROM public.purchase_order as a

                inner join 
                public.purchase_order_line as b
                on a.id = b.order_id

                inner join
                public.res_partner as c
                on a.partner_id = c.id

                inner join
                public.res_currency  as d
                on d.id = b.currency_id

                WHERE a.origin != ''
                order by a.name
        )""")

Я не публикую веб-код как естьпросто и очевидно. пожалуйста, просто сообщите мне из кода .py, какое поле я могу использовать для циклического выполнения в XML, и если я не могу использовать что-либо, что мне следует делать в этом случае. Заранее спасибо

1 Ответ

0 голосов
/ 12 ноября 2019

Создайте кнопку у любого мастера и верните действие отчета с записями, которые вы хотите распечатать, прикрепленными в виде данных, поэтому вы можете использовать foreach в отчете:

@api.multi
def print_lines(self):
    self.ensure_one()
    records = self.env['purchase.comp'].search([])   # take all records to print

    active_ids = []  # we have the active records in 'records' variable just to print one report,
                     # so we do not really need any active id, add some id if you get any error
    datas = {
         'ids': active_ids,
         'model': 'purchase.comp',
         'form': self.read()[0],
         'records_to_print': records
    }

    report_name = 'module_name.report_name'
    report_obj = self.env['ir.actions.report'].search([
        ('report_name', '=', report_name),
        ('report_type', '=', report_type)
    ], limit=1).report_action(
        [], data=datas)

    return report_obj

Признаюсь, яЯ не пробовал свое решение, но я взял некоторые идеи из модуля hr. Это может сработать, попробуйте и скажите, сработало ли

...