Agregando el número de calle a las direcciones

1 de junio de 2024 por
Gustavo Orrillo
| Sin comentarios aún
 

Para la factura electrónica paraguaya (como lo indica la documentación de FacturaSend) y algunos servicios de delivery (por ejemplo Zippin) necesitamos distinguir en la dirección la calle, el número, el departamento. Odoo por defecto brinda dos campos: street y street2. Odoo también brinda en el core (módulo base_address_extended) otros campos: street_name, street_number y street_number2. Estos nuevos campos nos permiten almacenar la dirección en el nuevo formato. El tema es, como habilitamos dicha vista?

El módulo base_address_extended brinda una vista que habilita dicha funcionalidad, pero por mi torpeza y falta de conocimiento no pude hacerla funcionar. Entonces lo que hice fue agregar el código de dicha vista a una vista de partner ya existente. Y quedó así la vista:

    <record id="l10n_py_fe_view_res_partner_form" model="ir.ui.view">
<field name="name">l10n_py_fe.view.res.partner.form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="category_id" position="after">
<field name="nombre_fantasia" />
<field name="contribuyente" widget="boolean_toggle" />
</field>
<xpath expr="//div[contains(@class, 'o_address_format')]" position="replace" >
<div class="o_address_format">
<field name="country_enforce_cities" invisible="1"/>
<field name="parent_id" invisible="1"/>
<field name="type" invisible="1"/>
<field name="street" placeholder="Street..." class="o_address_street oe_read_only"
readonly="type == 'contact' and parent_id"/>
<div class="oe_edit_only o_row">
<field name="street_name" placeholder="Street" style="flex: 3 1 auto"
readonly="type == 'contact' and parent_id"/>
<span> </span>
<field name="street_number" placeholder="House #" style="flex: 1 1 auto"
readonly="type == 'contact' and parent_id"/>
<span> - </span>
<field name="street_number2" placeholder="Door #" style="flex: 1 1 auto"
readonly="type == 'contact' and parent_id"/>
</div>
<field name="street2" placeholder="Street 2..." class="o_address_street"
readonly="type == 'contact' and parent_id"/>
<field name="city_id"
placeholder="City"
class="o_address_city"
domain="[('country_id', '=', country_id)]"
invisible="not country_enforce_cities"
readonly="type == 'contact' and parent_id"
context="{'default_country_id': country_id, 'default_state_id': state_id, 'default_zipcode': zip}"/>
<field name="city"
placeholder="City"
class="o_address_city"
invisible="country_enforce_cities and (city_id or city in ('', False))"
readonly="type == 'contact' and parent_id"/>
<field name="state_id"
class="o_address_state"
placeholder="State"
readonly="type == 'contact' and parent_id"
options="{'no_open': True, 'no_quick_create': True}"
context="{'default_country_id': country_id}"/>
<field name="zip" placeholder="ZIP" class="o_address_zip"
readonly="type == 'contact' and parent_id"/>
<field name="country_id"
placeholder="Country"
class="o_address_country"
readonly="type == 'contact' and parent_id"
options="{'no_open': True, 'no_create': True}"/>
</div>
</xpath>
</field>
</record>

Como pueden ver, utilizando xpath reemplazamos los contenidos de la vieja dirección con la nueva

<xpath expr="//div[contains(@class, 'o_address_format')]" position="replace" >

Lo que nos permite mostrar la dirección de la siguiente manera:


Lo cual es realmente util de hacer y con poco esfuerzo. La parte compleja es hacerlo en el formulario de e-commerce... pero bueno, es para otro momento.

Gustavo Orrillo 1 de junio de 2024
Compartir
Archivar
Identificarse dejar un comentario