Tuesday, 7 February 2017

How to open wizard on click button in odoo/OpenERP

How to open wizard on click button in odoo/OpenERP

Create .py file for define method and field like below

class wizard_object(models.TransientModel):
_name = 'wizard.object'

field_1 = fields.Text('Field - 1')
field_2 = fields.Text('Field - 2')

@api.multi
def method_name(self):
pass


Create .xml file as below.


<record id="wizard_object_view" model="ir.ui.view">
<field name="name">wizard.object</field>
<field name="model">wizard.object</field>
<field name="arch" type="xml">
<form string="Wizard Demo" version="7.0">
<group>
<field name="field_1"/>
<field name="field_1"/>
</group>
<footer>
<button name="method_name" string="Yes" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel"/>
</footer>
</form>
</field>
</record>

<record id="open_wizard_action_id" model="ir.actions.act_window">
<field name="name">Wizard Demo</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">wizard.object</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>

Create One button when you want to open wizard.

<button name="%(open_wizard_action_id)d" type="action" string="Open Wizard"/>

Monday, 6 February 2017

How To create Sequence in odoo/openerp

How To create Sequence in odoo/openerp

Step -1

Create One Xml File and register xml file in __openerp__.py and Add below code.

<data noupdate="1">

    <!-- Sequences for any object -->
    <record id="seq_id" model="ir.sequence.type">
        <field name="name">Give Any Name</field>
        <field name="code">seq.seq</field>
    </record>

    <record id="give_any_unique_id" model="ir.sequence">
        <field name="name">name same as above</field>
        <field name="code">seq.seq</field>
        <field name="prefix">SQ</field>
        <field name="padding">5</field>
    </record>

</data>



Step - 2

Create Py file when you want to add sequence like below

class proejct_task(models.Model):
    _inherit = "project.task"
 
    sequence_id = fields.Char('Sequence', readonly=True)

    @api.model
    def create(self, vals):
        seq = self.env['ir.sequence'].get('seq.seq') or '/'    //seq.seq is code which is define in xml file
        vals['sequence_id'] = seq
        return super(proejct_task, self).create(vals)

step - 3

Add sequence_id in project task form view like below.

<record id="view_task_form2_inherit" model="ir.ui.view">
<field name="name">view.task.form2.form</field>
<field name="model">project.task</field>
<field name="type">form</field>
<field name="inherit_id" ref="project.view_task_form2" />
<field name="arch" type="xml">
<xpath expr="//field[@name='project_id']" position="after">
<field name="sequence_id"/>
</xpath>
</field>
</record>

When you crate ptoject task sequence field is auto create like SQ00002,SQ00003,SQ00004

Wednesday, 1 February 2017

How To reload page on click button in openerp/odoo

How To reload page on click button in openerp/odoo



You have to add button in form view like below code.
<xpath expr="//field[@name='name']" position="after">
            <button name="refresh_page" string="Refresh" type="object"/>
        </xpath>

You have to create one method like below.(this mehtod call when you click on button)

@api.multi
        def refresh_page(self):
            return { 'type': 'ir.actions.client', 'tag': 'reload'}

Monday, 26 December 2016

How Create Inherited Tree view

How Create Inherited Tree view

1) Create parent field and child field as below

class object_object(models.Model):
    _name = 'object.object'

    name = fields.Char('Name')
    parent_id = fields.Many2one('object.object','Parent Field')
    child_id = fields.One2many('object.object', 'parent_id', string='Child Field')

2) Create simple tree view and add field as 'field_parent' as below

<record id="inherited_tree_view_example" model="ir.ui.view">
            <field name="name">object.object.tree</field>
            <field name="model">object.object</field>
            <field name="field_parent">child_id</field>
            <field name="arch" type="xml">
                <tree string="String Name">
                    <field name="name"/>
                </tree>
                or
                <tree toolbar="True" string="String Name">
                    <field name="name"/>
                </tree>
            </field>
        </record>

3) Create simple action as below

        <record id="inherited_tree_view_action" model="ir.actions.act_window">
            <field name="name">Action Name</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">object.object</field>
            <field name="domain">[('parent_id','=',False)]</field>
            <field name="view_type">tree</field>
            <field name="view_id" ref="inherited_tree_view_example"/>
        </record>
4) Create simple menu as below

        <menuitem action="inherited_tree_view_action" id="menu_id"/>

Sunday, 11 December 2016

Create Custom Header Footer

Create Custome Header Footer

Create Simple template For Header Footer as below

<template id="header_footer_id">
    <t t-if="o and 'company_id' in o">
        <t t-set="company" t-value="o.company_id"></t>
    </t>
    <t t-if="not o or not 'company_id' in o">
        <t t-set="company" t-value="res_company"></t>
    </t>

    <t t-call="modulename.header_id" />
    <t t-raw="0" />
    <t t-call="modulename.footer_id" />
</template>

Create Header

<template id="header_id">
    <div class="header">
        //Your Code
    </div>
</template>

Create Footer

<template id="footer_id">
<div class="footer">
    //Your Code
</div>
</template>

Create Report custome report or inherited report

<template id="your_report_id">
    <t t-foreach="docs" t-as="o">
   <t t-call="modulename.header_footer_id">
       <div class="page">
       //Your Code
       </div>
   </t>
</t>
</template>

Monday, 7 November 2016

How To change default tree view limit.

How To change default tree view limit.

2) Create xml file for register js file.
<?xml version="1.0" encoding="utf-8"?>
<!-- vim:fdn=3:
-->
<openerp>
    <data>

        <template id="assets_backend" name="change_list_view_extend assets" inherit_id="web.assets_backend">
            <xpath expr="." position="inside">
                <script type="text/javascript" src="/change_list_view_extend/static/src/js/change_list_number_list_view.js"></script>
            </xpath>
        </template>

    </data>
</openerp>


1) You have to create js file in static->src->js and copy below code.
openerp.change_list_view_extend = function(instance) {

    var QWeb = instance.web.qweb,
        _t = instance.web._t;

    instance.web.ListView.include({

    limit: function () {
   
       if (this._limit === undefined) {
           this._limit = (20
            || this.options.limit
                       || this.defaults.limit
                       || (this.getParent().action || {}).limit
                       || 20);
       }
       return this._limit;
   },


   load_list: function(data) {
       var self = this;
       this.fields_view = data;

       // Pager
       if (!this.$pager) {
           this.$pager = $(QWeb.render("ListView.pager", {'widget':self}));
           if (this.options.$buttons) {
               this.$pager.appendTo(this.options.$pager);
           } else {
               this.$el.find('.oe_list_pager').replaceWith(this.$pager);
           }

           this.$pager
               .on('click', 'a[data-pager-action]', function () {
                   var $this = $(this);
                   var max_page = Math.floor(self.dataset.size() / self.limit());
                   switch ($this.data('pager-action')) {
                       case 'first':
                           self.page = 0; break;
                       case 'last':
                           self.page = max_page - 1;
                           break;
                       case 'next':
                           self.page += 1; break;
                       case 'previous':
                           self.page -= 1; break;
                   }
                   if (self.page < 0) {
                       self.page = max_page;
                   } else if (self.page > max_page) {
                       self.page = 0;
                   }
                   self.reload_content();
               }).find('.oe_list_pager_state')
                   .click(function (e) {
                       e.stopPropagation();
                       var $this = $(this);

                       var $select = $('<select>')
                           .appendTo($this.empty())
                           .click(function (e) {e.stopPropagation();})
                           .append('<option value="20">20</option>' +
                            '<option value="40">40</option>' +
                                   '<option value="80">80</option>' +
                                   '<option value="200">200</option>' +
                                   '<option value="500">500</option>' +
                                   '<option value="2000">2000</option>' +
                                   '<option value="NaN">' + _t("Unlimited") + '</option>')
                           .change(function () {
                               var val = parseInt($select.val(), 10);
                               self._limit = (isNaN(val) ? null : val);
                               self.page = 0;
                               self.reload_content();
                           }).blur(function() {
                               $(this).trigger('change');
                           })
                           .val(self._limit || 'NaN');
                   });
       }
       return self._super(data);
   },
    });
};

Sunday, 6 November 2016

How To generate manual invoice.

How To generate manual invoice.

If You want to create manul invoice then folllow below step.

1) Create Py file for account invoice as below.


from openerp import models, fields, api, _

class account_invoice(models.Model):
    _inherit = "account.invoice"

    @api.multi
    def write(self, vals):
        if vals.get('number'):
            vals['number'] = vals['number']
        elif self.number:
            vals['number'] = self.number
        return super(account_invoice, self).write(vals)

    _defaults = {
        'number': False
    }

2) Change in invoice form view as below.

<?xml version="1.0"?>
<openerp>
    <data>
        <record model="ir.ui.view" id="inherit_view_account_invoice_for_number">
            <field name="name">inherit.view.account.invoice.for.number</field>
            <field name="model">account.invoice</field>
            <field name="inherit_id" ref="account.invoice_form"/>
            <field name="arch" type="xml">
                <xpath expr="//field[@name='number']" position="replace">
                    <field name="number" attrs="{'readonly':[('state','!=','draft')]}" required="1"/>
                </xpath>
            </field>
        </record>
        <record model="ir.ui.view" id="inherit_invoice_supplier_form">
            <field name="name">inherit.view.account.invoice.for.supplier.number</field>
            <field name="model">account.invoice</field>
            <field name="inherit_id" ref="account.invoice_supplier_form"/>
            <field name="arch" type="xml">
                <xpath expr="//field[@name='number']" position="replace">
                    <field name="number" attrs="{'readonly':[('state','!=','draft')]}" required="1"/>
                </xpath>
            </field>
        </record>
    </data>
</openerp>

Version - 9 :
class AccountInvoice(models.Model):
    _inherit = "account.invoice"

    temp_number = fields.Char('Temp Number', copy=False)

    @api.multi
    def write(self, vals):
    if vals.get('temp_number'):
    vals['number'] = vals.get('temp_number')
    if self.temp_number:
    vals['number'] = self.temp_number
    return super(AccountInvoice, self).write(vals)

<record id="manual_invoice_form_inherit" model="ir.ui.view">
        <field name="name">manual.invoice.form.inherit</field>
        <field name="model">account.invoice</field>
        <field name="inherit_id" ref="account.invoice_form"/>
        <field name="arch" type="xml">
        <data>
            <xpath expr="//form/sheet/h1/field[@name='number']" position="replace">
                <field name="number"/>
            </xpath>
            <xpath expr="//form/sheet/h1/field[@name='number']" position="after">
                <field name="temp_number"/>
            </xpath>
        </data>
        </field>
    </record>

Odoo 17 New Features

  Odoo 17 new Features 1) Duplicate  multiple records from List view. Please have look below screenshots first you need to select records th...