[MERGE]merge with parent branch

bzr revid: sgo@tinyerp.com-20120614101024-ppna6h442m50f3no
bzr revid: sgo@tinyerp.com-20120614104534-25j88fdzquc5qdrg
This commit is contained in:
Sanjay Gohel (Open ERP) 2012-06-14 16:15:34 +05:30
commit 787e2c7e01
34 changed files with 338 additions and 205 deletions

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-12 04:55+0000\n"
"X-Launchpad-Export-Date: 2012-06-13 04:56+0000\n"
"X-Generator: Launchpad (build 15389)\n"
#. module: account

View File

@ -74,49 +74,7 @@
</tree>
</field>
</record>
<!-- Moved this view analytic module-->
<!-- <record id="view_account_analytic_account_form" model="ir.ui.view">
<field name="name">account.analytic.account.form</field>
<field name="model">account.analytic.account</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Analytic Account" version="7.0">
<sheet>
<group>
<group>
<field name="name" colspan="4"/>
<field name="parent_id" on_change="on_change_parent(parent_id)"/>
<field name="company_id" on_change="on_change_company(company_id)" widget="selection" groups="base.group_multi_company" attrs="{'required': [('type','&lt;&gt;','view')]}"/>
</group>
<group>
<field name="type"/>
<field name="code"/>
</group>
</group>
<notebook>
<page string="Account Data">
<group>
<group string="Contacts">
<field name="partner_id"/>
<field name="user_id"/>
</group>
<group name="contract" string="Contract Data">
<field name="date_start"/>
<field name="date"/>
<field name="quantity_max"/>
</group>
</group>
</page>
<page string="Description">
<field name="description"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>-->
<record id="action_account_analytic_account_form" model="ir.actions.act_window">
<field name="name">Analytic Accounts</field>

View File

@ -247,6 +247,17 @@ class account_analytic_account(osv.osv):
return res_final
def _remaining_hours_calc(self, cr, uid, ids, name, arg, context=None):
res = {}
for account in self.browse(cr, uid, ids, context=context):
if account.quantity_max != 0:
res[account.id] = account.quantity_max - account.hours_quantity
else:
res[account.id] = 0.0
for id in ids:
res[id] = round(res.get(id, 0.0),2)
return res
def _remaining_hours_to_invoice_calc(self, cr, uid, ids, name, arg, context=None):
res = {}
for account in self.browse(cr, uid, ids, context=context):
if account.quantity_max != 0:
@ -391,7 +402,7 @@ class account_analytic_account(osv.osv):
'ca_theorical': fields.function(_analysis_all, multi='analytic_analysis', type='float', string='Theoretical Revenue',
help="Based on the costs you had on the project, what would have been the revenue if all these costs have been invoiced at the normal sale price provided by the pricelist.",
digits_compute=dp.get_precision('Account')),
'hours_quantity': fields.function(_analysis_all, multi='analytic_analysis', type='float', string='Total Time',
'hours_quantity': fields.function(_analysis_all, multi='analytic_analysis', type='float', string='Total Worked Time',
help="Number of time you spent on the analytic account (from timesheet). It computes quantities on all journal of type 'general'."),
'last_invoice_date': fields.function(_analysis_all, multi='analytic_analysis', type='date', string='Last Invoice Date',
help="If invoice from the costs, this is the date of the latest invoiced."),
@ -404,7 +415,9 @@ class account_analytic_account(osv.osv):
'hours_qtt_invoiced': fields.function(_hours_qtt_invoiced_calc, type='float', string='Invoiced Time',
help="Number of time (hours/days) that can be invoiced plus those that already have been invoiced."),
'remaining_hours': fields.function(_remaining_hours_calc, type='float', string='Remaining Time',
help="Computed using the formula: Maximum Time - Total Time"),
help="Computed using the formula: Maximum Time - Total Worked Time"),
'remaining_hours_to_invoice': fields.function(_remaining_hours_to_invoice_calc, type='float', string='Remaining Time',
help="Computed using the formula: Maximum Time - Total Invoiced Time"),
'remaining_ca': fields.function(_remaining_ca_calc, type='float', string='Remaining Revenue',
help="Computed using the formula: Max Invoice Price - Invoiced Amount.",
digits_compute=dp.get_precision('Account')),
@ -444,7 +457,6 @@ class account_analytic_account(osv.osv):
res['value']['fix_price_invoices'] = template.fix_price_invoices
res['value']['invoice_on_timesheets'] = template.invoice_on_timesheets
res['value']['quantity_max'] = template.quantity_max
res['value']['remaining_hours'] = template.remaining_hours
res['value']['amount_max'] = template.amount_max
res['value']['to_invoice'] = template.to_invoice.id
res['value']['pricelist_id'] = template.pricelist_id.id

View File

@ -22,7 +22,7 @@
<field eval="18" name="priority"/>
<field name="arch" type="xml">
<xpath expr='//field[@name="type"]' position='after'>
<field name="template_id" on_change="on_change_template(template_id)" domain="[('type','=','template')]" attrs="{'invisible': [('type','in',['view', 'normal','template'])]}" context="{'default_type' : 'template'}"/>
<field name="template_id" on_change="on_change_template(template_id,context)" domain="[('type','=','template')]" attrs="{'invisible': [('type','in',['view', 'normal','template'])]}" context="{'default_type' : 'template'}"/>
</xpath>
<xpath expr='//field[@name="date"]' position="after">
<group col="6" colspan="2" class="oe_form_group_label_border">
@ -59,7 +59,7 @@
<group colspan="4" col="6" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}">
<field class="oe_float_field" name="hours_qtt_est" nolabel="1" />
<field class="oe_float_field" name="hours_qtt_invoiced" nolabel="1"/>
<field class="oe_float_field" name="remaining_hours" nolabel="1" />
<field class="oe_float_field" name="remaining_hours_to_invoice" nolabel="1" />
<field class="oe_float_field" name="hours_qtt_non_invoiced" nolabel="1" />
<div><button class="oe_btn_width_small" icon="terp-go-week" name="%(hr_timesheet.act_hr_timesheet_line_evry1_all_form)d" string="Timesheets" type="action" /></div>
<div><button class="oe_btn_width" icon="terp-dolar" name="%(hr_timesheet_invoice.act_acc_analytic_acc_2_report_acc_analytic_line_to_invoice)d" string="Invoice Timesheets" type="action"/></div>

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-12 04:55+0000\n"
"X-Launchpad-Export-Date: 2012-06-13 04:56+0000\n"
"X-Generator: Launchpad (build 15389)\n"
#. module: account_analytic_analysis

View File

@ -57,7 +57,7 @@
<group colspan="4" col="6" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}">
<field class="oe_float_field" name="hours_qtt_est" nolabel="1" />
<field class="oe_float_field" name="hours_qtt_invoiced" nolabel="1"/>
<field class="oe_float_field" name="remaining_hours" nolabel="1" />
<field class="oe_float_field" name="remaining_hours_to_invoice" nolabel="1" />
<field class="oe_float_field" name="hours_qtt_non_invoiced" nolabel="1" />
<div><button class="oe_btn_width_small" icon="terp-go-week" name="%(hr_timesheet.act_hr_timesheet_line_evry1_all_form)d" string="Timesheets" type="action" /></div>
<div><button class="oe_btn_width" icon="terp-dolar" name="%(hr_timesheet_invoice.act_acc_analytic_acc_2_report_acc_analytic_line_to_invoice)d" string="Invoice Timesheets" type="action"/></div>

View File

View File

@ -0,0 +1,19 @@
{
'name': 'Anonymous',
'description': 'Allow anonymous access to OpenERP',
'author': 'OpenERP SA',
'version': '1.0',
'category': 'Tools',
'website': 'http://www.openerp.com',
'installable': True,
'depends': ['web'],
'data': [
'anonymous.xml',
],
'js': [
'static/src/js/anonymous.js',
],
'qweb': [
'static/src/xml/anonymous.xml',
],
}

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="res.users" id="user">
<field name="name">Anonymous</field>
<field name="login">anonymous</field>
<field name="password">anonymous</field>
<field name="groups_id" eval="[(5,)]"/>
<field name="avatar">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</field>
</record>
</data>
</openerp>

View File

@ -0,0 +1,44 @@
openerp.anonymous = function(instance) {
instance.web.client_actions.add("login", "instance.web.Login");
instance.web.WebClient.include({
show_login: function() {
var self = this, _super = this._super;
this.login.load_db_list().then(function() {
var dblist = self.login._db_list;
if (dblist && dblist.length === 1) {
self.login.remember_credentials = false;
// XXX get login/pass from server (via a rpc call) ?
self.login.do_login(dblist[0], 'anonymous', 'anonymous').fail(function() {
_super.apply(self, []);
});
} else {
_super.apply(self, []);
}
});
},
});
instance.web.UserMenu.include({
init: function(parent) {
this._super(parent);
if (this.session.username == 'anonymous') {
this.template = 'UserMenu.anonymous';
this.do_update = function() {}; // avoid change of avatar
}
},
start: function() {
var self = this;
this._super.apply(this, arguments);
this.$element.find('.oe_topbar_anonymous_login').click(function() {
var p = self.getParent();
var am = p.action_manager;
am.do_action({type:'ir.actions.client', tag:'login'});
am.client_widget.on('login', p, p.show_application);
});
}
});
};

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- vim:fdl=1:
-->
<templates id="template" xml:space="preserve">
<t t-name="UserMenu.anonymous">
<ul class="oe_user_menu oe_topbar_item">
<li>
<a href="#" class="oe_topbar_anonymous_login">
<img class="oe_topbar_avatar" t-att-src="_s + '/web/static/src/img/icons/gtk-dialog-authentication.png'"/>
Login
</a>
</li>
</ul>
</t>
</templates>

View File

@ -51,9 +51,13 @@
parent="base.menu_aftersale" action="crm_case_categ_claim0" sequence="1"/>
<!-- Claim Stages -->
<menuitem id="menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
<menuitem id="menu_project_config_project" name="Stages" parent="menu_definitions" sequence="1"/>
<menuitem id="menu_claim_stage_view" name="Claim Stages" action="crm_claim_stage_act" parent="menu_project_config_project" sequence="20"/>
<menuitem
icon="terp-project" id="base.menu_main_pm"
name="Project" sequence="10"/>
<menuitem id="base.menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
<menuitem id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1"/>
<menuitem id="menu_claim_stage_view" name="Claim Stages" action="crm_claim_stage_act" parent="base.menu_project_config_project" sequence="20"/>
</data>
</openerp>

View File

@ -209,6 +209,7 @@ class hr_employee(osv.osv):
'color': fields.integer('Color Index'),
'city': fields.related('address_id', 'city', type='char', string='City'),
'login': fields.related('user_id', 'login', type='char', string='Login', readonly=1),
'last_login': fields.related('user_id', 'date', type='datetime', string='Latest Connection', readonly=1),
}
def unlink(self, cr, uid, ids, context=None):

View File

@ -31,23 +31,22 @@
<div class="oe_form_title">
<label for="name" class="oe_form_readonly_hidden"/>
<h1><field name="name"/></h1>
<label for="company_id" class="oe_form_readonly_hidden" groups="base.group_multi_company"/>
<h2><field name="company_id" widget="selection" on_change="onchange_company(company_id)" groups="base.group_multi_company"/></h2>
<label for="department_id" class="oe_form_readonly_hidden"/>
<h2>
<field name="company_id" widget="selection" groups="base.group_multi_company" on_change="onchange_company(company_id)"/>,
<field name="department_id" on_change="onchange_department_id(department_id)" />
</h2>
<h2><field name="department_id" on_change="onchange_department_id(department_id)"/></h2>
</div>
<notebook>
<page string="Personal Information">
<group>
<group>
<group string="General">
<field name="user_id" on_change="onchange_user(user_id)"/>
<field name="active"/>
<field name="parent_id" />
</group>
<group groups="base.group_hr_user" string="Social IDs">
<field name="ssnid"/>
<field name="sinid"/>
<field name="identification_id"/>
<field name="passport_id"/>
<field name="otherid"/>
@ -67,13 +66,13 @@
<field name="work_location"/>
</group>
<group string="Job Information">
<field name="job_id" domain="[('state','!=','old')]"/>
<field name="job_id" domain="[('state','!=','old')]" context="{'form_view_ref': 'hr.view_hr_job_employee_form'}"/>
<field name="coach_id" />
</group>
</group>
</page>
<page string="Categories" groups="base.group_hr_user">
<field name="category_ids"/>
<field name="category_ids" widget="many2many_tags"/>
</page>
<page string="Notes" groups="base.group_hr_user">
<field name="notes"/>
@ -134,6 +133,7 @@
<field name="type">kanban</field>
<field name="arch" type="xml">
<kanban>
<field name="last_login"/>
<templates>
<t t-name="kanban-box">
<div class="oe_employee_vignette">
@ -143,6 +143,11 @@
<div class="oe_employee_details">
<h4><a type="edit"><field name="name"/> (<field name="login"/>)</a></h4>
<ul>
<li id="last_login">
<span t-if="record.last_login.raw_value &amp;&amp; record.last_login.raw_value.is().today()" class="oe_kanban_button" style="font-size: 100%%">
<t t-esc="record.last_login.raw_value.toString('HH:mm')"/>
</span>
</li>
<li t-if="record.job_id.raw_value"><field name="job_id"/></li>
<li t-if="record.work_location.raw_value"><field name="work_location"/></li>
<li t-if="record.work_phone.raw_value">Tel: <field name="work_phone"/></li>
@ -421,9 +426,26 @@
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
</group>
</search>
</field>
</record>
</field>
</record>
<record id="view_hr_job_employee_form" model="ir.ui.view">
<field name="name">hr.job.employee.form</field>
<field name="model">hr.job</field>
<field name="type">form</field>
<field name="priority">20</field>
<field name="arch" type="xml">
<form string="Job" version="7.0">
<group col="4">
<field name="name" />
<field name="department_id" />
</group>
<label for="description"/>
<field name="description"/>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_hr_job">
<field name="name">Job Positions</field>
<field name="res_model">hr.job</field>

View File

@ -512,7 +512,6 @@ class hr_employee(osv.osv):
'current_leave_id': fields.function(_get_leave_status, multi="leave_status", string="Current Leave Type",type='many2one', relation='hr.holidays.status'),
'leave_date_from': fields.function(_get_leave_status, multi='leave_status', type='date', string='From Date'),
'leave_date_to': fields.function(_get_leave_status, multi='leave_status', type='date', string='To Date'),
'last_login': fields.related('user_id', 'date', type='datetime', string='Latest Connection', readonly=1)
}
hr_employee()

View File

@ -284,7 +284,7 @@
<field name="act_window_id" ref="open_ask_holidays"/>
</record>
<menuitem name="Leave Requests" parent="menu_open_ask_holidays" id="menu_open_ask_holidays_new" action="open_ask_holidays"/>
<menuitem name="My Leave Requests" parent="menu_open_ask_holidays" id="menu_open_ask_holidays_new" action="open_ask_holidays"/>
<record model="ir.actions.act_window" id="request_approve_holidays">
<field name="name">Requests Approve</field>
@ -493,8 +493,6 @@
<field name="arch" type="xml">
<field name="coach_id" position="after">
<field name="remaining_leaves"/>
<field name="current_leave_id"/>
<field name="current_leave_state" attrs="{'invisible':[('current_leave_id','=',False)]}"/>
</field>
</field>
</record>
@ -505,22 +503,17 @@
<field name="inherit_id" ref="hr.hr_kanban_view_employees"/>
<field name="arch" type="xml">
<xpath expr="//templates" position="before">
<field name="current_leave_id"/>
<field name="current_leave_state"/>
<field name="last_login"/>
<field name="leave_date_from"/>
<field name="leave_date_to"/>
</xpath>
<xpath expr="//div[@class='oe_employee_details']/ul/li" position="before">
<li t-if="record.current_leave_id.raw_value || record.last_login.raw_value">
<span t-if="record.current_leave_id.raw_value" t-att-class="record.current_leave_state.raw_value=='validate'?'oe_kanban_color_3':'oe_kanban_color_2'">
<span class="oe_kanban_button" style="font-size: 100%%" t-att-title="record.leave_date_from.raw_value.toString('ddd dS MMM') + ' - ' + record.leave_date_to.raw_value.toString('ddd dS MMM')" >
<field name="current_leave_id"/>
</span>
</span>
<span t-if="record.last_login.raw_value &amp;&amp; record.last_login.raw_value.is().today()" class="oe_kanban_button" style="font-size: 100%%">
<t t-esc="record.last_login.raw_value.toString('HH:mm')"/>
</span>
</li>
<xpath expr="//div[@class='oe_employee_details']/ul/li[@id='last_login']" position="inside">
<span t-if="record.current_leave_id.raw_value" style="font-size: 100%%"
t-att-class="record.current_leave_state.raw_value=='validate'?'oe_kanban_button oe_kanban_color_3':'oe_kanban_button oe_kanban_color_2'"
t-att-title="record.leave_date_from.raw_value.toString('ddd dS MMM') + ' - ' + record.leave_date_to.raw_value.toString('ddd dS MMM')">
<field name="current_leave_id"/>
</span>
</xpath>
</field>
</record>

View File

@ -20,7 +20,7 @@
<field eval="2.00" name="unit_amount"/>
<field name="product_id" ref="product.product_consultant"/>
<field name="product_uom_id" ref="product.uom_hour"/>
<field name="account_id" model="account.analytic.account" ref="account.analytic_administratif"></field>
<field name="account_id" ref="account.analytic_administratif"></field>
<field eval="-60.00" name="amount"/>
<field name="general_account_id" model="account.account" ref="account.a_expense"/>
<field name="journal_id" ref="analytic_journal"/>
@ -33,7 +33,7 @@
<field eval="1.00" name="unit_amount"/>
<field name="product_id" ref="product.product_consultant"/>
<field name="product_uom_id" ref="product.uom_hour"/>
<field name="account_id" model="account.analytic.account" ref="account.analytic_administratif"></field>
<field name="account_id" ref="account.analytic_administratif"></field>
<field eval="-30.00" name="amount"/>
<field name="general_account_id" model="account.account" ref="account.a_expense"/>
<field name="journal_id" ref="analytic_journal"/>
@ -46,7 +46,7 @@
<field eval="03.00" name="unit_amount"/>
<field name="product_id" ref="product.product_consultant"/>
<field name="product_uom_id" ref="product.uom_hour"/>
<field name="account_id" model="account.analytic.account" ref="account.analytic_administratif"></field>
<field name="account_id" ref="account.analytic_administratif"></field>
<field eval="-90.00" name="amount"/>
<field name="general_account_id" model="account.account" ref="account.a_expense"/>
<field name="journal_id" ref="analytic_journal"/>
@ -59,7 +59,7 @@
<field eval="01.00" name="unit_amount"/>
<field name="product_id" ref="product.product_consultant"/>
<field name="product_uom_id" ref="product.uom_hour"/>
<field name="account_id" model="account.analytic.account" ref="account.analytic_administratif"></field>
<field name="account_id" ref="account.analytic_administratif"></field>
<field eval="-30.00" name="amount"/>
<field name="general_account_id" model="account.account" ref="account.a_expense"/>
<field name="journal_id" ref="analytic_journal"/>
@ -72,7 +72,7 @@
<field eval="01.00" name="unit_amount"/>
<field name="product_id" ref="product.product_consultant"/>
<field name="product_uom_id" ref="product.uom_hour"/>
<field name="account_id" model="account.analytic.account" ref="account.analytic_administratif"></field>
<field name="account_id" ref="account.analytic_administratif"></field>
<field eval="-30.00" name="amount"/>
<field name="general_account_id" model="account.account" ref="account.a_expense"/>
<field name="journal_id" ref="analytic_journal"/>

View File

@ -68,9 +68,14 @@ class mail_thread(osv.osv):
res[id] = self.message_load_ids(cr, uid, [id], context=context)
return res
def _search_message_ids(self, cr, uid, obj, name, args, context=None):
msg_obj = self.pool.get('mail.message')
msg_ids = msg_obj.search(cr, uid, ['&', ('res_id', 'in', args[0][2]), ('model', '=', self._name)], context=context)
return [('id', 'in', msg_ids)]
# OpenChatter: message_ids is a dummy field that should not be used
_columns = {
'message_ids': fields.function(_get_message_ids, method=True,
'message_ids': fields.function(_get_message_ids, method=True, fnct_search=_search_message_ids,
type='one2many', obj='mail.message', string='Temp messages', _fields_id = 'res_id'),
}

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-12 04:55+0000\n"
"X-Launchpad-Export-Date: 2012-06-13 04:56+0000\n"
"X-Generator: Launchpad (build 15389)\n"
#. module: mrp_repair

58
addons/pad/i18n/sv.po Normal file
View File

@ -0,0 +1,58 @@
# Swedish 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 01:37+0100\n"
"PO-Revision-Date: 2012-06-12 21:16+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Swedish <sv@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-06-13 04:56+0000\n"
"X-Generator: Launchpad (build 15389)\n"
#. module: pad
#: sql_constraint:res.company:0
msgid "The company name must be unique !"
msgstr "Bolagsnamnet måste vara unikt !"
#. module: pad
#: help:res.company,pad_url_template:0
msgid "Template used to generate pad URL."
msgstr ""
#. module: pad
#: model:ir.model,name:pad.model_res_company
msgid "Companies"
msgstr "Bolag"
#. module: pad
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
msgstr "Fel! Du kan inte skapa rekursiva bolagsstrukturer."
#. module: pad
#: model:ir.model,name:pad.model_ir_attachment
msgid "ir.attachment"
msgstr "ir.attachment"
#. module: pad
#: view:res.company:0
msgid "Pad"
msgstr "Pad"
#. module: pad
#: field:res.company,pad_url_template:0
msgid "Pad URL Template"
msgstr ""
#. openerp-web
#: /home/odo/repositories/addons/trunk/pad/static/src/xml/pad.xml:9
msgid "Add Pad"
msgstr ""

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-12 04:55+0000\n"
"X-Launchpad-Export-Date: 2012-06-13 04:55+0000\n"
"X-Generator: Launchpad (build 15389)\n"
#. module: project

View File

@ -70,23 +70,6 @@ class project(osv.osv):
return super(project, self).search(cr, user, args, offset=offset, limit=limit, order=order,
context=context, count=count)
def write(self, cr, uid, ids, vals, context=None):
if context is None:
context = {}
for project_id in self.browse(cr, uid, ids, context):
if vals.get('members'):
members = self.pool.get('res.users').browse(cr, uid, vals.get('members')[0][-1], context)
else:
members = project_id.members or False
select = vals.get('privacy_visibility') or project_id.privacy_visibility or False
if select=='follower' and members:
member_list = [member.id for member in members]
followers = self.message_get_subscribers_ids(cr, uid, ids, context=context)
for member_id in member_list:
if not member_id in followers:
self.message_subscribe(cr, uid, ids, [member_id], context=context)
return super(project, self).write(cr, uid, ids, vals, context=context)
def _complete_name(self, cr, uid, ids, name, args, context=None):
res = {}
for m in self.browse(cr, uid, ids, context=context):
@ -182,6 +165,23 @@ class project(osv.osv):
res[task.project_id.id] += 1
return res
def _get_followers(self, cr, uid, ids, name, arg, context=None):
'''
Functional field that computes the users that are 'following' a thread.
'''
res = {}
for project in self.browse(cr, uid, ids, context=context):
l = set()
for message in project.message_ids:
l.add(message.user_id and message.user_id.id or False)
res[project.id] = list(filter(None, l))
return res
def _search_followers(self, cr, uid, obj, name, args, context=None):
project_obj = self.pool.get('project.project')
project_ids = project_obj.search(cr, uid, [('message_ids.user_id.id', 'in', args[0][2])], context=context)
return [('id', 'in', project_ids)]
_columns = {
'complete_name': fields.function(_complete_name, string="Project Name", type='char', size=250),
'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the project without removing it."),
@ -220,21 +220,15 @@ class project(osv.osv):
'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'task_count': fields.function(_task_count, type='integer', string="Open Tasks"),
'color': fields.integer('Color Index'),
'privacy_visibility': fields.selection([('public','Public'), ('follower','Followers Only')], 'Privacy / Visibility', select=True),
'privacy_visibility': fields.selection([('public','Public'), ('followers','Followers Only')], 'Privacy / Visibility'),
'state': fields.selection([('template', 'Template'),('draft','New'),('open','In Progress'), ('cancelled', 'Cancelled'),('pending','Pending'),('close','Closed')], 'Status', required=True,),
'followers': fields.function(_get_followers, method=True, fnct_search=_search_followers,
type='many2many', relation='res.users', string='Followers'),
}
def dummy(self, cr, uid, ids, context):
return True
def message_thread_followers(self, cr, uid, ids, context=None):
followers = super(project,self).message_thread_followers(cr, uid, ids, context=context)
for project in self.browse(cr, uid, followers.keys(), context=context):
project_followers = set(followers[project.id])
project_followers.add(project.user_id.user_email)
followers[project.id] = filter(None, project_followers)
return followers
def _get_type_common(self, cr, uid, context):
ids = self.pool.get('project.task.type').search(cr, uid, [('case_default','=',1)], context=context)
return ids
@ -1248,19 +1242,26 @@ class account_analytic_account(osv.osv):
'use_tasks': fields.boolean('Tasks Management'),
'company_uom_id': fields.related('company_id', 'project_time_mode_id', type='many2one', relation='product.uom'),
}
# _defaults = {
# 'use_tasks': True,
# }
def project_create(self,cr,uid,analytic_account_id,vals,context=None):
res = {}
def _trigger_project_creation(self, cr, uid, vals, context=None):
'''
This function is used to decide if a project needs to be automatically created or not when an analytic account is created. It returns True if it needs to be so, False otherwise.
'''
return vals.get('use_tasks')
def project_create(self, cr, uid, analytic_account_id, vals, context=None):
'''
This function is called at the time of analytic account creation and is used to create a project automatically linked to it if the conditions are meet.
'''
project_pool = self.pool.get('project.project')
project_id = project_pool.search(cr, uid, [('name','=',vals.get('name'))])
if not project_id:
res['name'] = vals.get('name')
res['analytic_account_id'] = analytic_account_id
project_pool.create(cr, uid, res, context=context)
return True
if not project_id and self._trigger_project_creation(cr, uid, vals, context=context):
project_values = {
'name': vals.get('name'),
'analytic_account_id': analytic_account_id,
}
return project_pool.create(cr, uid, project_values, context=context)
return False
def create(self, cr, uid, vals, context=None):
if context is None:
@ -1268,8 +1269,7 @@ class account_analytic_account(osv.osv):
if vals.get('child_ids', False) and context.get('analytic_project_copy', False):
vals['child_ids'] = []
analytic_account_id = super(account_analytic_account, self).create(cr, uid, vals, context=context)
if vals.get('use_tasks', False):
self.project_create(cr, uid, analytic_account_id, vals, context)
self.project_create(cr, uid, analytic_account_id, vals, context=context)
return analytic_account_id
def unlink(self, cr, uid, ids, *args, **kwargs):

View File

@ -10,7 +10,7 @@
web_icon_hover="images/project-hover.png"/>
<menuitem id="menu_project_management" name="Project" parent="base.menu_main_pm" sequence="1"/>
<menuitem id="menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
<menuitem id="base.menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
<act_window
context="{'search_default_project_id': [active_id], 'default_project_id': active_id}"
@ -47,9 +47,6 @@
<field name="analytic_account_id" invisible="1" required="0"/>
<field name="parent_id" invisible="1" string="Parent" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}"/>
<field name="privacy_visibility"/>
<!--<field name="date_start" string="Start Date" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/>-->
<!--<field name="date" string="End Date" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/>-->
<!--<field name="progress_rate" widget="progressbar"/>-->
</group>
<group col="2" colspan="2" class="oe_form_group_label_border">
<table border="0">
@ -67,7 +64,7 @@
</group>
</group>
<notebook colspan="4">
<page string="Members">
<page string="Team" attrs="{'invisible':[('use_tasks','=', 0)]}" name="team">
<field colspan="4" name="members" nolabel="1" widget="many2many_kanban">
<kanban quick_create="true" create="false">
<field name="name"/>
@ -102,16 +99,7 @@
<field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/>
</group>
</page>
<page name="team" string="Team" attrs="{'invisible':[('use_tasks','=', 0)]}">
<field colspan="4" name="members" nolabel="1" help="Project's members are users who can have an access to the tasks related to this project.">
<tree string="Members">
<field name="name"/>
<field name="user_email"/>
</tree>
</field>
</page>
<page string="Billing" groups="account.group_account_invoice">
<!--<field colspan="4" name="partner_id" on_change="onchange_partner_id(partner_id)" select="1" string="Customer"/>-->
<field name="warn_customer"/>
<field name="currency_id" select="1" groups="base.group_multi_company" required="1"/>
<newline/>
@ -355,7 +343,7 @@
<button name="do_draft" string="Draft" type="object"
states="cancel,done"/>
<button name="%(action_project_task_delegate)d" string="Delegate" type="action"
states="pending,open,draft"/>
states="pending,open,draft" groups="project.group_delegate_task"/>
<button name="do_cancel" string="Cancel" type="object"
states="draft,open,pending" />
<button name="stage_previous" string="Previous Stage" type="object"
@ -410,7 +398,7 @@
</tree>
</field>
</page>
<page string="Delegations History">
<page string="Delegations History" groups="project.group_delegate_task">
<separator string="Parent Tasks"/>
<field name="parent_ids"/>
<separator string="Delegated tasks"/>
@ -768,11 +756,11 @@
<field name="help">Define the steps that will be used in the project from the creation of the task, up to the closing of the task or issue. You will use these stages in order to track the progress in solving a task or an issue.</field>
</record>
<menuitem id="menu_tasks_config" name="GTD" parent="project.menu_definitions" sequence="1"/>
<menuitem id="menu_tasks_config" name="GTD" parent="base.menu_definitions" sequence="1"/>
<menuitem id="menu_project_config_project" name="Stages" parent="project.menu_definitions" sequence="1"/>
<menuitem id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1"/>
<menuitem action="open_task_type_form" name="Task Stages" id="menu_task_types_view" parent="menu_project_config_project" sequence="2"/>
<menuitem action="open_task_type_form" name="Task Stages" id="menu_task_types_view" parent="base.menu_project_config_project" sequence="2"/>
<menuitem action="open_view_project_all" id="menu_projects" name="Projects" parent="menu_project_management" sequence="1"/>
<act_window context="{'search_default_user_id': active_id, 'default_user_id': active_id}" id="act_res_users_2_project_project" name="User's projects" res_model="project.project" src_model="res.users" view_mode="tree,form" view_type="form"/>

View File

@ -54,7 +54,10 @@ class project_configuration(osv.osv_memory):
help="Allows you to compute work on tasks."),
'group_time_work_estimation_tasks': fields.boolean("Time Estimation on Tasks",
implied_group='project.group_time_work_estimation_tasks',
help="Allows you to compute Time Estimation on tasks."),
help="Allows you to compute Time Estimation on tasks."),
'group_manage_delegation_task': fields.boolean("Manage Taks Delegation",
implied_group='project.group_delegate_task',
help="Allows you to delegate tasks to other users."),
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -20,6 +20,7 @@
<field name="module_pad"/>
<field name="group_tasks_work_on_tasks"/>
<field name="group_time_work_estimation_tasks"/>
<field name="group_manage_delegation_task"/>
<separator string="Planning" colspan="4"/>
<field name="module_project_long_term"/>

View File

@ -14,7 +14,7 @@
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record model="ir.ui.menu" id="menu_definitions">
<record model="ir.ui.menu" id="base.menu_definitions">
<field name="groups_id" eval="[(6,0,[ref('group_project_manager')])]"/>
</record>
@ -29,6 +29,11 @@
<field name="category_id" ref="base.module_category_hidden"/>
</record>
<record id="group_delegate_task" model="res.groups">
<field name="name">Task Delegation</field>
<field name="category_id" ref="base.module_category_hidden"/>
</record>
<record model="ir.rule" id="project_comp_rule">
<field name="name">Project multi-company</field>
<field name="model_id" ref="model_project_project"/>
@ -40,7 +45,7 @@
<field name="name">public Members</field>
<field name="model_id" ref="model_project_project"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('privacy_visility','in',[False,'public']),('members','in',[user.id])]</field>
<field name="domain_force">['|','|',('privacy_visibility','in',[False,'public']),('members','in',[user.id]),('followers','in',[user.id])]</field>
</record>
<record model="ir.rule" id="task_comp_rule">

View File

@ -1,5 +1,5 @@
.oe_btn_width {
width: 100px;
width: 110px;
}
.oe_kanban_project {
width: 300px;

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-12 04:55+0000\n"
"X-Launchpad-Export-Date: 2012-06-13 04:56+0000\n"
"X-Generator: Launchpad (build 15389)\n"
#. module: project_issue

View File

@ -607,24 +607,16 @@ class project(osv.osv):
project()
class account_analytic_account(osv.osv):
_inherit = 'account.analytic.account'
_description = 'Analytic Account'
_columns = {
'use_issues' : fields.boolean('Issues Tracking', help="Check this field if this project manages issues"),
}
# _defaults = {
# 'use_issues': True,
# }
def create(self, cr, uid, vals, context=None):
if context is None:
context = {}
obj_id = super(account_analytic_account, self).create(cr, uid, vals, context=context)
if vals.get('use_issues', False):
self.project_create(cr, uid, obj_id, vals, context)
return obj_id
def _trigger_project_creation(self, cr, uid, vals, context=None):
res = super(account_analytic_account, self)._trigger_project_creation(cr, uid, vals, context=context)
return res or vals.get('use_issues')
account_analytic_account()

View File

@ -2,7 +2,7 @@
<openerp>
<data>
<menuitem id="menu_project_confi" name="Issues" parent="project.menu_definitions" sequence="2"/>
<menuitem id="menu_project_confi" name="Issues" parent="base.menu_definitions" sequence="2"/>
<record model="ir.ui.view" id="project_issue_version_search_view">
<field name="name">Issue Version</field>

View File

@ -275,16 +275,11 @@ class account_analytic_account(osv.osv):
_columns = {
'use_phases': fields.boolean('Phases Planing', help="Check this field if project manages phases"),
}
# _defaults = {
# 'use_phases': True,
# }
def create(self, cr, uid, vals, context=None):
if context is None:
context = {}
obj_id = super(account_analytic_account, self).create(cr, uid, vals, context=context)
if vals.get('use_phases', False):
self.project_create(cr, uid, obj_id, vals, context)
return obj_id
def _trigger_project_creation(self, cr, uid, vals, context=None):
res= super(account_analytic_account, self)._trigger_project_creation(cr, uid, vals, context=context)
return res or vals.get('use_phases')
account_analytic_account()
class project_task(osv.osv):

View File

@ -409,7 +409,7 @@
parent="base.menu_project_long_term" sequence="2"/>
<menuitem id="menu_pm_users_project1"
name="Resources" parent="project.menu_definitions" sequence="3"/>
name="Resources" parent="base.menu_definitions" sequence="3"/>
<menuitem id="menu_phase_schedule" name="Scheduling" parent="base.menu_main_pm" sequence="4" groups="project.group_project_user,project.group_project_manager"/>
<menuitem action="resource.action_resource_resource_tree" id="menu_view_resource" parent="menu_pm_users_project1" sequence="2"/>

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-12 04:55+0000\n"
"X-Launchpad-Export-Date: 2012-06-13 04:56+0000\n"
"X-Generator: Launchpad (build 15389)\n"
#. module: project_timesheet

View File

@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
"PO-Revision-Date: 2012-06-12 04:54+0000\n"
"PO-Revision-Date: 2012-06-12 06:34+0000\n"
"Last-Translator: Akira Hiyama <Unknown>\n"
"Language-Team: Japanese <ja@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-06-12 04:55+0000\n"
"X-Launchpad-Export-Date: 2012-06-13 04:55+0000\n"
"X-Generator: Launchpad (build 15389)\n"
#. module: purchase
@ -22,46 +22,46 @@ msgstr ""
msgid ""
"The buyer has to approve the RFQ before being sent to the supplier. The RFQ "
"becomes a confirmed Purchase Order."
msgstr ""
msgstr "買い手は仕入先に送られる前に見積RFQを承認しなければなりません。見積RFQは確認された発注オーダーになります。"
#. module: purchase
#: model:process.node,note:purchase.process_node_productrecept0
msgid "Incoming products to control"
msgstr ""
msgstr "制御のために入ってくる製品"
#. module: purchase
#: field:purchase.order,invoiced:0
msgid "Invoiced & Paid"
msgstr ""
msgstr "請求済&支払済"
#. module: purchase
#: field:purchase.order,location_id:0 view:purchase.report:0
#: field:purchase.report,location_id:0
msgid "Destination"
msgstr ""
msgstr "宛先"
#. module: purchase
#: code:addons/purchase/purchase.py:236
#, python-format
msgid "In order to delete a purchase order, it must be cancelled first!"
msgstr ""
msgstr "発注オーダーを削除するためには、最初にそれをキャンセルする必要があります。"
#. module: purchase
#: help:purchase.report,date:0
msgid "Date on which this document has been created"
msgstr ""
msgstr "このドキュメントが作成された日付"
#. module: purchase
#: view:purchase.order:0 view:purchase.order.line:0 view:purchase.report:0
#: view:stock.picking:0
msgid "Group By..."
msgstr ""
msgstr "グループ化…"
#. module: purchase
#: field:purchase.order,create_uid:0 view:purchase.report:0
#: field:purchase.report,user_id:0
msgid "Responsible"
msgstr ""
msgstr "担当"
#. module: purchase
#: model:ir.actions.act_window,help:purchase.purchase_rfq
@ -75,34 +75,37 @@ msgid ""
"supplier invoices: based on the order, based on the receptions or manual "
"encoding."
msgstr ""
"仕入先に対して製品を購入したいが、しかし、まだ発注を確認していない場合に見積要求を作成できます。このメニューは物流ルール最小在庫、MTOなどを基本とし"
"て自動的に作成された見積要求をレビューするためにも使用されます。オーダーが確認されると、見積要求から発注オーダーに変換することができます。拡張インタフェー"
"ス(ユーザ設定から)を使用すると、仕入先請求書を制御する方法を選択できます:オーダー基準、受領基準、または手動エンコード。"
#. module: purchase
#: view:purchase.order:0
msgid "Approved purchase order"
msgstr ""
msgstr "承認済発注オーダー"
#. module: purchase
#: view:purchase.order:0 field:purchase.order,partner_id:0
#: view:purchase.order.line:0 view:purchase.report:0
#: field:purchase.report,partner_id:0
msgid "Supplier"
msgstr ""
msgstr "仕入先"
#. module: purchase
#: model:ir.ui.menu,name:purchase.menu_product_pricelist_action2_purchase
#: model:ir.ui.menu,name:purchase.menu_purchase_config_pricelist
msgid "Pricelists"
msgstr ""
msgstr "価格リスト"
#. module: purchase
#: view:stock.picking:0
msgid "To Invoice"
msgstr ""
msgstr "請求対象"
#. module: purchase
#: view:purchase.order.line_invoice:0
msgid "Do you want to generate the supplier invoices?"
msgstr ""
msgstr "仕入先請求書を作成しますか?"
#. module: purchase
#: model:ir.actions.act_window,help:purchase.purchase_form_action
@ -111,29 +114,31 @@ msgid ""
"products, etc. For each purchase order, you can track the products received, "
"and control the supplier invoices."
msgstr ""
"このメニューは、発注オーダーを参照、仕入先、製品などによる検索のために使用します。各発注オーダーのために、受け取った製品の追跡、そして仕入先請求書の制御が"
"できます。"
#. module: purchase
#: code:addons/purchase/wizard/purchase_line_invoice.py:145
#, python-format
msgid "Supplier Invoices"
msgstr ""
msgstr "仕入先請求書"
#. module: purchase
#: view:purchase.report:0
msgid "Purchase Orders Statistics"
msgstr ""
msgstr "発注オーダー統計値"
#. module: purchase
#: model:process.transition,name:purchase.process_transition_packinginvoice0
#: model:process.transition,name:purchase.process_transition_productrecept0
msgid "From a Pick list"
msgstr ""
msgstr "集荷リストから"
#. module: purchase
#: code:addons/purchase/purchase.py:735
#, python-format
msgid "No Pricelist !"
msgstr ""
msgstr "価格リストがありません。"
#. module: purchase
#: model:ir.model,name:purchase.model_purchase_config_wizard
@ -143,44 +148,44 @@ msgstr ""
#. module: purchase
#: view:board.board:0 model:ir.actions.act_window,name:purchase.purchase_draft
msgid "Request for Quotations"
msgstr ""
msgstr "見積要求"
#. module: purchase
#: selection:purchase.config.wizard,default_method:0
msgid "Based on Receptions"
msgstr ""
msgstr "受領基準"
#. module: purchase
#: field:purchase.order,company_id:0 field:purchase.order.line,company_id:0
#: view:purchase.report:0 field:purchase.report,company_id:0
msgid "Company"
msgstr ""
msgstr "会社"
#. module: purchase
#: help:res.company,po_lead:0
msgid "This is the leads/security time for each purchase order."
msgstr ""
msgstr "これは各発注オーダーのためのリード / 保証時間です。"
#. module: purchase
#: model:ir.actions.act_window,name:purchase.action_purchase_order_monthly_categ_graph
#: view:purchase.report:0
msgid "Monthly Purchase by Category"
msgstr ""
msgstr "分類別月次発注"
#. module: purchase
#: view:purchase.order:0
msgid "Set to Draft"
msgstr ""
msgstr "ドラフトに設定"
#. module: purchase
#: selection:purchase.order,state:0 selection:purchase.report,state:0
msgid "Invoice Exception"
msgstr ""
msgstr "請求書の例外"
#. module: purchase
#: model:product.pricelist,name:purchase.list0
msgid "Default Purchase Pricelist"
msgstr ""
msgstr "ドラフト発注価格リスト"
#. module: purchase
#: help:purchase.order,dest_address_id:0
@ -350,7 +355,7 @@ msgstr ""
#: model:process.node,name:purchase.process_node_packinglist0
#: model:process.node,name:purchase.process_node_productrecept0
msgid "Incoming Products"
msgstr ""
msgstr "入ってくる製品"
#. module: purchase
#: model:process.node,name:purchase.process_node_packinginvoice0
@ -1163,7 +1168,7 @@ msgstr ""
#. module: purchase
#: model:process.transition,note:purchase.process_transition_createpackinglist0
msgid "A pick list is generated to track the incoming products."
msgstr ""
msgstr "入ってくる製品を追跡するために集荷リストが作成されます。"
#. module: purchase
#: help:purchase.order,pricelist_id:0