[Merge] Merge with main addons.
bzr revid: mdi@tinyerp.com-20120927041600-nvsxljp352gp137g
This commit is contained in:
commit
bee06e6d43
|
@ -159,6 +159,5 @@ for a particular financial year and for preparation of vouchers there is a modul
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0080331923549',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -43,6 +43,5 @@ It assigns manager and user access rights to the Administrator and only user rig
|
|||
'installable': True,
|
||||
'auto_install': False,
|
||||
'application': True,
|
||||
'certificate': '00395091383933390541',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -47,7 +47,6 @@ Adds menu to show relevant information to each manager.You can also view the rep
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0042927202589',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -47,7 +47,6 @@ Allows to automatically select analytic accounts based on criterions:
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0074229833581',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -79,7 +79,6 @@ The analytic plan validates the minimum and maximum percentage at the time of cr
|
|||
'test': ['test/acount_analytic_plans_report.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0036417675373',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -46,7 +46,6 @@ account.""",
|
|||
'data': ['product_view.xml',],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate':'00557423080410733581',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -69,6 +69,5 @@ Three reports are available:
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0043819694157',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -38,9 +38,6 @@ If set to true it allows user to cancel entries & invoices.
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '001101250473177981989',
|
||||
|
||||
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -36,6 +36,5 @@ Deactivates minimal chart of accounts.
|
|||
'data': [],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'certificate': '0073332443901',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -64,7 +64,6 @@ Note that if you want to check the follow-up level for a given partner/account e
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0072481076453',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -65,6 +65,5 @@ have a new option to import payment orders as bank statement lines.
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0061703998541',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -49,7 +49,6 @@ You can customize the following attributes of the sequence:
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '00475376442024623469',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -72,7 +72,6 @@ This module manages:
|
|||
'test/case4_cad_chf.yml',
|
||||
'test/case_eur_usd.yml',
|
||||
],
|
||||
'certificate': '0037580727101',
|
||||
'auto_install': False,
|
||||
'application': True,
|
||||
'installable': True,
|
||||
|
|
|
@ -43,6 +43,5 @@ that have no counterpart in the general financial accounts.
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '00462253285027988541',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -45,6 +45,5 @@ compatible with older configurations.
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0082277138269',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -48,7 +48,6 @@ anonymization process to recover your previous data.
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '00719010980872226045',
|
||||
'images': ['images/anonymization1.jpeg','images/anonymization2.jpeg','images/anonymization3.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,6 @@ membership products (schemes).
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0078696047261',
|
||||
'images': ['images/association1.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -42,7 +42,6 @@ and can check logs.
|
|||
'demo': ['audittrail_demo.xml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0062572348749',
|
||||
'images': ['images/audittrail1.jpeg','images/audittrail2.jpeg','images/audittrail3.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -107,7 +107,6 @@ authentication if installed at the same time.
|
|||
],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate' : '001141446349334700221',
|
||||
'external_dependencies' : {
|
||||
'python' : ['ldap'],
|
||||
}
|
||||
|
|
|
@ -44,7 +44,6 @@ trigger an automatic reminder email.
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '001017908446466333429',
|
||||
'images': ['images/base_action_rule1.jpeg','images/base_action_rule2.jpeg','images/base_action_rule3.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -21,6 +21,5 @@
|
|||
|
||||
import base_calendar
|
||||
import crm_meeting
|
||||
import wizard
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
'name': 'Calendar',
|
||||
'version': '1.0',
|
||||
'depends': ['base', 'base_status', 'mail', 'base_action_rule'],
|
||||
'summary': 'Personnal & Shared Agenda',
|
||||
'summary': 'Personal & Shared Calendar',
|
||||
'description': """
|
||||
This is a full-featured calendar system.
|
||||
========================================
|
||||
|
@ -32,7 +32,6 @@ It supports:
|
|||
------------
|
||||
- Calendar of events
|
||||
- Recurring events
|
||||
- Invitations to people
|
||||
|
||||
If you need to manage your meetings, you should install the CRM module.
|
||||
""",
|
||||
|
@ -43,7 +42,6 @@ If you need to manage your meetings, you should install the CRM module.
|
|||
'data': [
|
||||
'security/calendar_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'wizard/base_calendar_invite_attendee_view.xml',
|
||||
'base_calendar_view.xml',
|
||||
'crm_meeting_view.xml',
|
||||
'base_calendar_data.xml',
|
||||
|
@ -53,7 +51,6 @@ If you need to manage your meetings, you should install the CRM module.
|
|||
'installable': True,
|
||||
'application': True,
|
||||
'auto_install': False,
|
||||
'certificate': '00694071962960352821',
|
||||
'images': ['images/base_calendar1.jpeg','images/base_calendar2.jpeg','images/base_calendar3.jpeg','images/base_calendar4.jpeg',],
|
||||
}
|
||||
|
||||
|
|
|
@ -1060,6 +1060,37 @@ rule or repeating pattern of time to exclude from the recurring rule."),
|
|||
'recurrency': fields.boolean('Recurrent', help="Recurrent Meeting"),
|
||||
}
|
||||
|
||||
def create_attendees(self, cr, uid, ids, context):
|
||||
att_obj = self.pool.get('calendar.attendee')
|
||||
user_obj = self.pool.get('res.users')
|
||||
current_user = user_obj.browse(cr, uid, uid, context=context)
|
||||
for event in self.browse(cr, uid, ids, context):
|
||||
attendees = {}
|
||||
for att in event.attendee_ids:
|
||||
attendees[att.partner_id.id] = True
|
||||
new_attendees = []
|
||||
mail_to = []
|
||||
for partner in event.partner_ids:
|
||||
if partner.id in attendees:
|
||||
continue
|
||||
att_id = self.pool.get('calendar.attendee').create(cr, uid, {
|
||||
'partner_id': partner.id,
|
||||
'user_id': partner.user_ids and partner.user_ids[0].id or False,
|
||||
'ref': self._name+','+str(event.id),
|
||||
'email': partner.email
|
||||
}, context=context)
|
||||
if partner.email:
|
||||
mail_to.append(partner.email)
|
||||
self.write(cr, uid, [event.id], {
|
||||
'attendee_ids': [(4, att_id)]
|
||||
}, context=context)
|
||||
new_attendees.append(att_id)
|
||||
|
||||
if mail_to and current_user.email:
|
||||
att_obj._send_mail(cr, uid, new_attendees, mail_to,
|
||||
email_from = current_user.email)
|
||||
return True
|
||||
|
||||
def default_organizer(self, cr, uid, context=None):
|
||||
user_pool = self.pool.get('res.users')
|
||||
user = user_pool.browse(cr, uid, uid, context=context)
|
||||
|
@ -1366,6 +1397,8 @@ rule or repeating pattern of time to exclude from the recurring rule."),
|
|||
vals['vtimezone'] = vals['vtimezone'][40:]
|
||||
|
||||
res = super(calendar_event, self).write(cr, uid, ids, vals, context=context)
|
||||
if vals.get('partner_ids', False):
|
||||
self.create_attendees(cr, uid, ids, context)
|
||||
|
||||
if ('alarm_id' in vals or 'base_calendar_alarm_id' in vals)\
|
||||
or ('date' in vals or 'duration' in vals or 'date_deadline' in vals):
|
||||
|
@ -1489,17 +1522,10 @@ rule or repeating pattern of time to exclude from the recurring rule."),
|
|||
if vals.get('vtimezone', '') and vals.get('vtimezone', '').startswith('/freeassociation.sourceforge.net/tzfile/'):
|
||||
vals['vtimezone'] = vals['vtimezone'][40:]
|
||||
|
||||
#updated_vals = self.onchange_dates(cr, uid, [],
|
||||
# vals.get('date', False),
|
||||
# vals.get('duration', False),
|
||||
# vals.get('date_deadline', False),
|
||||
# vals.get('allday', False),
|
||||
# context=context)
|
||||
#vals.update(updated_vals.get('value', {}))
|
||||
|
||||
res = super(calendar_event, self).create(cr, uid, vals, context)
|
||||
alarm_obj = self.pool.get('res.alarm')
|
||||
alarm_obj.do_alarm_create(cr, uid, [res], self._name, 'date', context=context)
|
||||
self.create_attendees(cr, uid, [res], context)
|
||||
return res
|
||||
|
||||
def do_tentative(self, cr, uid, ids, context=None, *args):
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
<header>
|
||||
<button name="do_tentative" states="needs-action,declined,accepted" string="Uncertain" type="object" class="oe_highlight"/>
|
||||
<button name="do_accept" string="Accept" states="needs-action,tentative,declined" type="object" class="oe_highlight"/>
|
||||
<button name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d" string="Delegate" type="action" states="needs-action,tentative,declined,accepted" context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}"/>
|
||||
<button name="do_decline" string="Decline" states="needs-action,tentative,accepted" type="object" class="oe_highlight"/>
|
||||
<field name="state" widget="statusbar"
|
||||
statusbar_visible="tentative,needs-action,accepted" statusbar_colors='{"proforma":"blue"}'/>
|
||||
|
@ -226,10 +225,6 @@
|
|||
<field name="description"/>
|
||||
</page>
|
||||
<page string="Invitation Detail">
|
||||
<button string="Invite People"
|
||||
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
|
||||
icon="terp-partner" type="action"
|
||||
context="{'model' : 'calendar.event', 'attendee_field':'attendee_ids'}" colspan="2"/>
|
||||
<field name="attendee_ids" colspan="4"
|
||||
nolabel="1" widget="one2many" mode="tree">
|
||||
<tree string="Invitation details" editable="top">
|
||||
|
@ -248,12 +243,6 @@
|
|||
<button name="do_decline" string="Decline"
|
||||
states="needs-action,tentative,accepted"
|
||||
type="object" icon="gtk-cancel"/>
|
||||
<button
|
||||
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
|
||||
string="Delegate" type="action"
|
||||
icon="gtk-sort-descending"
|
||||
states="needs-action,tentative,declined,accepted"
|
||||
context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}"/>
|
||||
</tree>
|
||||
<form string="Invitation details" version="7.0">
|
||||
<notebook colspan="4">
|
||||
|
@ -281,13 +270,6 @@
|
|||
states="needs-action,tentative,accepted"
|
||||
type="object"
|
||||
icon="gtk-cancel"/>
|
||||
<button
|
||||
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
|
||||
string="Delegate"
|
||||
type="action"
|
||||
icon="gtk-sort-descending"
|
||||
states="needs-action,tentative,declined,accepted"
|
||||
context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
|
|
|
@ -71,6 +71,34 @@ class crm_meeting(base_state, osv.Model):
|
|||
default['attendee_ids'] = False
|
||||
return super(crm_meeting, self).copy(cr, uid, id, default, context)
|
||||
|
||||
def onchange_partner_ids(self, cr, uid, ids, value, context=None):
|
||||
""" The basic purpose of this method is to check that destination partners
|
||||
effectively have email addresses. Otherwise a warning is thrown.
|
||||
:param value: value format: [[6, 0, [3, 4]]]
|
||||
"""
|
||||
res = {'value': {}}
|
||||
if not value or not value[0] or not value[0][0] == 6:
|
||||
return
|
||||
res.update(self.check_partners_email(cr, uid, value[0][2], context=context))
|
||||
return res
|
||||
|
||||
def check_partners_email(self, cr, uid, partner_ids, context=None):
|
||||
""" Verify that selected partner_ids have an email_address defined.
|
||||
Otherwise throw a warning. """
|
||||
partner_wo_email_lst = []
|
||||
for partner in self.pool.get('res.partner').browse(cr, uid, partner_ids, context=context):
|
||||
if not partner.email:
|
||||
partner_wo_email_lst.append(partner)
|
||||
if not partner_wo_email_lst:
|
||||
return {}
|
||||
warning_msg = _('The following contacts have no email address :')
|
||||
for partner in partner_wo_email_lst:
|
||||
warning_msg += '\n- %s' % (partner.name)
|
||||
return {'warning': {
|
||||
'title': _('Email addresses not found'),
|
||||
'message': warning_msg,
|
||||
}
|
||||
}
|
||||
# ----------------------------------------
|
||||
# OpenChatter
|
||||
# ----------------------------------------
|
||||
|
@ -80,7 +108,7 @@ class crm_meeting(base_state, osv.Model):
|
|||
return [('date','<=',time.strftime('%Y-%M-%D 23:59:59')), ('date_deadline','>=', time.strftime('%Y-%M-%D 00:00:00')), ('user_id','=',uid)]
|
||||
|
||||
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
|
||||
return 'Meeting'
|
||||
return _('Meeting')
|
||||
|
||||
def case_open_send_note(self, cr, uid, ids, context=None):
|
||||
return self.message_post(cr, uid, ids, body=_("Meeting <b>confirmed</b>."), context=context)
|
||||
|
|
|
@ -80,7 +80,9 @@
|
|||
</h1>
|
||||
<label for="partner_ids" class="oe_edit_only"/>
|
||||
<h2>
|
||||
<field name="partner_ids" widget="many2many_tags"/>
|
||||
<field name="partner_ids" widget="many2many_tags"
|
||||
context="{'force_email':True}"
|
||||
on_change="onchange_partner_ids(partner_ids)"/>
|
||||
</h2>
|
||||
</div>
|
||||
<notebook>
|
||||
|
@ -88,11 +90,12 @@
|
|||
<group>
|
||||
<group>
|
||||
<field name="date" string="Starting at"/>
|
||||
<label for="duration" attrs="{'invisible': [('allday','=',True)]}"/>
|
||||
<div attrs="{'invisible': [('allday','=',True)]}">
|
||||
<label for="duration"/>
|
||||
<div>
|
||||
<field name="duration" widget="float_time"
|
||||
on_change="onchange_dates(date,duration,False,allday)"
|
||||
class="oe_inline"/> hours
|
||||
class="oe_inline" attrs="{'invisible': [('allday','=',True)]}"/>
|
||||
<label string="hours" attrs="{'invisible': [('allday','=',True)]}"/>
|
||||
(<field name="allday" on_change="onchange_dates(date,False,False,allday)" class="oe_inline"/>
|
||||
<label for="allday" string="All Day?"/>)
|
||||
</div>
|
||||
|
@ -165,18 +168,16 @@
|
|||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Invitation Detail">
|
||||
<button string="Invite People"
|
||||
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
|
||||
type="action"
|
||||
attrs="{'readonly': [('state', '=', 'done')]}"
|
||||
context="{'model' : 'crm.meeting', 'attendee_field':'attendee_ids'}" colspan="2"/>
|
||||
<!--
|
||||
Temporarily removing invitation feature as the implementation
|
||||
was not clean. Invitation should be trigerred automatically
|
||||
based on partner_ids.
|
||||
-->
|
||||
<page string="Invitations">
|
||||
<field name="attendee_ids" widget="one2many" mode="tree">
|
||||
<tree string="Invitation details" editable="top">
|
||||
<field name="sent_by_uid" string="From"/>
|
||||
<field name="user_id" string="To"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="email" string="Mail To"/>
|
||||
<field name="role" />
|
||||
<field name="state" />
|
||||
<button name="do_tentative"
|
||||
states="needs-action,declined,accepted"
|
||||
|
@ -188,11 +189,6 @@
|
|||
<button name="do_decline" string="Decline"
|
||||
states="needs-action,tentative,accepted"
|
||||
type="object" />
|
||||
<button
|
||||
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
|
||||
string="Delegate" type="action"
|
||||
states="needs-action,tentative,declined,accepted"
|
||||
context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}" />
|
||||
</tree>
|
||||
<form string="Invitation details" version="7.0">
|
||||
<header>
|
||||
|
@ -205,10 +201,6 @@
|
|||
<button name="do_decline" type="object"
|
||||
states="needs-action,tentative,accepted"
|
||||
string="Decline" />
|
||||
<button name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d" type="action"
|
||||
states="needs-action,tentative,declined,accepted"
|
||||
string="Delegate"
|
||||
context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}" />
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,open,done"/>
|
||||
</header>
|
||||
<group>
|
||||
|
@ -219,6 +211,7 @@
|
|||
<field name="role" />
|
||||
</group>
|
||||
<group>
|
||||
<field name="partner_id"/>
|
||||
<field name="user_id"/>
|
||||
</group>
|
||||
</group>
|
||||
|
@ -307,7 +300,7 @@
|
|||
<p class="oe_view_nocontent_create">
|
||||
Click to schedule a new meeting.
|
||||
</p><p>
|
||||
The agenda is shared between employees and fully integrated with
|
||||
The calendar is shared between employees and fully integrated with
|
||||
other applications such as the employee holidays or the business
|
||||
opportunities.
|
||||
</p>
|
||||
|
@ -339,10 +332,10 @@
|
|||
</record>
|
||||
|
||||
<menuitem id="menu_crm_meeting" parent="base.menu_sales" sequence="8"
|
||||
name="Agenda" action="action_crm_meeting"/>
|
||||
name="Calendar" action="action_crm_meeting"/>
|
||||
|
||||
<menuitem name="Agenda"
|
||||
id="mail_menu_agenda" parent="mail.mail_my_stuff"
|
||||
<menuitem name="Calendar"
|
||||
id="mail_menu_calendar" parent="mail.mail_my_stuff"
|
||||
sequence="10" action="action_crm_meeting"/>
|
||||
|
||||
</data>
|
||||
|
|
|
@ -54,24 +54,3 @@
|
|||
-
|
||||
!python {model: calendar.event}: |
|
||||
self.write(cr, uid, [ref("calendar_event_alldaytestevent0")], {'alarm_id': ref("res_alarm_daybeforeeventstarts0")})
|
||||
-
|
||||
In order to assign attendee I will invite Demo user
|
||||
-
|
||||
!record {model: base_calendar.invite.attendee, id: base_calendar_invite_attendee_0}:
|
||||
type: internal
|
||||
send_mail: False
|
||||
partner_id: base.res_partner_9 # Put bcz of problem in read
|
||||
user_ids:
|
||||
- base.user_demo
|
||||
-
|
||||
Then I click on Invite Button
|
||||
-
|
||||
!python {model: base_calendar.invite.attendee}: |
|
||||
self.do_invite(cr, uid, [ref("base_calendar_invite_attendee_0")], {'active_id': ref("calendar_event_alldaytestevent0"), 'model' : 'calendar.event', 'attendee_field':'attendee_ids'})
|
||||
-
|
||||
Now I will Accept this invitation
|
||||
-
|
||||
!python {model: calendar.attendee}: |
|
||||
ids = self.search(cr, uid, [('ref', '=', 'calendar.event' + ',' + str(ref("calendar_event_alldaytestevent0")))])
|
||||
if ids:
|
||||
self.do_accept(cr, uid, ids, context=context)
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import base_calendar_invite_attendee
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -1,170 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from .. import base_calendar
|
||||
from osv import fields, osv
|
||||
from tools.translate import _
|
||||
import tools
|
||||
|
||||
|
||||
class base_calendar_invite_attendee(osv.osv_memory):
|
||||
"""
|
||||
Invite attendee.
|
||||
"""
|
||||
|
||||
_name = "base_calendar.invite.attendee"
|
||||
_description = "Invite Attendees"
|
||||
|
||||
_columns = {
|
||||
'type': fields.selection([('internal', 'Internal User'), \
|
||||
('external', 'External Email'), \
|
||||
('partner', 'Partner Contacts')], 'Type', required=True, help="Select whom you want to Invite"),
|
||||
'user_ids': fields.many2many('res.users', 'invite_user_rel',
|
||||
'invite_id', 'user_id', 'Users'),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner'),
|
||||
'email': fields.char('Email', size=124, help="Provide external email address who will receive this invitation."),
|
||||
'contact_ids': fields.many2many('res.partner', 'invite_contact_rel',
|
||||
'invite_id', 'contact_id', 'Contacts'),
|
||||
'send_mail': fields.boolean('Send mail?', help='Check this if you want to \
|
||||
send an Email to Invited Person')
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'type': 'internal',
|
||||
'send_mail': True
|
||||
}
|
||||
|
||||
def do_invite(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
Invites attendee for meeting..
|
||||
@param cr: the current row, from the database cursor,
|
||||
@param uid: the current user’s ID for security checks,
|
||||
@param ids: List of base calendar invite attendee’s IDs.
|
||||
@param context: A standard dictionary for contextual values
|
||||
@return: Dictionary of {}.
|
||||
"""
|
||||
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
model = False
|
||||
context_id = context and context.get('active_id', False) or False
|
||||
if not context or not context.get('model'):
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
else:
|
||||
model = context.get('model')
|
||||
|
||||
model_field = context.get('attendee_field', False)
|
||||
obj = self.pool.get(model)
|
||||
res_obj = obj.browse(cr, uid, context_id, context=context)
|
||||
att_obj = self.pool.get('calendar.attendee')
|
||||
user_obj = self.pool.get('res.users')
|
||||
current_user = user_obj.browse(cr, uid, uid, context=context)
|
||||
|
||||
for datas in self.read(cr, uid, ids, context=context):
|
||||
type = datas.get('type')
|
||||
vals = []
|
||||
mail_to = []
|
||||
attendees = []
|
||||
ref = {}
|
||||
|
||||
if not model == 'calendar.attendee':
|
||||
if context_id:
|
||||
ref = {'ref': '%s,%s' % (model, base_calendar.base_calendar_id2real_id(context_id))}
|
||||
else:
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
if type == 'internal':
|
||||
|
||||
if not datas.get('user_ids'):
|
||||
raise osv.except_osv(_('Error!'), ("Please select any user."))
|
||||
for user_id in datas.get('user_ids'):
|
||||
user = user_obj.browse(cr, uid, user_id)
|
||||
res = {
|
||||
'user_id': user_id,
|
||||
'email': user.email
|
||||
}
|
||||
res.update(ref)
|
||||
vals.append(res)
|
||||
if user.email:
|
||||
mail_to.append(user.email)
|
||||
|
||||
elif type == 'external' and datas.get('email'):
|
||||
res = {'email': datas['email']}
|
||||
res.update(ref)
|
||||
vals.append(res)
|
||||
mail_to.append(datas['email'])
|
||||
|
||||
elif type == 'partner':
|
||||
add_obj = self.pool.get('res.partner')
|
||||
for contact in add_obj.browse(cr, uid, datas['contact_ids']):
|
||||
res = {
|
||||
'partner_id': contact.id,
|
||||
'email': contact.email
|
||||
}
|
||||
res.update(ref)
|
||||
vals.append(res)
|
||||
if contact.email:
|
||||
mail_to.append(contact.email)
|
||||
|
||||
for att_val in vals:
|
||||
if model == 'calendar.attendee':
|
||||
att = att_obj.browse(cr, uid, context_id)
|
||||
att_val.update({
|
||||
'parent_ids': [(4, att.id)],
|
||||
'ref': att.ref and (att.ref._name + ',' +str(att.ref.id)) or False
|
||||
})
|
||||
|
||||
attendees.append(att_obj.create(cr, uid, att_val))
|
||||
if model_field:
|
||||
for attendee in attendees:
|
||||
obj.write(cr, uid, res_obj.id, {model_field: [(4, attendee)]})
|
||||
|
||||
if datas.get('send_mail'):
|
||||
if not mail_to:
|
||||
name = map(lambda x: x[1], filter(lambda x: type==x[0], \
|
||||
self._columns['type'].selection))
|
||||
raise osv.except_osv(_('Error!'), _("%s must have an email address to send mail.") %(name[0]))
|
||||
att_obj._send_mail(cr, uid, attendees, mail_to, \
|
||||
email_from = current_user.email or tools.config.get('email_from', False))
|
||||
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
|
||||
def onchange_partner_id(self, cr, uid, ids, partner_id, *args, **argv):
|
||||
"""
|
||||
Make entry on contact_ids on change of partner_id field.
|
||||
@param cr: the current row, from the database cursor,
|
||||
@param uid: the current user’s ID for security checks,
|
||||
@param ids: List of base calendar invite attendee’s IDs.
|
||||
@param partner_id: id of Partner
|
||||
@return: dictionary of value.
|
||||
"""
|
||||
|
||||
if not partner_id:
|
||||
return {'value': {'contact_ids': []}}
|
||||
cr.execute('SELECT id FROM res_partner \
|
||||
WHERE id=%s or parent_id =%s' , (partner_id,partner_id,))
|
||||
contacts = map(lambda x: x[0], cr.fetchall())
|
||||
return {'value': {'contact_ids': contacts}}
|
||||
|
||||
base_calendar_invite_attendee()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -1,55 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<!-- Attendee invite wizard-->
|
||||
|
||||
<record id="view_calendar_invite_attendee_wizard"
|
||||
model="ir.ui.view">
|
||||
<field name="name">Invite Attendees</field>
|
||||
<field name="model">base_calendar.invite.attendee</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Invite People" version="7.0">
|
||||
<separator string="Invite People" colspan="4"/>
|
||||
<field name="type"/>
|
||||
<field name="send_mail"/>
|
||||
<notebook colspan="4">
|
||||
<page string="Data">
|
||||
<group col="2" colspan="6" attrs="{'invisible': [('type', '!=', 'external')]}">
|
||||
<field name="email" colspan="4" attrs="{'required': [('type', '=', 'external')]}"/>
|
||||
</group>
|
||||
<group col="2" colspan="6" attrs="{'invisible': [('type', '!=', 'internal')]}">
|
||||
<separator string="Users" colspan="4"/>
|
||||
<field name="user_ids" colspan="4" nolabel="1" height="180"/>
|
||||
<newline/>
|
||||
</group>
|
||||
<group col="2" colspan="6" attrs="{'invisible': [('type', '!=', 'partner')]}">
|
||||
<field name="partner_id" colspan="2" on_change="onchange_partner_id(partner_id)" attrs="{'required': [('type', '=', 'partner')]}"/>
|
||||
<newline/>
|
||||
<separator string="Partner Contacts" colspan="6"/>
|
||||
<field name="contact_ids" colspan="4" nolabel="1" domain="[('id', 'child_of', [partner_id])]" attrs="{'readonly': [('type', '!=', 'partner')]}"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
<footer>
|
||||
<button name="do_invite" string="Invite" type="object" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Attendee invite action-->
|
||||
|
||||
<record id="action_view_calendar_invite_attendee_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Invite Attendees</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">base_calendar.invite.attendee</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -58,7 +58,6 @@ will disable LDAP authentication completely if installed at the same time.
|
|||
'data': [],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate': '00721290471310299725',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -35,7 +35,6 @@ with a single statement.
|
|||
'data': ['base_iban_data.xml' , 'base_iban_view.xml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0050014379549',
|
||||
'images': ['images/base_iban1.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -42,7 +42,6 @@ This module generates the Technical Guides of selected modules in Restructured T
|
|||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'certificate': '001288481437217734509',
|
||||
'images': ['images/base_module_doc_rst1.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -53,7 +53,6 @@ Select datetime criteria of recording and objects to be recorded and Record modu
|
|||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'certificate': '0083134865813',
|
||||
'images': ['images/base_module_record1.jpeg','images/base_module_record2.jpeg','images/base_module_record3.jpeg',]
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -38,7 +38,6 @@ Once you have modified it you can upload the report using the same wizard.
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0056379010493',
|
||||
'images': ['images/base_report_designer1.jpeg','images/base_report_designer2.jpeg',],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -43,7 +43,6 @@ Shows you a list of applications features to install from.
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0086711085869',
|
||||
'images': ['images/base_setup1.jpeg','images/base_setup2.jpeg','images/base_setup3.jpeg','images/base_setup4.jpeg',],
|
||||
'js': ['static/src/js/base_setup.js'],
|
||||
'css': ['static/src/css/base_setup.css'],
|
||||
|
|
|
@ -13,7 +13,6 @@ Creates menu link for Tools from where tools like survey, lunch, idea are access
|
|||
""",
|
||||
'data': ['tools_view.xml'],
|
||||
'installable': True,
|
||||
'certificate' : '00571588675379342237'
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -58,7 +58,6 @@ only the country code will be validated.
|
|||
'data': ['base_vat_view.xml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0084849360989',
|
||||
'images': ['images/1_partner_vat.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,6 @@ Allows users to create custom dashboard.
|
|||
'qweb': ['static/src/xml/*.xml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0076912305725',
|
||||
'images': ['images/1_dashboard_definition.jpeg','images/2_publish_note.jpeg','images/3_admin_dashboard.jpeg',],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -69,7 +69,6 @@ To access OpenERP Calendar using WebCal to remote site use the URL like:
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '00924841426645403741',
|
||||
'images': ['images/calendar_collections.jpeg','images/calendars.jpeg','images/export_ics_file.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,6 @@ Adds a Claim link to the delivery order.
|
|||
'claim_delivery_data.xml',],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate' : '001101649349223746957',
|
||||
'images': ['images/1_claim_link_delivery_order.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -122,7 +122,6 @@ Dashboard for CRM will include:
|
|||
'installable': True,
|
||||
'application': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0079056041421',
|
||||
'images': ['images/sale_crm_crm_dashboard.png', 'images/crm_dashboard.jpeg','images/leads.jpeg','images/meetings.jpeg','images/opportunities.jpeg','images/outbound_calls.jpeg','images/stages.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -42,7 +42,6 @@ Caldav features in Meeting.
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '001088048737252670109',
|
||||
'images': ['images/caldav_browse_step1.jpeg','images/caldav_browse_step2.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,6 @@ automatically new claims based on incoming emails.
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '00612027414703404749',
|
||||
'images': ['images/claim_categories.jpeg','images/claim_stages.jpeg','images/claims.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,6 @@ and categorize your interventions with a channel and a priority level.
|
|||
'test': ['test/process/help-desk.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '00830691522781519309',
|
||||
'images': ['images/helpdesk_analysis.jpeg','images/helpdesk_categories.jpeg','images/helpdesk_requests.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -50,7 +50,6 @@ You can also use the geolocalization without using the GPS coordinates.
|
|||
'test': ['test/partner_assign.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '00503409558942442061',
|
||||
'images': ['images/partner_geo_localization.jpeg','images/partner_grade.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,6 @@ were overlapping.
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0033984979005',
|
||||
'images': ['images/profiling_questionnaires.jpeg','images/profiling_questions.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -37,7 +37,6 @@ The decimal precision is configured per company.
|
|||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'certificate' : '001307317809612974621',
|
||||
'images': ['images/1_decimal_accuracy_form.jpeg','images/1_decimal_accuracy_list.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,6 @@ invoices from picking, OpenERP is able to add and compute the shipping line.
|
|||
'test': ['test/delivery_cost.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0033981912253',
|
||||
'images': ['images/1_delivery_method.jpeg','images/2_delivery_pricelist.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -59,7 +59,6 @@ ATTENTION:
|
|||
'test': ['test/document_test2.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0070515416461',
|
||||
'images': ['images/1_directories.jpeg','images/2_storage_media.jpeg','images/3_directories_structure.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,6 @@ FTP client.
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '00934787762705016005',
|
||||
'images': ['images/1_configure_ftp.jpeg','images/2_document_browse.jpeg','images/3_document_ftp.jpeg'],
|
||||
'post_load': 'post_load',
|
||||
}
|
||||
|
|
|
@ -42,7 +42,6 @@ Web pages
|
|||
'test': ['test/document_page_test00.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0086363630317',
|
||||
'images': [],
|
||||
'css' : ['static/src/css/document_page.css'],
|
||||
}
|
||||
|
|
|
@ -70,7 +70,6 @@ which needs explicit configuration in openerp-server.conf too.
|
|||
],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate' : '001236490750845657973',
|
||||
'images': ['images/dav_properties.jpeg','images/directories_structure_principals.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,6 @@ documentation at http://doc.openerp.com.
|
|||
'qweb': ['static/src/xml/*.xml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '002046536359186',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -65,7 +65,6 @@ campaigns on any OpenERP document.
|
|||
'demo': ['res_partner_demo.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '00817073628967384349',
|
||||
'images': ['images/1_email_account.jpeg','images/2_email_template.jpeg','images/3_emails.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,6 @@ This module allows you to create retro planning for managing your events.
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0069726863885',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="purchase_ok" position="after">
|
||||
<field name="purchase_ok" position="before">
|
||||
<field name="event_ok" on_change="onchange_event_ok(event_ok, context)"/>
|
||||
<label for="event_ok"/>
|
||||
</field>
|
||||
|
|
|
@ -64,7 +64,6 @@ For more specific needs, you may also assign custom-defined actions
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '00692978332890137453',
|
||||
'images': ['images/1_email_servers.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -134,8 +134,8 @@ class config(osv.osv):
|
|||
_description = "Google Docs templates config"
|
||||
|
||||
_columns = {
|
||||
'model_id': fields.many2one('ir.model', 'Model'),
|
||||
'gdocs_resource_id': fields.char('Google resource ID', size=64,help='''
|
||||
'model_id': fields.many2one('ir.model', 'Model', required=True),
|
||||
'gdocs_resource_id': fields.char('Google Resource ID to Use as Template', size=64,help='''
|
||||
This is the id of the template document, on google side. You can find it thanks to its URL:
|
||||
*for a text document with url like `https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is `document:123456789`
|
||||
*for a spreadsheet document with url like `https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, the ID is `spreadsheet:123456789`
|
||||
|
@ -143,7 +143,7 @@ This is the id of the template document, on google side. You can find it thanks
|
|||
*for a drawing document with url like `https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is `drawings:123456789`
|
||||
...
|
||||
'''),
|
||||
'name_template': fields.char('GDoc name template ', size=64, help='This is the name which appears on google side'),
|
||||
'name_template': fields.char('Google Doc Name Pattern', size=64, help='Choose how the new google docs will be named, on google side'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
|
|
@ -13,7 +13,7 @@ var _t = instance.web._t;
|
|||
});
|
||||
if (! flag) {
|
||||
this.add_items('files', [
|
||||
{ label: _t('Google Doc'), callback: self.on_google_doc },
|
||||
{ label: _t('Add Google Doc...'), callback: self.on_google_doc },
|
||||
]);
|
||||
}
|
||||
},
|
||||
|
|
|
@ -40,6 +40,5 @@ Using this you can directly open Google Map from the URL widget.""",
|
|||
'js': ['static/src/js/google_map.js'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0029498930765',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -68,7 +68,6 @@ You can manage:
|
|||
'installable': True,
|
||||
'application': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0086710558965',
|
||||
'css': [ 'static/src/css/hr.css' ],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -51,7 +51,6 @@ actions(Sign in/Sign out) performed by them.
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0063495605613',
|
||||
|
||||
#web
|
||||
"js": ["static/src/js/attendance.js"],
|
||||
|
|
|
@ -48,6 +48,5 @@ You can assign several contracts per employee.
|
|||
'test': ['test/test_hr_contract.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0046298028637',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -62,7 +62,6 @@ Key Features
|
|||
],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate' : '00883207679172998429',
|
||||
'application': True,
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -67,7 +67,6 @@ This module also uses analytic accounting and is compatible with the invoice on
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0062479841789',
|
||||
'application': True,
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -195,8 +195,11 @@
|
|||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="purchase_ok" position="after">
|
||||
<field name="hr_expense_ok" on_change="on_change_hr_expense_ok(hr_expense_ok)"/>
|
||||
<field name="purchase_ok" position="before">
|
||||
<div>
|
||||
<field name="hr_expense_ok" on_change="on_change_hr_expense_ok(hr_expense_ok)"/>
|
||||
<label for="hr_expense_ok"/>
|
||||
</div>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -66,6 +66,5 @@ A synchronization with an internal agenda (Meetings of the CRM module) is also p
|
|||
'installable': True,
|
||||
'application': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0086579209325',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -67,7 +67,6 @@ Generic Payroll system.
|
|||
'demo': ['hr_payroll_demo.xml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '001046261404562128861',
|
||||
'application': False,
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,6 @@ Generic Payroll system Integrated with Accounting.
|
|||
'test': ['test/hr_payroll_account.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '00923971112835220957',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -64,7 +64,6 @@ You can define the different phases of interviews and easily rate the applicant
|
|||
'test': ['test/recruitment_process.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '001073437025460275621',
|
||||
'application': True,
|
||||
}
|
||||
|
||||
|
|
|
@ -62,6 +62,5 @@ up a management by affair.
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0071405533469',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -54,6 +54,5 @@ reports.""",
|
|||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0056091842381',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -64,7 +64,6 @@ The validation can be configured in the company:
|
|||
'test':['test/test_hr_timesheet_sheet.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0073297700829',
|
||||
'application': True,
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -43,7 +43,6 @@ document and Wiki based Hidden.
|
|||
'demo': ['knowledge_demo.xml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '001278773815843749581',
|
||||
'images': ['images/1_config_knowledge.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -76,7 +76,6 @@ Wizards provided by this module:
|
|||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'certificate': '0031977724637',
|
||||
'images': ['images/1_config_chart_l10n_be.jpeg','images/2_l10n_be_chart.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -105,7 +105,6 @@ If required, you can manually adjust the descriptions via the CODA configuration
|
|||
'auto_install': False,
|
||||
'installable': True,
|
||||
'license': 'AGPL-3',
|
||||
'certificate' : '001237207321716002029',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -75,7 +75,6 @@ for online use of 'private modules'.""",
|
|||
'l10n_br_view.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'certificate' : '001280994939126801405',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -46,7 +46,6 @@ Canadian accounting charts and localizations.
|
|||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'certificate': '00941680933773696173',
|
||||
'images': ['images/config_chart_l10n_ca.jpeg','images/l10n_ca_chart.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -102,7 +102,6 @@ TODO :
|
|||
],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate': '001103836064567088989',
|
||||
'images': ['images/config_chart_l10n_ch.jpeg','images/l10n_ch_chart.jpeg']
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -40,7 +40,6 @@
|
|||
'license': 'GPL-3',
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate': '00925445983542952285',
|
||||
'images': ['images/config_chart_l10n_cn.jpeg','images/l10n_cn_chart.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -68,7 +68,6 @@ please go to http://translations.launchpad.net/openerp-costa-rica.
|
|||
'license': 'Other OSI approved licence',
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '00531476623680631853',
|
||||
'images': ['images/config_chart_l10n_cr.jpeg','images/l10n_cr_chart.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -148,7 +148,6 @@ German accounting chart and localization.
|
|||
'l10n_de_wizard.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'certificate': '00517849017945584893',
|
||||
'images': ['images/config_chart_l10n_de.jpeg','images/l10n_de_chart.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,6 @@ Accounting chart and localization for Ecuador.
|
|||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'certificate' : '001226484516187330589',
|
||||
'images': ['images/config_chart_l10n_ec.jpeg','images/l10n_ec_chart.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -54,7 +54,6 @@ Spanish Charts of Accounts (PGCE 2008).
|
|||
'demo': [],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate': '00408828172062583229',
|
||||
'images': ['images/config_chart_l10n_es.jpeg','images/l10n_es_chart.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -68,7 +68,6 @@ configuration of their taxes and fiscal positions manually.
|
|||
],
|
||||
'test': ['test/l10n_fr_report.yml'],
|
||||
'demo': [],
|
||||
'certificate': '00435321693876313629',
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_fr.jpeg','images/l10n_fr_chart.jpeg'],
|
||||
|
|
|
@ -53,7 +53,6 @@ Accounts in OpenERP: the first with the type 'RIB', the second with the type 'IB
|
|||
'depends': ['account', 'base_iban'],
|
||||
'data': ['bank_data.xml', 'bank_view.xml'],
|
||||
'installable': True,
|
||||
'certificate': '003407950790',
|
||||
'auto_install': False,
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,6 @@ Greek accounting chart and localization.
|
|||
'l10n_gr_wizard.xml'
|
||||
],
|
||||
'installable': True,
|
||||
'certificate': '001146244418929008029',
|
||||
'images': ['images/config_chart_l10n_gr.jpeg','images/l10n_gr_chart.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -54,7 +54,6 @@ taxes and the Quetzal currency.""",
|
|||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'certificate': '00815146661827601309',
|
||||
'images': ['images/config_chart_l10n_gt.jpeg','images/l10n_gt_chart.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -45,7 +45,6 @@ Indian accounting chart and localization.
|
|||
],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate' : '001308250150600713245',
|
||||
'images': ['images/config_chart_l10n_in.jpeg','images/l10n_in_chart.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -52,6 +52,5 @@ Italian accounting chart and localization.
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate' : '00926677190009155165',
|
||||
'images': ['images/config_chart_l10n_it.jpeg','images/l10n_it_chart.jpeg'],
|
||||
}
|
||||
|
|
|
@ -45,7 +45,6 @@ This is the base module to manage the accounting chart for Luxembourg.
|
|||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'certificate': '0078164766621',
|
||||
'images': ['images/config_chart_l10n_lu.jpeg','images/l10n_lu_chart.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -47,7 +47,6 @@ Seddik au cours du troisième trimestre 2010.""",
|
|||
'demo' : [],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate' : '00599614652359069981',
|
||||
'images': ['images/config_chart_l10n_ma.jpeg','images/l10n_ma_chart.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -37,7 +37,6 @@ Mexican accounting chart and localization.
|
|||
],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate': '00858539161332598061',
|
||||
'images': ['images/config_chart_l10n_mx.jpeg','images/l10n_mx_chart.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -127,7 +127,6 @@ De extra cijfers worden dan achter het rekeningnummer aangevult met 'nullen'.
|
|||
],
|
||||
'demo' : [],
|
||||
'installable': True,
|
||||
'certificate': '00976041422960053277',
|
||||
'images': ['images/config_chart_l10n_nl.jpeg','images/l10n_nl_chart.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -42,7 +42,6 @@ SUNAT 2011 (PCGE 2010).
|
|||
'demo': [],
|
||||
'active': False,
|
||||
'installable': True,
|
||||
'certificate' : '0045046493412',
|
||||
'images': ['images/config_chart_l10n_pe.jpeg','images/l10n_pe_chart.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -41,7 +41,6 @@ VAT 0%, 7% i 22%. Moduł ustawia też konta do kupna i sprzedaży towarów zakł
|
|||
],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate' : '00885794372803776829',
|
||||
'images': ['images/config_chart_l10n_pl.jpeg','images/l10n_pl_chart.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -36,7 +36,6 @@ Romanian accounting chart and localization.
|
|||
'data' : ['partner_view.xml','account_tax_code.xml','account_chart.xml','account_tax.xml','l10n_chart_ro_wizard.xml'],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate' : '001308250150602948125',
|
||||
'images': ['images/config_chart_l10n_ro.jpeg','images/l10n_ro_chart.jpeg'],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -34,7 +34,6 @@ Thai accounting chart and localization.
|
|||
'depends': ['account_chart'],
|
||||
'data': [ 'account_data.xml' ],
|
||||
'installable': True,
|
||||
'certificate' : '00722263103978957725',
|
||||
'images': ['images/config_chart_l10n_th.jpeg','images/l10n_th_chart.jpeg'],
|
||||
}
|
||||
|
||||
|
|
|
@ -46,7 +46,6 @@ Provide Templates for Chart of Accounts, Taxes for Uruguay.
|
|||
'demo': [],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'certificate': '0078287892698',
|
||||
'images': ['images/config_chart_l10n_uy.jpeg','images/l10n_uy_chart.jpeg'],
|
||||
}
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue