[IMP]total issue count
bzr revid: kbh@tinyerp.com-20120330055747-zwrd8seqafjxotwc bzr revid: kbh@tinyerp.com-20120330060523-npm8ujwskqj0x70m bzr revid: kbh@tinyerp.com-20120330083437-pm3azv3r9nn7et5b bzr revid: kbh@tinyerp.com-20120330095321-5vn1owb54tdrmk6f
This commit is contained in:
commit
115a65dcc4
|
@ -0,0 +1,45 @@
|
|||
# Polish translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-03-28 14:21+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-03-29 04:35+0000\n"
|
||||
"X-Generator: Launchpad (build 15032)\n"
|
||||
|
||||
#. module: base_crypt
|
||||
#: model:ir.model,name:base_crypt.model_res_users
|
||||
msgid "res.users"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_crypt
|
||||
#: sql_constraint:res.users:0
|
||||
msgid "You can not have two users with the same login !"
|
||||
msgstr "Nie może być dwóch użytkowników o tym samym loginie !"
|
||||
|
||||
#. module: base_crypt
|
||||
#: constraint:res.users:0
|
||||
msgid "The chosen company is not in the allowed companies for this user"
|
||||
msgstr "Wybrana firma jest niedozwolona dla tego użytkownika"
|
||||
|
||||
#. module: base_crypt
|
||||
#: code:addons/base_crypt/crypt.py:140
|
||||
#, python-format
|
||||
msgid "Please specify the password !"
|
||||
msgstr "Proszę podać hasło!"
|
||||
|
||||
#. module: base_crypt
|
||||
#: code:addons/base_crypt/crypt.py:140
|
||||
#, python-format
|
||||
msgid "Error"
|
||||
msgstr "Błąd"
|
|
@ -0,0 +1,33 @@
|
|||
# Polish translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-03-28 14:18+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-03-29 04:35+0000\n"
|
||||
"X-Generator: Launchpad (build 15032)\n"
|
||||
|
||||
#. module: crm_caldav
|
||||
#: model:ir.actions.act_window,name:crm_caldav.action_caldav_browse
|
||||
msgid "Caldav Browse"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_caldav
|
||||
#: model:ir.ui.menu,name:crm_caldav.menu_caldav_browse
|
||||
msgid "Synchronize This Calendar"
|
||||
msgstr "Synchronizuj ten kalendarz"
|
||||
|
||||
#. module: crm_caldav
|
||||
#: model:ir.model,name:crm_caldav.model_crm_meeting
|
||||
msgid "Meeting"
|
||||
msgstr "Zebranie"
|
|
@ -53,6 +53,7 @@ Note that:
|
|||
],
|
||||
'demo_xml': ['event_demo.xml'],
|
||||
'test': ['test/process/event_draft2done.yml'],
|
||||
'css': ['static/src/css/event.css'],
|
||||
'installable': True,
|
||||
'application': True,
|
||||
'auto_install': False,
|
||||
|
|
|
@ -148,9 +148,28 @@ class event_event(osv.osv):
|
|||
number = reg_done
|
||||
elif field == 'register_prospect':
|
||||
number = reg_draft
|
||||
elif field == 'register_avail':
|
||||
#the number of ticket is unlimited if the event.register_max field is not set.
|
||||
#In that cas we arbitrary set it to 9999, it is used in the kanban view to special case the display of the 'subscribe' button
|
||||
number = event.register_max - reg_open if event.register_max != 0 else 9999
|
||||
res[event.id][field] = number
|
||||
return res
|
||||
|
||||
def _subscribe_fnc(self, cr, uid, ids, fields, args, context=None):
|
||||
"""This functional fields compute if the current user (uid) is already subscribed or not to the event passed in parameter (ids)
|
||||
"""
|
||||
register_pool = self.pool.get('event.registration')
|
||||
res = {}
|
||||
for event in self.browse(cr, uid, ids, context=context):
|
||||
res[event.id] = False
|
||||
curr_reg_id = register_pool.search(cr, uid, [('user_id', '=', uid), ('event_id', '=' ,event.id)])
|
||||
if curr_reg_id:
|
||||
for reg in register_pool.browse(cr, uid, curr_reg_id, context=context):
|
||||
if reg.state in ('open','done'):
|
||||
res[event.id]= True
|
||||
continue
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}),
|
||||
'user_id': fields.many2one('res.users', 'Responsible User', readonly=False, states={'done': [('readonly', True)]}),
|
||||
|
@ -158,13 +177,14 @@ class event_event(osv.osv):
|
|||
'register_max': fields.integer('Maximum Registrations', help="You can for each event define a maximum registration level. If you have too much registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'register_min': fields.integer('Minimum Registrations', help="You can for each event define a minimum registration level. If you do not enough registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'register_current': fields.function(_get_register, string='Confirmed Registrations', multi='register_numbers'),
|
||||
'register_avail': fields.function(_get_register, string='Available Registrations', multi='register_numbers',type='integer'),
|
||||
'register_prospect': fields.function(_get_register, string='Unconfirmed Registrations', multi='register_numbers'),
|
||||
'register_attended': fields.function(_get_register, string='Attended Registrations', multi='register_numbers'),
|
||||
'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}),
|
||||
'date_begin': fields.datetime('Start Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'date_end': fields.datetime('End Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'state': fields.selection([
|
||||
('draft', 'Draft'),
|
||||
('draft', 'Unconfirmed'),
|
||||
('confirm', 'Confirmed'),
|
||||
('done', 'Done'),
|
||||
('cancel', 'Cancelled')],
|
||||
|
@ -182,6 +202,7 @@ class event_event(osv.osv):
|
|||
type='many2one', relation='res.country', string='Country', readonly=False, states={'done': [('readonly', True)]}),
|
||||
'note': fields.text('Description', readonly=False, states={'done': [('readonly', True)]}),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}),
|
||||
'is_subscribed' : fields.function(_subscribe_fnc, type="boolean", string='Subscribed'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
@ -190,6 +211,22 @@ class event_event(osv.osv):
|
|||
'user_id': lambda obj, cr, uid, context: uid,
|
||||
}
|
||||
|
||||
def subscribe_to_event(self, cr, uid, ids, context=None):
|
||||
register_pool = self.pool.get('event.registration')
|
||||
user_pool = self.pool.get('res.users')
|
||||
user = user_pool.browse(cr, uid, uid, context=context)
|
||||
curr_reg_ids = register_pool.search(cr, uid, [('user_id', '=', user.id), ('event_id', '=' , ids[0])])
|
||||
#the subscription is done with UID = 1 because in case we share the kanban view, we want anyone to be able to subscribe
|
||||
if not curr_reg_ids:
|
||||
curr_reg_ids = [register_pool.create(cr, 1, {'event_id': ids[0] ,'email': user.user_email, 'name':user.name, 'user_id': user.id,})]
|
||||
return register_pool.confirm_registration(cr, 1, curr_reg_ids, context=context)
|
||||
|
||||
def unsubscribe_to_event(self, cr, uid, ids, context=None):
|
||||
register_pool = self.pool.get('event.registration')
|
||||
#the unsubscription is done with UID = 1 because in case we share the kanban view, we want anyone to be able to unsubscribe
|
||||
curr_reg_ids = register_pool.search(cr, 1, [('user_id', '=', uid), ('event_id', '=', ids[0])])
|
||||
return register_pool.button_reg_cancel(cr, 1, curr_reg_ids, context=context)
|
||||
|
||||
def _check_closing_date(self, cr, uid, ids, context=None):
|
||||
for event in self.browse(cr, uid, ids, context=context):
|
||||
if event.date_end < event.date_begin:
|
||||
|
@ -233,19 +270,18 @@ class event_registration(osv.osv):
|
|||
'log_ids': fields.one2many('mail.message', 'res_id', 'Logs', domain=[('email_from', '=', False),('model','=',_name)]),
|
||||
'event_end_date': fields.related('event_id','date_end', type='datetime', string="Event End Date", readonly=True),
|
||||
'event_begin_date': fields.related('event_id', 'date_begin', type='datetime', string="Event Start Date", readonly=True),
|
||||
'user_id': fields.many2one('res.users', 'Responsible', states={'done': [('readonly', True)]}),
|
||||
'user_id': fields.many2one('res.users', 'Attendee', states={'done': [('readonly', True)]}),
|
||||
'company_id': fields.related('event_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'state': fields.selection([('draft', 'Unconfirmed'),
|
||||
('open', 'Confirmed'),
|
||||
('cancel', 'Cancelled'),
|
||||
('done', 'Attended')], 'State',
|
||||
size=16, readonly=True)
|
||||
size=16, readonly=True),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'nb_register': 1,
|
||||
'state': 'draft',
|
||||
'user_id': lambda self, cr, uid, ctx: uid,
|
||||
}
|
||||
_order = 'name, create_date desc'
|
||||
|
||||
|
|
|
@ -32,7 +32,6 @@
|
|||
<field name="name">Concert of Bon Jovi</field>
|
||||
<field eval="time.strftime('%Y-%m-01 19:05:15')" name="date_begin"/>
|
||||
<field eval="time.strftime('%Y-%m-01 23:05:15')" name="date_end"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="register_max">500</field>
|
||||
<field name="type" ref="event_type_1"/>
|
||||
</record>
|
||||
|
@ -42,17 +41,15 @@
|
|||
<field eval="time.strftime('%Y-%m-05 18:00:00')" name="date_begin"/>
|
||||
<field eval="time.strftime('%Y-%m-05 21:00:00')" name="date_end"/>
|
||||
<field name="type" ref="event_type_1"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="register_min">50</field>
|
||||
<field name="register_max">350</field>
|
||||
</record>
|
||||
<record id="event_2" model="event.event">
|
||||
<field name="name">Conference on ERP Buisness</field>
|
||||
<field name="name">Conference on ERP Business</field>
|
||||
<field eval="time.strftime('%Y-%m-05 14:00:00')" name="date_begin"/>
|
||||
<field eval="time.strftime('%Y-%m-05 16:30:00')" name="date_end"/>
|
||||
<field name="type" ref="event_type_2"/>
|
||||
<field name="register_max">200</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
</record>
|
||||
<function model="event.event" name="button_confirm" eval="[ref('event_2')]"/>
|
||||
<function model="event.event" name="button_confirm" eval="[ref('event_2')]"/>
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
<page string="Event">
|
||||
<separator string="Description" colspan="4"/>
|
||||
<field name="note" colspan="4" nolabel="1"/>
|
||||
<field name="registration_ids" colspan="4" nolabel="1">
|
||||
<field name="registration_ids" colspan="4" nolabel="1" groups="event.group_event_manager,event.group_event_user">
|
||||
<tree string="Registration" editable="top">
|
||||
<field name="name" />
|
||||
<field name="email" />
|
||||
|
@ -156,6 +156,71 @@
|
|||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Event Kanban View -->
|
||||
|
||||
<record model="ir.ui.view" id="view_event_kanban">
|
||||
<field name="name">event.event.kanban</field>
|
||||
<field name="model">event.event</field>
|
||||
<field name="type">kanban</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban>
|
||||
<field name="register_max"/>
|
||||
<field name="type"/>
|
||||
<field name="user_id"/>
|
||||
<field name="register_current"/>
|
||||
<field name="is_subscribed"/>
|
||||
<field name="country_id"/>
|
||||
<field name="date_begin"/>
|
||||
<field name="state"/>
|
||||
<field name="register_avail"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_module_vignette">
|
||||
<a type="edit" class="oe_module_icon">
|
||||
<div class="oe_event_date "><t t-esc="record.date_begin.raw_value.getDate()"/></div>
|
||||
<div class="oe_event_month_year">
|
||||
<t t-esc="record.date_begin.raw_value.toString('MMM')"/>
|
||||
<t t-esc="record.date_begin.raw_value.getFullYear()"/>
|
||||
</div>
|
||||
<div class="oe_event_time"><t t-esc="record.date_begin.raw_value.toString('hh:mm tt')"/></div>
|
||||
</a>
|
||||
<div class="oe_module_desc">
|
||||
<h4><a type="edit"><field name="name"/></a></h4>
|
||||
<p>
|
||||
<t t-if="record.country_id.raw_value">@<field name="country_id"/><br/></t>
|
||||
<t t-if="record.user_id.raw_value">Organized by <field name="user_id"/><br/></t>
|
||||
<t t-if="record.register_avail.raw_value lte 10 and record.register_avail.raw_value gt 0"><i>Only</i></t>
|
||||
<t t-if="record.register_avail.raw_value == 0"><i>No ticket available.</i></t>
|
||||
<t t-if="record.register_avail.raw_value != 0">
|
||||
<i><b><t t-if="record.register_avail.raw_value != 9999"><field name="register_avail"/></t></b></i>
|
||||
<i>
|
||||
<t t-if="record.register_avail.raw_value > 1">tickets </t>
|
||||
<t t-if="record.register_avail.raw_value == 1 || !record.register_avail.raw_value > 1">ticket </t>
|
||||
available.
|
||||
</i>
|
||||
</t>
|
||||
</p>
|
||||
<t t-if="record.register_avail.raw_value != 0">
|
||||
<t t-if="!record.is_subscribed.raw_value">
|
||||
<button type="object" name="subscribe_to_event" class="subscribe_button oe_event_button_subscribe">
|
||||
<span >Subscribe</span>
|
||||
</button>
|
||||
</t>
|
||||
</t>
|
||||
<t t-if="record.is_subscribed.raw_value">
|
||||
<button type="object" name="unsubscribe_to_event" class="unsubscribe_button oe_event_button_unsubscribe">
|
||||
<span>Subscribed</span>
|
||||
<span class="unsubscribe">Unsubscribe</span>
|
||||
</button>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Events Calendar View -->
|
||||
|
||||
|
@ -199,6 +264,10 @@
|
|||
<filter icon="terp-check" string="Unconfirmed" name="draft" domain="[('state','=','draft')]" help="Events in New state"/>
|
||||
<filter icon="terp-camera_test" string="Confirmed" domain="[('state','=','confirm')]" help="Confirmed events"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-go-today" string="Upcoming"
|
||||
name="upcoming"
|
||||
domain="[('date_begin','>=', time.strftime('%%Y-%%m-%%d 00:00:00'))]"
|
||||
help="Upcoming events from today" />
|
||||
<field name="name"/>
|
||||
<field name="type" widget="selection"/>
|
||||
<field name="user_id" widget="selection">
|
||||
|
@ -229,8 +298,8 @@
|
|||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">event.event</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,calendar,graph</field>
|
||||
<field name="context">{"search_default_section_id": section_id}</field>
|
||||
<field name="view_mode">kanban,calendar,tree,form,graph</field>
|
||||
<field name="context">{"search_default_upcoming":1}</field>
|
||||
<field name="search_view_id" ref="view_event_search"/>
|
||||
<field name="help">Event is the low level object used by meeting and others documents that should be synchronized with mobile devices or calendar applications through caldav. Most of the users should work in the Calendar menu, and not in the list of events.</field>
|
||||
</record>
|
||||
|
@ -415,7 +484,7 @@
|
|||
<menuitem
|
||||
name="Registrations"
|
||||
id="menu_action_registration" parent="base.menu_event_main"
|
||||
action="action_registration"/>
|
||||
action="action_registration" groups="event.group_event_manager,event.group_event_user"/>
|
||||
|
||||
|
||||
<menuitem name="Reporting" id="base.menu_report_association" parent="event_main_menu" sequence="20"/>
|
||||
|
|
|
@ -2,12 +2,21 @@
|
|||
<openerp>
|
||||
<data noupdate="0">
|
||||
|
||||
<record id="group_event_manager" model="res.groups">
|
||||
<field name="name">Event Manager</field>
|
||||
<record model="ir.module.category" id="module_category_event_management">
|
||||
<field name="name">Event</field>
|
||||
<field name="description">Helps you manage your Events.</field>
|
||||
<field name="sequence">3</field>
|
||||
</record>
|
||||
|
||||
<record id="group_event_user" model="res.groups">
|
||||
<field name="name">User</field>
|
||||
<field name="category_id" ref="module_category_event_management"/>
|
||||
</record>
|
||||
|
||||
<record id="group_event_user" model="res.groups">
|
||||
<field name="name">Event User</field>
|
||||
<record id="group_event_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="module_category_event_management"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_event_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record model="res.users" id="base.user_admin">
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
.oe_event_date{
|
||||
border-top-left-radius:3px;
|
||||
border-top-right-radius:3px;
|
||||
font-size: 48px;
|
||||
height: auto;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
margin-bottom:-7px;
|
||||
color: #FFFFFF;
|
||||
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
||||
background-color: #8A89BA;
|
||||
}
|
||||
.oe_event_time{
|
||||
border-bottom-left-radius:3px;
|
||||
border-bottom-right-radius:3px;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
color: #8A89BA;
|
||||
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
.oe_event_month_year{
|
||||
border-bottom-left-radius:3px;
|
||||
border-bottom-right-radius:3px;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
color: #FFFFFF;
|
||||
background-color: #8A89BA;
|
||||
}
|
||||
div.oe_fold_column{
|
||||
padding:0px !important;
|
||||
}
|
||||
.oe_event_button_subscribe {
|
||||
display: inline-block;
|
||||
border: 1px solid #ababab;
|
||||
color: #404040;
|
||||
font-size: 12px;
|
||||
padding: 3px 10px;
|
||||
text-align: center;
|
||||
-o-background-size: 100% 100%;
|
||||
-moz-background-size: 100% 100%;
|
||||
-webkit-background-size: auto auto !important;
|
||||
background-size: 100% 100%;
|
||||
background: #d8d8d8 none;
|
||||
background: none, -webkit-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8));
|
||||
background: none, -webkit-linear-gradient(#efefef, #d8d8d8);
|
||||
background: none, -moz-linear-gradient(#efefef, #d8d8d8);
|
||||
background: none, -o-linear-gradient(top, #efefef, #d8d8d8);
|
||||
background: none, -khtml-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8));
|
||||
background: -ms-linear-gradient(top, #efefef, #d8d8d8);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#efefef', endColorstr='#d8d8d8',GradientType=0 );
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
-o-border-radius: 3px;
|
||||
-ms-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset;
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset;
|
||||
-o-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
outline: none;
|
||||
}
|
||||
.oe_event_button_unsubscribe {
|
||||
display: inline-block;
|
||||
border: 1px solid #AAA;
|
||||
color: #404040;
|
||||
font-size: 12px;
|
||||
padding: 3px 10px;
|
||||
text-align: center;
|
||||
-o-background-size: 100% 100%;
|
||||
-moz-background-size: 100% 100%;
|
||||
-webkit-background-size: auto auto !important;
|
||||
background-size: 100% 100%;
|
||||
background: #AAA none;
|
||||
background: none, -webkit-gradient(linear, left top, left bottom, from(#AAA), to(#AAA));
|
||||
background: none, -webkit-linear-gradient(#AAA, #AAA);
|
||||
background: none, -moz-linear-gradient(#AAA, #AAA);
|
||||
background: none, -o-linear-gradient(top, #AAA, #AAA);
|
||||
background: none, -khtml-gradient(linear, left top, left bottom, from(#AAA), to(#AAA));
|
||||
background: -ms-linear-gradient(top, #AAA, #AAA);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#AAA, endColorstr='#AAA',GradientType=0 );
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
-o-border-radius: 3px;
|
||||
-ms-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset;
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset;
|
||||
-o-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
outline: none;
|
||||
}
|
||||
.oe_event_button_subscribe:hover {
|
||||
cursor: pointer;
|
||||
background-size: 100% 100%;
|
||||
/*background: #DC5F59 none;*/
|
||||
|
||||
}
|
||||
.oe_event_button_unsubscribe:hover {
|
||||
cursor: pointer;
|
||||
background-size: 100% 100%;
|
||||
background: #DC5F59 none;
|
||||
}
|
||||
.unsubscribe, .unsubscribe_button:hover span {
|
||||
display: none;
|
||||
background-color: #DC5F59
|
||||
}
|
||||
.unsubscribe_button:hover .unsubscribe {
|
||||
display: inline;
|
||||
background-color: #DC5F59;
|
||||
}
|
||||
|
|
@ -37,8 +37,8 @@ It defines a new kind of service products that offers you the possibility to cho
|
|||
'depends': ['event','sale','sale_crm'],
|
||||
'update_xml': [
|
||||
'event_sale_view.xml',
|
||||
'event_demo.xml',
|
||||
],
|
||||
'demo_xml': ['event_demo.xml'],
|
||||
'test':['test/confirm.yml'],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
|
|
|
@ -464,6 +464,23 @@ class mail_message(osv.osv):
|
|||
msg['sub_type'] = msg['subtype'] or 'plain'
|
||||
return msg
|
||||
|
||||
def _postprocess_sent_message(self, cr, uid, message, context=None):
|
||||
"""Perform any post-processing necessary after sending ``message``
|
||||
successfully, including deleting it completely along with its
|
||||
attachment if the ``auto_delete`` flag of the message was set.
|
||||
Overridden by subclasses for extra post-processing behaviors.
|
||||
|
||||
:param browse_record message: the message that was just sent
|
||||
:return: True
|
||||
"""
|
||||
if message.auto_delete:
|
||||
self.pool.get('ir.attachment').unlink(cr, uid,
|
||||
[x.id for x in message.attachment_ids \
|
||||
if x.res_model == self._name and \
|
||||
x.res_id == message.id],
|
||||
context=context)
|
||||
message.unlink()
|
||||
return True
|
||||
|
||||
def send(self, cr, uid, ids, auto_commit=False, context=None):
|
||||
"""Sends the selected emails immediately, ignoring their current
|
||||
|
@ -521,16 +538,9 @@ class mail_message(osv.osv):
|
|||
message.write({'state':'sent', 'message_id': res})
|
||||
else:
|
||||
message.write({'state':'exception'})
|
||||
|
||||
# if auto_delete=True then delete that sent messages as well as attachments
|
||||
message.refresh()
|
||||
if message.state == 'sent' and message.auto_delete:
|
||||
self.pool.get('ir.attachment').unlink(cr, uid,
|
||||
[x.id for x in message.attachment_ids \
|
||||
if x.res_model == self._name and \
|
||||
x.res_id == message.id],
|
||||
context=context)
|
||||
message.unlink()
|
||||
if message.state == 'sent':
|
||||
self._postprocess_sent_message(cr, uid, message, context=context)
|
||||
except Exception:
|
||||
_logger.exception('failed sending mail.message %s', message.id)
|
||||
message.write({'state':'exception'})
|
||||
|
|
|
@ -184,17 +184,15 @@
|
|||
<table class="project_table">
|
||||
<tr>
|
||||
<td class="td_image">
|
||||
<button name = "open_users" type="object" class="oe_project_buttons"><img t-att-src="kanban_image('res.users', 'avatar', record.user_id.raw_value[0])" class="avatar"/></button><br/>
|
||||
<div class="manager"><field name="user_id"/></div>
|
||||
<t t-if="record.date.raw_value">
|
||||
<kbd class="user">Deadline</kbd>
|
||||
<div class="manager"><field name="date"/></div>
|
||||
</t>
|
||||
</td>
|
||||
<div class="sequence">
|
||||
<button name = "open_users" type="object" class="oe_project_buttons"><img t-att-src="kanban_image('res.users', 'avatar', record.user_id.raw_value[0])" class="avatar"/></button><br/>
|
||||
<div class="manager"><field name="user_id"/></div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="td_name">
|
||||
<div class="oe_project_border">
|
||||
<h4 class="oe_project_font1">
|
||||
<a type="edit"><div class="oe_project_font"><t t-esc="record.name.value.substr(0,26)"/><t t-if="record.name.value.length > 26">...</t></div></a>
|
||||
<a type="edit"><div class="oe_project_font"><t t-esc="record.name.value.substr(0,28)"/><t t-if="record.name.value.length > 28">...</t></div></a>
|
||||
</h4>
|
||||
<table >
|
||||
<tr class ="task">
|
||||
|
@ -204,14 +202,23 @@
|
|||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="45px">
|
||||
<t t-foreach="record.members.raw_value" t-as="member">
|
||||
<img t-att-src="kanban_image('res.users', 'avatar', member)" class="img_member"/>
|
||||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td class="td_deadline">
|
||||
<div id="sequence">
|
||||
<!--<kbd class="user">Deadline</kbd>-->
|
||||
<!--<div class="manager"><field name="date"/></div>-->
|
||||
<t t-if="record.date.raw_value">
|
||||
<div class="sequence">
|
||||
<kbd class="user">Deadline</kbd>
|
||||
<div class="manager"><b><field name="date"/></b></div>
|
||||
</div>
|
||||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@ -224,11 +231,11 @@
|
|||
<t t-esc="Math.round(record.total_hours.raw_value)"/> hrs
|
||||
</div>
|
||||
</td>
|
||||
<td class="td_member">
|
||||
<t t-foreach="record.members.raw_value" t-as="member">
|
||||
<img t-att-src="kanban_image('res.users', 'avatar', member)" class="img_member"/>
|
||||
</t>
|
||||
</td>
|
||||
<!--<td class="td_member">-->
|
||||
<!-- <t t-foreach="record.members.raw_value" t-as="member">-->
|
||||
<!-- <img t-att-src="kanban_image('res.users', 'avatar', member)" class="img_member"/>-->
|
||||
<!-- </t>-->
|
||||
<!--</td>-->
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.oe_to_invoice_buttons {
|
||||
min-height: 50px;
|
||||
min-width: 40px;
|
||||
min-height: 33px;
|
||||
min-width: 70px;
|
||||
vertical-align: top;
|
||||
|
||||
}
|
||||
|
@ -12,22 +12,25 @@
|
|||
|
||||
.oe_project_border{
|
||||
border-right: groove;
|
||||
border-left: groove;
|
||||
}
|
||||
.oe_project_font:hover{
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.oe_project_desc{
|
||||
width: 250px;
|
||||
}
|
||||
|
||||
.progress{
|
||||
text-align: left;
|
||||
width: auto;
|
||||
}
|
||||
.oe_project_font{
|
||||
color: #000000;
|
||||
padding-left: 5px !important;
|
||||
|
||||
}
|
||||
.sequence {
|
||||
padding-bottom: 4px !important;
|
||||
padding-top: 3px !important;
|
||||
border-bottom: groove;
|
||||
/*font-size: 20px;*/
|
||||
text-align: center;
|
||||
|
@ -49,14 +52,12 @@
|
|||
}
|
||||
|
||||
.project_table{
|
||||
border:0;
|
||||
width:350px;
|
||||
width:350px;
|
||||
}
|
||||
.td_image{
|
||||
width:60px;
|
||||
text-align:center;
|
||||
vertical-align:top;
|
||||
|
||||
width:60px;
|
||||
text-align:center;
|
||||
vertical-align:top;
|
||||
}
|
||||
.avatar{
|
||||
height:40px;
|
||||
|
@ -69,8 +70,7 @@
|
|||
}
|
||||
.td_deadline{
|
||||
width:70px;
|
||||
vertical-align:top;
|
||||
text-align:right;
|
||||
text-align:center;
|
||||
}
|
||||
.td_member{
|
||||
text-align:right;
|
||||
|
@ -87,7 +87,7 @@
|
|||
width:20px;
|
||||
}
|
||||
.td_hours{
|
||||
text-align:left;
|
||||
text-align:center;
|
||||
vertical-align:bottom;
|
||||
width:120px
|
||||
}
|
||||
|
@ -96,7 +96,7 @@
|
|||
vertical-align:middle;
|
||||
}
|
||||
.invoiced{
|
||||
font-size: 9px;
|
||||
font-size: 10px;
|
||||
}
|
||||
.oe_project {
|
||||
width: 55px;
|
||||
|
@ -106,7 +106,7 @@
|
|||
font-size: 10px;
|
||||
}
|
||||
.manager {
|
||||
font-size: 8px;
|
||||
font-size: 9px;
|
||||
}
|
||||
|
||||
.oe_project_buttons {
|
||||
|
@ -126,11 +126,11 @@
|
|||
}
|
||||
|
||||
.oe_project_font1{
|
||||
|
||||
padding-left: 2px !important;
|
||||
-webkit-margin-before: 0em;
|
||||
-webkit-margin-after: 0em;
|
||||
}
|
||||
|
||||
div.oe_fold_column{
|
||||
padding:0px !important;
|
||||
padding:2px !important;
|
||||
}
|
|
@ -500,7 +500,7 @@ class project(osv.osv):
|
|||
'project_escalation_id' : fields.many2one('project.project','Project Escalation', help='If any issue is escalated from the current Project, it will be listed under the project selected here.', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
|
||||
'reply_to' : fields.char('Reply-To Email Address', size=256),
|
||||
'issues' : fields.boolean('Issues',help = "If you check this field issues are appears in kanban view"),
|
||||
'open_issues': fields.function(_compute_issue , store=True,type='integer',string="Issue"),
|
||||
'total_issues': fields.function(_compute_issue , store=True,type='integer',string="Issue"),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
view_mode="tree,form,calendar,graph"
|
||||
view_type="form"/>
|
||||
|
||||
<menuitem name="Issues" id="menu_project_issue_track"
|
||||
<menuitem name="Issues" id="menu_project_issue_track" parent="project.menu_project_management"
|
||||
action="project_issue_categ_act0" sequence="15"/>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -392,7 +392,7 @@
|
|||
<xpath expr="//t[@t-name='tasks']" position="after">
|
||||
<t t-name="issues">
|
||||
<ul class="oe_kanban_tooltip">
|
||||
<li><b>Issues:</b> <field name="open_issues"/></li>
|
||||
<li><b>Issues:</b> <field name="total_issues"/></li>
|
||||
</ul>
|
||||
</t>
|
||||
</xpath>
|
||||
|
|
|
@ -30,7 +30,7 @@ class project_project(osv.osv):
|
|||
_inherit = 'project.project'
|
||||
|
||||
_columns = {
|
||||
'timesheets' : fields.boolean('Timesheets',help = "If you check this field timesheets appears in kanban view")
|
||||
'timesheets' : fields.boolean('Timesheets',help = "If you check this field timesheets appears in kanban view"),
|
||||
}
|
||||
_defaults = {
|
||||
'timesheets' : True,
|
||||
|
@ -56,6 +56,10 @@ class project_project(osv.osv):
|
|||
context = {}
|
||||
value = {}
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
if context.get('btn'):
|
||||
context.update({
|
||||
'search_default_to_invoice':1,
|
||||
})
|
||||
for project in self.browse(cr, uid, ids, context=context):
|
||||
# Get Timesheet views
|
||||
tree_view = data_obj.get_object_reference(cr, uid, 'project_timesheet', 'view_account_analytic_line_tree_inherit_account_id')
|
||||
|
@ -63,7 +67,7 @@ class project_project(osv.osv):
|
|||
search_view = data_obj.get_object_reference(cr, uid, 'project_timesheet', 'view_account_analytic_line_search_account_inherit')
|
||||
context.update({
|
||||
#'search_default_user_id': uid,
|
||||
'search_default_account_id':project.id,
|
||||
'search_default_account_id':project.analytic_account_id.id,
|
||||
#'search_default_open':1,
|
||||
})
|
||||
value = {
|
||||
|
|
|
@ -46,21 +46,21 @@
|
|||
<button name="open_timesheets" class="oe_project_buttons" type="object" tooltip="timesheets"><img src="/project_timesheet/static/src/img/timesheet_icon.png" class="project_icon"/></button>
|
||||
</t>
|
||||
</xpath>
|
||||
<xpath expr="//div[@id='sequence']" position="inside">
|
||||
|
||||
<div class="sequence">
|
||||
<button name="open_timesheets" class="oe_to_invoice_buttons" type="object">
|
||||
<small>To invoice</small>
|
||||
<div class="manager">
|
||||
<field name="amount_invoiced"/>
|
||||
</div>
|
||||
</button>
|
||||
<xpath expr="//td[@class='td_image']" position="inside">
|
||||
<div class="sequence">
|
||||
<kbd class="user">Remaining Hours</kbd>
|
||||
<div class="manager"><b><t t-esc="Math.round(record.total_hours.raw_value-record.effective_hours.raw_value)"/> h</b></div>
|
||||
</div>
|
||||
<div class="sequence">
|
||||
<kbd class="user">Hours</kbd>
|
||||
<div class="manager"><t t-esc="Math.round(record.total_hours.raw_value-record.effective_hours.raw_value)"/></div>
|
||||
</div>
|
||||
</xpath>
|
||||
<xpath expr="//td[@class='td_deadline']" position="inside">
|
||||
<div class="sequence">
|
||||
<kbd class="user">To invoice</kbd>
|
||||
<div class="manager"><b><field name="amount_invoiced"/> <field name="currency_id"/></b></div>
|
||||
</div>
|
||||
<div class="sequence">
|
||||
<button name="open_timesheets" class="oe_to_invoice_buttons" type="object" context="{'btn':'invoice'}">Invoice</button>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
# Portuguese translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
|
||||
"PO-Revision-Date: 2012-03-29 11:26+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Portuguese <pt@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-03-30 04:34+0000\n"
|
||||
"X-Generator: Launchpad (build 15032)\n"
|
||||
|
||||
#. module: purchase_double_validation
|
||||
#: view:purchase.double.validation.installer:0
|
||||
msgid "Purchase Application Configuration"
|
||||
msgstr ""
|
||||
|
||||
#. module: purchase_double_validation
|
||||
#: view:purchase.double.validation.installer:0
|
||||
msgid "Define minimum amount after which puchase is needed to be validated."
|
||||
msgstr ""
|
||||
|
||||
#. module: purchase_double_validation
|
||||
#: view:purchase.double.validation.installer:0
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
#. module: purchase_double_validation
|
||||
#: field:purchase.double.validation.installer,config_logo:0
|
||||
msgid "Image"
|
||||
msgstr ""
|
||||
|
||||
#. module: purchase_double_validation
|
||||
#: model:ir.actions.act_window,name:purchase_double_validation.action_config_purchase_limit_amount
|
||||
#: view:purchase.double.validation.installer:0
|
||||
msgid "Configure Limit Amount for Purchase"
|
||||
msgstr ""
|
||||
|
||||
#. module: purchase_double_validation
|
||||
#: view:board.board:0
|
||||
#: model:ir.actions.act_window,name:purchase_double_validation.purchase_waiting
|
||||
msgid "Purchase Order Waiting Approval"
|
||||
msgstr ""
|
||||
|
||||
#. module: purchase_double_validation
|
||||
#: view:purchase.double.validation.installer:0
|
||||
msgid "res_config_contents"
|
||||
msgstr ""
|
||||
|
||||
#. module: purchase_double_validation
|
||||
#: help:purchase.double.validation.installer,limit_amount:0
|
||||
msgid "Maximum amount after which validation of purchase is required."
|
||||
msgstr ""
|
||||
|
||||
#. module: purchase_double_validation
|
||||
#: model:ir.model,name:purchase_double_validation.model_purchase_double_validation_installer
|
||||
msgid "purchase.double.validation.installer"
|
||||
msgstr ""
|
||||
|
||||
#. module: purchase_double_validation
|
||||
#: field:purchase.double.validation.installer,limit_amount:0
|
||||
msgid "Maximum Purchase Amount"
|
||||
msgstr ""
|
Loading…
Reference in New Issue