[MERGE] latest trunk

bzr revid: abo@openerp.com-20120830135253-cr29ce1300kd52cz
This commit is contained in:
Antonin Bourguignon 2012-08-30 15:52:53 +02:00
commit 8222eb3723
58 changed files with 1840 additions and 1462 deletions

View File

@ -746,9 +746,11 @@ class account_journal(osv.osv):
'profit_account_id' : fields.many2one('account.account', 'Profit Account'),
'loss_account_id' : fields.many2one('account.account', 'Loss Account'),
'internal_account_id' : fields.many2one('account.account', 'Internal Transfers Account', select=1),
'cash_control' : fields.boolean('Cash Control', help='If you want the journal should be control at opening/closing, check this option'),
}
_defaults = {
'cash_control' : False,
'with_last_closing_balance' : False,
'user_id': lambda self, cr, uid, context: uid,
'company_id': lambda self, cr, uid, c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,

View File

@ -194,12 +194,27 @@ class account_cash_statement(osv.osv):
journal = self.pool.get('account.journal').browse(cr, uid, vals['journal_id'], context=context)
if journal and (journal.type == 'cash') and not vals.get('details_ids'):
vals['details_ids'] = []
last_pieces = None
if journal.with_last_closing_balance == True:
domain = [('journal_id', '=', journal.id),
('state', '=', 'confirm')]
last_bank_statement_ids = self.search(cr, uid, domain, limit=1, order='create_date desc', context=context)
if last_bank_statement_ids:
last_bank_statement = self.browse(cr, uid, last_bank_statement_ids[0], context=context)
last_pieces = dict(
(line.pieces, line.number_closing) for line in last_bank_statement.details_ids
)
for value in journal.cashbox_line_ids:
nested_values = {
'number_closing' : 0,
'number_opening' : 0,
'number_opening' : last_pieces.get(value.pieces, 0) if isinstance(last_pieces, dict) else 0,
'pieces' : value.pieces
}
vals['details_ids'].append([0, False, nested_values])
res_id = super(account_cash_statement, self).create(cr, uid, vals, context=context)

View File

@ -515,7 +515,7 @@
<separator colspan="4" string="Accounts Allowed (empty for no control)"/>
<field colspan="4" name="account_control_ids" nolabel="1"/>
</page>
<page string="Cash Registers" attrs="{'invisible':[('type', '!=', 'cash')]}">
<page string="Cash Registers">
<group>
<group string="Accounts">
<field name="profit_account_id"/>
@ -524,10 +524,11 @@
</group>
<group string="Miscellaneous">
<field name="with_last_closing_balance"/>
<field name="cash_control"/>
</group>
</group>
<separator string="Available Coins" colspan="4" />
<field name="cashbox_line_ids" nolabel="1" string="Unit Of Currency Definition" colspan="4">
<separator string="Available Coins" colspan="4" attrs="{'invisible' : [('cash_control', '=', False)] }"/>
<field name="cashbox_line_ids" nolabel="1" string="Unit Of Currency Definition" colspan="4" attrs="{'invisible' : [('cash_control', '=', False)]}">
<tree string="CashBox Lines" editable="bottom">
<field name="pieces" />
</tree>

View File

@ -381,6 +381,11 @@
<field name="name">Cash Journal - (test)</field>
<field name="code">TCSH</field>
<field name="type">cash</field>
<field name="profit_account_id" model="account.account" ref="rsa" />
<field name="loss_account_id" model="account.account" ref="rsa" />
<field name="internal_account_id" model="account.account" ref="chart0" />
<field name="with_last_closing_balance" eval="True" />
<field name="cash_control" eval="True" />
<field name="view_id" ref="account_journal_bank_view"/>
<field name="sequence_id" ref="sequence_cash_journal"/>
<field model="account.account" name="default_debit_account_id" ref="cash"/>

View File

@ -40,6 +40,9 @@ Adds menu to show relevant information to each manager.You can also view the rep
'account_analytic_analysis_menu.xml',
'account_analytic_analysis_cron.xml',
],
'css': [
'static/src/css/analytic.css'
],
'demo': [],
'installable': True,
'auto_install': False,

View File

@ -451,8 +451,8 @@ class account_analytic_account(osv.osv):
'real_margin_rate': fields.function(_real_margin_rate_calc, type='float', string='Real Margin Rate (%)',
help="Computes using the formula: (Real Margin / Total Costs) * 100.",
digits_compute=dp.get_precision('Account')),
'fix_price_invoices' : fields.boolean('Fix Price Invoices'),
'invoice_on_timesheets' : fields.boolean("Invoice On Timesheets"),
'fix_price_invoices' : fields.boolean('Fixed Price'),
'invoice_on_timesheets' : fields.boolean("On Timesheets"),
'month_ids': fields.function(_analysis_all, multi='analytic_analysis', type='many2many', relation='account_analytic_analysis.summary.month', string='Month'),
'user_ids': fields.function(_analysis_all, multi='analytic_analysis', type="many2many", relation='account_analytic_analysis.summary.user', string='User'),
'hours_qtt_est': fields.float('Estimation of Hours to Invoice'),

View File

@ -22,30 +22,28 @@
<xpath expr='//div[@name="duration"]' position="after" version="7.0">
<label for="quantity_max"/>
<div>
<field name="quantity_max" class="oe_inline"/> / Remaining: <field name="remaining_hours" class="oe_inline"/>
<field name="quantity_max" class="oe_inline"/>
<field name="company_uom_id" readonly="1" class="oe_inline"/>
</div>
</xpath>
<xpath expr='//group[@name="invoice_on_timesheets"]' position="replace">
<group name='invoice_on_timesheets' string="Invoice on Timesheets Options" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}" col="4">
<field name="pricelist_id" attrs="{'required': [('invoice_on_timesheets', '=', True)]}"/>
<field name="to_invoice" widget="selection" attrs="{'required': [('invoice_on_timesheets', '=', True)]}"/>
</group>
</xpath>
<xpath expr='//group[@name="master"]' position='after'>
<xpath expr='//separator[@name="description"]' position='before'>
<separator name="toinvoice" string="Invoicing"/>
<table width="100%%">
<table class="oe_form_analytic_account">
<tr>
<th></th>
<th></th>
<th><label string="Est.Tot"/></th>
<th><label string="Invoiced"/></th>
<th><label string="Remaining"/></th>
<th><label string="To Invoice"/></th>
<th class="oe_grey" width="160px"></th>
<th class="oe_grey" width="25px"></th>
<th class="oe_grey" width="100px"><label string="Expected"/></th>
<th class="oe_grey" width="100px"><label string="Invoiced"/></th>
<th class="oe_grey" width="100px"><label string="Remaining"/></th>
<th class="oe_grey" width="100px"><label string="To Invoice"/></th>
<th width="30px"></th>
<th></th>
</tr><tr>
<td>
<td class="oe_grey">
<label for="fix_price_invoices"/>
</td><td>
</td><td class="oe_grey">
<field name="fix_price_invoices" class="oe_inline"/>
</td><td>
<field class="oe_inline" name="amount_max" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
@ -56,13 +54,22 @@
</td><td>
<field class="oe_inline" name="fix_price_to_invoice" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
</td><td>
<button name="%(action_sales_order)d" string="All Sales" type="action" context="{'default_partner_id': [partner_id], 'search_default_partner_id': [partner_id],'search_default_project_id': [active_id],'default_project_id': [active_id]}" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
<button name="open_sale_order_lines" string="Lines To Invoice" type="object" context="{'default_partner_id': [partner_id],'default_project_id': active_id,'search_default_uninvoiced': 1,'search_default_project_id': active_id,'search_default_partner_id': [partner_id]}" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
</td>
</tr><tr attrs="{'invisible':[('use_timesheets','=',False)]}">
<td>
<label for="invoice_on_timesheets"/>
<button name="open_sale_order_lines"
class="oe_link oe_e"
string="/" type="object"
context="{'default_partner_id': [partner_id],'default_project_id': active_id,'search_default_uninvoiced': 1,'search_default_project_id': active_id,'search_default_partner_id': [partner_id]}"
attrs="{'invisible': [('fix_price_to_invoice','=',0)]}"/>
</td><td>
<button name="%(action_sales_order)d" string="Sale Orders"
type="action"
class="oe_link"
context="{'default_partner_id': [partner_id], 'search_default_partner_id': [partner_id],'search_default_project_id': [active_id],'default_project_id': [active_id]}"
attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
</td>
</tr><tr>
<td class="oe_grey">
<label for="invoice_on_timesheets"/>
</td><td class="oe_grey">
<field name="invoice_on_timesheets"/>
</td><td>
<field class="oe_inline" name="hours_qtt_est" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
@ -73,25 +80,44 @@
</td><td>
<field class="oe_inline" name="ca_to_invoice" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
</td><td>
<button name="%(hr_timesheet.act_hr_timesheet_line_evry1_all_form)d" string="All Timesheets" type="action" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}" context="{'default_account_id': active_id,'search_default_account_id': active_id}"/>
<button name="%(hr_timesheet_invoice.act_acc_analytic_acc_2_report_acc_analytic_line_to_invoice)d" string="Timesheets to Invoice" type="action" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
<button name="%(hr_timesheet_invoice.act_acc_analytic_acc_2_report_acc_analytic_line_to_invoice)d"
type="action"
class="oe_link oe_e"
string="/"
attrs="{'invisible': [('ca_to_invoice','=',0.0)]}"/>
</td><td>
<button name="%(hr_timesheet.act_hr_timesheet_line_evry1_all_form)d"
string="Timesheets" type="action"
class="oe_link"
attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"
context="{'default_account_id': active_id,'search_default_account_id': active_id}"/>
</td>
</tr><tr name='total'>
<th>
<th class="oe_grey">
<label string="Total"/>
</th><td>
</td><td>
</th><td class="oe_grey">
</td><td class="oe_grey">
<field name="est_total" class="oe_inline" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
</td><td>
</td><td class="oe_grey">
<field name="invoiced_total" class="oe_inline"/>
</td><td>
</td><td class="oe_grey">
<field name="remaining_total" class="oe_inline"/>
</td><td>
</td><td class="oe_grey">
<field name="toinvoice_total" class="oe_inline"/>
</td><td>
</td>
</tr>
</table>
<group name='invoice_on_timesheets' attrs="{'invisible': [('invoice_on_timesheets','=',False)]}">
<field name="pricelist_id"
class="oe_inline"
attrs="{'required': [('invoice_on_timesheets', '=', True)]}"/>
<field name="to_invoice"
class="oe_inline"
widget="selection"
attrs="{'required': [('invoice_on_timesheets', '=', True)]}"/>
</group>
</xpath>
</field>
</record>

View File

@ -0,0 +1,3 @@
analytic.css: analytic.sass
sass -t expanded analytic.sass analytic.css

View File

@ -0,0 +1,15 @@
@charset "utf-8";
.openerp .oe_form table.oe_form_analytic_account tr {
height: 28px;
}
.openerp .oe_form table.oe_form_analytic_account tr td, .openerp .oe_form table.oe_form_analytic_account tr th {
vertical-align: middle;
}
.openerp .oe_form table.oe_form_analytic_account tr td .oe_form_field_float, .openerp .oe_form table.oe_form_analytic_account tr th .oe_form_field_float {
float: right;
width: auto !important;
}
.openerp .oe_form table.oe_form_analytic_account .oe_grey {
background-color: #eeeeee;
color: #404040;
}

View File

@ -0,0 +1,15 @@
@charset "utf-8"
.openerp .oe_form
table.oe_form_analytic_account
tr
height: 28px
td,th
vertical-align: middle
.oe_form_field_float
float: right
width: auto !important
.oe_grey
background-color: #eeeeee
color: #404040

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
"PO-Revision-Date: 2009-01-30 12:43+0000\n"
"Last-Translator: <>\n"
"PO-Revision-Date: 2012-08-29 15:27+0000\n"
"Last-Translator: Eric Huang <eh@cenoq.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-08-28 06:20+0000\n"
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
"X-Generator: Launchpad (build 15864)\n"
#. module: account_payment
@ -24,7 +24,7 @@ msgstr ""
#. module: account_payment
#: field:payment.line,currency:0
msgid "Partner Currency"
msgstr "伴貨幣"
msgstr "業務夥伴貨幣"
#. module: account_payment
#: view:payment.order:0
@ -40,7 +40,7 @@ msgstr "選取要應用之付款模式。"
#: view:payment.mode:0
#: view:payment.order:0
msgid "Group By..."
msgstr "分組根據..."
msgstr "分類方式..."
#. module: account_payment
#: field:payment.order,line_ids:0
@ -84,7 +84,7 @@ msgstr "首選日期"
#. module: account_payment
#: model:res.groups,name:account_payment.group_account_payment
msgid "Accounting / Payments"
msgstr ""
msgstr "會計/付款"
#. module: account_payment
#: selection:payment.line,state:0
@ -111,7 +111,7 @@ msgstr "到期日"
#. module: account_payment
#: view:account.move.line:0
msgid "Account Entry Line"
msgstr ""
msgstr "會計分錄明細"
#. module: account_payment
#: view:payment.order.create:0
@ -222,7 +222,7 @@ msgstr ""
#: view:payment.order:0
#: field:payment.order,state:0
msgid "State"
msgstr ""
msgstr "狀態"
#. module: account_payment
#: view:payment.line:0
@ -307,7 +307,7 @@ msgstr ""
#. module: account_payment
#: view:payment.order:0
msgid "Select Invoices to Pay"
msgstr ""
msgstr "選擇要付款的發票"
#. module: account_payment
#: view:payment.line:0
@ -329,12 +329,12 @@ msgstr "通訊類型"
#: field:payment.mode,partner_id:0
#: report:payment.order:0
msgid "Partner"
msgstr "伴"
msgstr "業務夥伴"
#. module: account_payment
#: field:payment.line,bank_statement_line_id:0
msgid "Bank statement line"
msgstr ""
msgstr "銀行對帳單明細"
#. module: account_payment
#: selection:payment.order,date_prefered:0
@ -399,7 +399,7 @@ msgstr "付款類型"
#. module: account_payment
#: help:payment.line,amount_currency:0
msgid "Payment amount in the partner currency"
msgstr "以伴貨幣計算之付款總額"
msgstr "以業務夥伴貨幣計算之付款總額"
#. module: account_payment
#: view:payment.order:0
@ -441,7 +441,7 @@ msgstr ""
#. module: account_payment
#: field:payment.order,user_id:0
msgid "User"
msgstr ""
msgstr "使用者"
#. module: account_payment
#: field:account.payment.populate.statement,lines:0
@ -504,7 +504,7 @@ msgstr "匯入付款明細"
#. module: account_payment
#: field:account.move.line,amount_to_pay:0
msgid "Amount to pay"
msgstr "付總額"
msgstr "付總額"
#. module: account_payment
#: field:payment.line,amount:0

View File

@ -153,9 +153,9 @@ class account_analytic_account(osv.osv):
return result
_columns = {
'name': fields.char('Account Name', size=128, required=True),
'name': fields.char('Account/Contract Name', size=128, required=True),
'complete_name': fields.function(_complete_name_calc, type='char', string='Full Account Name'),
'code': fields.char('Code/Reference', size=24, select=True),
'code': fields.char('Reference', size=24, select=True),
'type': fields.selection([('view','Analytic View'), ('normal','Analytic Account'),('contract','Contract or Project'),('template','Template of Project')], 'Type of Account', required=True,
help="If you select the View Type, it means you won\'t allow to create journal entries using that account.\n"\
"The type 'Analytic account' stands for usual accounts that you only want to use in accounting.\n"\
@ -171,7 +171,7 @@ class account_analytic_account(osv.osv):
'debit': fields.function(_debit_credit_bal_qtty, type='float', string='Debit', multi='debit_credit_bal_qtty', digits_compute=dp.get_precision('Account')),
'credit': fields.function(_debit_credit_bal_qtty, type='float', string='Credit', multi='debit_credit_bal_qtty', digits_compute=dp.get_precision('Account')),
'quantity': fields.function(_debit_credit_bal_qtty, type='float', string='Quantity', multi='debit_credit_bal_qtty'),
'quantity_max': fields.float('Maximum Time', help='Sets the higher limit of time to work on the contract.'),
'quantity_max': fields.float('Prepaid Units', help='Sets the higher limit of time to work on the contract.'),
'partner_id': fields.many2one('res.partner', 'Customer'),
'user_id': fields.many2one('res.users', 'Project Manager'),
'manager_id': fields.many2one('res.users', 'Account Manager'),

View File

@ -10,33 +10,35 @@
<sheet string="Analytic Account">
<label for="name" class="oe_edit_only"/>
<h1>
<field name="name"/>
<field name="name" class="oe_inline"/>
</h1>
<div name="project"/>
<group>
<group>
<field name="partner_id" on_change="on_change_partner_id(partner_id, name)" attrs="{'required':[('type','=','contract')]}"/>
<field name="parent_id" on_change="on_change_parent(parent_id)" attrs="{'invisible': [('type','in',['contract','template'])]}"/>
<field name="type"/>
<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'}"/>
<field name="manager_id"/>
<field name="code"/>
</group>
<group>
<field name="code"/>
<field name="manager_id"/>
<field name="type"/>
<field name="parent_id" on_change="on_change_parent(parent_id)" attrs="{'invisible': [('type','in',['contract','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'}"/>
<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>
<notebook>
<page string="Contract Information" name="contract_page" attrs="{'invisible':[('type','not in',['contract', 'template'])]}">
<group name="master">
<group string="Validity" name="contract">
<label for="date_start" string="Duration"/>
<div name="duration">
<field name="date_start" class="oe_inline"/> - <field name="date" class="oe_inline"/>
</div>
</group>
<group name="project">
<separator string="Project Management" name="project_sep" invisible="1"/>
</group>
<group string="Renewal" name="contract">
<p colspan="2" class="oe_grey oe_edit_only">
Once the end date of the contract is
passed or the maximum number of service
units is reached, the account manager
is warned by email to renew the contract.
</p>
<label for="date" string="End Date"/>
<div name="duration">
<field name="date" class="oe_inline"/>
</div>
</group>
<separator string="Terms and Conditions" name="description"/>
<field name="description"/>

View File

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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 analytic_contract_expense_project
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,41 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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/>.
#
##############################################################################
{
'name': 'Projects Management: hr_expense link',
'version': '1.1',
'category': 'Hidden',
'description': """
This module is for modifying project view to show some data related to the hr_expense module.
=============================================================================================
""",
'author': 'OpenERP S.A.',
'website': 'http://www.openerp.com/',
'depends': ['analytic_contract_hr_expense','project'],
'data': ['analytic_contract_expense_project_view.xml'],
'demo': [],
'css' : [],
'installable': True,
'auto_install': True,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,37 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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 osv import osv
class project_project(osv.osv):
_inherit = "project.project"
def open_hr_expense(self, cr, uid, ids, context=None):
account_ids = [x.analytic_account_id.id for x in self.browse(cr, uid, ids, context=context)]
return self.pool.get('account.analytic.account').open_hr_expense(cr, uid, account_ids, context=context)
def hr_to_invoice_expense(self, cr, uid, ids, context=None):
account_ids = [x.analytic_account_id.id for x in self.browse(cr, uid, ids, context=context)]
return self.pool.get('account.analytic.account').hr_to_invoice_expense(cr, uid, account_ids, context=context)
project_project()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="project_form_expense_form" model="ir.ui.view">
<field name="name">project.project.form.expense.inherit</field>
<field name="model">project.project</field>
<field name="inherit_id" ref="analytic_contract_project.project_account_analytic_account_form"/>
<field eval="20" name="priority"/>
<field name="arch" type="xml">
<xpath expr='//tr[@name="total"]' position='before'>
<tr>
<td>
<label for="charge_expenses"/>
</td><td>
<field name="charge_expenses"/>
</td><td>
<field class="oe_inline" name="est_expenses" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
</td><td>
<field class="oe_inline" name="expense_invoiced" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
</td><td>
<field class="oe_inline" name="remaining_expense" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
</td><td>
<field class="oe_inline" name="expense_to_invoice" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
</td><td>
<button name="open_hr_expense" string="All Expenses" type="object" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
<button name="hr_to_invoice_expense" string="Expenses to Invoice" type="object" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
</td>
</tr>
</xpath>
</field>
</record>
</data>
</openerp>

View File

@ -5,12 +5,13 @@
<field name="name">account.analytic.account.form.expense.inherit</field>
<field name="model">account.analytic.account</field>
<field eval="60" name="priority"/>
<field name="inherit_id" ref="account_analytic_analysis.account_analytic_account_form_form"/>
<field name="arch" type="xml">
<xpath expr='//tr[@name="total"]' position='before'>
<tr>
<td>
<td class="oe_grey">
<label for="charge_expenses"/>
</td><td>
</td><td class="oe_grey">
<field name="charge_expenses"/>
</td><td>
<field class="oe_form_inline" name="est_expenses" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
@ -21,10 +22,16 @@
</td><td>
<field class="oe_form_inline" name="expense_to_invoice" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
</td><td>
<group>
<button name="open_hr_expense" string="All Expenses" type="object" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
<button name="hr_to_invoice_expense" string="Expenses to Invoice" type="object" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
</group>
<button
name="hr_to_invoice_expense"
class="oe_link oe_e"
string="/" type="object"
attrs="{'invisible': [('expense_to_invoice','=',0)]}"/>
</td><td>
<button
name="open_hr_expense"
class="oe_link"
string="Expenses" type="object" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
</td>
</tr>
</xpath>

View File

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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 analytic_contract_project
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,38 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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/>.
#
##############################################################################
{
'name' : 'Contract on Project',
'version': '1.1',
'author' : 'OpenERP SA',
'category': 'Hidden',
'website' : 'http://www.openerp.com',
'depends' : ['project', 'account_analytic_analysis'],
'description': """
Add "Contract Data" in project view.
====================================
""",
'data': ['analytic_contract_project_view.xml'],
'demo': [],
'installable': True,
'auto_install': True,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,84 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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 osv import fields, osv
from tools.translate import _
class project_project(osv.osv):
_inherit = 'project.project'
_defaults = {
'use_timesheets': True,
}
def open_sale_order_lines(self,cr,uid,ids,context=None):
account_ids = [x.analytic_account_id.id for x in self.browse(cr, uid, ids, context=context)]
return self.pool.get('account.analytic.account').open_sale_order_lines(cr, uid, account_ids, context=context)
def open_timesheets_to_invoice(self,cr,uid,ids,context=None):
if context is None:
context = {}
analytic_account_id = self.browse(cr, uid, ids[0], context=context).analytic_account_id.id
context.update({'search_default_account_id': analytic_account_id, 'default_account_id': analytic_account_id, 'search_default_to_invoice': 1})
return {
'type': 'ir.actions.act_window',
'name': _('Timesheet Lines to Invoice'),
'view_type': 'form',
'view_mode': 'tree,form',
'context': context,
'domain' : [('invoice_id','=',False),('to_invoice','!=',False), ('journal_id.type', '=', 'general')],
'res_model': 'account.analytic.line',
'nodestroy': True,
}
def open_timesheets(self, cr, uid, ids, context=None):
""" open Timesheets view """
project = self.browse(cr, uid, ids[0], context)
try:
journal_id = self.pool.get('ir.model.data').get_object(cr, uid, 'hr_timesheet', 'analytic_journal').id
except ValueError:
journal_id = False
view_context = {
'search_default_account_id': [project.analytic_account_id.id],
'default_account_id': project.analytic_account_id.id,
'default_journal_id': journal_id,
}
return {
'type': 'ir.actions.act_window',
'name': _('Bill Tasks Works'),
'res_model': 'account.analytic.line',
'view_type': 'form',
'view_mode': 'tree,form',
'context': view_context,
'nodestroy': True,
}
project_project()
class task(osv.osv):
_inherit = "project.task"
def create(self, cr, uid, vals, context=None):
task_id = super(task, self).create(cr, uid, vals, context=context)
task_browse = self.browse(cr, uid, task_id, context=context)
if task_browse.project_id.analytic_account_id:
self.pool.get('account.analytic.account').message_append_note(cr, uid, [task_browse.project_id.analytic_account_id.id], body=_("Task <em>%s</em> has been <b>created</b>.") % (task_browse.name), context=context)
return task_id
task()

View File

@ -1,127 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="project_account_analytic_account_form" model="ir.ui.view">
<field name="name">project.project.form.inherit</field>
<field name="model">project.project</field>
<field name="inherit_id" ref="project.edit_project"/>
<field eval="18" name="priority"/>
<field name="arch" type="xml">
<xpath expr='//page[@name="team"]' position='after'>
<page string="Contract Data">
<group>
<group string="Validity">
<label for="date_start" string="Duration"/>
<div name="duration">
<field name="date_start" class="oe_inline"/>
<label attrs="{'invisible':[('date','=',False)]}" class="oe_inline" string=" - "/>
<field name="date" class="oe_inline"/>
</div>
<label for="quantity_max"/>
<div>
<field name="quantity_max" class="oe_inline"/>
<field name="company_uom_id" readonly="1" class="oe_inline"/> / Remaining:
<field name="remaining_hours" class="oe_inline"/>
<field name="company_uom_id" readonly="1" class="oe_inline"/>
</div>
</group>
<group string="Invoice Options">
<field name="manager_id" />
<field name="pricelist_id" attrs="{'invisible': [('invoice_on_timesheets','=',0)]}"/>
<field name="to_invoice" widget="selection" attrs="{'invisible': [('invoice_on_timesheets','=',0)]}"/>
</group>
</group>
<separator name="toinvoice" string="Invoicing"/>
<table width="100%%">
<tr>
<th></th>
<th></th>
<th><label string="Est.Tot"/></th>
<th><label string="Invoiced"/></th>
<th><label string="Remaining"/></th>
<th><label string="To Invoice"/></th>
<th></th>
</tr><tr>
<td>
<label for="fix_price_invoices"/>
</td><td>
<field name="fix_price_invoices" class="oe_inline"/>
</td><td>
<field class="oe_inline" name="amount_max" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
</td><td>
<field class="oe_inline" name="ca_invoiced" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
</td><td>
<field class="oe_inline" name="remaining_ca" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
</td><td>
<field class="oe_inline" name="fix_price_to_invoice" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
</td><td>
<button name="%(account_analytic_analysis.action_sales_order)d" string="All Sales" type="action" context="{'default_partner_id': [partner_id], 'search_default_partner_id': [partner_id], 'default_project_id': analytic_account_id, 'search_default_project_id': analytic_account_id}" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
<button name="open_sale_order_lines" string="Lines To Invoice" type="object" context="{'default_partner_id': [partner_id],'default_project_id': analytic_account_id,'search_default_uninvoiced': 1,'search_default_project_id': analytic_account_id,'search_default_partner_id': [partner_id]}" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/></td>
</tr><tr attrs="{'invisible':[('use_timesheets','=',False)]}">
<td>
<label for="invoice_on_timesheets"/>
</td><td>
<field name="invoice_on_timesheets"/>
</td><td>
<field class="oe_inline" name="hours_qtt_est" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
</td><td>
<field class="oe_inline" name="timesheet_ca_invoiced" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
</td><td>
<field class="oe_inline" name="remaining_hours_to_invoice" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
</td><td>
<field class="oe_inline" name="ca_to_invoice" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
</td><td>
<button name="%(hr_timesheet.act_hr_timesheet_line_evry1_all_form)d" string="All Timesheets" type="action" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}" context="{'default_account_id': analytic_account_id,'search_default_account_id': analytic_account_id}"/>
<button name="open_timesheets_to_invoice" string="Timesheets to Invoice" type="object" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
</td>
</tr><tr name="total">
<th>
<label string="Total"/>
</th><td>
</td><td>
<field name="est_total" class="oe_inline" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
</td><td>
<field name="invoiced_total" class="oe_inline"/>
</td><td>
<field name="remaining_total" class="oe_inline"/>
</td><td>
<field name="toinvoice_total" class="oe_inline"/>
</td><td>
</td>
</tr>
</table>
<separator string="Terms and Conditions" name="description"/>
<field name="description"/>
</page>
</xpath>
</field>
</record>
<record id="project_invoice_form" model="ir.ui.view">
<field name="name">Inherit project form : Invoicing Data</field>
<field name="model">project.project</field>
<field name="inherit_id" ref="project.edit_project"/>
<field name="arch" type="xml">
<xpath expr='//tr[@name="use_tasks_row"]' position='after'>
<tr>
<td><group><field name="use_timesheets"/></group></td>
<td><button icon="terp-gtk-go-back-rtl" name="open_timesheets" string="Timesheets" type="object" attrs="{'invisible':[('use_timesheets','=', 0)]}"/></td>
</tr>
</xpath>
</field>
</record>
<record id="contract_inherited_form" model="ir.ui.view">
<field name="name">Inherit contract form : adding UoM</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
<field name="priority">50</field>
<field name="arch" type="xml">
<xpath expr='//field[@name="remaining_hours"]' position='after'>
<field name="company_uom_id" readonly="1" class="oe_inline"/>
</xpath>
</field>
</record>
</data>
</openerp>

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-08-29 05:05+0000\n"
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
"X-Generator: Launchpad (build 15864)\n"
#. module: anonymization

File diff suppressed because it is too large Load Diff

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-08-29 05:05+0000\n"
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
"X-Generator: Launchpad (build 15864)\n"
#. module: crm_caldav

View File

@ -8,67 +8,67 @@ 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-08-24 03:36+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
"PO-Revision-Date: 2012-08-30 03:01+0000\n"
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
"Language-Team: Cenoq Corp. MIME-Version: 1.0\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-08-28 06:37+0000\n"
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
"X-Generator: Launchpad (build 15864)\n"
#. module: crm_claim
#: field:crm.claim.report,nbr:0
msgid "# of Cases"
msgstr ""
msgstr "# 業務量"
#. module: crm_claim
#: view:crm.claim:0
#: view:crm.claim.report:0
msgid "Group By..."
msgstr ""
msgstr "分類方式..."
#. module: crm_claim
#: view:crm.claim:0
msgid "Responsibilities"
msgstr ""
msgstr "責任人"
#. module: crm_claim
#: field:crm.claim,date_action_next:0
msgid "Next Action Date"
msgstr ""
msgstr "下一動作日期"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "March"
msgstr ""
msgstr "3月"
#. module: crm_claim
#: field:crm.claim.report,delay_close:0
msgid "Delay to close"
msgstr ""
msgstr "延遲關閉"
#. module: crm_claim
#: field:crm.claim,resolution:0
msgid "Resolution"
msgstr ""
msgstr "解決方案"
#. module: crm_claim
#: field:crm.claim,company_id:0
#: view:crm.claim.report:0
#: field:crm.claim.report,company_id:0
msgid "Company"
msgstr ""
msgstr "公司"
#. module: crm_claim
#: field:crm.claim,email_cc:0
msgid "Watchers Emails"
msgstr ""
msgstr "視察者的電子郵件"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "#Claim"
msgstr ""
msgstr "#索賠"
#. module: crm_claim
#: model:ir.actions.act_window,help:crm_claim.crm_claim_stage_act
@ -76,99 +76,99 @@ msgid ""
"You can create claim stages to categorize the status of every claim entered "
"in the system. The stages define all the steps required for the resolution "
"of a claim."
msgstr ""
msgstr "你能建立索賠階段的分類在系統輸入每個索賠的狀態度。階段定義索賠解決方案的所有需求的步驟。"
#. module: crm_claim
#: code:addons/crm_claim/crm_claim.py:132
#, python-format
msgid "The claim '%s' has been opened."
msgstr ""
msgstr "索賠'%s' 已被打開。"
#. module: crm_claim
#: view:crm.claim:0
msgid "Date Closed"
msgstr ""
msgstr "結束日期"
#. module: crm_claim
#: view:crm.claim.report:0
#: field:crm.claim.report,day:0
msgid "Day"
msgstr ""
msgstr ""
#. module: crm_claim
#: view:crm.claim:0
msgid "Add Internal Note"
msgstr ""
msgstr "加入內部備註"
#. module: crm_claim
#: help:crm.claim,section_id:0
msgid ""
"Sales team to which Case belongs to.Define Responsible user and Email "
"account for mail gateway."
msgstr ""
msgstr "銷售團隊屬於的業務,定義負責人和郵件地址的郵件閘道。"
#. module: crm_claim
#: view:crm.claim:0
msgid "Claim Description"
msgstr ""
msgstr "索陪說明"
#. module: crm_claim
#: field:crm.claim,message_ids:0
msgid "Messages"
msgstr ""
msgstr "訊息"
#. module: crm_claim
#: model:crm.case.categ,name:crm_claim.categ_claim1
msgid "Factual Claims"
msgstr ""
msgstr "實際索賠"
#. module: crm_claim
#: selection:crm.claim,state:0
#: selection:crm.claim.report,state:0
msgid "Cancelled"
msgstr ""
msgstr "已取消"
#. module: crm_claim
#: model:crm.case.resource.type,name:crm_claim.type_claim2
msgid "Preventive"
msgstr ""
msgstr "預防措施"
#. module: crm_claim
#: field:crm.claim.report,date_closed:0
msgid "Close Date"
msgstr ""
msgstr "結束日期"
#. module: crm_claim
#: field:crm.claim,ref:0
msgid "Reference"
msgstr ""
msgstr "關聯"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "Date of claim"
msgstr ""
msgstr "索賠日期"
#. module: crm_claim
#: view:crm.claim:0
msgid "All pending Claims"
msgstr ""
msgstr "所有未決索賠"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "# Mails"
msgstr ""
msgstr "#郵件"
#. module: crm_claim
#: view:crm.claim:0
msgid "Reset to Draft"
msgstr ""
msgstr "重設為草稿"
#. module: crm_claim
#: view:crm.claim:0
#: field:crm.claim,date_deadline:0
#: field:crm.claim.report,date_deadline:0
msgid "Deadline"
msgstr ""
msgstr "截止日期"
#. module: crm_claim
#: view:crm.claim:0
@ -177,116 +177,116 @@ msgstr ""
#: field:crm.claim.report,partner_id:0
#: model:ir.model,name:crm_claim.model_res_partner
msgid "Partner"
msgstr ""
msgstr "業務夥伴"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "Month of claim"
msgstr ""
msgstr "索賠月份"
#. module: crm_claim
#: selection:crm.claim,type_action:0
#: selection:crm.claim.report,type_action:0
msgid "Preventive Action"
msgstr ""
msgstr "預防措施的動作"
#. module: crm_claim
#: field:crm.claim.report,section_id:0
msgid "Section"
msgstr ""
msgstr "劃分"
#. module: crm_claim
#: view:crm.claim:0
msgid "Root Causes"
msgstr ""
msgstr "根本原因"
#. module: crm_claim
#: field:crm.claim,user_fault:0
msgid "Trouble Responsible"
msgstr ""
msgstr "問題責任"
#. module: crm_claim
#: field:crm.claim,priority:0
#: view:crm.claim.report:0
#: field:crm.claim.report,priority:0
msgid "Priority"
msgstr ""
msgstr "優先級"
#. module: crm_claim
#: view:crm.claim:0
msgid "Send New Email"
msgstr ""
msgstr "發送新的電子郵件"
#. module: crm_claim
#: view:crm.claim:0
#: selection:crm.claim,state:0
#: view:crm.claim.report:0
msgid "New"
msgstr ""
msgstr "新建"
#. module: crm_claim
#: view:crm.claim:0
#: view:crm.claim.report:0
msgid "Type"
msgstr ""
msgstr "類型"
#. module: crm_claim
#: field:crm.claim,email_from:0
msgid "Email"
msgstr ""
msgstr "電子郵件"
#. module: crm_claim
#: selection:crm.claim,priority:0
#: selection:crm.claim.report,priority:0
msgid "Lowest"
msgstr ""
msgstr "最低"
#. module: crm_claim
#: field:crm.claim,action_next:0
msgid "Next Action"
msgstr ""
msgstr "下一動作"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "My Sales Team(s)"
msgstr ""
msgstr "我的銷售團隊"
#. module: crm_claim
#: model:crm.case.stage,name:crm_claim.stage_claim3
msgid "Won't fix"
msgstr ""
msgstr "不修正"
#. module: crm_claim
#: field:crm.claim,create_date:0
msgid "Creation Date"
msgstr ""
msgstr "建立日期"
#. module: crm_claim
#: field:crm.claim,name:0
msgid "Claim Subject"
msgstr ""
msgstr "索賠主題"
#. module: crm_claim
#: model:ir.actions.act_window,help:crm_claim.action_report_crm_claim
msgid ""
"Have a general overview of all claims processed in the system by sorting "
"them with specific criteria."
msgstr ""
msgstr "為系統內所有的索賠處理指定一個排序標準"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "July"
msgstr ""
msgstr "7月"
#. module: crm_claim
#: model:ir.actions.act_window,name:crm_claim.crm_claim_stage_act
msgid "Claim Stages"
msgstr ""
msgstr "索賠階段"
#. module: crm_claim
#: model:ir.ui.menu,name:crm_claim.menu_crm_case_claim-act
msgid "Categories"
msgstr ""
msgstr "分類"
#. module: crm_claim
#: view:crm.claim:0
@ -294,108 +294,108 @@ msgstr ""
#: view:crm.claim.report:0
#: field:crm.claim.report,stage_id:0
msgid "Stage"
msgstr ""
msgstr "階段"
#. module: crm_claim
#: view:crm.claim:0
msgid "History Information"
msgstr ""
msgstr "日誌資訊"
#. module: crm_claim
#: view:crm.claim:0
msgid "Dates"
msgstr ""
msgstr "日期"
#. module: crm_claim
#: view:crm.claim:0
msgid "Contact"
msgstr ""
msgstr "聯繫人"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "Month-1"
msgstr ""
msgstr "上月"
#. module: crm_claim
#: model:ir.actions.act_window,name:crm_claim.action_report_crm_claim
#: model:ir.ui.menu,name:crm_claim.menu_report_crm_claim_tree
msgid "Claims Analysis"
msgstr ""
msgstr "索賠分析"
#. module: crm_claim
#: help:crm.claim.report,delay_close:0
msgid "Number of Days to close the case"
msgstr ""
msgstr "到期天數"
#. module: crm_claim
#: model:ir.model,name:crm_claim.model_crm_claim_report
msgid "CRM Claim Report"
msgstr ""
msgstr "客戶關係管理索賠報表"
#. module: crm_claim
#: model:crm.case.stage,name:crm_claim.stage_claim1
msgid "Accepted as Claim"
msgstr ""
msgstr "作為索賠接受"
#. module: crm_claim
#: model:crm.case.resource.type,name:crm_claim.type_claim1
msgid "Corrective"
msgstr ""
msgstr "糾正"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "September"
msgstr ""
msgstr "9月"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "December"
msgstr ""
msgstr "12月"
#. module: crm_claim
#: view:crm.claim.report:0
#: field:crm.claim.report,month:0
msgid "Month"
msgstr ""
msgstr ""
#. module: crm_claim
#: field:crm.claim,type_action:0
#: view:crm.claim.report:0
#: field:crm.claim.report,type_action:0
msgid "Action Type"
msgstr ""
msgstr "動作類型"
#. module: crm_claim
#: field:crm.claim,write_date:0
msgid "Update Date"
msgstr ""
msgstr "更新日期"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "Year of claim"
msgstr ""
msgstr "索賠年份"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "Salesman"
msgstr ""
msgstr "業務員"
#. module: crm_claim
#: field:crm.claim,categ_id:0
#: view:crm.claim.report:0
#: field:crm.claim.report,categ_id:0
msgid "Category"
msgstr ""
msgstr "分類"
#. module: crm_claim
#: model:crm.case.categ,name:crm_claim.categ_claim2
msgid "Value Claims"
msgstr ""
msgstr "索賠金額"
#. module: crm_claim
#: view:crm.claim:0
msgid "Responsible User"
msgstr ""
msgstr "負責使用者"
#. module: crm_claim
#: help:crm.claim,email_cc:0
@ -403,30 +403,30 @@ msgid ""
"These email addresses will be added to the CC field of all inbound and "
"outbound emails for this record before being sent. Separate multiple email "
"addresses with a comma"
msgstr ""
msgstr "這些郵件地址將加入到之前發送記錄的發送和接收郵件的郵件副本欄位,分隔多個郵件地址有逗號。"
#. module: crm_claim
#: selection:crm.claim.report,state:0
msgid "Draft"
msgstr ""
msgstr "草稿"
#. module: crm_claim
#: selection:crm.claim,priority:0
#: selection:crm.claim.report,priority:0
msgid "Low"
msgstr ""
msgstr ""
#. module: crm_claim
#: field:crm.claim,date_closed:0
#: selection:crm.claim,state:0
#: selection:crm.claim.report,state:0
msgid "Closed"
msgstr ""
msgstr "已結束"
#. module: crm_claim
#: view:crm.claim:0
msgid "Reply"
msgstr ""
msgstr "回覆"
#. module: crm_claim
#: view:crm.claim:0
@ -434,99 +434,99 @@ msgstr ""
#: view:crm.claim.report:0
#: selection:crm.claim.report,state:0
msgid "Pending"
msgstr ""
msgstr "待處理"
#. module: crm_claim
#: view:crm.claim:0
msgid "Communication & History"
msgstr ""
msgstr "溝通&日誌"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "August"
msgstr ""
msgstr "8月"
#. module: crm_claim
#: selection:crm.claim,priority:0
#: selection:crm.claim.report,priority:0
msgid "Normal"
msgstr ""
msgstr "普通"
#. module: crm_claim
#: view:crm.claim:0
msgid "Global CC"
msgstr ""
msgstr "完整副本"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "June"
msgstr ""
msgstr "6月"
#. module: crm_claim
#: view:res.partner:0
msgid "Partners Claim"
msgstr ""
msgstr "客戶抱怨"
#. module: crm_claim
#: field:crm.claim,partner_phone:0
msgid "Phone"
msgstr ""
msgstr "電話"
#. module: crm_claim
#: field:crm.claim.report,user_id:0
msgid "User"
msgstr ""
msgstr "使用者"
#. module: crm_claim
#: field:crm.claim,active:0
msgid "Active"
msgstr ""
msgstr "啟用"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "November"
msgstr ""
msgstr "11月"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "Extended Filters..."
msgstr ""
msgstr "增加篩選條件"
#. module: crm_claim
#: view:crm.claim:0
msgid "Closure"
msgstr ""
msgstr "關閉"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "Search"
msgstr ""
msgstr "搜尋"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "October"
msgstr ""
msgstr "10月"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "January"
msgstr ""
msgstr "1月"
#. module: crm_claim
#: view:crm.claim:0
#: field:crm.claim,date:0
msgid "Claim Date"
msgstr ""
msgstr "索賠日期"
#. module: crm_claim
#: help:crm.claim,email_from:0
msgid "These people will receive email."
msgstr ""
msgstr "這些人將收到電子郵件。"
#. module: crm_claim
#: model:ir.actions.act_window,name:crm_claim.crm_claim_categ_action
msgid "Claim Categories"
msgstr ""
msgstr "索賠分類"
#. module: crm_claim
#: view:crm.claim:0
@ -537,40 +537,40 @@ msgstr ""
#: model:ir.ui.menu,name:crm_claim.menu_crm_case_claims
#: field:res.partner,claims_ids:0
msgid "Claims"
msgstr ""
msgstr "索賠"
#. module: crm_claim
#: selection:crm.claim,type_action:0
#: selection:crm.claim.report,type_action:0
msgid "Corrective Action"
msgstr ""
msgstr "糾正的動作"
#. module: crm_claim
#: model:crm.case.categ,name:crm_claim.categ_claim3
msgid "Policy Claims"
msgstr ""
msgstr "索賠政策"
#. module: crm_claim
#: view:crm.claim:0
msgid "History"
msgstr ""
msgstr "日誌"
#. module: crm_claim
#: model:ir.model,name:crm_claim.model_crm_claim
#: model:ir.ui.menu,name:crm_claim.menu_config_claim
msgid "Claim"
msgstr ""
msgstr "索賠"
#. module: crm_claim
#: selection:crm.claim,priority:0
#: selection:crm.claim.report,priority:0
msgid "Highest"
msgstr ""
msgstr "最高"
#. module: crm_claim
#: field:crm.claim,partner_address_id:0
msgid "Partner Contact"
msgstr ""
msgstr "業務夥伴聯繫方式"
#. module: crm_claim
#: view:crm.claim:0
@ -578,109 +578,109 @@ msgstr ""
#: view:crm.claim.report:0
#: field:crm.claim.report,state:0
msgid "State"
msgstr ""
msgstr "狀態"
#. module: crm_claim
#: view:crm.claim:0
#: view:crm.claim.report:0
msgid "Done"
msgstr ""
msgstr "完成"
#. module: crm_claim
#: view:crm.claim:0
msgid "Claim Reporter"
msgstr ""
msgstr "索賠者"
#. module: crm_claim
#: view:crm.claim:0
#: view:crm.claim.report:0
msgid "Cancel"
msgstr ""
msgstr "取消"
#. module: crm_claim
#: view:crm.claim:0
msgid "Close"
msgstr ""
msgstr "結束"
#. module: crm_claim
#: view:crm.claim:0
#: view:crm.claim.report:0
#: selection:crm.claim.report,state:0
msgid "Open"
msgstr ""
msgstr "開啟"
#. module: crm_claim
#: view:crm.claim:0
msgid "New Claims"
msgstr ""
msgstr "新抱怨"
#. module: crm_claim
#: view:crm.claim:0
#: selection:crm.claim,state:0
msgid "In Progress"
msgstr ""
msgstr "進行中"
#. module: crm_claim
#: view:crm.claim:0
#: field:crm.claim,user_id:0
msgid "Responsible"
msgstr ""
msgstr "負責人"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "Claims created in current year"
msgstr ""
msgstr "本年新建的抱怨"
#. module: crm_claim
#: view:crm.claim:0
msgid "Unassigned Claims"
msgstr ""
msgstr "未分配的抱怨"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "Claims created in current month"
msgstr ""
msgstr "本月新建的抱怨"
#. module: crm_claim
#: field:crm.claim.report,delay_expected:0
msgid "Overpassed Deadline"
msgstr ""
msgstr "超過截止日期"
#. module: crm_claim
#: field:crm.claim,cause:0
msgid "Root Cause"
msgstr ""
msgstr "根本原因"
#. module: crm_claim
#: view:crm.claim:0
msgid "Claim/Action Description"
msgstr ""
msgstr "索賠/動作說明"
#. module: crm_claim
#: field:crm.claim,description:0
msgid "Description"
msgstr ""
msgstr "說明"
#. module: crm_claim
#: view:crm.claim:0
msgid "Search Claims"
msgstr ""
msgstr "搜尋索賠"
#. module: crm_claim
#: field:crm.claim,section_id:0
#: view:crm.claim.report:0
msgid "Sales Team"
msgstr ""
msgstr "銷售團隊"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "May"
msgstr ""
msgstr "5月"
#. module: crm_claim
#: view:crm.claim:0
msgid "Resolution Actions"
msgstr ""
msgstr "決定採取的行動"
#. module: crm_claim
#: model:ir.actions.act_window,help:crm_claim.crm_case_categ_claim0
@ -690,31 +690,33 @@ msgid ""
"history for a claim (emails sent, intervention type and so on). Claims may "
"automatically be linked to an email address using the mail gateway module."
msgstr ""
"記錄和追蹤你客戶的索賠,索賠可以連結到一個或很多銷售訂單中。你可以發送帶附件的郵件和保留一個索賠的所有日誌(郵件發送,介入類型等)。索賠可以自動連結到電子"
"郵件使用的閘道。"
#. module: crm_claim
#: field:crm.claim.report,email:0
msgid "# Emails"
msgstr ""
msgstr "電子郵件"
#. module: crm_claim
#: model:crm.case.stage,name:crm_claim.stage_claim2
msgid "Actions Done"
msgstr ""
msgstr "動作完成"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "Claims created in last month"
msgstr ""
msgstr "上個月新建的抱怨"
#. module: crm_claim
#: model:crm.case.stage,name:crm_claim.stage_claim5
msgid "Actions Defined"
msgstr ""
msgstr "動作定義"
#. module: crm_claim
#: view:crm.claim:0
msgid "Follow Up"
msgstr ""
msgstr "跟進"
#. module: crm_claim
#: help:crm.claim,state:0
@ -727,67 +729,82 @@ msgid ""
" \n"
"If the case needs to be reviewed then the state is set to 'Pending'."
msgstr ""
"當一個業務建立時狀態設為'草稿'\n"
"如果業務正在處理狀態設為'開啟'\n"
"當業務結束狀態設為'完成'\n"
"如果業務需要審查狀態設為'待處理'"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "February"
msgstr ""
msgstr "2月"
#. module: crm_claim
#: view:crm.claim.report:0
#: field:crm.claim.report,name:0
msgid "Year"
msgstr ""
msgstr ""
#. module: crm_claim
#: view:crm.claim.report:0
msgid "My company"
msgstr ""
msgstr "我的公司"
#. module: crm_claim
#: selection:crm.claim.report,month:0
msgid "April"
msgstr ""
msgstr "4月"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "My Case(s)"
msgstr ""
msgstr "我的業務"
#. module: crm_claim
#: field:crm.claim,id:0
msgid "ID"
msgstr ""
msgstr "ID"
#. module: crm_claim
#: constraint:res.partner:0
msgid "Error ! You cannot create recursive associated members."
msgstr ""
msgstr "錯誤,您不能建立循環引用的會員用戶"
#. module: crm_claim
#: view:crm.claim:0
msgid "Actions"
msgstr ""
msgstr "動作"
#. module: crm_claim
#: selection:crm.claim,priority:0
#: selection:crm.claim.report,priority:0
msgid "High"
msgstr ""
msgstr ""
#. module: crm_claim
#: model:ir.actions.act_window,help:crm_claim.crm_claim_categ_action
msgid ""
"Create claim categories to better manage and classify your claims. Some "
"example of claims can be: preventive action, corrective action."
msgstr ""
msgstr "建立索賠的類型以更好管理和分類你的索賠。如:索賠可以是預防措施、糾正措施。"
#. module: crm_claim
#: field:crm.claim.report,create_date:0
msgid "Create Date"
msgstr ""
msgstr "建立日期"
#. module: crm_claim
#: view:crm.claim:0
msgid "In Progress Claims"
msgstr ""
msgstr "正在處理的抱怨"
#~ msgid ""
#~ "The state is set to 'Draft', when a case is created. \n"
#~ "If the case is in progress the state is set to 'Open'. \n"
#~ "When the case is over, the state is set to 'Done'. \n"
#~ "If the case needs to be reviewed then the state is set to 'Pending'."
#~ msgstr ""
#~ "當一個業務建立時狀態設為'草稿'\n"
#~ "如果業務正在處理狀態設為'開啟'\n"
#~ "當業務結束狀態設為'完成'\n"
#~ "如果業務需要審查狀態設為'待定'"

View File

@ -7,19 +7,19 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2012-05-10 18:26+0000\n"
"Last-Translator: Walter Cheuk <wwycheuk@gmail.com>\n"
"PO-Revision-Date: 2012-08-29 08:56+0000\n"
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-08-28 06:25+0000\n"
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
"X-Generator: Launchpad (build 15864)\n"
#. module: crm_profiling
#: view:crm_profiling.questionnaire:0
msgid "Questions List"
msgstr "問題表"
msgstr "問題表"
#. module: crm_profiling
#: model:ir.actions.act_window,help:crm_profiling.open_questionnaires
@ -28,7 +28,7 @@ msgid ""
"in the sales cycle by helping them to ask the right questions. The "
"segmentation tool allows you to automatically assign a partner to a category "
"according to his answers to the different questionnaires."
msgstr ""
msgstr "你能建立特定主題的問卷調查去指導你的團隊在銷售週期向客戶詢問合適的問題。這細分工具能根據不同問題的答案自動劃分業務夥伴到不同的類型。"
#. module: crm_profiling
#: field:crm_profiling.answer,question_id:0
@ -47,12 +47,12 @@ msgstr "開啟問卷"
#. module: crm_profiling
#: field:crm.segmentation,child_ids:0
msgid "Child Profiles"
msgstr ""
msgstr "子客戶特徵"
#. module: crm_profiling
#: view:crm.segmentation:0
msgid "Partner Segmentations"
msgstr "伙伴分割"
msgstr "業務夥伴分類"
#. module: crm_profiling
#: field:crm_profiling.answer,name:0
@ -64,17 +64,17 @@ msgstr "答案"
#. module: crm_profiling
#: model:ir.model,name:crm_profiling.model_open_questionnaire_line
msgid "open.questionnaire.line"
msgstr ""
msgstr "open.questionnaire.line"
#. module: crm_profiling
#: model:ir.model,name:crm_profiling.model_crm_segmentation
msgid "Partner Segmentation"
msgstr "伙伴區間"
msgstr "業務夥伴分類"
#. module: crm_profiling
#: view:res.partner:0
msgid "Profiling"
msgstr ""
msgstr "紀錄運行效能(Profiling)"
#. module: crm_profiling
#: view:crm_profiling.questionnaire:0
@ -97,7 +97,7 @@ msgstr "答案"
#. module: crm_profiling
#: model:ir.model,name:crm_profiling.model_open_questionnaire
msgid "open.questionnaire"
msgstr ""
msgstr "open.questionnaire"
#. module: crm_profiling
#: field:open.questionnaire,questionnaire_id:0
@ -112,12 +112,12 @@ msgstr "使用問卷"
#. module: crm_profiling
#: view:open.questionnaire:0
msgid "_Cancel"
msgstr ""
msgstr "取消_C"
#. module: crm_profiling
#: field:open.questionnaire,question_ans_ids:0
msgid "Question / Answers"
msgstr ""
msgstr "問/答"
#. module: crm_profiling
#: view:crm_profiling.questionnaire:0
@ -133,22 +133,22 @@ msgid ""
"Check this box if you want to use this tab as "
"part of the segmentation rule. If not checked, "
"the criteria beneath will be ignored"
msgstr ""
msgstr "勾選這選項,如果你想使用這標籤作為細分規則的一部分。如果勾選,這規則將被忽略"
#. module: crm_profiling
#: constraint:crm.segmentation:0
msgid "Error ! You can not create recursive profiles."
msgstr ""
msgstr "錯誤! 你不能建立相關的簡介。"
#. module: crm_profiling
#: field:crm.segmentation,profiling_active:0
msgid "Use The Profiling Rules"
msgstr ""
msgstr "使用這客戶特徵的規則"
#. module: crm_profiling
#: constraint:res.partner:0
msgid "Error ! You cannot create recursive associated members."
msgstr ""
msgstr "錯誤! 您不能建立相關的會員用戶"
#. module: crm_profiling
#: view:crm_profiling.question:0
@ -172,7 +172,7 @@ msgstr "問題"
#. module: crm_profiling
#: field:crm.segmentation,parent_id:0
msgid "Parent Profile"
msgstr ""
msgstr "上級客戶簡介"
#. module: crm_profiling
#: view:open.questionnaire:0

View File

@ -0,0 +1,95 @@
# Chinese (Traditional) 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-08-29 09:15+0000\n"
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
"Language-Team: Chinese (Traditional) <zh_TW@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-08-30 05:12+0000\n"
"X-Generator: Launchpad (build 15864)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "任務"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "時間區間"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "取消任務"
#. module: crm_todo
#: constraint:project.task:0
msgid "Error ! Task end-date must be greater then task start-date"
msgstr "錯誤!任務結束日期必須大於任務開始日期"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "crm.lead"
msgstr "crm.lead"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "下一步"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "我的任務"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "任務"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "完成"
#. module: crm_todo
#: constraint:project.task:0
msgid "Error ! You cannot create recursive tasks."
msgstr "錯誤!不能創建循環引用的任務"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "刪除"
#. module: crm_todo
#: view:crm.lead:0
msgid "Extra Info"
msgstr "額外資訊"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "潛在客戶/機會"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "要設置為完成狀態"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "前一頁"

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 00:36+0000\n"
"PO-Revision-Date: 2011-09-27 08:06+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2012-08-29 07:43+0000\n"
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
"Language-Team: Chinese (Traditional) <zh_TW@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-08-28 06:34+0000\n"
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
"X-Generator: Launchpad (build 15864)\n"
#. module: decimal_precision
@ -46,7 +46,7 @@ msgstr "小數精確度"
#. module: decimal_precision
#: model:ir.model,name:decimal_precision.model_decimal_precision
msgid "decimal.precision"
msgstr ""
msgstr "decimal.precision"
#~ msgid "Decimal Precision Configuration"
#~ msgstr "小數精確度設定"

View File

@ -0,0 +1,116 @@
# Chinese (Traditional) 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-08-29 09:46+0000\n"
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
"Language-Team: Chinese (Traditional) <zh_TW@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-08-30 05:12+0000\n"
"X-Generator: Launchpad (build 15864)\n"
#. module: document_ftp
#: model:ir.model,name:document_ftp.model_document_ftp_configuration
msgid "Auto Directory Configuration"
msgstr "自動目錄配置"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid ""
"Indicate the network address on which your OpenERP server should be "
"reachable for end-users. This depends on your network topology and "
"configuration, and will only affect the links displayed to the users. The "
"format is HOST:PORT and the default host (localhost) is only suitable for "
"access from the server machine itself.."
msgstr ""
"說明OpenERP的服務器上的網絡地址應該為最終用戶訪問。這取決於您的網絡拓撲和配置而且只會影響顯示給用戶的鏈接。的格式為HOSTPORT和預設的主機"
"localhost的訪問從服務器本身只適合.."
#. module: document_ftp
#: model:ir.actions.url,name:document_ftp.action_document_browse
msgid "Browse Files"
msgstr "瀏覽檔案"
#. module: document_ftp
#: field:document.ftp.configuration,config_logo:0
msgid "Image"
msgstr "圖像"
#. module: document_ftp
#: field:document.ftp.configuration,host:0
msgid "Address"
msgstr "地址"
#. module: document_ftp
#: field:document.ftp.browse,url:0
msgid "FTP Server"
msgstr "FTP 伺服器"
#. module: document_ftp
#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory
msgid "FTP Server Configuration"
msgstr "FTP Server Configuration"
#. module: document_ftp
#: view:document.ftp.browse:0
msgid "_Browse"
msgstr "瀏覽(_B)"
#. module: document_ftp
#: help:document.ftp.configuration,host:0
msgid ""
"Server address or IP and port to which users should connect to for DMS access"
msgstr "服務器地址或IP地址和端口用戶應該連接到DMS訪問"
#. module: document_ftp
#: model:ir.ui.menu,name:document_ftp.menu_document_browse
msgid "Shared Repository (FTP)"
msgstr "供享的儲存庫"
#. module: document_ftp
#: view:document.ftp.browse:0
msgid "_Cancel"
msgstr "取消(_C)"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "Configure FTP Server"
msgstr "設置FTP 伺服器"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "title"
msgstr "標題"
#. module: document_ftp
#: model:ir.model,name:document_ftp.model_document_ftp_browse
msgid "Document FTP Browse"
msgstr "瀏覽FTP文件"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "Knowledge Application Configuration"
msgstr "知識應用配置"
#. module: document_ftp
#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse
msgid "Document Browse"
msgstr "文件瀏覽"
#. module: document_ftp
#: view:document.ftp.browse:0
msgid "Browse Document"
msgstr "瀏覽文件"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "res_config_contents"
msgstr "res_config_contents"

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2011-09-27 07:58+0000\n"
"Last-Translator: Walter Cheuk <wwycheuk@gmail.com>\n"
"PO-Revision-Date: 2012-08-30 03:33+0000\n"
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-08-28 06:02+0000\n"
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
"X-Generator: Launchpad (build 15864)\n"
#. module: event
@ -189,7 +189,7 @@ msgstr "郵件"
#. module: event
#: model:ir.model,name:event.model_event_registration_badge
msgid "event.registration.badge"
msgstr ""
msgstr "event.registration.badge"
#. module: event
#: field:event.event,mail_auto_confirm:0
@ -331,7 +331,7 @@ msgstr ""
#. module: event
#: view:report.event.registration:0
msgid "Confirm"
msgstr ""
msgstr "確認"
#. module: event
#: view:event.event:0

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2009-01-23 17:18+0000\n"
"Last-Translator: <>\n"
"PO-Revision-Date: 2012-08-30 03:32+0000\n"
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-08-28 06:27+0000\n"
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
"X-Generator: Launchpad (build 15864)\n"
#. module: event_project
@ -29,7 +29,7 @@ msgstr "結束日期"
#. module: event_project
#: view:event.project:0
msgid "Ok"
msgstr ""
msgstr "確認"
#. module: event_project
#: help:event.project,project_id:0
@ -37,13 +37,13 @@ msgid ""
"This is Template Project. Project of event is a duplicate of this Template. "
"After click on 'Create Retro-planning', New Project will be duplicated from "
"this template project."
msgstr ""
msgstr "這是模板專案。專案的事件是重複的,這個模板。點擊打造追朔規劃“後,新專案將被複製此模板的專案。"
#. module: event_project
#: view:event.project:0
#: model:ir.actions.act_window,name:event_project.action_event_project
msgid "Retro-Planning"
msgstr ""
msgstr "追溯計畫"
#. module: event_project
#: constraint:event.event:0
@ -63,23 +63,23 @@ msgstr "專案範本"
#. module: event_project
#: view:event.event:0
msgid "All tasks"
msgstr ""
msgstr "所有的工作任務"
#. module: event_project
#: view:event.event:0
#: model:ir.actions.act_window,name:event_project.act_event_task
msgid "Tasks"
msgstr ""
msgstr "任務"
#. module: event_project
#: constraint:event.event:0
msgid "Error ! You cannot create recursive event."
msgstr ""
msgstr "錯誤!您不能創建遞歸的事件"
#. module: event_project
#: field:event.event,task_ids:0
msgid "Project tasks"
msgstr ""
msgstr "專案任務"
#. module: event_project
#: view:event.project:0
@ -94,7 +94,7 @@ msgstr "開始日期"
#. module: event_project
#: view:event.event:0
msgid "Create Retro-Planning"
msgstr ""
msgstr "創建追溯計畫"
#. module: event_project
#: model:ir.model,name:event_project.model_event_event
@ -104,7 +104,7 @@ msgstr "活動"
#. module: event_project
#: view:event.event:0
msgid "Tasks Management"
msgstr ""
msgstr "任務管理"
#~ msgid ""
#~ "Organization and management of events.\n"

View File

@ -83,11 +83,9 @@
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
<field name="arch" type="xml">
<xpath expr='//separator[@name="project_sep"]' position='replace'>
<separator name="project_sep" string="Project Management" colspan="4"/> <!-- removal of invisible attribute -->
</xpath>
<xpath expr='//separator[@name="project_sep"]' position='after'>
<xpath expr='//div[@name="project"]' position='inside'>
<field name="use_timesheets"/>
<label for="use_timesheets"/>
</xpath>
</field>
</record>

View File

@ -0,0 +1,429 @@
# German 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-08-29 07:36+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: German <de@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-08-30 05:12+0000\n"
"X-Generator: Launchpad (build 15864)\n"
#. module: import_sugarcrm
#: code:addons/import_sugarcrm/import_sugarcrm.py:1105
#: code:addons/import_sugarcrm/import_sugarcrm.py:1131
#, python-format
msgid "Error !!"
msgstr "Fehler!"
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid ""
"Use the SugarSoap API URL (read tooltip) and a full access SugarCRM login."
msgstr ""
"Nutzen Sie die SugarSoap API URL (siehe Tooltip) und eine SugarCRM-Anmeldung "
"mit Vollzugriff."
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "(Coming Soon)"
msgstr "(Bald erwartet)"
#. module: import_sugarcrm
#: field:import.sugarcrm,document:0
msgid "Documents"
msgstr "Dokumente"
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "Import your data from SugarCRM :"
msgstr "Importieren Sie Ihre Daten aus SugarCRM:"
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid ""
"Choose data you want to import. Click 'Import' to get data manually or "
"'Schedule Reccurent Imports' to get recurrently and automatically data."
msgstr ""
"Wählen Sie die zu importierenden Daten aus. Drücken Sie \"Import\", um Daten "
"manuell zu holen oder \"Wiederkehrende Importe Terminieren\", um Daten "
"automatisch und wiederholt einzuholen."
#. module: import_sugarcrm
#: field:import.sugarcrm,contact:0
msgid "Contacts"
msgstr "Kontakte"
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "HR"
msgstr ""
#. module: import_sugarcrm
#: help:import.sugarcrm,bug:0
msgid "Check this box to import sugarCRM Bugs into OpenERP project issues"
msgstr ""
#. module: import_sugarcrm
#: field:import.sugarcrm,instance_name:0
msgid "Instance's Name"
msgstr "Name der Instanz"
#. module: import_sugarcrm
#: field:import.sugarcrm,project_task:0
msgid "Project Tasks"
msgstr "Projekt Aufgaben"
#. module: import_sugarcrm
#: field:import.sugarcrm,email_from:0
msgid "Notify End Of Import To:"
msgstr "Über Abschluss des Imports zu informieren:"
#. module: import_sugarcrm
#: help:import.sugarcrm,user:0
msgid ""
"Check this box to import sugarCRM Users into OpenERP users, warning if a "
"user with the same login exist in OpenERP, user information will be erase by "
"sugarCRM user information"
msgstr ""
"Haken Sie dieses Feld an, um SugarCRM-Benutzer als OpenERP-Benutzer zu "
"importieren. Hinweis: In OpenERP bestehende Benutzer gleichen Namens werden "
"gelöscht und durch die SugarCRM-Information ersetzt."
#. module: import_sugarcrm
#: code:addons/import_sugarcrm/sugarsoap_services.py:23
#, python-format
msgid "Please install SOAP for python - ZSI-2.0-rc3.tar.gz - python-zci"
msgstr ""
"Installieren Sie bitte SOAP für Python - ZSI-2.0-rc3.tar.gz - python-zci"
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "_Schedule Recurrent Imports"
msgstr "_Terminierung wiederkehrender Importe"
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid ""
"Do not forget the email address to be notified of the success of the import."
msgstr ""
"Vergessen Sie nicht die über den Erfolg des Imports zu banachrichtende EMail-"
"Adresse."
#. module: import_sugarcrm
#: help:import.sugarcrm,call:0
msgid "Check this box to import sugarCRM Calls into OpenERP calls"
msgstr ""
"Haken Sie dieses Feld an, um SugarCRM-Anrufe in OpenERP-Anrufe zu "
"importieren."
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid ""
"If you make recurrent or ponctual import, data already in OpenERP will be "
"updated by SugarCRM data."
msgstr ""
"Wenn Sie wiederkehrende oder vereinzelte Importe durchführen, werden bereits "
"in OpenERP vorliegende Daten aktualsiert."
#. module: import_sugarcrm
#: field:import.sugarcrm,employee:0
msgid "Employee"
msgstr "Angstellter"
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "Document"
msgstr "Dokument"
#. module: import_sugarcrm
#: help:import.sugarcrm,document:0
msgid "Check this box to import sugarCRM Documents into OpenERP documents"
msgstr ""
"Haken Sie dieses Feld an, um Dokumente aus SugarCRM in OpenERP zu importieren"
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "Import Data From SugarCRM"
msgstr "Daten von SugarCRM importieren"
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "CRM"
msgstr "Kundenbeziehungsverwaltung"
#. module: import_sugarcrm
#: view:import.message:0
msgid ""
"Data are importing, the process is running in the background, an email will "
"be sent to the given email address if it was defined."
msgstr ""
"Daten werden importiert; der Prozess läuft im Hintergrund. Bei Abschluss "
"wird eine Benachrichtigung per EMail verschickt, sofern diese angegeben "
"wurde."
#. module: import_sugarcrm
#: field:import.sugarcrm,call:0
msgid "Calls"
msgstr "Anrufe"
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "Multi Instance Management"
msgstr "Verwaltung von mehrfachen Instanzen"
#. module: import_sugarcrm
#: view:import.message:0
msgid "_Ok"
msgstr "_OK"
#. module: import_sugarcrm
#: help:import.sugarcrm,opportunity:0
msgid ""
"Check this box to import sugarCRM Leads and Opportunities into OpenERP Leads "
"and Opportunities"
msgstr ""
"Haken Sie dieses Feld an, um Leads aus SugarCRM nach OpenERP zu importieren."
#. module: import_sugarcrm
#: field:import.sugarcrm,email_history:0
msgid "Email and Note"
msgstr "Nachrichten und Notizen"
#. module: import_sugarcrm
#: help:import.sugarcrm,url:0
msgid ""
"Webservice's url where to get the data. example : "
"'http://example.com/sugarcrm/soap.php', or copy the address of your sugarcrm "
"application "
"http://trial.sugarcrm.com/qbquyj4802/index.php?module=Home&action=index"
msgstr ""
"URL des Web-Dienstes bei dem Daten geholt werden sollen. Beispiel: "
"\"http://example.com/sugarcrm/soap.php\", oder kopieren Sie die Adresse "
"Ihrer SugarCRM-Anwendung (z. B. "
"http://trial.sugarcrm.com/qbquyj4802/index.php?module=Home&action=index)"
#. module: import_sugarcrm
#: model:ir.actions.act_window,name:import_sugarcrm.action_import_sugarcrm
#: model:ir.ui.menu,name:import_sugarcrm.menu_sugarcrm_import
msgid "Import SugarCRM"
msgstr "Aus SugarCRM importieren"
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "_Import"
msgstr "_Import"
#. module: import_sugarcrm
#: field:import.sugarcrm,user:0
msgid "User"
msgstr "Benutzer"
#. module: import_sugarcrm
#: code:addons/import_sugarcrm/import_sugarcrm.py:1105
#: code:addons/import_sugarcrm/import_sugarcrm.py:1131
#, python-format
msgid "%s data required %s Module to be installed, Please install %s module"
msgstr ""
#. module: import_sugarcrm
#: field:import.sugarcrm,claim:0
msgid "Cases"
msgstr "Vorgänge"
#. module: import_sugarcrm
#: help:import.sugarcrm,meeting:0
msgid ""
"Check this box to import sugarCRM Meetings and Tasks into OpenERP meetings"
msgstr ""
"Haken Sie dieses Feld an, um Termine von SugarCRM nach OpenERP zu importieren"
#. module: import_sugarcrm
#: help:import.sugarcrm,email_history:0
msgid ""
"Check this box to import sugarCRM Emails, Notes and Attachments into OpenERP "
"Messages and Attachments"
msgstr ""
#. module: import_sugarcrm
#: field:import.sugarcrm,project:0
msgid "Projects"
msgstr ""
#. module: import_sugarcrm
#: code:addons/import_sugarcrm/sugarsoap_services_types.py:14
#, python-format
msgid ""
"Please install SOAP for python - ZSI-2.0-rc3.tar.gz from "
"http://pypi.python.org/pypi/ZSI/"
msgstr ""
#. module: import_sugarcrm
#: help:import.sugarcrm,project:0
msgid "Check this box to import sugarCRM Projects into OpenERP projects"
msgstr ""
#. module: import_sugarcrm
#: code:addons/import_sugarcrm/import_sugarcrm.py:1098
#: code:addons/import_sugarcrm/import_sugarcrm.py:1124
#, python-format
msgid "Select Module to Import."
msgstr ""
#. module: import_sugarcrm
#: field:import.sugarcrm,meeting:0
msgid "Meetings"
msgstr ""
#. module: import_sugarcrm
#: help:import.sugarcrm,employee:0
msgid "Check this box to import sugarCRM Employees into OpenERP employees"
msgstr ""
#. module: import_sugarcrm
#: field:import.sugarcrm,url:0
msgid "SugarSoap Api url:"
msgstr ""
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "Address Book"
msgstr ""
#. module: import_sugarcrm
#: code:addons/import_sugarcrm/sugar.py:60
#, python-format
msgid ""
"Authentication error !\n"
"Bad Username or Password bad SugarSoap Api url !"
msgstr ""
#. module: import_sugarcrm
#: field:import.sugarcrm,bug:0
msgid "Bugs"
msgstr ""
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "Project"
msgstr ""
#. module: import_sugarcrm
#: help:import.sugarcrm,project_task:0
msgid "Check this box to import sugarCRM Project Tasks into OpenERP tasks"
msgstr ""
#. module: import_sugarcrm
#: field:import.sugarcrm,opportunity:0
msgid "Leads & Opp"
msgstr ""
#. module: import_sugarcrm
#: code:addons/import_sugarcrm/import_sugarcrm.py:79
#, python-format
msgid ""
"Authentication error !\n"
"Bad Username or Password or bad SugarSoap Api url !"
msgstr ""
#. module: import_sugarcrm
#: code:addons/import_sugarcrm/import_sugarcrm.py:79
#: code:addons/import_sugarcrm/sugar.py:60
#, python-format
msgid "Error !"
msgstr ""
#. module: import_sugarcrm
#: code:addons/import_sugarcrm/import_sugarcrm.py:1098
#: code:addons/import_sugarcrm/import_sugarcrm.py:1124
#, python-format
msgid "Warning !"
msgstr ""
#. module: import_sugarcrm
#: help:import.sugarcrm,instance_name:0
msgid ""
"Prefix of SugarCRM id to differentiate xml_id of SugarCRM models datas come "
"from different server."
msgstr ""
#. module: import_sugarcrm
#: help:import.sugarcrm,contact:0
msgid "Check this box to import sugarCRM Contacts into OpenERP addresses"
msgstr ""
#. module: import_sugarcrm
#: field:import.sugarcrm,password:0
msgid "Password"
msgstr ""
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "Login Information"
msgstr ""
#. module: import_sugarcrm
#: help:import.sugarcrm,claim:0
msgid "Check this box to import sugarCRM Cases into OpenERP claims"
msgstr ""
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "Email Notification When Import is Finished"
msgstr ""
#. module: import_sugarcrm
#: field:import.sugarcrm,username:0
msgid "User Name"
msgstr ""
#. module: import_sugarcrm
#: view:import.message:0
#: model:ir.model,name:import_sugarcrm.model_import_message
msgid "Import Message"
msgstr ""
#. module: import_sugarcrm
#: help:import.sugarcrm,account:0
msgid "Check this box to import sugarCRM Accounts into OpenERP partners"
msgstr ""
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "Online documentation:"
msgstr ""
#. module: import_sugarcrm
#: field:import.sugarcrm,account:0
msgid "Accounts"
msgstr ""
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "_Cancel"
msgstr ""
#. module: import_sugarcrm
#: code:addons/import_sugarcrm/sugarsoap_services.py:23
#: code:addons/import_sugarcrm/sugarsoap_services_types.py:14
#, python-format
msgid "ZSI Import Error!"
msgstr ""
#. module: import_sugarcrm
#: model:ir.model,name:import_sugarcrm.model_import_sugarcrm
msgid "Import SugarCRM DATA"
msgstr ""
#. module: import_sugarcrm
#: view:import.sugarcrm:0
msgid "Email Address to Notify"
msgstr ""

View File

@ -362,6 +362,10 @@
</group>
<group>
<field name="type"/>
<p colspan="2" class="oe_grey" attrs="{'invisible': [('type','=','normal')]}">
When processing a sale order for this product, the delivery order
will contain the raw materials, instead of the finished product.
</p>
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
<label for="product_uos_qty" groups="product.group_uos"/>
<div groups="product.group_uos" >
@ -678,11 +682,11 @@
</group>
<notebook>
<page string="Consumed Products">
<group groups="stock.group_locations">
<group>
<group>
<field name="bom_id" domain="[('product_id','=',product_id)]" context="{'default_product_id': product_id}" on_change="bom_id_change(bom_id)"/>
</group>
<group>
<group groups="stock.group_locations">
<field name="location_src_id" domain="[('usage','=','internal')]" on_change="location_id_change(location_src_id,location_dest_id)"/>
<field name="location_dest_id" domain="[('usage','=','internal')]"/>
</group>

View File

@ -1,42 +1,64 @@
# -*- coding: utf-8 -*-
from osv import fields, osv
import random
import re
import string
import urllib2
from tools.translate import _
class pad_common(osv.osv_memory):
_name = 'pad.common'
_pad_fields = []
def pad_content(self, cr, uid, url ,context=None):
content = urllib2.urlopen('%s/export/html'%url).read()
return content
def pad_generate_url(self, cr, uid, context=None):
pad_url_template = self.pool.get('res.users').browse(cr,uid, uid, context).company_id.pad_url_template
pad_server = self.pool.get('res.users').browse(cr, uid, uid, context).company_id.pad_server
# make sure pad server in the form of http://hostname
if not pad_server:
return ''
if not pad_server.startswith('http'):
pad_server = 'http://' + pad_server
pad_server = pad_server.rstrip('/')
# generate a salt
s = string.ascii_uppercase + string.digits
salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(8)])
template_vars = {
'db' : cr.dbname,
'model' : self._name,
'salt' : salt,
}
url = pad_url_template % template_vars
salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(10)])
# contruct the url
url = '%s/p/%s-%s-%s' % (pad_server, cr.dbname, self._name, salt)
return url
def pad_get_content(self, cr, uid, url, context=None):
content = ''
if url:
page = urllib2.urlopen('%s/export/html'%url).read()
mo = re.search('<body>(.*)</body>',page)
if mo:
content = mo.group(1)
return content
# TODO
# add attribute on columns pad_content_field =
# override default write to load the content at write and store it in the field
# reverse engineer protocol to be setHtml without using the api key
# override default get to generate urls
# override read to generate url and store the content if empty
# override read and copy to generate url and store the content if empty
def default_get(self, cr, uid, fields, context=None):
data = super(pad_common, self).default_get(cr, uid, fields, context)
for k in fields:
field = self._all_columns[k].column
if hasattr(field,'pad_content_field'):
data[k] = self.pad_generate_url(cr, uid, context=context)
return data
def write(self, cr, uid, ids, vals, context=None):
for k,v in vals.items():
field = self._all_columns[k].column
if hasattr(field,'pad_content_field'):
vals[field.pad_content_field] = self.pad_get_content(cr, uid, v, context=context)
return super(pad_common, self).write(cr, uid, ids, vals, context=context)
def copy(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
update = [(field,self.pad_generate_url(cr, uid, context)) for field in self._pad_fields]
default.update(update)
for k,v in self._all_columns:
field = v.column
if hasattr(field,'pad_content_field'):
default[k] = self.pad_generate_url(cr, uid, context)
return super(pad_common, self).copy(cr, uid, id, default, context)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,16 +1,11 @@
# -*- coding: utf-8 -*-
from osv import fields, osv
DEFAULT_PAD_TEMPLATE = 'http://pad.openerp.com/p/%(db)s-%(model)s-%(salt)s'
DEFAULT_PAD_TEMPLATE = ''
class company_pad(osv.osv):
_inherit = 'res.company'
_columns = {
'pad_url_template': fields.char('Pad URL Template', size=128, required=True, help="Template used to generate pad URL."),
}
_defaults = {
'pad_url_template': DEFAULT_PAD_TEMPLATE,
'pad_server': fields.char('Pad Server', help="Etherpad lite server. Example: beta.primarypad.com"),
'pad_key': fields.char('Pad Api Key', help="Etherpad lite api key."),
}

View File

@ -7,7 +7,8 @@
<field name="arch" type="xml">
<xpath expr="//group[@name='account_grp']" position="after">
<group string="Pads">
<field name="pad_url_template" placeholder="e.g. http://beta.etherpad.org/p/%%(db)s-%%(model)s-%%(salt)s"/>
<field name="pad_server" placeholder="e.g. beta.primarypad.org"/>
<field name="pad_key"/>
</group>
</xpath>
</field>

View File

@ -16,14 +16,8 @@ instance.web.form.FieldPad = instance.web.form.AbstractField.extend({
var self = this;
var _super = self._super;
_super.apply(self,[val]);
if (val === false || val === "") {
self.field_manager.dataset.call('pad_generate_url').then(function(r) {
_super.apply(self,[r]);
self.render_value();
});
} else {
self.render_value();
}
this._dirty_flag = true;
self.render_value();
},
render_value: function() {
console.log("display");

View File

@ -12,9 +12,6 @@
</t>
<t t-name="FieldPad.unconfigured">
Please configure your etherpad server.<br/>
OpenERP Entreprise customers may safely use pad.openerp.com as a server using the following template:<br/>
<blockquote>
http://pad.openerp.com/p/%(db)s-%(model)s-%(salt)s
</blockquote>
OpenERP Entreprise customers may safely use pad.openerp.com<br/>
</t>
</templates>

View File

@ -5,7 +5,6 @@ from osv import fields, osv
class task(osv.osv):
_name = "project.task"
_inherit = ["project.task",'pad.common']
_pad_fields = ['description_pad']
_columns = {
'description_pad': fields.char('Description PAD', size=250)
'description_pad': fields.char('Description PAD', pad_content_field='description')
}

View File

@ -27,15 +27,10 @@ class account_journal(osv.osv):
_columns = {
'journal_user': fields.boolean('PoS Payment Method', help="Check this box if this journal define a payment method that can be used in point of sales."),
'opening_control': fields.boolean('Opening Control', help="If you want the journal should be control at opening, check this option"),
'closing_control': fields.boolean('Closing Control', help="If you want the journal should be control at closing, check this option"),
'amount_authorized_diff' : fields.float('Amount Authorized Difference'),
'self_checkout_payment_method' : fields.boolean('Self Checkout Payment Method'),
}
_defaults = {
'opening_control' : False,
'closing_control' : False,
'self_checkout_payment_method' : False,
}
@ -46,6 +41,7 @@ class account_cash_statement(osv.osv):
_columns = {
'pos_session_id' : fields.many2one('pos.session'),
}
account_cash_statement()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -10,8 +10,6 @@
<page string="Point of Sale">
<group col="4" colspan="4">
<field name="journal_user"/>
<field name="opening_control"/>
<field name="closing_control"/>
<field name="amount_authorized_diff"/>
<field name="self_checkout_payment_method" />
</group>
@ -113,37 +111,5 @@
<field name="view_id" ref="account.view_bank_statement_form2"/>
<field name="act_window_id" ref="action_new_bank_statement_all_tree"/>
</record>
<!--
<menuitem name="Cash Register Management" parent="point_of_sale.menu_point_root"
id="menu_point_open_config" sequence="10"/>
<menuitem
name="Open Cash Registers" parent="menu_point_open_config"
string="Open Cash Registers"
action="action_pos_open_statement"
id="menu_open_statement" sequence="1" />
<menuitem
name="Close Cash Registers" parent="menu_point_open_config"
string="Close Cash Registers"
action="action_pos_close_statement"
id="menu_close_statement" sequence="2" />
<menuitem
parent="menu_point_open_config"
action="action_pos_confirm"
id="menu_wizard_pos_confirm" sequence="8" />
<menuitem
name="List of Cash Registers"
parent="menu_point_open_config"
action="action_new_bank_statement_all_tree"
id="menu_all_menu_all_register"
sequence="4"
/>
-->
</data>
</openerp>

View File

@ -74,6 +74,26 @@ class pos_config(osv.osv):
'group_by' : fields.boolean('Group Journal Items', help="Check this if you want to group the Journal Items by Product while closing a Session"),
}
def _check_cash_control(self, cr, uid, ids, context=None):
return all(
(sum(int(journal.cash_control) for journal in record.journal_ids) <= 1)
for record in self.browse(cr, uid, ids, context=context)
)
_constraints = [
(_check_cash_control, "You cannot have two cash controls in one Point Of Sale !", ['journal_ids']),
]
def copy(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
d = {
'sequence_id' : False,
}
d.update(default)
return super(pos_order, self).copy(cr, uid, id, d, context=context)
def name_get(self, cr, uid, ids, context=None):
result = []
states = {
@ -90,11 +110,6 @@ class pos_config(osv.osv):
result.append((record.id, record.name + ' ('+session.user_id.name+')')) #, '+states[session.state]+')'))
return result
def _default_payment_journal(self, cr, uid, context=None):
res = self.pool.get('account.journal').search(cr, uid, [('type', 'in', ('bank','cash'))], limit=2)
return res or []
def _default_sale_journal(self, cr, uid, context=None):
res = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'sale')], limit=1)
return res and res[0] or False
@ -107,7 +122,6 @@ class pos_config(osv.osv):
'state' : POS_CONFIG_STATE[0][0],
'shop_id': _default_shop,
'journal_id': _default_sale_journal,
'journal_ids': _default_payment_journal,
'group_by' : True,
}
@ -148,45 +162,20 @@ class pos_session(osv.osv):
('closed', 'Closed & Posted'),
]
def _compute_cash_journal_id(self, cr, uid, ids, fieldnames, args, context=None):
result = dict.fromkeys(ids, False)
for record in self.browse(cr, uid, ids, context=context):
for st in record.statement_ids:
if st.journal_id.type == 'cash':
result[record.id] = st.journal_id.id
break
return result
def _compute_cash_register_id(self, cr, uid, ids, fieldnames, args, context=None):
result = dict.fromkeys(ids, False)
for record in self.browse(cr, uid, ids, context=context):
for st in record.statement_ids:
if st.journal_id.type == 'cash':
result[record.id] = st.id
break
return result
def _compute_controls(self, cr, uid, ids, fieldnames, args, context=None):
result = {}
def _compute_cash_all(self, cr, uid, ids, fieldnames, args, context=None):
result = dict()
for record in self.browse(cr, uid, ids, context=context):
has_opening_control = False
has_closing_control = False
for journal in record.config_id.journal_ids:
if journal.opening_control == True:
has_opening_control = True
if journal.closing_control == True:
has_closing_control = True
if has_opening_control and has_closing_control:
break
values = {
'has_opening_control': has_opening_control,
'has_closing_control': has_closing_control,
result[record.id] = {
'cash_journal_id' : False,
'cash_register_id' : False,
'cash_control' : False,
}
result[record.id] = values
for st in record.statement_ids:
if st.journal_id.cash_control == True:
result[record.id]['cash_control'] = True
result[record.id]['cash_journal_id'] = st.journal_id.id
result[record.id]['cash_register_id'] = st.id
return result
@ -212,12 +201,17 @@ class pos_session(osv.osv):
required=True, readonly=True,
select=1),
'cash_journal_id' : fields.function(_compute_cash_journal_id, method=True,
type='many2one', relation='account.journal',
string='Cash Journal', store=True),
'cash_register_id' : fields.function(_compute_cash_register_id, method=True,
type='many2one', relation='account.bank.statement',
string='Cash Register', store=True),
'cash_control' : fields.function(_compute_cash_all,
multi='cash',
type='boolean', string='Has Cash Control'),
'cash_journal_id' : fields.function(_compute_cash_all,
multi='cash',
type='many2one', relation='account.journal',
string='Cash Journal', store=True),
'cash_register_id' : fields.function(_compute_cash_all,
multi='cash',
type='many2one', relation='account.bank.statement',
string='Cash Register', store=True),
'opening_details_ids' : fields.related('cash_register_id', 'opening_details_ids',
type='one2many', relation='account.cashbox.line',
@ -261,8 +255,6 @@ class pos_session(osv.osv):
'order_ids' : fields.one2many('pos.order', 'session_id', 'Orders'),
'statement_ids' : fields.one2many('account.bank.statement', 'pos_session_id', 'Bank Statement', readonly=True),
'has_opening_control' : fields.function(_compute_controls, string='Has Opening Control', multi='control', type='boolean'),
'has_closing_control' : fields.function(_compute_controls, string='Has Closing Control', multi='control', type='boolean'),
}
_defaults = {
@ -372,10 +364,8 @@ class pos_session(osv.osv):
def wkf_action_closing_control(self, cr, uid, ids, context=None):
for session in self.browse(cr, uid, ids, context=context):
for statement in session.statement_ids:
if statement.id <> session.cash_register_id.id:
if statement.balance_end<>statement.balance_end_real:
self.pool.get('account.bank.statement').write(cr, uid,
[statement.id], {'balance_end_real': statement.balance_end})
if statement != session.cash_register_id and statement.balance_end != statement.balance_end_real:
self.pool.get('account.bank.statement').write(cr, uid, [statement.id], {'balance_end_real': statement.balance_end})
return self.write(cr, uid, ids, {'state' : 'closing_control', 'stop_at' : time.strftime('%Y-%m-%d %H:%M:%S')}, context=context)
def wkf_action_close(self, cr, uid, ids, context=None):
@ -388,7 +378,7 @@ class pos_session(osv.osv):
if not self.pool.get('ir.model.access').check_groups(cr, uid, "point_of_sale.group_pos_manager"):
raise osv.except_osv( _('Error!'),
_("Your ending balance is too different from the theorical cash closing (%.2f), the maximum allowed is: %.2f. You can contact your manager to force it.") % (st.difference, st.journal_id.amount_authorized_diff))
if st.difference:
if st.difference and st.journal_id.cash_control == True:
if st.difference > 0.0:
name= _('Point of Sale Profit')
account_id = st.journal_id.profit_account_id.id
@ -406,6 +396,9 @@ class pos_session(osv.osv):
'account_id': account_id
}, context=context)
if st.journal_id.type == 'bank':
st.write({'balance_end_real' : st.balance_end})
getattr(st, 'button_confirm_%s' % st.journal_id.type)(context=context)
self._confirm_orders(cr, uid, ids, context=context)
self.write(cr, uid, ids, {'state' : 'closed'}, context=context)
@ -731,7 +724,7 @@ class pos_order(osv.osv):
'pos_statement_id' : order_id,
'journal_id' : journal_id,
'type' : 'customer',
'ref' : order.name,
'ref' : order.session_id.name,
})
statement_line_obj.create(cr, uid, args, context=context)
@ -1084,6 +1077,7 @@ class account_bank_statement_line(osv.osv):
_columns= {
'pos_statement_id': fields.many2one('pos.order', ondelete='cascade'),
}
account_bank_statement_line()
class pos_order_line(osv.osv):
@ -1284,8 +1278,30 @@ class product_product(osv.osv):
help="If you want to sell this product through the point of sale, select the category it belongs to."),
'to_weight' : fields.boolean('To Weight', help="This category contains products that should be weighted, mainly used for the self-checkout interface"),
}
def _default_pos_categ_id(self, cr, uid, context=None):
proxy = self.pool.get('ir.model.data')
try:
category_id = proxy.get_object_reference(cr, uid, 'point_of_sale', 'categ_others')[1]
except ValueError:
values = {
'name' : 'Others',
}
category_id = self.pool.get('pos.category').create(cr, uid, values, context=context)
values = {
'name' : 'categ_others',
'model' : 'pos.category',
'module' : 'point_of_sale',
'res_id' : category_id,
}
proxy.create(cr, uid, values, context=context)
return category_id
_defaults = {
'to_weight' : False,
'pos_categ_id' : _default_pos_categ_id,
}
def edit_ean(self, cr, uid, ids, context):

View File

@ -8,7 +8,7 @@
<field name="groups_id" eval="[(4,ref('group_pos_user'))]"/>
<field name="ean13">0410200000005</field>
</record>
<record id="account.cash_journal" model="account.journal">
<record id="account.cash_journal" model="account.journal">
<field eval="True" name="journal_user"/>
</record>
<record id="base.user_jsmith" model="res.users">
@ -36,6 +36,10 @@
<field name="groups_id" eval="[(4,ref('group_pos_user'))]"/>
</record>
<record model="pos.config" id="pos_config_main">
<field name="journal_ids" eval="[(6, 0, [ref('account.cash_journal'), ref('account.bank_journal')])]" />
</record>
<!-- Resource: pos.category -->
<record id="beverage" model="pos.category">

View File

@ -126,7 +126,7 @@
</field>
</record>
<record model="ir.ui.view" id="view_pos_order_tree">
<field name="name">Sales</field>
<field name="name">Orders</field>
<field name="model">pos.order</field>
<field name="arch" type="xml">
<tree string="POS Orders" colors="blue:state == 'draft';gray:state in ('done','cancel');black:state not in('done','cancel')">
@ -138,6 +138,7 @@
<field name="amount_total" sum="Amount total"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="state"/>
<field name="session_id" />
</tree>
</field>
</record>
@ -791,8 +792,7 @@
<field name="code" />
<field name="name" />
<field name="type" />
<field name="opening_control" />
<field name="closing_control" />
<field name="cash_control" />
</tree>
</field>
<group string="Material Interfaces" >
@ -878,10 +878,10 @@
<header>
<button name="open" type="workflow" string="Validate &amp; Open Session" states="opening_control" class="oe_highlight"/>
<button name="cashbox_control" type="workflow" string="End of Session"
attrs="{'invisible' : [('has_closing_control', '=', False),('state', '=', 'opened')]}"
attrs="{'invisible' : ['|', ('cash_control', '=', False),('state', '!=', 'opened')]}"
class="oe_highlight" />
<button name="close" type="workflow" string="Validate Closing &amp; Post Entries"
attrs="{'invisible' : [('has_closing_control', '=', True),('state', '=', 'opened')]}"
attrs="{'invisible' : ['|', ('cash_control', '=', True),('state', '!=', 'opened')]}"
class="oe_highlight" />
<button name="close" type="workflow" string="Validate Closing &amp; Post Entries" states="closing_control"
class="oe_highlight" />
@ -900,8 +900,7 @@
<field name="name" attrs="{'invisible': [('name','=','/')]}" class="oe_inline"/>
</h1>
<group>
<field name="has_opening_control" invisible="1" />
<field name="has_closing_control" invisible="1" />
<field name="cash_control" invisible="1" />
<group>
<field name="user_id"/>
<field name="config_id" attrs="{'invisible' : [('config_id', '&lt;&gt;', False)]}"/>
@ -912,26 +911,26 @@
</group>
<newline/>
<group string="Opening Cash Control">
<group string="Opening Cash Control" attrs="{'invisible' : ['|', ('cash_control', '=', False),('state', '=', 'closed')]}">
<field name="opening_details_ids" nolabel="1" colspan="2" attrs="{'readonly' : [('state', 'not in', ('opening_control',))]}">
<tree string="Opening Cashbox Lines" editable="bottom">
<field name="pieces" readonly="1" />
<field name="number_opening" string="Opening Unit Numbers" on_change="on_change_sub_opening(pieces, number_opening)" />
<field name="number_opening" on_change="on_change_sub_opening(pieces, number_opening)" />
<field name="subtotal_opening" string="Opening Subtotal" sum="Total"/>
</tree>
</field>
</group>
<group string="Closing Cash Control" attrs="{'invisible': [('state', '=', 'opening_control')]}">
<group string="Closing Cash Control" attrs="{'invisible': ['|', ('cash_control', '=', False), ('state', '!=', 'closing_control')]}">
<field name="details_ids" nolabel="1" colspan="2">
<tree string="Cashbox Lines" editable="bottom">
<field name="pieces" readonly="1" />
<field name="number_closing"/>
<field name="number_closing" />
<field name="subtotal_closing"/>
</tree>
</field>
</group>
<div>
<div attrs="{'invisible': [('state', '=', 'closed')]}">
<group class="oe_subtotal_footer oe_right">
<field name="cash_register_balance_start" readonly="1" string="Opening Balance" class="oe_subtotal_footer_separator"/>
<field name="cash_register_total_entry_encoding" attrs="{'invisible' : [('state', '=', 'opening_control')]}" string="+ Transactions"/>
@ -948,7 +947,7 @@
</div>
<group class="oe_subtotal_footer oe_right" attrs="{'invisible' : [('state', '=', 'opening_control')]}">
<group class="oe_subtotal_footer oe_right" attrs="{'invisible' : [('state', 'in', ('opening_control', 'closed'))]}">
<field name="cash_register_balance_end_real" class="oe_subtotal_footer_separator"/>
<field name="cash_register_difference" class="oe_subtotal_footer_separator"/>
</group>

View File

@ -126,14 +126,14 @@
<field name="act_from" ref="act_start" />
<field name="act_to" ref="act_opening_control" />
<field name="signal" eval="False" /> <!-- >start_to_opening_control</field> -->
<field name="condition">has_opening_control == True</field>
<field name="condition">cash_control == True</field>
</record>
<record model="workflow.transition" id="trans_start_to_open">
<field name="act_from" ref="act_start" />
<field name="act_to" ref="act_open" />
<field name="signal" eval="False" />
<field name="condition">has_opening_control == False</field>
<field name="condition">cash_control == False</field>
</record>
<!-- state:opening_control -> signal:open -> state:opened -> signal:cashbox_control -> state:closing_control -> signal:close -> state:close -->
@ -147,14 +147,14 @@
<field name="act_from" ref="act_open" />
<field name="act_to" ref="act_closing_control" />
<field name="signal">cashbox_control</field>
<field name="condition">has_closing_control == True</field>
<field name="condition">cash_control == True</field>
</record>
<record model="workflow.transition" id="trans_open_to_close">
<field name="act_from" ref="act_open" />
<field name="act_to" ref="act_close" />
<field name="signal">close</field>
<field name="condition">has_closing_control == False</field>
<field name="condition">cash_control == False</field>
</record>
<record model="workflow.transition" id="trans_closing_control_to_close">

View File

@ -65,7 +65,7 @@ class pos_open_statement(osv.osv_memory):
statement_id = statement_obj.create(cr, uid, data, context=context)
st_ids.append(int(statement_id))
if journal.opening_control:
if journal.cash_control:
statement_obj.button_open(cr, uid, [statement_id], context)
tree_res = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_cash_statement_pos_tree')

View File

@ -210,7 +210,7 @@ class project(osv.osv):
'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."),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of Projects."),
'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', help="Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc.", ondelete="cascade", required=True),
'analytic_account_id': fields.many2one('account.analytic.account', 'Contract/Analytic', help="Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc.", ondelete="cascade", required=True),
'priority': fields.integer('Sequence', help="Gives the sequence order when displaying the list of projects"),
'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members',
help="Project's members are users who can have an access to the tasks related to this project.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
@ -1265,7 +1265,7 @@ class account_analytic_account(osv.osv):
_inherit = 'account.analytic.account'
_description = 'Analytic Account'
_columns = {
'use_tasks': fields.boolean('Tasks Mgmt.',help="If check,this contract will be available in the project menu and you will be able to manage tasks or track issues"),
'use_tasks': fields.boolean('Tasks',help="If check,this contract will be available in the project menu and you will be able to manage tasks or track issues"),
'company_uom_id': fields.related('company_id', 'project_time_mode_id', type='many2one', relation='product.uom'),
}

View File

@ -76,33 +76,29 @@
</header>
<sheet string="Project">
<field name="analytic_account_id" invisible="1" required="0"/>
<label for="name" class="oe_edit_only" string="Project Name"/>
<h1>
<field name="name" string="Project Name"/>
</h1>
<div attrs="{'invisible': [('alias_domain', '=', False)]}">
<field name="alias_id" invisible="1" required="0"/>
<label for="alias_name" class="oe_edit_only "/>
<field name="alias_name" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/>@<field name="alias_domain" class="oe_inline"/>
<div class="oe_title">
<label for="name" class="oe_edit_only" string="Project Name"/>
<h1>
<field name="name" string="Project Name"/>
</h1>
<div name="options_active">
<field name="use_tasks" class="oe_inline"/>
<label for="use_tasks"/>
</div>
</div>
<div class="oe_right oe_button_box" name="buttons">
<button name="%(act_project_project_2_project_task_all)d" string="Tasks"
type="action" attrs="{'invisible':[('use_tasks','=', 0)]}"/>
<button name="%(base.action_attachment)d" string="Documents" type="action"/>
</div>
<group>
<group>
<field name="user_id" string="Project Manager" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/>
<field name="partner_id" string="Contact" on_change="onchange_partner_id(partner_id)"/>
<field name="privacy_visibility"/>
<field name="analytic_account_id" invisible="1" required="0"/>
</group>
<group>
<table>
<tr name="use_tasks_row">
<td><group><field name="use_tasks"/></group></td>
<td><button icon="terp-gtk-go-back-rtl" name="%(act_project_project_2_project_task_all)d" string="Tasks" type="action" attrs="{'invisible':[('use_tasks','=', 0)]}"/></td>
</tr>
<tr name="use_attachment_row">
<td/>
<td><button icon="terp-gtk-go-back-rtl" class="oe_btn_width" name="%(base.action_attachment)d" string="Documents" type="action"/></td>
</tr>
</table>
<field name="privacy_visibility"/>
<field name="analytic_account_id" readonly="1" required="0"/>
</group>
</group>
<notebook>
@ -126,6 +122,13 @@
</field>
</page>
<page string="Other Info">
<group string="Email Interface" colspan="2">
<div attrs="{'invisible': [('alias_domain', '=', False)]}">
<field name="alias_id" invisible="1" required="0"/>
<label for="alias_name" class="oe_edit_only "/>
<field name="alias_name" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/>@<field name="alias_domain" class="oe_inline"/>
</div>
</group>
<group>
<group string="Administration">
<field name="planned_hours" widget="float_time"/>
@ -133,11 +136,11 @@
<field name="resource_calendar_id"/>
</group>
<group string="Miscellaneous" name="misc">
<field name="company_id" groups="base.group_multi_company" widget="selection" required="1"/>
<field name="parent_id" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}"/>
<field name="priority"/>
<field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/>
<field name="currency_id" groups="base.group_multi_company" required="1"/>
<field name="parent_id" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}"/>
<field name="company_id" groups="base.group_multi_company" widget="selection" required="1"/>
</group>
</group>
</page>
@ -245,8 +248,8 @@
<a t-if="record.use_tasks.raw_value" name="%(act_project_project_2_project_task_all)d" type="action"> <field name="task_count"/> Tasks</a>
</div>
<table>
<tr t-if="record.date.raw_value">
<th class="oe_kanban_project_fields oe_kanban_project_deadline">Deadline</th>
<tr class="oe_kanban_project_fields oe_kanban_project_deadline" t-if="record.date.raw_value">
<th>Deadline</th>
<td><field name="date"/></td>
</tr>
<tr class="oe_kanban_project_fields oe_kanban_project_progress">
@ -312,7 +315,7 @@
<field name="search_view_id" ref="view_project_project_filter"/>
<field name="context">{}</field>
<field name="help" type="html">
<p class="oe_form_nocontent_create">
<p class="oe_view_nocontent_create">
Click to start a new project.
</p>
<p>
@ -688,11 +691,9 @@
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
<field eval="18" name="priority"/>
<field name="arch" type="xml">
<xpath expr='//separator[@name="project_sep"]' position='replace'>
<separator colspan="4" string="Project Management" name="project_sep"/> <!-- removal of invisible attribute -->
</xpath>
<xpath expr='//separator[@name="project_sep"]' position='after'>
<xpath expr='//div[@name="project"]' position='inside'>
<field name="use_tasks"/>
<label for="use_tasks"/>
</xpath>
</field>
</record>

View File

@ -569,7 +569,7 @@ class account_analytic_account(osv.osv):
_description = 'Analytic Account'
_columns = {
'use_issues' : fields.boolean('Issues Tracking', help="Check this field if this project manages issues"),
'use_issues' : fields.boolean('Issues', help="Check this field if this project manages issues"),
}
def on_change_template(self, cr, uid, ids, template_id, context=None):

View File

@ -355,11 +355,12 @@
<field name="model">project.project</field>
<field name="inherit_id" ref="project.edit_project"/>
<field name="arch" type="xml">
<xpath expr='//tr[@name="use_tasks_row"]' position='after'>
<tr>
<td><group><field name="use_issues"/></group></td>
<td><button icon="terp-gtk-go-back-rtl" name="%(act_project_project_2_project_issue_all)d" string="Issues" type="action" attrs="{'invisible':[('use_issues','=', 0)]}"/></td>
</tr>
<xpath expr='//div[@name="options_active"]' position='inside'>
<field name="use_issues" class="oe_inline"/>
<label for="use_issues"/>
</xpath>
<xpath expr='//div[@name="buttons"]' position='inside'>
<button name="%(act_project_project_2_project_issue_all)d" string="Issues" type="action" attrs="{'invisible':[('use_issues','=', 0)]}"/>
</xpath>
<field name="priority" position="before">
<field name="project_escalation_id"/>
@ -382,7 +383,7 @@
<xpath expr="//div[contains(@class, 'oe_kanban_project_list')]" position="inside">
<a t-if="record.use_issues.raw_value"
name="%(act_project_project_2_project_issue_all)d" type="action">
Issues(<field name="issue_count"/>)</a>
<field name="issue_count"/> Issues</a>
</xpath>
</field>
</record>
@ -393,11 +394,9 @@
<field name="inherit_id" ref="project.analytic_account_inherited_form"/>
<field eval="18" name="priority"/>
<field name="arch" type="xml">
<xpath expr='//separator[@name="project_sep"]' position='replace'>
<separator colspan="4" string="Project Management" name="project_sep"/> <!-- removal of invisible attribute -->
</xpath>
<xpath expr='//separator[@name="project_sep"]' position='after'>
<xpath expr='//div[@name="project"]' position='inside'>
<field name="use_issues"/>
<label for="use_issues"/>
</xpath>
</field>
</record>

View File

@ -273,9 +273,9 @@ class account_analytic_account(osv.osv):
_inherit = 'account.analytic.account'
_description = 'Analytic Account'
_columns = {
'use_phases': fields.boolean('Phases Planing', help="Check this field if project manages phases"),
'use_phases': fields.boolean('Phases', help="Check this field if you plan to use phase-based scheduling"),
}
def on_change_template(self, cr, uid, ids, template_id, context=None):
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, context=context)
if template_id and 'value' in res:

View File

@ -96,11 +96,14 @@
<field name="model">project.project</field>
<field name="inherit_id" ref="project.edit_project"/>
<field name="arch" type="xml">
<xpath expr='//tr[@name="use_tasks_row"]' position='after'>
<tr>
<td><group><field name="use_phases"/></group></td>
<td><button icon="terp-gtk-go-back-rtl" name="%(act_project_phases)d" string="Phases" type="action" attrs="{'invisible':[('use_phases','=', 0)]}"/></td>
</tr>
<xpath expr="//div[@name='options_active']" position='inside'>
<field name="use_phases" class="oe_inline"/>
<label for="use_phases"/>
</xpath>
<xpath expr="//div[@name='buttons']" position='inside'>
<button icon="terp-gtk-go-back-rtl" name="%(act_project_phases)d"
string="Phases" type="action"
attrs="{'invisible':[('use_phases','=', 0)]}"/>
</xpath>
</field>
</record>
@ -347,11 +350,9 @@
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
<field eval="18" name="priority"/>
<field name="arch" type="xml">
<xpath expr='//separator[@name="project_sep"]' position='replace'>
<separator name="project_sep" string="Project Management" colspan="4"/> <!-- removal of invisible attribute -->
</xpath>
<xpath expr='//separator[@name="project_sep"]' position='after'>
<xpath expr='//div[@name="project"]' position='inside'>
<field name="use_phases"/>
<label for="use_phases"/>
</xpath>
</field>
</record>

View File

@ -48,7 +48,7 @@ with the effect of creating, editing and deleting either ways.
'test/work_timesheet.yml',
],
'installable': True,
'auto_install': False,
'auto_install': True,
'certificate': '0075123647453',
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -28,33 +28,6 @@ from tools.translate import _
class project_project(osv.osv):
_inherit = 'project.project'
def _to_invoice(self, cr, uid, ids, field_name, arg, context=None):
account_analytic_line = self.pool.get("account.analytic.line")
res = {}
for project in self.browse(cr,uid,ids,context=context):
line_ids = account_analytic_line.search(cr, uid, [('account_id', '=', project.analytic_account_id.id), ('to_invoice','=',1), ('invoice_id','=',False)])
lines = account_analytic_line.browse(cr, uid, line_ids, context)
res[project.id] = {
'amount_to_invoice': sum(line.amount for line in lines),
'time_to_invoice': sum(line.unit_amount for line in lines),
}
return res
def _timesheet_count(self, cr, uid, ids, field_name, arg, context=None):
account_analytic_line = self.pool.get('account.analytic.line')
res = {}
for project in self.browse(cr, uid, ids, context):
line_ids = account_analytic_line.search(cr, uid, [('account_id', '=', project.analytic_account_id.id)])
res[project.id] = len(line_ids)
return res
_columns = {
'amount_to_invoice': fields.function(_to_invoice, string="Amount to Invoice", multi="sums"),
'time_to_invoice': fields.function(_to_invoice, string="Time to Invoice", multi="sums"),
'timesheet_count': fields.function(_timesheet_count, type='integer', string="Issue"),
}
def onchange_partner_id(self, cr, uid, ids, part=False, context=None):
res = super(project_project, self).onchange_partner_id(cr, uid, ids, part, context)
if part and res and ('value' in res):
@ -66,6 +39,31 @@ class project_project(osv.osv):
res['value'].update({'to_invoice': factor_id})
return res
_defaults = {
'use_timesheets': True,
}
def open_timesheets(self, cr, uid, ids, context=None):
""" open Timesheets view """
project = self.browse(cr, uid, ids[0], context)
try:
journal_id = self.pool.get('ir.model.data').get_object(cr, uid, 'hr_timesheet', 'analytic_journal').id
except ValueError:
journal_id = False
view_context = {
'search_default_account_id': [project.analytic_account_id.id],
'default_account_id': project.analytic_account_id.id,
'default_journal_id': journal_id,
}
return {
'type': 'ir.actions.act_window',
'name': _('Bill Tasks Works'),
'res_model': 'account.analytic.line',
'view_type': 'form',
'view_mode': 'tree,form',
'context': view_context,
'nodestroy': True,
}
project_project()
class project_work(osv.osv):

View File

@ -9,33 +9,29 @@
<field name="arch" type="xml">
<field name="use_tasks" position="after">
<field name="use_timesheets"/>
<field name="timesheet_count"/>
<field name="hours_quantity"/>
<field name="currency_id"/>
<field name="partner_id"/>
</field>
<xpath expr="//div[contains(@class, 'oe_kanban_project_list')]" position="inside">
<a t-if="record.use_timesheets.raw_value"
name="open_timesheets" type="object">Timesheets(<field name="timesheet_count"/>)</a>
</xpath>
<xpath expr="//div[contains(@class, 'oe_kanban_project_deadline')]" position="before">
<div class="oe_kanban_project_fields oe_kanban_project_invoice" t-if="record.partner_id.raw_value">
<div>Amount to invoice</div>
<div><field name="amount_to_invoice"/> <t t-esc="record.currency_id.raw_value[1].split(' ')[1][1]"/></div>
<div>Time to Invoice</div>
<div><field name="time_to_invoice"/> <field name="company_uom_id"/></div>
</div>
name="open_timesheets" type="object"><field name="hours_quantity"/> Timesheets</a>
</xpath>
</field>
</record>
<record id="project_invoice_form_cutomer" model="ir.ui.view">
<field name="name">Inherit project form : Customer</field>
<record id="project_invoice_form" model="ir.ui.view">
<field name="name">Inherit project form : Invoicing Data</field>
<field name="model">project.project</field>
<field name="inherit_id" ref="analytic_contract_project.project_invoice_form"/>
<field name="inherit_id" ref="project.edit_project"/>
<field name="arch" type="xml">
<field name="partner_id" position="replace">
<field name="partner_id" on_change="onchange_partner_id(partner_id)" string="Contact" attrs="{'required':[('to_invoice','!=',False)]}"/>
</field>
<xpath expr='//div[@name="options_active"]' position='inside'>
<field name="use_timesheets" class="oe_inline"/>
<label for="use_timesheets"/>
</xpath>
<xpath expr='//div[@name="buttons"]' position="inside">
<button name="open_timesheets" string="Timesheets" type="object" attrs="{'invisible':[('use_timesheets','=', 0)]}"/>
</xpath>
</field>
</record>
@ -45,7 +41,6 @@
<field name="inherit_id" ref="project.view_project_project_filter"/>
<field name="arch" type="xml">
<xpath expr='//filter[@string="Project(s) Manager"]' position='after'>
<separator/>
<filter icon="terp-camera_test" string="Billable" domain="[('to_invoice','!=', False)]" help="Billable Project"/>
</xpath>
</field>
@ -95,7 +90,7 @@
Click to add a work to invoice.
</p><p>
You will find here all works made on tasks that you can
invoice.
invoice.
</p>
</field>
</record>

View File

@ -259,8 +259,8 @@
</div>
</form>
<tree string="Sales Order Lines" editable="bottom">
<field name="sequence" widget="handle"/>
<field name="state" invisible="1"/>
<field name="sequence" invisible="1"/>
<field name="delay" invisible="1"/>
<field name="tax_id" invisible="1"/>
<field name="type" invisible="1"/>