Skip to Content
Odoo เมนู
  • ลงชื่อเข้าใช้
  • ทดลองใช้ฟรี
  • แอป
    การเงิน
    • ระบบบัญชี
    • ระบบการออกใบแจ้งหนี้
    • ระบบบัญชีรายจ่าย
    • ระบบการจัดการข้อมูลผ่านสเปรดชีต (BI)
    • เอกสาร
    • ระบบลงลายเซ็น
    การขาย
    • ลูกค้าสัมพันธ์
    • การขาย
    • POS ร้านค้า
    • POS ร้านอาหาร
    • ระบบสมัครสมาชิก
    • การเช่า
    การจัดการเว็บไซต์
    • เครื่องมือสร้างเว็บไซต์
    • ระบบการขายออนไลน์
    • บล็อก
    • ฟอรั่ม
    • ไลฟ์แชท
    • ระบบการอบรมออนไลน์
    ซัพพลายเชน
    • คลังสินค้า
    • ระบบการผลิต
    • PLM
    • ระบบการจัดซื้อ
    • การซ่อมบำรุง
    • ระบบจัดการคุณภาพ
    ทรัพยากรบุคคล
    • ข้อมูลพนักงาน
    • ระบบสรรหาบุคลากร
    • ระบบการลา
    • การประเมิน
    • ระบบการแนะนำพนักงาน
    • ระบบจัดการยานพาหนะ
    การตลาด
    • โซเชียลมาร์เก็ตติ้ง
    • การตลาดผ่านอีเมล
    • ระบบการตลาดผ่าน SMS
    • ระบบการจัดงานอีเวนต์
    • การตลาดแบบอัตโนมัติ
    • ระบบแบบสำรวจ
    การบริการ
    • โปรเจกต์
    • ระบบบันทึกเวลา
    • ระบบการจัดการบริการภาคสนาม
    • ระบบดูแลช่วยเหลือ
    • การวางแผน
    • การนัดหมาย
    ประสิทธิผล
    • ระบบแสดงความคิดเห็น
    • ระบบการอนุมัติ
    • ไอโอที
    • VoIP
    • คลังข้อมูล
    • WhatsApp
    แอปพลิเคชันของบุคคลที่สาม Odoo สตูดิโอ แพลตฟอร์มคลาวด์ของ Odoo
  • อุตสาหกรรม
    การค้าปลีก
    • ร้านขายหนังสือ
    • ร้านขายเสื้อผ้า
    • ร้านขายเฟอร์นิเจอร์
    • ร้านขายของชำ
    • ร้านขายฮาร์ดแวร์
    • ร้านขายของเล่น
    Food & Hospitality
    • บาร์และผับ
    • ร้านอาหาร
    • อาหารฟาสต์ฟู้ด
    • Guest House
    • ตัวแทนจำหน่ายเครื่องดื่ม
    • Hotel
    อสังหาริมทรัพย์
    • Real Estate Agency
    • บริษัทสถาปัตยกรรม
    • บริษัทรับเหมา
    • การจัดการอสังหาริมทรัพย์
    • การจัดสวน
    • สมาคมเจ้าของอสังหาริมทรัพย์
    ปรึกษา
    • สำนักงานบัญชี
    • Odoo พาร์ทเนอร์
    • เอเจนซี่การตลาด
    • สำนักงานกฎหมาย
    • บริการสรรหาบุคลากร
    • การตรวจสอบและการรับรอง
    ระบบการผลิต
    • Textile
    • เหล็ก
    • เฟอร์นิเจอร์
    • อาหาร
    • Brewery
    • ของขวัญขององค์กร
    สุขภาพ & ฟิตเนส
    • ชมรมกีฬา
    • ร้านขายแว่นตา
    • ฟิตเนส
    • ผู้ประกอบวิชาชีพด้านสุขภาพ
    • ร้านขายยา
    • ร้านทำผม
    Trades
    • ช่างซ่อม
    • ฮาร์ดแวร์และการสนับสนุนด้านไอที
    • ระบบพลังงานแสงอาทิตย์
    • ช่างทำรองเท้า
    • บริการทำความสะอาด
    • HVAC Services
    อื่น ๆ
    • Nonprofit Organization
    • สำนักงานสิ่งแวดล้อม
    • ร้านเช่าป้ายโฆษณา
    • การถ่ายภาพ
    • ร้านเช่าจักรยาน
    • ตัวแทนจำหน่ายซอฟต์แวร์
    Browse all Industries
  • คอมมูนิตี้
    ศึกษา
    • บทเรียน
    • เอกสารกำกับโปรแกรม
    • การรับรอง
    • การฝึกอบรม
    • บล็อก
    • พอดแคสต์
    เพิ่มศักยภาพให้กับการศึกษา
    • โปรแกรมการศึกษา
    • Scale Up! Business Game
    • เยี่ยมชม Odoo
    รับซอฟต์แวร์
    • ดาวน์โหลด
    • เปรียบเทียบรุ่น
    • เผยแพร่
    ทำงานร่วมกัน
    • Github
    • ฟอรั่ม
    • ระบบการจัดงานอีเวนต์
    • การแปล
    • ร่วมเป็นพาร์ทเนอร์
    • Services for Partners
    • ลงทะเบียนเพื่อสร้างบัญชีบริษัทของคุณ
    รับบริการ
    • ค้นหาพาร์ทเนอร์
    • ค้นหานักบัญชี
    • พบกับที่ปรึกษา
    • บริการติดตั้งระบบเพื่อใช้งาน
    • ข้อมูลอ้างอิงลูกค้า
    • การสนับสนุน
    • อัปเกรด
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    รับการสาธิต
  • ราคา
  • ช่วยเหลือ

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

  • ลูกค้าสัมพันธ์
  • e-Commerce
  • ระบบบัญชี
  • สินค้าคงคลัง
  • PoS
  • โปรเจกต์
  • MRP
All apps
คุณต้องลงทะเบียนเพื่อโต้ตอบกับคอมมูนิตี้
All Posts คน เหรียญรางวัล
แท็ก (View all)
odoo accounting v14 pos v15
เกี่ยวกับฟอรั่มนี้
คุณต้องลงทะเบียนเพื่อโต้ตอบกับคอมมูนิตี้
All Posts คน เหรียญรางวัล
แท็ก (View all)
odoo accounting v14 pos v15
เกี่ยวกับฟอรั่มนี้
ช่วยเหลือ

Correct way to inherit class & functionalities in custom module?

ติดตาม

รับการแจ้งเตือนเมื่อมีกิจกรรมในโพสต์นี้

คำถามนี้ถูกตั้งค่าสถานะ
2 ตอบกลับ
7195 มุมมอง
อวตาร
Yenthe Van Ginneken (Mainframe Monkey)

Hi guys

The default behaviour from A -> Z for creating quotations is perfect and I want a second method for 'Internal' quotations which does 99% the same. By default there is no customer filled in when you create a new quotation under sales. I now want a second menu item 'Internal quotations' which does the same as quotations but by default the customer 'Internal customer' should be filled in.

I've made a custom module 'aa_maatwerk' which makes the new menu item through XML:

<menuitem id="menu_item_offertes" name="Internal quotations" parent="base.menu_sales"
                  action="sale.action_quotations_intern" sequence="5"/>

As you can see this action links to sale.action_quotations_intern which is in the file sale_view.xml in the module sale. I've basicly copied the record action_quotations and then created a new one with the name action_quotations_intern like this:

<record id="action_quotations_intern" model="ir.actions.act_window">
            <field name="name">Offertes - Intern</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">sale.order</field>
            <field name="view_type">form</field>
            <field name="view_id" ref="view_quotation_tree"/>
            <field name="view_mode">tree,form,calendar,graph</field>
            <field name="context">{'search_default_my_sale_orders_filter': 0,'type':'internal'}</field>
            <field name="domain">[('partner_id.name','=','Intern'),('state','in',('draft','sent','cancel'))]</field>
            <field name="search_view_id" ref="view_sales_order_filter"/>
            <field name="help" type="html">
              <p class="oe_view_nocontent_create">
                Click to create a quotation, the first step of a new sale.
              </p><p>
                Odoo will help you handle efficiently the complete sale flow:
                from the quotation to the sales order, the
                delivery, the invoicing and the payment collection.
              </p><p>
                The social feature helps you organize discussions on each sales
                order, and allow your customers to keep track of the evolution
                of the sales order.
              </p>
            </field>
        </record>

I now have two problems:
1) I would like to have everything in my custom module, to keep it seperated
2) When the user clicks on the menu item 'Internal quotations' the customer dropdown should be filled in by default with the customer 'Internal customer'.

Could anybody tell me how I can get all of this in one module, how to inherit this correctly and then fill in the customer name?
I have also inherited the sale class in sale_order.py in my custom module (aa_maatwerk) like this:

# -*- coding: utf-8 -*-
from openerp import http
from openerp imports models, fields,api

class SaleOrder(http.Controller):
    _inherit = 'sale.order'
    type = fields.Selection(selection=type_sel, string='Type')

    #I assume that this should override the 'old' class/method somehow?
    def create(self, cr, uid, values, context=None):
       type = context.get('type',False)  # check for type in context
       if type == 'internal':
           values['partner_id'] = self.pool.get('res.partner').search(cr, uid, 'Internal customer')[0]  # assuming find WILL return one ID!
           values['type'] = 'internal'   # create with type internal...
           return super(sale_order, self).create(cr, uid, values, context=None)

And I've also added the data and dependencies in my __openerp__py file:

# any module necessary for this one to work correctly
    'depends': ['base','sale','procurement','purchase'],

    # always loaded
    'data': [
        # 'security/ir.model.access.csv',
        'templates.xml',
    ],

But this doesn't seem to do anything and my customer is not filled in by default either.

With kind regards
Yenthe

0
อวตาร
ละทิ้ง
Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Still no solution on this so I'll kindly 'bump' this.

อวตาร
Zbik
คำตอบที่ดีที่สุด

Try this:

values['partner_id'] = self.pool.get('res.partner').search(cr, uid,[('name','=','Internal customer')])[0]  

UPDATE:

try like this:

class SaleOrder(models.Model):
    _inherit = 'sale.order'
    
    @api.model
    def create(self,values):
        type = False
        if 'type' in self._context:
              type = self._context['type']
        if type == 'internal':
           partners = self.env['res.partner'].search([('name','=','Internal customer')])
           if partners:
               values['partner_id'] = partners[0].id
               values['type'] = 'internal'  
        return super(sale_order, self).create(values)

 

 

1
อวตาร
ละทิ้ง
Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Thanks for the answer Zbik! Sadly nothing changes.. Is there an easy way to find out where the problem is? Perhaps I inherited something wrong or something isn't linked to the correct record.

Zbik

Name == 'Internal customer'? try ('name','ilike','Internal customer')

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

No success either. I have a customer named exactly 'Internal customer' too so I think something else is wrong/not triggered..

Zbik

answer updated

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Thanks zbik but this doesn't work either! "default_partner_id": 1 seems to work as deep suggest but this does not fetch me the correct record so thats not yet a solution either. Do you think my class is never triggered or something since this doesn't work either?

Deepa Venkatesh

@Yenthe, what Zbik is saying that your search syntax is incorrect, and Indeed it is.. So do have a look at it....

Zbik

You enable debug and insert line _logger.info("FOO %s %s", 'VALUES', values) before return, and _logger.info("FOO %s %s", 'CONTEXT', self._context) at start. You change search([('id','=',ID)]) - replace name by ID.

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

I've added line_logger but nothing shows up. Even when I remove the return etc nothing changes and I get no errors. Looks like the method/class isn't even called?

Zbik

you have "depends" : ['sale'] in __openerp__.py?

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Yes I did! I've also added the code in my question which shows the data and depends.

Zbik

odoo is owner your .py files? debug log must be!!! PS. In your code return is only after if - redundant spaces or tab

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Yep user rights are fine for the Odoo user. The module also installs and the new menu items do show up, so it seems to have something to do with the sale_order.py file I assume. There is nothing in the logfiles.

Zbik

In my code - typo, model.Model instedad of models.Model. You verify all indentation and before class you instert _logger.info("FOO %s %s", 'START', 'STARTED')

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Hey zbik everything looks fine and I always indent with 4 spaces for every level. Picture: http://i.imgur.com/ksHhJEo.png File: http://pastebin.com/3H7BjV83 I don't see anything wrong?

Zbik

my typo on picture - correct it

Zbik

must be class SaleOrder(models.Model):

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Corrected and still nothing in the log, no errors, no name filled in :s

Zbik

addons path? you have more addons?

Zbik

__init__.py include your class?

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

The __init__.py was the problem. Alright the file is loading correct now! Sadly your method is not filling in the customer though. What exactly should I import to use the logger? Could you add a little example please? I'll have to debug this I guess.

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Picture of my code: http://i.imgur.com/WhQDRpb.png nothing is getting printed in my Ubuntu screen and neither in my logfile..

Zbik

You add before class .... import logging _logger = logging.getLogger(__name__)

Zbik

I find another mistake, should be .....[0].id

Zbik

But this is construction is right only if search result exists

Zbik

answer updated

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

I've updated my code to yours but this doesn't do anything either.. :s The logging doesn't print anything either. http://i.imgur.com/TzpjTN4.png Any other ideas zbik? I'm really stuck on this one..

Zbik

Move _logger = logging.getLogger(__name__) _logger.info("FOO %s %s", 'START', 'STARTED') before class. If *.py work must then be something in the log.

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

The logger never seems to go off and nothing is placed in the logfile, neither on the terminal. I've also removed 'sale_order.py' from the data in __openerp__.py because that shouldn't be done if I am correct.. So what now? :s

Zbik

Send me all the files. I'll check on my system. darek@krokus.com.pl

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Sent! Thanks Zbik!

Zbik

Module sent!

อวตาร
Deepa Venkatesh
คำตอบที่ดีที่สุด

Everything seems to be fine.. however action which have wrote is not overriden properly...

It should be like this

<record id="sale.action_quotations_intern" ..../>

whenever you are trying to overide or inherit, always the convention is of "MODULE_NAME.XML_ID", so in your code, you missed it on action definition...

EDITED:

Sorry I forgot to tell you... In the action, pass default value for partner in the context... like this "default_partner_id": 1 (if the partner ID is straight forward)..

Otherwise in the PY class, define a default_get method, in that using context, you can identify from which menu it is been called, so if it is called from your custom menu, then set the desired partner ID

 

EDITED AGAIN:

Try this code:

 

 def default_get(self, cr, uid, fields, context=None):

      res = super(sale_order, self).default_get(cr, uid, fields, context=context)
      type = context.get('type',False)  # check for type in context
      if type == 'internal':
          partner_ids = self.pool.get('res.partner').search(cr, uid, DOMAIN)
          res['partner_id'] = partner_ids and partner_ids[0] or False  # Will be assigning only one value
      return res

2
อวตาร
ละทิ้ง
Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Thanks for the answer deep. I've changed action_quotations_intern to sale.action_quotations_intern in the file sale_view.xml (in the module sale) but nothing has changed. The customer still isn't filled in etc..

Deepa Venkatesh

Plz find my edited answer

Deepa Venkatesh

Do the particular code block of assigning partner in the default_get method...

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Seems that your update is a big step in the good way. I've added the 'default_partner_id':1 and this fills in 'Your Company'. How could I now modify this to search for the customer 'Internal customer' and fill this one it? (Note: upvoted this already since it did help me already, thanks)

Deepa Venkatesh

Thanks :) I just gave you an example w.r.t to XML in default, ID 1 represents Company Partner...

Deepa Venkatesh

So in your case, you go with default_method in Py class ...

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

So how could I change this to load the customer 'Internal customer' dynamically and not by ID / hardcoded?

Deepa Venkatesh

And dont forget to pass the type as "internal" from XML context...

Yenthe Van Ginneken (Mainframe Monkey)
ผู้เขียน

Whatever I do those methods never seem to be called. When I do not return anything or program something that doesn't work there are no errors showing up in my Odoo. So there might be something else wrong?

สนุกกับการพูดคุยนี้ใช่ไหม? เข้าร่วมเลย!

สร้างบัญชีวันนี้เพื่อเพลิดเพลินไปกับฟีเจอร์พิเศษและมีส่วนร่วมกับคอมมูนิตี้ที่ยอดเยี่ยมของเรา!

ลงชื่อ
คอมมูนิตี้
  • บทเรียน
  • เอกสารกำกับโปรแกรม
  • ฟอรั่ม
โอเพนซอร์ส
  • ดาวน์โหลด
  • Github
  • Runbot
  • การแปล
บริการ
  • โฮสติ้ง odoo.sh เซิร์ฟเวอร์
  • การสนับสนุน
  • อัปเกรด
  • การพัฒนาที่กำหนดเอง
  • การศึกษา
  • ค้นหานักบัญชี
  • ค้นหาพาร์ทเนอร์
  • ร่วมเป็นพาร์ทเนอร์
เกี่ยวกับเรา
  • บริษัทของเรา
  • ทรัพย์สินในรูปของเครื่องหมายการค้า
  • ติดต่อเรา
  • งาน
  • ระบบการจัดงานอีเวนต์
  • พอดแคสต์
  • บล็อก
  • ลูกค้า
  • กฎหมาย • ความเป็นส่วนตัว
  • ความปลอดภัย
الْعَرَبيّة 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 เป็นชุดแอปธุรกิจแบบเปิดที่ครอบคลุมทุกความต้องการของบริษัทของคุณ อาธิ CRM eCommerce ระบบบัญชี ระบบสินค้าคงคลัง ระบบการขายหน้าร้าน โปรเจกต์ และ อีกมากมาย

ความเหนือกว่าอันเป็นเอกลักษณ์ของ Odoo คือการใช้งานที่ง่ายดายและผสานการทำงานอย่างสมบูรณ์แบบในเวลาเดียวกัน

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