Ir al contenido
Odoo Menú
  • Identificarse
  • Pruébalo gratis
  • Aplicaciones
    Finanzas
    • Contabilidad
    • Facturación
    • Gastos
    • Hoja de cálculo (BI)
    • Documentos
    • Firma electrónica
    Ventas
    • CRM
    • Ventas
    • TPV para tiendas
    • TPV para restaurantes
    • Suscripciones
    • Alquiler
    Sitios web
    • Creador de sitios web
    • Comercio electrónico
    • Blog
    • Foro
    • Chat en directo
    • e-learning
    Cadena de suministro
    • Inventario
    • Fabricación
    • PLM
    • Compra
    • Mantenimiento
    • Calidad
    Recursos Humanos
    • Empleados
    • Reclutamiento
    • Ausencias
    • Evaluación
    • Referencias
    • Flota
    Marketing
    • Marketing social
    • Marketing por correo electrónico
    • Marketing por SMS
    • Eventos
    • Automatización de marketing
    • Encuestas
    Servicios
    • Proyecto
    • Partes de horas
    • Servicio de campo
    • Servicio de asistencia
    • Planificación
    • Citas
    Productividad
    • Conversaciones
    • Aprobaciones
    • IoT
    • VoIP
    • Conocimientos
    • WhatsApp
    Aplicaciones de terceros Studio de Odoo Plataforma de Odoo Cloud
  • Industrias
    Comercio al por menor
    • Librería
    • Tienda de ropa
    • Tienda de muebles
    • Tienda de ultramarinos
    • Ferretería
    • Juguetería
    Alimentación y hostelería
    • Bar y pub
    • Restaurante
    • Comida rápida
    • Casa de huéspedes
    • Distribuidor de bebidas
    • Hotel
    Inmueble
    • Agencia inmobiliaria
    • Estudio de arquitectura
    • Construcción
    • Gestión inmobiliaria
    • Jardinería
    • Asociación de propietarios
    Consultoría
    • Empresa contable
    • Partner de Odoo
    • Agencia de marketing
    • Bufete de abogados
    • Adquisición de talentos
    • Auditorías y certificaciones
    Fabricación
    • Textil
    • Metal
    • Muebles
    • Alimentos
    • Cervecería
    • Regalos de empresas
    Salud y bienestar
    • Club deportivo
    • Óptica
    • Gimnasio
    • Terapeutas
    • Farmacia
    • Peluquería
    Oficios
    • Handyman
    • Hardware y soporte técnico
    • Sistemas de energía solar
    • Zapatero
    • Servicios de limpieza
    • Servicios de calefacción, ventilación y aire acondicionado
    Otros
    • Organización sin ánimo de lucro
    • Agencia de protección del medio ambiente
    • Alquiler de paneles publicitarios
    • Estudio fotográfico
    • Alquiler de bicicletas
    • Distribuidor de software
    Explorar todos los sectores
  • Comunidad
    Aprender
    • Tutoriales
    • Documentación
    • Certificaciones
    • Formación
    • Blog
    • Podcast
    Potenciar la educación
    • Programa de formación
    • Scale Up! El juego empresarial
    • Visita Odoo
    Obtener el software
    • Descargar
    • Comparar ediciones
    • Versiones
    Colaborar
    • GitHub
    • Foro
    • Eventos
    • Traducciones
    • Convertirse en partner
    • Servicios para partners
    • Registrar tu empresa contable
    Obtener servicios
    • Encontrar un partner
    • Encontrar un asesor fiscal
    • Contacta con un experto
    • Servicios de implementación
    • Referencias de clientes
    • Ayuda
    • Actualizaciones
    GitHub YouTube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Solicitar una demostración
  • Precios
  • Ayuda

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Contabilidad
  • Inventario
  • PoS
  • Proyecto
  • MRP
All apps
Debe estar registrado para interactuar con la comunidad.
Todas las publicaciones Personas Insignias
Etiquetas (Ver todo)
odoo accounting v14 pos v15
Acerca de este foro
Debe estar registrado para interactuar con la comunidad.
Todas las publicaciones Personas Insignias
Etiquetas (Ver todo)
odoo accounting v14 pos v15
Acerca de este foro
Ayuda

Odoo10 Custom Form Doesn't Save

Suscribirse

Reciba una notificación cuando haya actividad en esta publicación

Se marcó esta pregunta
formcustomizationodoov10
4339 Vistas
Avatar
Fran Plancke

I have a small custom module to add some fields to the sales order and to essentially allow the user to create a "revision" of a quotation. The revision duplicates all of the information from the quotation and then changes the name. So if I created a revision of SO-12345, the revision would be named SO-12345-r1 and so on.

Currently I have the module copying the information to a new popup form in edit mode and completing the name appropriately. However, when I click 'save' on this form, the record does not get saved. When creating a new quotation, the save button works just fine, but not in my custom form.

I don't want to create the revision automatically when the user clicks the 'Create New Revision' button. Instead, I want the record to be created only after the user clicks 'save'

Here's my code:

sale.py

# -*- encoding: utf-8 -*-

from odoo import models, fields, api
import logging
_logger = logging.getLogger(__name__)
try:
    import re
except ImportError as err:
    _logger.debug(err)
class SaleOrder(models.Model):
    _inherit = 'sale.order'
    # Add custom fields
    estimated_lead_time = fields.Char('Estimated Lead Time')
    projected_completion_date = fields.Date('Projected Completion Date')
    rd_project = fields.Boolean('RD Project')
    ec_requested = fields.Date(string='EC Requested')
    engineering_verdict = fields.Selection(
        string='Engineering Verdict', selection=[
            ('confirmed', 'Confirmed'),
            ('denied', 'Denied'),
        ])
    verdict_given_on = fields.Char('Verdict Given on')
    verdict_given_user_id = fields.Many2one(
        'res.users', 'Verdict Given by')
    additional_time = fields.Float('Additional Time')
    shipping_greenlight = fields.Date(string='Shipping Greenlight')
    payment_greenlight = fields.Date(string='Payment Greenlight')
    ship_via = fields.Char('Ship Via')
    shipping_expense = fields.Selection(
        string='Shipping Expense',
        selection=[
            ('sciencetech', 'Sciencetech'),
            ('customer_account', 'Customer Account'),
            ('hold_for_pickup', 'Hold for Pickup'),
            ('other', 'Other')])
    customer_account = fields.Char('Customer Account')
    primary_approval = fields.Date('Primary Approval')
    proforma_invoice_sent = fields.Date('Pro-Forma Invoice Sent')
    final_approval = fields.Date('Final Approval')
    order_confirmation_sent = fields.Date('Order Confirmation Sent')
    def _strip_revision(self, ref):
        # Search for a sequence of 5 numbers
        result = re.search(r'\d{5}', ref)
        if result is None:
            # There wasn't one, so check if there is one of 4 digits
            result = re.search(r'\d{4}', ref)
        if result is not None:
            return result.group()
        else:
            return ref
    @api.multi
    def sale_order_revision(self):
        # Get the values of all of the fields of the SO we want to duplicate
        con = self.read(['payment_acquirer_id', 'company_id', 'pricelist_id', 'incoterm', 'exception_ids', 'amount_total', 'rule_group', 'name', 'invoice_ids', 'picking_policy', 'campaign_id', 'currency_id', 'partner_shipping_id', 'partner_id', 'amount_untaxed', 'partner_invoice_id', 'product_id', 'origin', 'payment_tx_id', 'carrier_id', 'ec_requested', 'invoice_shipping_on_delivery', 'tag_ids', 'amount_tax', 'opportunity_id', 'payment_term_id', 'fiscal_position_id', 'shipping_expense', 'invoice_count', 'medium_id', 'ship_via', 'order_line', 'customer_account', 'ignore_exception', 'validity_date', 'delivery_count', 'main_exception_id', 'source_id', 'website_order_line'])[0]
        # Get the reference number without the 'SO' or '-r1' etc.
        current_name = self._strip_revision(con['name'])
        # Find the number of revisions (including the original)
        # This will be the number we need to append to the SO we are duplicating
        num_variants = self.search_count([('name', 'like', current_name)])
        # Form the new name
        new_name = 'SO-' + current_name + '-r' + str(num_variants)
        # Update the fields with the new name
        con['name'] = new_name
        context = {'default_' + key: value for (key, value) in con.items()}
        for (key, value) in context.items():
            if type(value) is tuple:
                context[key] = value[0]
        return{
            'name':("New Revision"),
            'view_mode': 'form',
            'view_type': 'form',
            'view_id': False,
            'res_model': 'sale.order',
            'res_id': False,
            'type': 'ir.actions.act_window',
            'target': 'new',
            'domain': '[]',
            'flags': {'initial_mode': 'edit',} ,
            'context': context,
        }
class SaleOrderLine(models.Model):
    _inherit = 'sale.order.line'
    custom_name = fields.Char('Custom Display Name')

sale_order_view.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <record id="view_sale_order_form_inherit" model="ir.ui.view">
            <field name="name">sale.order.inherit</field>
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_order_form"/>
            <field name="arch" type="xml">
                <xpath expr="/form/*" position="after">
                    <header>
                        <button name="sale_order_revision" type="object" string="Create New Version" states="sent" class="oe_highlight"/>
                    </header>
                </xpath>
                <xpath expr="//group/field[@name='payment_term_id']" position="after">
                    <field name="estimated_lead_time"/>
                    <field name="projected_completion_date" widget="date"/>
                </xpath>
                <xpath expr="//page[last()]" position="after">
                    <page name="sales_coordination" string="Sales Coordination">
                      <group>
                        <group string="Research &amp; Development">
                               <field name="rd_project" type="checkbox"/>
                               <field name="ec_requested" widget="date"/>
                               <field name="engineering_verdict" />
                               <field name="verdict_given_on" />
                               <field name="verdict_given_user_id" />
                               <field name="additional_time" widget="float"/>
                        </group>
                        <group string="Shipping">
                               <field name="shipping_greenlight" widget="date"/>
                               <field name="payment_greenlight" widget="date"/>
                               <field name="ship_via" />
                               <field name="shipping_expense" />
                               <field name="customer_account" />
                        </group>
                      </group>
                      <group>  
                        <group string="Status">
                               <field name="primary_approval" widget="date"/>
                               <field name="proforma_invoice_sent" widget="date"/>
                               <field name="final_approval" widget="date"/>
                               <field name="order_confirmation_sent" widget="date"/>
                        </group>
                      </group>
                    </page>
                </xpath>
<xpath expr="//field[@name='order_line']/form/group/group/field[@name='product_id']" position="after">
                    <field name="custom_name"/>
                </xpath>
            </field>
        </record>
    </data>
</odoo>

 Thanks for any help/advice!

0
Avatar
Descartar
Yenthe Van Ginneken (Mainframe Monkey)

Maybe a bit off topic but did you ever check the OCA module? It does nearly identically what you want so it seems. See https://apps.odoo.com/apps/modules/11.0/sale_order_revision/

Fran Plancke
Autor

@Yenthe Van Ginneken thank you, that is a great match!

I'm still going to try to figure things out as a learning, but this will get the job done for our production environment in the meantime. Thanks so much.

¿Le interesa esta conversación? ¡Participe en ella!

Cree una cuenta para poder utilizar funciones exclusivas e interactuar con la comunidad.

Inscribirse
Publicaciones relacionadas Respuestas Vistas Actividad
Custom Forms In Website Builder
form customization website_crm
Avatar
Avatar
Avatar
2
feb 16
11468
Select input not working in contact form Resuelto
form contacts selection customization
Avatar
Avatar
1
sept 21
4544
How to hide a tab
form employee tabs odoov10
Avatar
Avatar
Avatar
5
sept 18
8041
Odoo chatter open by default with "Log internal note" Resuelto
form chatter odoo10 odoov10
Avatar
1
jul 18
6248
How to solve Parse Error: Error While Validating the Constraint; Field does not exist
form customer customization odoo10
Avatar
Avatar
Avatar
Avatar
3
mar 18
24863
Comunidad
  • Tutoriales
  • Documentación
  • Foro
Código abierto
  • Descargar
  • GitHub
  • Runbot
  • Traducciones
Servicios
  • Alojamiento Odoo.sh
  • Ayuda
  • Actualizar
  • Desarrollos personalizados
  • Educación
  • Encontrar un asesor fiscal
  • Encontrar un partner
  • Convertirse en partner
Sobre nosotros
  • Nuestra empresa
  • Activos de marca
  • Contacta con nosotros
  • Puestos de trabajo
  • Eventos
  • Podcast
  • Blog
  • Clientes
  • Información legal • Privacidad
  • Seguridad
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo es un conjunto de aplicaciones de código abierto que cubren todas las necesidades de tu empresa: CRM, comercio electrónico, contabilidad, inventario, punto de venta, gestión de proyectos, etc.

La propuesta única de valor de Odoo es ser muy fácil de usar y totalmente integrado.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now