Skip to Content
Odoo Menu
  • Log ind
  • Prøv gratis
  • Apps
    Økonomi
    • Bogføring
    • Fakturering
    • Udgifter
    • Regneark (BI)
    • Dokumenter
    • e-Signatur
    Salg
    • CRM
    • Salg
    • POS Butik
    • POS Restaurant
    • Abonnementer
    • Udlejning
    Hjemmeside
    • Hjemmesidebygger
    • e-Handel
    • Blog
    • Forum
    • LiveChat
    • e-Læring
    Forsyningskæde
    • Lagerbeholdning
    • Produktion
    • PLM
    • Indkøb
    • Vedligeholdelse
    • Kvalitet
    HR
    • Medarbejdere
    • Rekruttering
    • Fravær
    • Medarbejdersamtaler
    • Anbefalinger
    • Flåde
    Marketing
    • Markedsføring på sociale medier
    • E-mailmarketing
    • SMS-marketing
    • Arrangementer
    • Automatiseret marketing
    • Spørgeundersøgelser
    Tjenester
    • Projekt
    • Timesedler
    • Udkørende Service
    • Kundeservice
    • Planlægning
    • Aftaler
    Produktivitet
    • Dialog
    • Godkendelser
    • IoT
    • VoIP
    • Vidensdeling
    • WhatsApp
    Tredjepartsapps Odoo Studio Odoo Cloud-platform
  • Brancher
    Detailhandel
    • Boghandel
    • Tøjforretning
    • Møbelforretning
    • Dagligvarebutik
    • Byggemarked
    • Legetøjsforretning
    Mad og værtsskab
    • Bar og pub
    • Restaurant
    • Fastfood
    • Gæstehus
    • Drikkevareforhandler
    • Hotel
    Ejendom
    • Ejendomsmægler
    • Arkitektfirma
    • Byggeri
    • Ejendomsadministration
    • Havearbejde
    • Boligejerforening
    Rådgivning
    • Regnskabsfirma
    • Odoo-partner
    • Marketingbureau
    • Advokatfirma
    • Rekruttering
    • Audit & certificering
    Produktion
    • Tekstil
    • Metal
    • Møbler
    • Fødevareproduktion
    • Bryggeri
    • Firmagave
    Heldbred & Fitness
    • Sportsklub
    • Optiker
    • Fitnesscenter
    • Kosmetolog
    • Apotek
    • Frisør
    Håndværk
    • Handyman
    • IT-hardware og support
    • Solenergisystemer
    • Skomager
    • Rengøringsservicer
    • VVS- og ventilationsservice
    Andet
    • Nonprofitorganisation
    • Miljøagentur
    • Udlejning af billboards
    • Fotografi
    • Cykeludlejning
    • Softwareforhandler
    Gennemse alle brancher
  • Community
    Få mere at vide
    • Tutorials
    • Dokumentation
    • Certificeringer
    • Oplæring
    • Blog
    • Podcast
    Bliv klogere
    • Udannelselsesprogram
    • Scale Up!-virksomhedsspillet
    • Besøg Odoo
    Få softwaren
    • Download
    • Sammenlign versioner
    • Udgaver
    Samarbejde
    • Github
    • Forum
    • Arrangementer
    • Oversættelser
    • Bliv partner
    • Tjenester til partnere
    • Registrér dit regnskabsfirma
    Modtag tjenester
    • Find en partner
    • Find en bogholder
    • Kontakt en rådgiver
    • Implementeringstjenester
    • Kundereferencer
    • Support
    • Opgraderinger
    Github Youtube Twitter LinkedIn Instagram Facebook Spotify
    +1 (650) 691-3277
    Få en demo
  • Prissætning
  • Hjælp

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

  • CRM
  • e-Commerce
  • Bogføring
  • Lager
  • PoS
  • Projekt
  • MRP
All apps
Du skal være registreret for at interagere med fællesskabet.
All Posts People Emblemer
Tags (View all)
odoo accounting v14 pos v15
Om dette forum
Du skal være registreret for at interagere med fællesskabet.
All Posts People Emblemer
Tags (View all)
odoo accounting v14 pos v15
Om dette forum
Hjælp

Replace copy function by inheritance

Tilmeld

Få besked, når der er aktivitet på dette indlæg

Dette spørgsmål er blevet anmeldt
v6.1inheritancecopysale.order
2 Besvarelser
19884 Visninger
Avatar
Thomas Grellety

In the sale module there is the copy function :

    def copy(self, cr, uid, id, default=None, context=None):
        if not default:
            default = {}
        default.update({
            'state': 'draft',
            'shipped': False,
            'invoice_ids': [],
            'picking_ids': [],
            'date_confirm': False,
            'name': self.pool.get('ir.sequence').get(cr, uid, 'sale.order'),
        })
    return super(sale_order, self).copy(cr, uid, id, default, context=context)

I've create a new module that inherits the sale.order object and I redefine the copy function by :

    def copy(self, cr, uid, id, default=None, context=None):
        if not context:
            context = {}
        if not default:
            default = {}
        default.update({
            'state': 'draft',
            'shipped': False,
            'invoice_ids': [],
            'picking_ids': [],
            'date_confirm': False,
            'name': self.pool.get('ir.sequence').get(cr, uid, 'sale.order.XXX'),
        })
        return super(sale_order, self).copy(cr, uid, id, default, context=context)

I want to use another sequence for the name but when the copy function is call, the server execute in first the new function and after it executes the old function that replace my new name by the old.

Thanks for your help.

1
Avatar
Kassér
Avatar
Damián Soriano
Bedste svar

The problem is that when you call super() it override the previously setted default variables. Take into account that when you call super().copy() the default values of the dictionary are override by the original copy() function.

Instead of overriding copy() the way you do I would execute the copy function of the super class and then override the fields you want with the write() function. I would do something like this:

def copy(self, cr, uid, id, default=None, context=None):
    ret = super(sale_order, self).copy(cr, uid, id, default, context=context)
    self.write(cr, uid, id, {'name': self.pool.get('ir.sequence').get(cr, uid, 'sale.order.XXX')}, context=context)
    return ret
2
Avatar
Kassér
Thomas Grellety
Forfatter

Thanks for your answer. It works, but it's not what I want. With this code, when I click on the duplicate boutton that's create a new sale order with "SOXXX" in the name and after I replace the name with the function write(). I would like the click on duplicate bouton create a new sale order with my new sequence without to use and increment the basic sequence "SOXXX". I hope you understand my need.

Damián Soriano

Yes, I undestood your need but the problem is that when you call the function super().copy() you are handing the control to the super class function, which set as default the name with the order sequence 'sale.order'.

You want to violate the Object Oriented encapsulation and here is not possible I think. The only way is not to call the super().copy() function but this would be wrong, since if other module overrides it you may not call it.

The only way I see to handle your requirement is the one I post or you should modify the original copy function.

Thomas Grellety
Forfatter

Ok, I will use your solution. Thanks for your help.

Damián Soriano

ok, if you think is correct you may mark it as correct answer so people searching for answers later may know that there is a way to solve this problem....

Avatar
Souleymane Male
Bedste svar

Hi. I have the same problem, I want to inherit to the function default_get in stock/wizard/stock_partial_picking like this:

class stock_partial_picking(osv.osv):
_inherit = 'stock.partial.picking'

def default_get(self, cr, uid, fields, context=None):
    if context is None: context = {}
    res = super(stock_partial_picking, self).default_get(cr, uid, fields, context=context)
    picking_ids = context.get('active_ids', [])
    active_model = context.get('active_model')

    if not picking_ids or len(picking_ids) != 1:
        # Partial Picking Processing may only be done for one picking at a time
        return res
    assert active_model in ('materialstock.stock.picking.outgoing','materialstock.stock.picking.entry','materialstock.stock.picking.transfert'), 'Bad context propagation'
    picking_id, = picking_ids
    if 'picking_id' in fields:
        res.update(picking_id=picking_id)
    if 'move_ids' in fields:
        picking = self.pool.get('stock.picking').browse(cr, uid, picking_id, context=context)
        moves = [self._partial_move_for(cr, uid, m) for m in picking.move_lines if m.state not in ('done','cancel')]
        res.update(move_ids=moves)
    if 'date' in fields:
        res.update(date=time.strftime(DEFAULT_SERVER_DATETIME_FORMAT))
    return res

But it is not work, can you help me please? Thanks

0
Avatar
Kassér
Enjoying the discussion? Don't just read, join in!

Create an account today to enjoy exclusive features and engage with our awesome community!

Tilmeld dig
Related Posts Besvarelser Visninger Aktivitet
PROBLEM WITH INHERITANCE AND SALE MODEL
inheritance sale.order
Avatar
Avatar
Avatar
2
maj 23
3074
Odoo 14: Extending the a model and adding a custom filter
filter inheritance sale.order
Avatar
Avatar
Avatar
2
nov. 21
8721
copy field value as default from res.partner to sale.order
res.partner copy sale.order
Avatar
Avatar
2
nov. 17
6119
Sale - Override action_button_confirm() Løst
inheritance sale.order override
Avatar
Avatar
1
mar. 17
9315
How to copy and modify the value of an inherited field Løst
inheritance values copy
Avatar
Avatar
Avatar
2
jul. 16
9041
Community
  • Tutorials
  • Dokumentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Oversættelser
Tjenester
  • Odoo.sh-hosting
  • Support
  • Opgradere
  • Individuelt tilpasset udvikling
  • Uddannelse
  • Find en bogholder
  • Find en partner
  • Bliv partner
Om os
  • Vores virksomhed
  • Brandaktiver
  • Kontakt os
  • Stillinger
  • Arrangementer
  • Podcast
  • Blog
  • Kunder
  • Juridiske dokumenter • Privatlivspolitik
  • Sikkerhedspolitik
الْعَرَبيّة 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 er en samling open source-forretningsapps, der dækker alle dine virksomhedsbehov – lige fra CRM, e-handel og bogføring til lagerstyring, POS, projektledelse og meget mere.

Det unikke ved Odoo er, at systemet både er brugervenligt og fuldt integreret.

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