Here is my code..
<record id="test_workflow" model="workflow">
<field name="name">test.workflow</field>
<field name="osv">test.workflow.model</field>
<field name="on_create">True</field>
</record>
<record id="activity_a" model="workflow.activity">
<field name="wkf_id" ref="mrp.production.basic"/>
<field name="flow_start">True</field>
<field name="name">Quality Check</field>
<field name="kind">function</field>
<field name="action">print_Quality Check()</field>
</record>
while I am running the server then getting error:
ParseError: "External ID not found in the system:
mrp.production.basic" while parsing
/home/naveen/odoo-9.0/custom_assetwh/mrp_customisation/view.xml:57,
near
You need to give the workflow xmlid inside the ref attribute and you have given its name instead of the xmlid or externalid.
Please change your xml as like below. You will get the xmlid of workflow "mrp.production.basic" inside the addons=>mrp=>mrp_workflow.xml file and that xmlid is "wkf_prod". You should write your xml file as below.
<record id="activity_a" model="workflow.activity">
<field name="wkf_id" ref="wkf_prod"/>
<field name="flow_start">True</field>
<field name="name">Quality Check</field>
<field name="kind">function</field>
<field name="action">print_Quality_Check()</field>
</record>
Note: xmlid of workflow https://github.com/odoo/odoo/blob/9.0/addons/mrp/mrp_workflow.xml#L6
I'm trying to hide the edit and more button in user form if the connected user is not the admin.
Here is my code
<xpath expr='//form[#string="Users"]' position='attributes'>
<attribute name="edit" >{'false':[('id', '!=', '1')]}</attribute>
<attribute name="more">{'false':[('id', '!=', '1')]}</attribute>
</xpath>
i get the following error:
SyntaxError: JSON.parse: expected property name or '}' at line 1 column 2 of the JSON data
Unfortunately, what you trying achive is not possible using expression, rather I would advise to user "Customized Views"
Make out of user form edit="false" this will make edit button go away for all users (res.users.form).
Now go to Customized Views under Settings/Technical/User Interface/Customized Views, you need to be in debug mode to be able to see this menu.
Under Customized Views create a new record and choose User : Admin and in original view choose : res.users.form and in View Architecture
copy and pare original view View Architecture and just remove edit='false'
This should help, I believe.
Bests
Expanding #shodowsjedi's answer, To achieve what you want you have to create two views (They're essentially the same just that one is attached to a specific group and will be displayed for a user that belongs to that group)
This is a mockup of how your xml file should look
<!--original form view-->
<record id="model_form_view" model="ir.ui.view">
<field name="name">your.model</field>
<field name="model">your.model</field>
<field name="arch" type="xml">
<form string="Users">
<!--whatever is in your form -->
</field>
</record>
<!--inherited formview to hide edit option -->
<record id="model_form_view_noedit" model="ir.ui.view">
<field name="name">your.model</field>
<field name="model">your.model</field>
<field name="inherit_id" ref="model_form_view"/>
<field name="groups_id" eval="[(6, 0, [ref('base.group_user') ])]"/>
<field name="arch" type="xml">
<xpath expr='//form[#string="Users"]' position='attributes'>
<attribute name="edit">false</attribute>
</xpath>
</field>
</record>
It's always better to know how things work from the backend in Odoo
i make a simple wizard in odoo and i want to show the wizard but, my model can't found of my view . what wrong with my simple code?
This my wizard
class RequestReceiveWizard(models.TransientModel):
_name ='estate.nursery.requestreceivewizard'
# def _default_session(self):
# return self.env['estate.nursery.requestline'].browse(self._context.get('request_id'))
name=fields.Char("Wizard name")
request_id=fields.Many2one('estate.nursery.request')
requestline_ids = fields.Many2many("estate.nursery.requestline")
And this my view :
<!--request Wizard -->
<record model="ir.ui.view" id="request_view_wizard">
<field name="name">Request receive wizard</field>
<field name="model">estate.nursery.requestreceivewizard</field>
<field name="arch" type="xml">
<form string="Wizard For Request Received">
<group collspan="2" col="2">
<field name="name"/>
<field name="requestline_ids"/>
</group>
<footer>
<button name="Apply" type="Action" string="Apply" >Apply</button>
<button special="cancel" string="Cancel">Cancel</button>
</footer>
</form>
</field>
</record>
<act_window id="received_request_wizard" name="Request Wizard"
src_model="estate.nursery.request"
res_model="estate.nursery.requestreceivewizard"
view_mode="form"
target="new"
multi="True" key2="client_action_multi"/>
What wrong with my simple code? And this my error
Model not found: estate.nursery.requestreceivewizard
act_window replace to this record and try this code:
<record id="received_request_wizard" model="ir.actions.act_window">
<field name="name">estate.nursery.request</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">estate.nursery.request</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="request_view_wizard"/>
<field name="target">new</field>
</record>
May be It's work for you...
i created a wizard and now its giving me the above error , it took me ages but couldn't sorted it , between am doing wizard for the first time in Openerp . please help thanks in advance . here is my code
class test_wizard(osv.osv_memory):
_name="test.wizard"
_description="will generate dynamic views, that's all"
_columns={
'age_text': fields.text('text age'),
}
def next(self,cr,uid,ids,contet=None):
test_obj=self.pool.get('test.chbc')
for wiz in self.browse(cr,uid,ids):
if wiz.age_text <=5:
raise osv.except_osv('user error, please slect something , know what')
limit= datetime.date.today()-datetime.timedelta(days=wiz.age_text)
ids_to_del=test_obj.search(cr,uid,[('create_date','<',
limit.striftime('%y-%m-%d 00:00:00'))],context=context)
test_obj.unlink(cr,uid,ids_to_del)
return{}
test_wizard()
here is my xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="test_wizard" model="ir.ui.view">
<field name="name">test.wizard.form</field>
<field name="model">test.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Test wizard ">
<label colspan="4" string="select age please , am in a hurry "/>
<field name="age_text" string="Age(days)"/>
<group col="4" colspan="4">
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
<button icon="gtk-ok" name="next" string="Next" type="object"/>
</group>
</form>
</field>
</record>
<record id="action_test_wizard" model="ir.actions.act_window">
<field name="name">Next</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">test.wizard</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>
</openerp>
Change you model name mean give the name of the class where you want to put it
<field name="model">test.wizard</field>
I have created a new module and added 10 fields to it.Now i should be able to enter only 5 fields first and on payment i should be able to enter next 5 fields.Can anyone please help me.
I want my sales person to enter only Basic Details first(like Name and Address and Phone number) and later after payment i want to update Full details of Parents and their Contact info.
thank's in advance
My code is
lead_view.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- ===================== This is tree layout =============================-->
<record id="lead_tree" model="ir.ui.view">
<field name="name">Lead</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<tree string="lead">
<field name = "name"/>
</tree>
</field>
</record>
<!-- ========================This is Form layout===============================-->
<record id="view_res_partner_inherited" model="ir.ui.view">
<field name="name">view.res.partner.inherited</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="arch" type="xml">
<data>
<field name="website" position="replace"/>
<field name="title" position="replace"/>
<field name="function" position="replace"/>
<field name="category_id" position="replace"/>
<page string="Internal Notes" position="before">
<page string="Contract">
<group>
<group>
<h3>Contract Details</h3><br/>
<field name="storagedetails"/>
<field name="insurancecompany"/>
<field name="insurancenumber"/>
<field name="healthfund_name"/>
<field name="healthfund_number"/>
<field name="service"/>
<field name="annualfee"/>
<field name="paymentplan"/>
<field name="transport_insurance"/>
<field name="sarm"/>
<field name="cost_free_donation"/>
<field name="hla_test"/>
<field name="twins"/>
<field name="repeated_customer"/>
</group>
<group>
<h3>Relevant Dates</h3><br/>
<field name="contactadded_date"/>
<field name="clientadded_date"/>
<field name="expectedbirth_date"/>
<field name="bloodrecieved_date"/>
<field name="bloodstorage_date"/>
<field name="cordrecieved_date"/>
<field name="cordstored_date"/>
<br/><br/>
<h3>End Contract</h3><br/>
<field name="termination_contract_date"/>
<field name="termination_reason"/>
<field name="allocation_cordblood"/>
<field name="endstorage_cordblood"/>
<field name="allocation_cord"/>
<field name="endstorage_cord"/>
</group>
</group>
</page>
</page>
<page string="Internal Notes" position="after">
<page string="Parent Details">
<group>
<group>
<h3><label string="Mother Details"/></h3>
<br/>
<field name="mother_lastname"/>
<field name="mother_firstname"/>
<field name="mother_dob"/>
</group>
<group>
<h3><label string="Father Details"/></h3>
<br/>
<field name="father_lastname"/>
<field name="father_firstname"/>
<field name="father_dob"/>
</group>
<group>
<h3><label string="Child Deatils"/></h3>
<br/>
<field name="child_lastname"/>
<field name="child_firstname"/>
<field name="child_dob"/>
</group>
</group>
</page>
<page string="Contact Info">
<notebook>
<page string="Parent Details">
<group>
<group>
<h3>Mother</h3><br/>
<field name="mother_telephone"/>
<field name="mother_mobile"/>
<field name="mother_email"/>
<field name="mother_fax"/>
<field name="mother_fiscalcode"/>
<field name="mother_iban"/>
<field name="mother_bankaccountspain"/>
<field name="mother_decaseddate"/>
</group>
<group>
<h3>Father</h3><br/>
<field name="father_telephone"/>
<field name="father_mobile"/>
<field name="father_email"/>
<field name="father_fax"/>
<field name="father_fiscalcode"/>
<field name="father_iban"/>
<field name="father_bankaccountspain"/>
<field name="father_decaseddate"/>
</group>
</group>
</page>
<page string="Child Details">
<group>
<field name="child_telephone"/>
<field name="child_mobile"/>
<field name="child_email"/>
<field name="child_fax"/>
<field name="child_fiscalcode"/>
<field name="child_iban"/>
<field name="child_bankaccountspain"/>
<field name="child_decaseddate"/>
</group>
</page>
</notebook>
</page>
</page>
</page>
</data>
</field>
</record>
<!-- ========================= Action Layout ============================= -->
<record id="action_lead" model="ir.actions.act_window">
<field name="name">Lead</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="lead_tree"/>
</record>
<record id="create_customer" model="ir.actions.act_window">
<field name="name">Lead</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="view_res_partner_inherited"/>
</record>
<!-- ===========================Menu Settings=========================== -->
<menuitem name = "Lead" id = "menu_lis_lab" action="action_lead"/>
<menuitem name="Lead Info" id="sublead_menu" parent="menu_lis_lab"/>
<menuitem name="Generate Lead" id="generate_leads" parent="sublead_menu" action="create_customer"/>
</data>
</openerp>
lead.py
from osv import osv
from osv import fields
class res_partner(osv.osv):
_inherit = "res.partner"
_description = "adding fields to res.partner"
_columns = {
'mothername': fields.char('Mother Name',size=64,required=True),
'fathername': fields.char('Father Name',size=64,required=True),
'mother_lastname': fields.char('Last name',size=64),
'mother_firstname': fields.char('First Name',size=64),
'mother_dob': fields.date('Date of Birth'),
'father_lastname': fields.char('Last name',size=64),
'father_firstname': fields.char('First Name',size=64),
'father_dob': fields.date('Date of Birth'),
'child_lastname': fields.char('Last name',size=64),
'child_firstname': fields.char('First name',size=64),
'child_dob': fields.date('Date of Birth'),
'storagedetails': fields.selection([('A','21 years')],'Storage Details',help="Storage for no.of years"),
'insurancecompany': fields.char('Insurance Company',size=64),
'insurancenumber': fields.char('Insurance No:',size=20),
'healthfund_name': fields.char('Health Fund Name',size=64),
'healthfund_number': fields.char('Healt Fund No:',size=20),
'service': fields.char('Service',size=20,help="Service for no.of years"),
'annualfee': fields.char('Annual Fee',size=20,help="Annual fee for the service"),
'paymentplan':fields.char('Payment Plan',size=20,help="Payment plans"),
'transport_insurance': fields.boolean('Transport Insurance',help="Transport Insurance is taken"),
'sarm': fields.boolean('Sarm',help="Sarm"),
'cost_free_donation': fields.boolean('Cost Free Donation',help="Cost Free Donation"),
'hla_test': fields.boolean('HLA Test',help="HLA Test"),
'twins': fields.boolean('Twins',help="Are they twins"),
'repeated_customer': fields.boolean('Repeated Customer',help="Is he repeated customer"),
'contactadded_date': fields.date('Contact added Date',help="On which date contact has been added"),
'clientadded_date': fields.date('Client added Date',help="On which day the client is added"),
'expectedbirth_date': fields.date('Expected Birth Date',help="Expected Date of Delivery for the baby"),
'bloodrecieved_date': fields.date('Blood Recieved on:',help="When the blood sample is recieved"),
'bloodstorage_date': fields.date('Blood Stored on:',help="When the blood is stored in Dewar"),
'cordrecieved_date': fields.date('Cord Recieved on:',help="When the Cord is recieved"),
'cordstored_date': fields.date('Cord Stored on:',help="When the Cord is stored in Dewar"),
'termination_contract_date': fields.date('termination_contract_date',help="Your contract will be terminated on "),
'termination_reason': fields.char('Termination Reason',size=64,help="Reason for contract Termination"),
'allocation_cordblood': fields.date('Allocation CordBlood',help="CordBlood is allocated on"),
'endstorage_cordblood': fields.date('End Storage CordBlood',help="End date of storing of CordBlood is"),
'allocation_cord': fields.date('Allocation Cord',help="Cord is allocated on"),
'endstorage_cord': fields.date('End Storage Cord',help="End date of storing of Cord is"),
'mother_telephone':fields.char('Telephone',size=20),
'mother_mobile':fields.char('Mobile',size=20),
'mother_email': fields.char('Email',size=64),
'mother_fax': fields.char('Fax',size=20),
'mother_fiscalcode': fields.char('Fiscal Code',size=64),
'mother_iban': fields.char('IBAN',size=64),
'mother_bankaccountspain': fields.char('Bank accounts pain',size=64),
'mother_decaseddate': fields.date('Decased Date'),
'father_telephone':fields.char('Telephone',size=20),
'father_mobile':fields.char('Mobile',size=20),
'father_email': fields.char('Email',size=64),
'father_fax': fields.char('Fax',size=20),
'father_fiscalcode': fields.char('Fiscal Code',size=64),
'father_iban': fields.char('IBAN',size=64),
'father_bankaccountspain': fields.char('Bank accounts pain',size=64),
'father_decaseddate': fields.date('Decased Date'),
'child_telephone':fields.char('Telephone',size=20),
'child_mobile':fields.char('Mobile',size=20),
'child_email': fields.char('Email',size=64),
'child_fax': fields.char('Fax',size=20),
'child_fiscalcode': fields.char('Fiscal Code',size=64),
'child_iban': fields.char('IBAN',size=64),
'child_bankaccountspain': fields.char('Bank accounts pain',size=64),
'child_decaseddate': fields.date('Decased Date'),
}
After doing What you have planned. Answer to your question is, to disable fields, put atrrs on that. I will show you an exaple i.e as you have said a boolean field which will show sattus of payment - suppose field that field name is "paid" then, for all those fields which you want disable when payment is not yet done
attrs="{'invisible': [('paid', '=', False)]}"
to use this on field which you want to invisible, you can use like this
<field name="paid"/> <!--here, paid is the boolean field which shows status of payment -->
<field name="service" attrs="{'invisible': [('paid', '=', False)]}"/>
Not only on field, you can also give attrs to entire page like this, (so the page containing all the fields in that will be invisible)
<page string="Parent Details" attrs="{'invisible': [('paid', '=', False)]}">
If there are different Forms for First Process and Transaction Process, then Create different form for each process and add appropriate fields.
If Single Form with different operations (like state change on button click), then you can show / hide group view.
[EDIT]
e.g:
Assign group for Payment fields. and show the group if Payment form is opened. You have to take extra boolean field call "payment_active", which must be invisible in view. and assign 'True' value for Payment form and 'False' for other form.
In Xml:
<group string="Payment" attrs="{'invisible':[('payment_active','!=',True)]}">