General

¡Bienvenido a los foros Aeodoo!

Somos la comunidad de Odoo internacional hispanohablante.
Estos foros son para compartir y debatir dudas técnicas, funcionales y mejores prácticas para Odoo. Recuerda que no están permitidos los insultos, descalificaciones o spam, cualquier conducta reprobable supondrá el baneo del usuario.

0

Crear menu para report heredando de otro formato

Avatar
Cramosh

Buenas.

Estoy intentando hacer una menu conceptual para añadir un nuevo formato a factura que hereda del formato de factura de Odoo.

Adjunto el código

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <data>
        <report id="report_invoice_card"
                string="Invoice Card"
                model="account.invoice"
                report_type="qweb-pdf"
                name="custom_reports.report_invoice_card"
                print_report_name="'A- %s' % (object.name)"

        />

        <template id="report_invoice_card_document" inherit_id="account.report_invoice_document">
            <xpath expr="//h2" position="replace">
                <h2 class="mt16">
                   prueba
                </h2>
            </xpath>
        </template>


        <template id="report_invoice_card" inherit_id="account.report_invoice">
            <xpath expr='//t[@t-call="account.report_invoice_document"]' position="replace">
                <t t-call="custom_reports.report_invoice_card_document"
                   t-lang="o.partner_id.lang"/>
            </xpath>
        </template>

    </data>
</odoo>

Avatar
Descartar
1 Respuesta
1
Mejor respuesta

Hay un pequeño lío de templates y herencias ;P

En Odoo tenemos un action, que llama a un report, que a su vez esta ligado con una vista (report_invoice) la cual finalmente carga otra vista mediante t-call con el contenido contextualizado por el idioma (document_report_invoice).

En ese código por un lado estas heredando el "document_", con lo que modificarás la vista en todos sus casos... si haces esto, modificas la vista de contenidos y punto. Pero tu report_invoice_card_document no es una vista base, es una heredada, por lo que no tiene sentido que intentes llamarla desde un action o desde el t-call de report_invoice... si heredas la vista, la heredas, para todo, no debes hacer una llamada al id de tu vista heredada, debes mantener la de base.

Y por otra parte estas generando un report nuevo... intentando ligarlo con tu vista.... the same problem, un report te va a exigir una vista base, no una herencia...

En resumen, ¿Quieres un informe nuevo que sea compatible con el existente? (osea, que puedas imprimir uno u otro indistintamente...?), hay una opción mala que ni voy a explicar...  otra que es la buena:

Hereda la vista base, tal y como estas haciendo en account.report_invoice_document, pero añadele un condicional al código según quieras o no que sea vea la modificación (fijate en el módulo de albaranes valorados de la oca, en donde dependiendo de una variable 'valued' del albarán se muestra o no el contenido...). ¿Y que variable puedes usar?, pues ya depende del propósito del desarrollo, pero podría ser un campo de algún objeto, o, si solamente quieres tener dos botones diferenciados, tendrías que crear el botón, el action, y en el action pasarle por contexto el valor que usarías en el t-if del informe.

Si el informe fuese completamente independiente, entonces crearías el menú, el action, y enlazarías tu action con el report creado por ti, pero en tu caso tu report es un inherit, por lo que no debes modificar ni el report, ni el action, ni el t-call del informe base (account.report_invoice).





2 Comentarios
Avatar
Descartar
Avatar
Cramosh
-

El problema es que tengo que crear una factura que aparezca sin cabecera y que se llame desde otra opcion de menu.

Darío Lodeiros

14:50 (hace 2 minutos)

para Cramosh

La vista que mete la cabecera es web.external_layout_standard, y se le llama desde web.external_layout, en donde encontrarás:

<t t-if="company.external_report_layout_id" t-call="{{company.external_report_layout_id.key}}"><t t-raw="0"/></t>

<t t-else="else" t-call="web.external_layout_standard"><t t-raw="0"/></t>

Osea, si en la configuración tienes el layout definido (configuración general en modo tecnico -> edit Layout), cargará la vista definida ahí, si no, la standar (que probablemente sea la que tienes)

Tu podrías crear una nueva vista, llamada "external_layout_X", y meterla en la configuración para la compañía... esta nueva vista, sería una copia de external_layout_standard, pero con un t-if justo antes del header...

un t-if en el que miras si se ha pasado por el contexto una variable (hidden_header por ejemplo... la que tu quieras) para imprimir o no la cabecera. Después creas el botón, el action, y en el action llamas al informe normal pasándole por contexto la variable hidden_header... o como le hayas llamado.

Osea:

1.- menú nuevo,

2.- action nuevo asociado al menú y con una variable de contexto para ocultar el header,

3.- nueva vista external_layout_X copia de external_layout_standar con el añadido de meter el header en un t-if que comprueba si debe o no ocultarlo por la variable del contexto.

Su respuesta

Intente dar una respuesta sustancial. Si desea hacer un comentario sobre la pregunta o la respuesta, utilice la herramienta de comentarios. Recuerde que siempre puede revisar sus respuestas , no es necesario responder dos veces a la misma pregunta. No olvide votar , ayuda a seleccionar las mejores preguntas y respuestas