29. Desarrollando con Odoo (21). Recapitulaciones del capítulo 10 (Backend views).

Window Actions

A destacar dos cosas

Tendrán el model=ir.actions.act_windows

Para indicar el modelo sobre el que actuarán serápor una de estas dos referencias: res_model o binding_model_id

<odoo>
  <record id="action_library_checkout" model="ir.actions.act_window">
        <field name="name">Checkouts</field>
        <field name="res_model">library.checkout</field>
        <field name="view_mode">tree,form</field>
  </record>

  <record id="action_checkout_message" model="ir.actions.act_window">
    <field name="name">Send Messages</field>
    <field name="res_model">library.checkout.massmessage</field>
    <field name="view_mode">form</field>
    <field name="binding_model_id" ref="model_library_checkout" />
    <field name="binding_view_types">form,list</field>
    <field name="target">new</field>
  </record>
</odoo>

Bussiness document Views

Tendrán un <header> y un <sheet>. El primero es para añadir botones y un widget de estado, y el segundo tene los campos del formulario

Para el <header>

widget statusbar ... statusbar_visible="draft, open, done"

button ...class "oe_highlight" ... states="open,cancel"


Para el <sheet>

<div class="oe_button_box"  Para una botonera a la parte superior derecha

<div class="oe_title" Para un título en la parte superior central

<h3 mas las siguientes clases:

    "oe_read_only" solo se muestra si estamos en modo lectura

    "oe_edit_only" solo se muestra si estamos modificando

    "oe_inline" para que el texto pueda fluir

<group /> Para dividir en varias columnas. Tiene el atributo string para mostrar un título de grupo. También tiene el atributo col para indicar el número de columnas (por defecto 2). colspan indica el núnero de columnas que va a utilizar

<notebook> al pie para campos adicionales que se pueden organizar en "tabs"

Widgets

----strings -----

email : Genera un mailto HTML link

phone: Genera un actionable phone HTML linl

url: Formatea el texto como clickavle URL

html: Muestra y puede editar testo HTML (WYSIWYG)

handle: para campos secuencia

---numericos---

float_time: Formatea un campo float como horas y minutos

monetary: Muestra un float como dinero

progressbar: Muesra el porcentaje de progreso

percentage y percentpie: Se usan en campos float

---relaciones y selecciones ----

many2many_tags: Muestra como etiquetas que parecen botones

many2many_checkboxes: Muestra los valores seleccionables como lista de checboxes

selection: Para campos many to one

radio: 

priority: Muestra la selección como estrellas clickables????

state_selection: Muestra un botón tipo semáforo. Suele utilizarse en Kanban

---binarios ----

image: muestra como imagen

pdf_viewer: muestra un pdf


Campos relacionados

quick create: Para crear registros al vuelo

    options="{'no_open':True, 'no_create':True}"

context: Establece los valores por defecto de los registros relaciones que se crean desde el campo

domain: Limita o filtra los registros seleccionables.


Botones

Veamos los atributos

string: Label

type: object(metodo del modelo), action (window action)

name: la acción

args: solo cuando el type es object

context: asigna valores al context

confirm: Mensaje de confirnación antes de ejecutar la acción

special="cancel" para añadir un botón de cancelar en wizards

icon="fa-question"

SMART BUTTONS: Se situan en la parte superior derecha. La botonera es el primer elemento de <sheet>

<div name="button_box" class="oe_button_box">
<!-- Smart buttons will go here... -->
</div>

Veamos ka definición de un smart button

<div name="button_box" class="oe_button_box">
  <button type="action"                               <!-- referencia un window action-->
      name="%(action_library_checkout)d"   <!-- id de la acción-->
      class="oe_stat_button"                           <!-- clase del smart button que debe tener un icon-->
      icon="fa-book"  
      domain="[('member_id', '=', member_id)]"
      context="{'default_member_id': member_id}" <!-- el nuevo registro es registrado en el contexto-->
  >
    <field name="count_checkouts"
        string="Checkouts"
        widget="statinfo" />
  </button>
</div>

Atributos dinámicos 

groups: Lista de grupos admitidos separados por comas

states: relación de estados que hacen un e elemento visible

attrs: ver ejemplo

<field name="closed_date" attrs="{'invisible':[('state', 'not in',  ['done'])]}"/>

Vistas list <tree>

<header> para añadir botones
decoration-muted (gris) -bf(negrita) -primary(azul oscuro) -success(azul claro) -warning -danger

<record id="view_tree_checkout" model="ir.ui.view">
    <field name="name">Checkout Tree</field>
    <field name="model">library.checkout</field>
    <field name="arch" type="xml">
      <tree>
        decoration-muted="state in ['done', 'cancel']"
        decoration-bf="state=='open'"
        <header>
          <button type="action" name="%(action_checkout_message)d" string="Send Messages" />
        <header>
        <field name="request_date" />
        <field name="member_id" />
      </tree>
    </field>
  </record>

default_order. (sql order by)
create, delete,edit (if set to false)
editable (sobre la vista, top-bottom)

Vistas Search 

Filters y Group By
Menu -Edit- ControlPanelView

<search>

  <field> campos adicionales  en el search box
      name, string, operator (= o ilike por defecto), filter_domain, groups

  <filter> elementos en Filters y Group By
      name, string, domain, context, groups

  <searchpanel> navigation tree en la parte izquierda de la pantalla
       view_type "tree,kanba"
       string, icon, color (hex code), groups
       select="multi" para varios valores combinados
       enable_counters="1" para añadir un contador de registros al lado de cada valor
       limit: Limita el numero de registros 

Vista Activity

Muestra un resumen de las actividades planificadas. Necesita tener instalado el módulo Mail. Para que se muestre se tiene que incluir en el view_mode del window action

 <field name="view_mode">tree,form,activity</field>

Si no hay definición de la vista, se genera dinámicamente.

un ejemplo de código es:

<record id="view_activity_checkout" model="ir.ui.view">
  <field name="model">library.checkout</field>
  <field name="arch" type="xml">
     <activity string="Checkouts">
       <templates>
         <div t-name="activity-box">
           <div>
             <field name="ntame" />
           </div>
         </div>
       </templates>
     </activity>
  </field>
</record>             

Vista Calendar

Muestra los registros en un calendario  que se pueden ver en diferentes períodos (año, mes, semana o dia). Al igual que la visa activity, para que se muestre se tiene que incluir en el view_mode del window action
<field name="view_mode">tree,form,calendar</field>

Esta es la vsita de los checkouts en base a las fechs de la solicitud del préstamo

<record id="view_calendar_checkout" model="ir.ui.view">
  <field name="model">library.checkout</field>
  <field name="arch" type="xml">
    <calendar date_start="request_date"
              color="user_id">
      <field name="member_id" />
      <field name="stage_id" />
    </calendar>
  </field>
</record>

Los siguientes atributos se pueden usar:
date_start (comienzo, requerido), date_stop?(date_enbd?,fin, opcional), date_delay(duración, opcional), all_day(duración todo el dia, opcional), color, mode(day,week,month,year), scales,form_view_id, event_open_popup, quick_add

Vista Pivot

Muestra una tabla de referencias cruzadas. Al igual que antes tiene que referenciarse en el window action

<field name="view_mode">tree,form,pivot</field>

Un ejemplo es:

<record id="view_pivot_checkout" model="ir.ui.view">
  <field name="model">library.checkout</field>
  <field name="arch" type="xml">
    <pivot>
      <field name="stage_id" type="col" />
      <field name="member_id" />
      <field name="request_date" interval="week" />
      <field name="num_books" type="measure" />
    </pivot>
  </field>
</record>

name identifica el campo a utilizar
type puede row, measure o col (para pivot)
interval para campos fecha (día, semana,..)

Vista Graph

Muestra un gráfico (barrar, lineas o pastel). Al igual que antes tiene que referenciarse en el window action

<field name="view_mode">tree,form,graph</field>

Un ejemplo es:
<record id="view_graph_checkout" model="ir.ui.view">
  <field name="model">library.checkout</field>
  <field name="arch" type="xml">
    <graph type="bar">
      <field name="stage_id" />
      <field name="num_books" type="measure" />
    </graph>
  </field>
</record>

Los tipos de campos a usar pueden ser row (por defecto) y measure (cantidades)

Comentarios

Entradas populares de este blog

4. Desarrollando con Odoo (2). Introducción a modulos, vistas, modelos .. Añadir dependencias externas de Python a Odoo

8. Desarrollando con Odoo (6). Herencia de clase en modelos. Herencia de vistas. Operaciones numeradas en Odoo ??

26. Desarrollando con Odoo (21). IMPORTANTE: Entorno de desarrollo. Recapitulaciones del capítulo 8 (Development, Test and Debug).