diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py
index d3a58272b89..09e51486ad2 100644
--- a/addons/account/__openerp__.py
+++ b/addons/account/__openerp__.py
@@ -127,6 +127,7 @@ module named account_vouchers
'board_account_demo.xml',
],
'test': [
+ 'test/account_sequence_test.yml',
'test/account_customer_invoice.yml',
'test/account_supplier_invoice.yml',
'test/account_change_currency.yml',
diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py
index e0d31b9cf18..d0d8a8e9458 100644
--- a/addons/account/account_bank_statement.py
+++ b/addons/account/account_bank_statement.py
@@ -25,6 +25,7 @@ from osv import fields, osv
from tools.misc import currency
from tools.translate import _
+import decimal_precision as dp
class account_bank_statement(osv.osv):
@@ -130,9 +131,9 @@ class account_bank_statement(osv.osv):
states={'confirm': [('readonly', True)]}, domain=[('type', '=', 'cash')]),
'period_id': fields.many2one('account.period', 'Period', required=True,
states={'confirm':[('readonly', True)]}),
- 'balance_start': fields.float('Starting Balance', digits=(16,2),
+ 'balance_start': fields.float('Starting Balance', digits_compute=dp.get_precision('Account'),
states={'confirm':[('readonly',True)]}),
- 'balance_end_real': fields.float('Ending Balance', digits=(16,2),
+ 'balance_end_real': fields.float('Ending Balance', digits_compute=dp.get_precision('Account'),
states={'confirm':[('readonly', True)]}),
'balance_end': fields.function(_end_balance, method=True, string='Balance'),
'line_ids': fields.one2many('account.bank.statement.line',
diff --git a/addons/account/account_cash_statement.py b/addons/account/account_cash_statement.py
index 1a0727e626f..b6c36dd3337 100644
--- a/addons/account/account_cash_statement.py
+++ b/addons/account/account_cash_statement.py
@@ -25,6 +25,7 @@ import time
from mx import DateTime
from decimal import Decimal
from tools.translate import _
+import decimal_precision as dp
class account_cashbox_line(osv.osv):
@@ -55,9 +56,9 @@ class account_cashbox_line(osv.osv):
return {'value':{'subtotal': sub or 0.0}}
_columns = {
- 'pieces': fields.float('Values', digits=(16,2)),
+ 'pieces': fields.float('Values', digits_compute=dp.get_precision('Account')),
'number': fields.integer('Number'),
- 'subtotal': fields.function(_sub_total, method=True, string='Sub Total', type='float',digits=(16,2)),
+ 'subtotal': fields.function(_sub_total, method=True, string='Sub Total', type='float', digits_compute=dp.get_precision('Account')),
'starting_id': fields.many2one('account.bank.statement',ondelete='cascade'),
'ending_id': fields.many2one('account.bank.statement',ondelete='cascade'),
}
@@ -176,7 +177,7 @@ class account_cash_statement(osv.osv):
_columns = {
'company_id':fields.many2one('res.company', 'Company', required=False),
'journal_id': fields.many2one('account.journal', 'Journal', required=True),
- 'balance_end_real': fields.float('Closing Balance', digits=(16,2), states={'confirm':[('readonly', True)]}, help="closing balance entered by the cashbox verifier"),
+ 'balance_end_real': fields.float('Closing Balance', digits_compute=dp.get_precision('Account'), states={'confirm':[('readonly', True)]}, help="closing balance entered by the cashbox verifier"),
'state': fields.selection(
[('draft', 'Draft'),
('confirm', 'Confirm'),
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index e9c66c3036d..6e770864799 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -201,13 +201,13 @@
-
+
+
-
@@ -295,14 +295,14 @@
-
+
+
-
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index 1eb238fa04f..cbcc714ff0f 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -196,7 +196,7 @@
-
+
account.account.list
account.account
@@ -206,6 +206,7 @@
+
@@ -365,7 +366,7 @@
-
+
@@ -1213,13 +1214,13 @@
[('to_check','=',True), ('state','=','draft')]
-
-
-
+
diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po
index 58fbb3b1ac4..169283ae387 100644
--- a/addons/account/i18n/zh_CN.po
+++ b/addons/account/i18n/zh_CN.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.6\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-07-13 03:12+0000\n"
+"PO-Revision-Date: 2010-07-16 01:13+0000\n"
"Last-Translator: Black Jack \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: 2010-07-14 03:37+0000\n"
+"X-Launchpad-Export-Date: 2010-07-16 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -1182,7 +1182,7 @@ msgstr "银行收据"
#. module: account
#: view:res.partner:0
msgid "Bank account"
-msgstr "银行账号"
+msgstr "银行帐号"
#. module: account
#: field:account.chart.template,tax_template_ids:0
@@ -4555,7 +4555,7 @@ msgstr "辅助核算项统计"
msgid ""
"This will automatically configure your chart of accounts, bank accounts, "
"taxes and journals according to the selected template"
-msgstr "将根据选择的模板自动设置你的科目一览表、银行帐号、税和记录集合"
+msgstr "将根据选择的模板自动设置你的科目一览表、银行科目、税和记录集合"
#. module: account
#: view:account.bank.statement:0
@@ -5463,7 +5463,7 @@ msgstr "科目.税.模板"
#. module: account
#: field:wizard.multi.charts.accounts,bank_accounts_id:0
msgid "Bank Accounts"
-msgstr "银行帐号"
+msgstr "银行科目"
#. module: account
#: constraint:account.period:0
@@ -5739,7 +5739,7 @@ msgstr "打印记录集合 -"
#: field:account.chart.template,bank_account_view_id:0
#: field:account.invoice,partner_bank:0
msgid "Bank Account"
-msgstr "银行帐号"
+msgstr "银行科目"
#. module: account
#: model:ir.actions.act_window,name:account.action_model_form
diff --git a/addons/account/invoice.py b/addons/account/invoice.py
index e2700a4e4b1..f3b62f0fd27 100644
--- a/addons/account/invoice.py
+++ b/addons/account/invoice.py
@@ -924,12 +924,20 @@ class account_invoice(osv.osv):
move_id = obj_inv.move_id and obj_inv.move_id.id or False
reference = obj_inv.reference
if not number:
- if obj_inv.journal_id.invoice_sequence_id:
- sid = obj_inv.journal_id.invoice_sequence_id.id
- number = self.pool.get('ir.sequence').get_id(cr, uid, sid, 'id', {'fiscalyear_id': obj_inv.period_id.fiscalyear_id.id})
+ tmp_context = {
+ 'fiscalyear_id': inv.period_id.fiscalyear_id.id
+ }
+ if inv.journal_id.invoice_sequence_id:
+ sequence_id = inv.journal_id.invoice_sequence_id.id
+ number = self.pool.get('ir.sequence').get_id(cr, uid,
+ sequence_id,
+ 'id',
+ context=tmp_context)
else:
- number = self.pool.get('ir.sequence').get(cr, uid,
- 'account.invoice.' + invtype)
+ number = self.pool.get('ir.sequence').get_id(cr, uid,
+ 'account.invoice.%s' % invtype,
+ 'code',
+ context=tmp_context)
if invtype in ('in_invoice', 'in_refund'):
ref = reference
else:
diff --git a/addons/account/sequence.py b/addons/account/sequence.py
index c90e9ef93c7..b75e7f3e34e 100644
--- a/addons/account/sequence.py
+++ b/addons/account/sequence.py
@@ -19,19 +19,23 @@
#
##############################################################################
-from osv import fields,osv
+from osv import fields, osv
class ir_sequence_fiscalyear(osv.osv):
_name = 'account.sequence.fiscalyear'
_rec_name = "sequence_main_id"
_columns = {
- "sequence_id": fields.many2one("ir.sequence", 'Sequence', required=True, ondelete='cascade'),
- "sequence_main_id": fields.many2one("ir.sequence", 'Main Sequence', required=True, ondelete='cascade'),
- "fiscalyear_id": fields.many2one('account.fiscalyear', 'Fiscal Year', required=True, ondelete='cascade')
+ "sequence_id": fields.many2one("ir.sequence", 'Sequence', required=True,
+ ondelete='cascade'),
+ "sequence_main_id": fields.many2one("ir.sequence", 'Main Sequence',
+ required=True, ondelete='cascade'),
+ "fiscalyear_id": fields.many2one('account.fiscalyear', 'Fiscal Year',
+ required=True, ondelete='cascade')
}
_sql_constraints = [
- ('main_id', 'CHECK (sequence_main_id != sequence_id)', 'Main Sequence must be different from current !'),
+ ('main_id', 'CHECK (sequence_main_id != sequence_id)',
+ 'Main Sequence must be different from current !'),
]
ir_sequence_fiscalyear()
@@ -39,17 +43,25 @@ ir_sequence_fiscalyear()
class ir_sequence(osv.osv):
_inherit = 'ir.sequence'
_columns = {
- 'fiscal_ids' : fields.one2many('account.sequence.fiscalyear', 'sequence_main_id', 'Sequences')
+ 'fiscal_ids' : fields.one2many('account.sequence.fiscalyear',
+ 'sequence_main_id', 'Sequences')
}
- def get_id(self, cr, uid, sequence_id, test='id', context={}):
- cr.execute('select id from ir_sequence where '+test+'=%s and active=%s', (sequence_id, True,))
+ def get_id(self, cr, uid, sequence_id, test='id', context=None):
+ if context is None:
+ context = {}
+ cr.execute('select id from ir_sequence where '
+ + test + '=%s and active=%s', (sequence_id, True,))
res = cr.dictfetchone()
if res:
- for line in self.browse(cr, uid, res['id'], context=context).fiscal_ids:
- if line.fiscalyear_id.id==context.get('fiscalyear_id', False):
- return super(ir_sequence, self).get_id(cr, uid, line.sequence_id.id, test="id", context=context)
- return super(ir_sequence, self).get_id(cr, uid, sequence_id, test, context)
+ for line in self.browse(cr, uid, res['id'],
+ context=context).fiscal_ids:
+ if line.fiscalyear_id.id == context.get('fiscalyear_id', False):
+ return super(ir_sequence, self).get_id(cr, uid,
+ line.sequence_id.id,
+ test="id",
+ context=context)
+ return super(ir_sequence, self).get_id(cr, uid, sequence_id, test,
+ context=context)
ir_sequence()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account/sequence_view.xml b/addons/account/sequence_view.xml
index 2d4d159cb41..565725d5d71 100644
--- a/addons/account/sequence_view.xml
+++ b/addons/account/sequence_view.xml
@@ -14,6 +14,10 @@
+
diff --git a/addons/account/test/account_sequence_test.yml b/addons/account/test/account_sequence_test.yml
new file mode 100644
index 00000000000..3be824d2ca0
--- /dev/null
+++ b/addons/account/test/account_sequence_test.yml
@@ -0,0 +1,45 @@
+- In order to test the invoice numbering, I create a sequence for out invoices.
+- !record {model: ir.sequence, id: seq_out_invoice_test}:
+ name: Account Invoice Out for the demonstration Fiscal Year # XXX indicate the name of the fiscal year
+ code: account.invoice.out_invoice
+ padding: 3
+ prefix: FY-
+ suffix: -TEST
+ number_next: 42
+
+- I link the new sequence to the demo sequence and the demo fiscal years.
+- !record {model: account.sequence.fiscalyear, id: seq_out_invoice_test_fy}:
+ sequence_id: seq_out_invoice_test
+ sequence_main_id: seq_out_invoice
+ fiscalyear_id: data_fiscalyear
+
+- I create a draft customer invoice in a period of the demo fiscal year
+- !record {model: account.invoice, id: invoice_seq_test}:
+ account_id: account.a_recv
+ address_contact_id: base.res_partner_address_zen
+ address_invoice_id: base.res_partner_address_zen
+ company_id: base.main_company
+ currency_id: base.EUR
+ invoice_line:
+ - account_id: account.a_sale
+ name: '[PC3] Medium PC'
+ price_unit: 900.0
+ quantity: 10.0
+ product_id: product.product_product_pc3
+ uos_id: product.product_uom_unit
+ journal_id: account.sales_journal
+ partner_id: base.res_partner_3
+ reference_type: none
+ period_id: period_1
+
+- I create the invoice, as is I clicked on the "Create" button
+- !workflow {model: account.invoice, action: invoice_open, ref: invoice_seq_test}
+
+- I check that the invoice state is "Open"
+- !assert {model: account.invoice, id: invoice_seq_test}:
+ - state == 'open'
+
+- I check that the invoice got the right number using our sequence
+ # This used to fail because of bug #602188
+- !assert {model: account.invoice, id: invoice_seq_test}:
+ - number == 'FY-042-TEST'
diff --git a/addons/auction/i18n/zh_CN.po b/addons/auction/i18n/zh_CN.po
index 03e5ffa4234..9d1072ee87a 100644
--- a/addons/auction/i18n/zh_CN.po
+++ b/addons/auction/i18n/zh_CN.po
@@ -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: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-07-15 03:34+0000\n"
+"PO-Revision-Date: 2010-07-15 11:03+0000\n"
"Last-Translator: Black Jack \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: 2010-07-15 03:36+0000\n"
+"X-Launchpad-Export-Date: 2010-07-16 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: auction
@@ -944,7 +944,7 @@ msgstr "净利润"
#. module: auction
#: field:auction.lots,vnd_lim_net:0
msgid "Net limit ?"
-msgstr "净限额?"
+msgstr "净极限?"
#. module: auction
#: rml:auction.total.rml:0
@@ -1141,7 +1141,7 @@ msgstr ""
#. module: auction
#: selection:auction.deposit,method:0
msgid "Decrease limit of 10%"
-msgstr "减少10%限制"
+msgstr "减少10%极限"
#. module: auction
#: field:auction.dates,adj_total:0
@@ -1186,13 +1186,13 @@ msgstr ""
#. module: auction
#: view:auction.deposit:0
msgid "Photos"
-msgstr ""
+msgstr "相片"
#. module: auction
#: wizard_field:auction.lots.make_invoice,init,number:0
#: wizard_field:auction.lots.make_invoice_buyer,init,number:0
msgid "Invoice Number"
-msgstr ""
+msgstr "发票编号"
#. module: auction
#: field:report.buyer.auction,date:0
@@ -1201,22 +1201,22 @@ msgstr ""
#: field:report.object.encoded.manager,date:0
#: field:report.seller.auction,date:0
msgid "Create Date"
-msgstr ""
+msgstr "创建日期"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_buyer_allmonth_view1
msgid "Buyer's Summary"
-msgstr ""
+msgstr "买家综述"
#. module: auction
#: xsl:report.auction.ach_bordereau:0
msgid "Customer Reference"
-msgstr ""
+msgstr "客户参考"
#. module: auction
#: rml:bids.lots:0
msgid "Name"
-msgstr ""
+msgstr "名称"
#. module: auction
#: field:auction.deposit,name:0
@@ -1225,13 +1225,13 @@ msgstr ""
#: field:report.deposit.border,bord:0
#: field:report.unclassified.objects,bord_vnd_id:0
msgid "Depositer Inventory"
-msgstr ""
+msgstr "押金目录"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_report_deposit_tree_m
#: model:ir.ui.menu,name:auction.menu_report_deposit_tree_member
msgid "Depositer's Statistics"
-msgstr ""
+msgstr "押金统计"
#. module: auction
#: view:report.object.encoded.manager:0
@@ -1245,38 +1245,38 @@ msgstr ""
#: wizard_field:auction.lots.send.aie.results,init,uname:0
#: wizard_field:auction.lots.sms_send,init,user:0
msgid "Login"
-msgstr ""
+msgstr "登录"
#. module: auction
#: rml:buyer.list:0
msgid "To pay"
-msgstr ""
+msgstr "支付"
#. module: auction
#: wizard_button:auction.lots.enable,init,go:0
msgid "Enable Taken away"
-msgstr ""
+msgstr "允许带走"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Others"
-msgstr ""
+msgstr "古董/ 其它"
#. module: auction
#: model:ir.actions.report.xml,name:auction.seller_lots_3
msgid "Seller Form"
-msgstr ""
+msgstr "卖家单"
#. module: auction
#: field:auction.lots,lot_type:0
#: field:report.unclassified.objects,lot_type:0
msgid "Object category"
-msgstr ""
+msgstr "物品类别"
#. module: auction
#: wizard_view:auction.taken,init:0
msgid "Mark Lots"
-msgstr ""
+msgstr "建立批"
#. module: auction
#: field:auction.lots,obj_num:0
@@ -1284,64 +1284,64 @@ msgstr ""
#: wizard_field:auction.lots.numerotate,search,obj_num:0
#: field:report.unclassified.objects,obj_num:0
msgid "Catalog Number"
-msgstr ""
+msgstr "目录号"
#. module: auction
#: view:report.auction.view2:0
msgid "Auction Reporting tree view2"
-msgstr ""
+msgstr "拍卖报表树视图2"
#. module: auction
#: view:report.buyer.auction2:0
msgid "Auction buyer reporting form view2"
-msgstr ""
+msgstr "拍卖买家报表视图2"
#. module: auction
#: model:ir.actions.report.xml,name:auction.bid_phone
msgid "Bids phones"
-msgstr ""
+msgstr "出价电话"
#. module: auction
#: model:ir.actions.act_window,name:auction.action_report_object_by_auction
msgid "Auction dates"
-msgstr ""
+msgstr "拍卖日期"
#. module: auction
#: view:report.seller.auction2:0
msgid "Auction seller reporting2 graph view"
-msgstr ""
+msgstr "拍卖卖家报表图形视图"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_report_auction_object_date_tree
msgid "Encoded Objects Per Day"
-msgstr ""
+msgstr "每天编号的物品"
#. module: auction
#: model:ir.model,name:auction.model_report_buyer_auction
#: model:ir.model,name:auction.model_report_buyer_auction2
msgid "Auction Reporting on buyer view"
-msgstr ""
+msgstr "拍卖报表买家视图"
#. module: auction
#: rml:auction.total.rml:0
msgid "Debit:"
-msgstr ""
+msgstr "借方:"
#. module: auction
#: field:auction.lots,author_right:0
msgid "Author rights"
-msgstr ""
+msgstr "作者"
#. module: auction
#: view:auction.lots:0
msgid "Payment's history"
-msgstr ""
+msgstr "付款日志"
#. module: auction
#: xsl:report.auction.ach_bordereau:0
#: xsl:report.auction.vnd_bordereau:0
msgid "Document"
-msgstr ""
+msgstr "文档"
#. module: auction
#: xsl:report.auction.lots.list.landscape:0
@@ -1351,39 +1351,39 @@ msgstr ""
#. module: auction
#: view:report.auction.view:0
msgid "Auction results"
-msgstr ""
+msgstr "拍卖结果"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_auction_allmonth_view2
msgid "Auction's Revenues"
-msgstr ""
+msgstr "拍卖收入"
#. module: auction
#: view:report.object.encoded.manager:0
msgid "Total net rev."
-msgstr ""
+msgstr "净收入合计"
#. module: auction
#: wizard_button:auction.lots.buyer_map,check,set_buyer:0
msgid "Update"
-msgstr ""
+msgstr "更新"
#. module: auction
#: rml:auction.total.rml:0
#: model:ir.ui.menu,name:auction.auction_report_seller_menu
#: model:ir.ui.menu,name:auction.auction_seller_menu
msgid "Sellers"
-msgstr ""
+msgstr "卖家"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Metal Ware"
-msgstr ""
+msgstr "古董/ 金属制品"
#. module: auction
#: model:ir.actions.report.xml,name:auction.res_w_buyer
msgid "Results with buyer"
-msgstr ""
+msgstr "结果与买家"
#. module: auction
#: selection:auction.lots.send.aie,date_ask,lang:0
@@ -1393,22 +1393,22 @@ msgstr ""
#. module: auction
#: wizard_button:auction.lots.auction_move,init,set_date:0
msgid "Move to Auction date"
-msgstr ""
+msgstr "移动到拍卖日"
#. module: auction
#: model:ir.actions.act_window,name:auction.action_auction_dates_old
msgid "Old Auctions"
-msgstr ""
+msgstr "以前的拍卖"
#. module: auction
#: rml:auction.total.rml:0
msgid "# of unsold items:"
-msgstr ""
+msgstr "# 未售出项"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Cont. Art/Curiosa"
-msgstr ""
+msgstr "艺术品/ 珍品"
#. module: auction
#: field:auction.bid,auction_id:0
@@ -1419,7 +1419,7 @@ msgstr ""
#: wizard_field:auction.lots.send.aie.results,date_ask,dates:0
#: wizard_field:auction.lots.send.aie.results,init,dates:0
msgid "Auction Date"
-msgstr ""
+msgstr "拍卖日期"
#. module: auction
#: rml:auction.code_bar_lot:0
@@ -1429,109 +1429,109 @@ msgstr ""
#. module: auction
#: model:ir.module.module,shortdesc:auction.module_meta_information
msgid "Auction module"
-msgstr ""
+msgstr "拍卖模块"
#. module: auction
#: field:auction.bid_line,auction:0
msgid "Auction Name"
-msgstr ""
+msgstr "拍卖名"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_report_auction_sign_in_out_manager_tree1
#: model:ir.ui.menu,name:auction.menu_report_auction_sign_in_out_member_tree1
msgid "Attendance"
-msgstr ""
+msgstr "出席"
#. module: auction
#: view:auction.lots:0
msgid "Seller information"
-msgstr ""
+msgstr "卖家信息"
#. module: auction
#: field:auction.lots,ach_login:0
#: wizard_field:auction.lots.buyer_map,check,ach_login:0
#: field:report.unclassified.objects,ach_login:0
msgid "Buyer Username"
-msgstr ""
+msgstr "买家用户名"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Cont. Art/Jewelry"
-msgstr ""
+msgstr "艺术品/ 珠宝"
#. module: auction
#: xsl:report.auction.deposit:0
#: xsl:report.auction.vnd_bordereau:0
msgid "Inventory"
-msgstr ""
+msgstr "目录"
#. module: auction
#: model:ir.actions.act_window,name:auction.action_auction_dates_next
msgid "Next Auctions"
-msgstr ""
+msgstr "下一拍卖"
#. module: auction
#: rml:buyer.list:0
msgid "#"
-msgstr ""
+msgstr "#"
#. module: auction
#: field:auction.lots,ach_emp:0
msgid "Taken Away"
-msgstr ""
+msgstr "带走"
#. module: auction
#: view:report.object.encoded.manager:0
msgid "Total gross rev."
-msgstr ""
+msgstr "未打折收入合计"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Miniatures / Collections"
-msgstr ""
+msgstr "古董/ 袖珍/ 收藏"
#. module: auction
#: wizard_view:auction.lots.numerotate,not_exist:0
msgid "This lot does not exist !"
-msgstr ""
+msgstr "这批不存在!"
#. module: auction
#: view:auction.dates:0
msgid "End of auction"
-msgstr ""
+msgstr "拍卖结束"
#. module: auction
#: field:auction.bid_line,call:0
msgid "To be Called"
-msgstr ""
+msgstr "被称为"
#. module: auction
#: model:ir.actions.act_window,name:auction.action_report_auction_estimation_adj_category_manager_tree
#: model:ir.actions.act_window,name:auction.action_report_auction_estimation_adj_category_member_tree
#: view:report.auction.estimation.adj.category:0
msgid "Min est/Adj/Max est"
-msgstr ""
+msgstr "最少估价/ 最终结果/ 最高估价"
#. module: auction
#: model:ir.actions.report.xml,name:auction.lot_list_inv
msgid "Lots List - Landscape"
-msgstr ""
+msgstr "批列表 - Landscape"
#. module: auction
#: view:report.seller.auction:0
msgid "Auction reporting tree view"
-msgstr ""
+msgstr "拍卖报表树视图"
#. module: auction
#: wizard_view:auction.lots.auction_move,init:0
#: model:ir.actions.wizard,name:auction.wizard_change_auction
msgid "Change Auction Date"
-msgstr ""
+msgstr "修改拍卖日期"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Cont. Art/Photo"
-msgstr ""
+msgstr "艺术品/ 照片"
#. module: auction
#: field:auction.deposit,method:0
@@ -1541,77 +1541,77 @@ msgstr ""
#. module: auction
#: rml:auction.total.rml:0
msgid "Max Estimate:"
-msgstr ""
+msgstr "最高估计"
#. module: auction
#: model:ir.model,name:auction.model_auction_bid
msgid "Bid auctions"
-msgstr ""
+msgstr "拍卖出价"
#. module: auction
#: field:report.auction.view2,obj_margin:0
msgid "Avg margin"
-msgstr ""
+msgstr "平均利润"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Art from the Ivory Coast"
-msgstr ""
+msgstr "古董/ 象牙海岸的艺术品"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Religiosa"
-msgstr ""
+msgstr "古董/ 宗教"
#. module: auction
#: wizard_button:auction.lots.make_invoice,init,invoice:0
#: wizard_button:auction.lots.make_invoice_buyer,init,invoice:0
msgid "Create invoices"
-msgstr ""
+msgstr "创建发票"
#. module: auction
#: constraint:product.template:0
msgid ""
"Error: The default UOM and the purchase UOM must be in the same category."
-msgstr "错误:默认的计量单位和这货物的计量单位必须是同一类型."
+msgstr "错误:默认的计量单位和采购的计量单位必须是同一类型."
#. module: auction
#: xsl:report.auction.vnd_bordereau:0
msgid "Lot"
-msgstr ""
+msgstr "批号"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_all_objects_unplanned1
msgid "Unplanned objects"
-msgstr ""
+msgstr "无计划的物品"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Cont. Art/Sculpture"
-msgstr ""
+msgstr "艺术品/ 雕像"
#. module: auction
#: model:ir.model,name:auction.model_auction_artists
msgid "auction.artists"
-msgstr ""
+msgstr "拍卖.艺术家"
#. module: auction
#: field:auction.dates,journal_id:0
msgid "Buyer Journal"
-msgstr ""
+msgstr "买家记录集合"
#. module: auction
#: selection:auction.lots,state:0
#: selection:report.object.encoded,state:0
#: selection:report.unclassified.objects,state:0
msgid "Paid"
-msgstr ""
+msgstr "已付"
#. module: auction
#: rml:bids.lots:0
#: rml:bids.phones.details:0
msgid "Phone"
-msgstr ""
+msgstr "电话"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
@@ -1622,48 +1622,48 @@ msgstr ""
#: wizard_button:auction.pay.buy,init,pay:0
#: wizard_button:auction.payer.sel,init,pay2:0
msgid "Pay"
-msgstr ""
+msgstr "支付"
#. module: auction
#: field:auction.lot.category,active:0
msgid "Active"
-msgstr ""
+msgstr "有效"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Lightings"
-msgstr ""
+msgstr "古董/ 灯饰"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Sculpture, bronze, eso."
-msgstr ""
+msgstr "古董/ 雕塑, 青铜"
#. module: auction
#: rml:buyer.list:0
msgid "Total:"
-msgstr ""
+msgstr "合计:"
#. module: auction
#: model:account.tax,name:auction.auction_tax2
msgid "TVA1"
-msgstr ""
+msgstr "增值税1"
#. module: auction
#: view:report.auction.object.date:0
msgid "Objects per Day"
-msgstr ""
+msgstr "每天的物品"
#. module: auction
#: xsl:report.auction.deposit:0
msgid "Document Number"
-msgstr ""
+msgstr "文档编号"
#. module: auction
#: field:report.object.encoded.manager,obj_margin:0
#: field:report.seller.auction2,net_margin:0
msgid "Net margin"
-msgstr ""
+msgstr "净利润"
#. module: auction
#: wizard_button:auction.lots.numerotate,search,set_number:0
@@ -1673,7 +1673,7 @@ msgstr ""
#. module: auction
#: xsl:report.auction.lots.list.landscape:0
msgid "Buyer, Price"
-msgstr ""
+msgstr "买家, 价格"
#. module: auction
#: rml:auction.code_bar_lot:0
@@ -1688,17 +1688,17 @@ msgstr ""
#. module: auction
#: field:auction.lots,vnd_lim:0
msgid "Seller limit"
-msgstr ""
+msgstr "卖家极限"
#. module: auction
#: wizard_view:auction.lots.buyer_map,done:0
msgid "All objects are assigned to buyers !"
-msgstr ""
+msgstr "所有物品分配给买家"
#. module: auction
#: wizard_button:auction.lots.able,init,go:0
msgid "Able Taken away"
-msgstr ""
+msgstr "能带走"
#. module: auction
#: constraint:ir.model:0
@@ -1709,28 +1709,28 @@ msgstr "对象名称必须以“x_”开头且不能包含任何特殊字符!"
#. module: auction
#: field:auction.deposit,transfer:0
msgid "Transfer"
-msgstr ""
+msgstr "转移"
#. module: auction
#: view:report.auction.adjudication:0
#: field:report.seller.auction,total_price:0
msgid "Total adjudication"
-msgstr ""
+msgstr "最终结果合计"
#. module: auction
#: field:auction.lots,artist2_id:0
msgid "Artist/Author 2"
-msgstr ""
+msgstr "艺术家/ 作者2"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_seller_allmonth_view1
msgid "Seller's Summary"
-msgstr ""
+msgstr "卖家摘要"
#. module: auction
#: view:report.seller.auction:0
msgid "Auction reporting graph view"
-msgstr ""
+msgstr "拍卖报表图形视图"
#. module: auction
#: wizard_field:auction.taken,init,lot_ids:0
@@ -1741,17 +1741,17 @@ msgstr ""
#: wizard_button:auction.lots.send.aie,date_ask,send:0
#: wizard_button:auction.lots.send.aie.results,date_ask,send:0
msgid "Send on your website"
-msgstr ""
+msgstr "发送到你的网站"
#. module: auction
#: field:auction.lots,net_margin:0
msgid "Net Margin (%)"
-msgstr ""
+msgstr "净利润(%)"
#. module: auction
#: field:report.auction.object.date,month:0
msgid "Month"
-msgstr ""
+msgstr "月"
#. module: auction
#: model:ir.actions.act_window,name:auction.auction_lots_open
@@ -1761,50 +1761,50 @@ msgstr ""
#. module: auction
#: field:auction.lots,product_id:0
msgid "Product"
-msgstr ""
+msgstr "产品"
#. module: auction
#: model:ir.model,name:auction.model_report_auction_view
msgid "Auction Reporting on view1"
-msgstr ""
+msgstr "拍卖报表视图1"
#. module: auction
#: field:report.seller.auction2,sum_adj:0
msgid "Sum Adjustication"
-msgstr ""
+msgstr "最终结果合计"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Porcelain, Ceramics, Glassmaking, ..."
-msgstr ""
+msgstr "古董/ 瓷器, 陶器, 玻璃工艺品"
#. module: auction
#: xsl:report.auction.ach_bordereau:0
msgid "Plate Number:"
-msgstr ""
+msgstr "版号:"
#. module: auction
#: view:auction.deposit:0
#: field:auction.deposit,lot_id:0
#: model:ir.ui.menu,name:auction.auction_objects_menu
msgid "Objects"
-msgstr "对象"
+msgstr "物品"
#. module: auction
#: wizard_view:auction.lots.numerotate,init:0
#: wizard_view:auction.lots.numerotate,search:0
msgid "Object Reference"
-msgstr ""
+msgstr "物品参考"
#. module: auction
#: rml:auction.total.rml:0
msgid "Paid:"
-msgstr ""
+msgstr "已付:"
#. module: auction
#: field:auction.deposit,total_neg:0
msgid "Allow Negative Amount"
-msgstr ""
+msgstr "允许负数金额"
#. module: auction
#: rml:auction.bids:0
@@ -1812,12 +1812,12 @@ msgstr ""
#: rml:auction.total.rml:0
#: model:ir.ui.menu,name:auction.auction_report_auction_menu
msgid "Auction"
-msgstr ""
+msgstr "拍卖"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Cont. Art/Shows"
-msgstr ""
+msgstr "艺术品/ 展示"
#. module: auction
#: field:auction.dates,name:0
@@ -1833,17 +1833,17 @@ msgstr ""
#: field:report.seller.auction2,date:0
#: field:report.unclassified.objects,auction:0
msgid "Auction date"
-msgstr ""
+msgstr "拍卖日期"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_all_objects_unsold
msgid "Unsold Objects"
-msgstr ""
+msgstr "未售出物品"
#. module: auction
#: field:report.buyer.auction,avg_price:0
msgid "Avg Adj."
-msgstr ""
+msgstr "平均最终结果"
#. module: auction
#: model:ir.model,name:auction.model_auction_deposit_cost
@@ -1853,17 +1853,17 @@ msgstr ""
#. module: auction
#: wizard_field:auction.lots.numerotate,search,bord_vnd_id:0
msgid "Object Inventory"
-msgstr ""
+msgstr "物品目录"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Art from the Ivory Coast/African Arts"
-msgstr ""
+msgstr "古董/ 象牙海岸艺术品/ 非洲艺术品"
#. module: auction
#: field:auction.dates,auction1:0
msgid "First Auction Day"
-msgstr ""
+msgstr "首日拍卖"
#. module: auction
#: view:report.attendance:0
@@ -1873,67 +1873,67 @@ msgstr ""
#. module: auction
#: view:auction.lot.category:0
msgid "Lot Category"
-msgstr ""
+msgstr "批类别"
#. module: auction
#: model:ir.ui.menu,name:auction.auction_report_manager_menu
msgid "Manager"
-msgstr ""
+msgstr "经理"
#. module: auction
#: view:auction.dates:0
msgid "Names"
-msgstr ""
+msgstr "名称"
#. module: auction
#: view:auction.artists:0
msgid "Artists"
-msgstr ""
+msgstr "艺术家"
#. module: auction
#: field:report.attendance,total_attendance:0
msgid "Total"
-msgstr ""
+msgstr "合计"
#. module: auction
#: model:ir.actions.act_window,name:auction.act_auction_lot_line_open
msgid "Open lots"
-msgstr ""
+msgstr "打开批"
#. module: auction
#: view:report.seller.auction:0
msgid "Auction reporting form view"
-msgstr ""
+msgstr "拍卖报表表格视图"
#. module: auction
#: view:auction.lots:0
msgid "Lots"
-msgstr ""
+msgstr "批"
#. module: auction
#: model:ir.actions.wizard,name:auction.wizard_send
msgid "Send to website"
-msgstr ""
+msgstr "发送到网站"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_auction_dates_old
msgid "Old Auction Dates"
-msgstr ""
+msgstr "旧拍卖日期"
#. module: auction
#: field:auction.lots,seller_price:0
msgid "Seller price"
-msgstr ""
+msgstr "卖家价格"
#. module: auction
#: model:ir.model,name:auction.model_report_seller_auction2
msgid "Auction Reporting on seller view2"
-msgstr ""
+msgstr "拍卖视图卖家视图2"
#. module: auction
#: model:ir.actions.report.xml,name:auction.buy_id_list
msgid "Buyer List"
-msgstr ""
+msgstr "买家列表"
#. module: auction
#: rml:buyer.list:0
@@ -1945,12 +1945,12 @@ msgstr ""
#: wizard_field:auction.pay.buy,init,statement_id2:0
#: wizard_field:auction.pay.buy,init,statement_id3:0
msgid "Statement"
-msgstr ""
+msgstr "对帐单"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Engravings"
-msgstr ""
+msgstr "古董/ 版画"
#. module: auction
#: model:account.tax,name:auction.auction_tax20
@@ -1962,7 +1962,7 @@ msgstr ""
#: wizard_view:auction.lots.numerotate_cont,init:0
#: wizard_field:auction.lots.numerotate_cont,init,number:0
msgid "First Number"
-msgstr ""
+msgstr "第一编号"
#. module: auction
#: model:account.tax,name:auction.auction_tax
@@ -1972,28 +1972,28 @@ msgstr ""
#. module: auction
#: model:ir.model,name:auction.model_report_auction_view2
msgid "Auction Reporting on view2"
-msgstr ""
+msgstr "拍卖报表视图2"
#. module: auction
#: field:auction.dates,expo1:0
msgid "First Exposition Day"
-msgstr ""
+msgstr "展览会首日"
#. module: auction
#: wizard_view:auction.lots.auction_move,init:0
msgid ""
"Warning, this will erase the object adjudication price and its buyer !"
-msgstr ""
+msgstr "警告, 这将删除物品的最终结果和它的买家"
#. module: auction
#: field:report.auction.object.date,name:0
msgid "Created date"
-msgstr ""
+msgstr "创建日期"
#. module: auction
#: view:auction.bid:0
msgid "Bid information"
-msgstr ""
+msgstr "出价信息"
#. module: auction
#: xsl:report.auction.lots.list.landscape:0
@@ -2003,7 +2003,7 @@ msgstr ""
#. module: auction
#: field:auction.dates,acc_income:0
msgid "Income Account"
-msgstr ""
+msgstr "收入科目"
#. module: auction
#: field:auction.lots,net_revenue:0
@@ -2011,91 +2011,91 @@ msgstr ""
#: field:report.object.encoded.manager,net_revenue:0
#: field:report.seller.auction2,net_revenue:0
msgid "Net revenue"
-msgstr ""
+msgstr "净收入"
#. module: auction
#: xsl:report.auction.deposit:0
#: xsl:report.auction.lots.list.landscape:0
msgid "Limit"
-msgstr ""
+msgstr "极限"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_report_latest_doposit_tree_manager
msgid "Latest Deposits"
-msgstr ""
+msgstr "最近押金"
#. module: auction
#: rml:auction.total.rml:0
msgid "# of items:"
-msgstr ""
+msgstr "# 项"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Musical Instruments"
-msgstr ""
+msgstr "古董/ 乐器"
#. module: auction
#: field:report.object.encoded,estimation:0
#: field:report.object.encoded.manager,estimation:0
msgid "Estimation"
-msgstr ""
+msgstr "估价"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Graphic Arts"
-msgstr ""
+msgstr "古董/ 印艺"
#. module: auction
#: model:ir.actions.report.xml,name:auction.buyer_form_id
msgid "Buyer Form"
-msgstr ""
+msgstr "买家表格"
#. module: auction
#: model:ir.actions.wizard,name:auction.wizard_invoice
msgid "Invoice Seller objects"
-msgstr ""
+msgstr "发票卖家物品"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Oriental Arts"
-msgstr ""
+msgstr "古董/ 东方艺术"
#. module: auction
#: field:auction.bid,partner_id:0
msgid "Buyer Name"
-msgstr ""
+msgstr "买家姓名"
#. module: auction
#: field:report.auction.view2,sum_adj:0
msgid "Sum of adjudication"
-msgstr ""
+msgstr "最终结果合计"
#. module: auction
#: model:ir.actions.wizard,name:auction.auction_wizard_enable_taken
msgid "Unmark as taken away"
-msgstr ""
+msgstr "取消带走标记"
#. module: auction
#: field:auction.lots,gross_margin:0
msgid "Gross Margin (%)"
-msgstr ""
+msgstr "毛利(%)"
#. module: auction
#: selection:auction.dates,state:0
#: selection:report.auction.adjudication,state:0
msgid "Closed"
-msgstr ""
+msgstr "关闭"
#. module: auction
#: field:auction.lots,obj_comm:0
#: field:report.unclassified.objects,obj_comm:0
msgid "Commission"
-msgstr ""
+msgstr "佣金"
#. module: auction
#: wizard_field:auction.lots.numerotate,init,lot_num:0
msgid "Lot Number"
-msgstr ""
+msgstr "批号"
#. module: auction
#: constraint:res.partner:0
@@ -2105,13 +2105,13 @@ msgstr "这增值税似乎不正确"
#. module: auction
#: field:report.attendance,employee_id:0
msgid "Employee"
-msgstr ""
+msgstr "员工"
#. module: auction
#: xsl:report.auction.ach_bordereau:0
#: xsl:report.auction.vnd_bordereau:0
msgid "Adj.(EUR)"
-msgstr ""
+msgstr "最终结果(EUR)"
#. module: auction
#: xsl:report.auction.lots.list.landscape:0
@@ -2121,22 +2121,22 @@ msgstr ""
#. module: auction
#: model:ir.ui.menu,name:auction.auction_report_menu
msgid "Reporting"
-msgstr "内部报表"
+msgstr "报表"
#. module: auction
#: view:auction.lots:0
msgid "Catalog"
-msgstr ""
+msgstr "目录"
#. module: auction
#: field:auction.deposit.cost,account:0
msgid "Destination Account"
-msgstr ""
+msgstr "目标帐号"
#. module: auction
#: model:ir.model,name:auction.model_report_deposit_border
msgid "Report deposit border"
-msgstr ""
+msgstr "报告押金边界"
#. module: auction
#: model:ir.ui.menu,name:auction.auction_config_menu
@@ -2151,19 +2151,19 @@ msgstr ""
#. module: auction
#: field:auction.deposit.cost,deposit_id:0
msgid "Deposit"
-msgstr ""
+msgstr "押金"
#. module: auction
#: field:auction.dates,expo2:0
msgid "Last Exposition Day"
-msgstr ""
+msgstr "最后展览会日期"
#. module: auction
#: model:ir.actions.act_window,name:auction.action_auction_report_allmonth_view1
#: model:ir.actions.act_window,name:auction.action_auction_report_allmonth_view2
#: model:ir.actions.act_window,name:auction.action_auction_report_thismonth_view2
msgid "Auction report"
-msgstr ""
+msgstr "拍卖报表"
#. module: auction
#: model:ir.model,name:auction.model_auction_lot_category
@@ -2173,50 +2173,50 @@ msgstr ""
#. module: auction
#: field:auction.artists,name:0
msgid "Artist/Author Name"
-msgstr ""
+msgstr "艺术家/ 作者姓名"
#. module: auction
#: field:auction.lots,image:0
msgid "Image"
-msgstr ""
+msgstr "图像"
#. module: auction
#: selection:report.object.encoded,state:0
msgid "Invoiced"
-msgstr ""
+msgstr "已开票"
#. module: auction
#: view:auction.lots:0
#: selection:auction.lots,state:0
msgid "Taken away"
-msgstr ""
+msgstr "带走"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Collectible & art objects"
-msgstr ""
+msgstr "古董/ 收藏品&艺术品"
#. module: auction
#: xsl:report.auction.lots.list.landscape:0
msgid "BID:"
-msgstr ""
+msgstr "出价:"
#. module: auction
#: model:ir.actions.act_window,name:auction.action_auction_buyer_reporting
#: model:ir.actions.act_window,name:auction.action_auction_buyer_reporting2
#: model:ir.actions.act_window,name:auction.action_auction_buyer_reporting_all1
msgid "Buyer's auction"
-msgstr ""
+msgstr "买家拍卖"
#. module: auction
#: view:report.seller.auction2:0
msgid "Auction reporting2 tree view"
-msgstr ""
+msgstr "拍卖报表2树视图"
#. module: auction
#: view:auction.deposit:0
msgid "Deposit Costs"
-msgstr ""
+msgstr "押金成本"
#. module: auction
#: constraint:res.partner:0
@@ -2231,7 +2231,7 @@ msgstr "错误!您不能创建递归的相关成员。"
#: selection:report.seller.auction,state:0
#: selection:report.unclassified.objects,state:0
msgid "Draft"
-msgstr ""
+msgstr "草稿"
#. module: auction
#: rml:buyer.list:0
@@ -2241,38 +2241,38 @@ msgstr ""
#. module: auction
#: xsl:report.auction.ach_bordereau:0
msgid "Buyer Cost:"
-msgstr ""
+msgstr "买家费用:"
#. module: auction
#: xsl:report.auction.lots.list.landscape:0
msgid "NET"
-msgstr ""
+msgstr "净值"
#. module: auction
#: rml:report.auction.buyer.result:0
msgid "Adj"
-msgstr ""
+msgstr "最终结果"
#. module: auction
#: view:auction.dates:0
#: model:ir.ui.menu,name:auction.auction_date_menu
msgid "Auction Dates"
-msgstr ""
+msgstr "拍卖日期"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Furnitures"
-msgstr ""
+msgstr "古董/ 家具"
#. module: auction
#: xsl:report.auction.ach_bordereau:0
msgid "Customer Contact"
-msgstr ""
+msgstr "客户联系"
#. module: auction
#: xsl:report.auction.lots.list.landscape:0
msgid "Inv, Name"
-msgstr ""
+msgstr "发票名称"
#. module: auction
#: field:report.auction.adjudication,user_id:0
@@ -2281,38 +2281,38 @@ msgstr ""
#: field:report.object.encoded,user_id:0
#: field:report.object.encoded.manager,user_id:0
msgid "User"
-msgstr ""
+msgstr "用户"
#. module: auction
#: view:report.unplanned.object:0
msgid "Unplanned Objects"
-msgstr ""
+msgstr "无计划的物品"
#. module: auction
#: field:report.buyer.auction2,gross_revenue:0
msgid "Gross Revenue"
-msgstr ""
+msgstr "总收入"
#. module: auction
#: field:auction.artists,pseudo:0
msgid "Pseudo"
-msgstr ""
+msgstr "赝品"
#. module: auction
#: field:auction.lots,important:0
msgid "To be Emphatized"
-msgstr ""
+msgstr "加强"
#. module: auction
#: view:auction.lots:0
msgid "Not sold"
-msgstr ""
+msgstr "未售出"
#. module: auction
#: model:account.tax,name:auction.auction_tax3
#: field:auction.dates,buyer_costs:0
msgid "Buyer Costs"
-msgstr ""
+msgstr "买家费用"
#. module: auction
#: model:ir.actions.wizard,name:auction.wizard_numerotate_automatic
@@ -2322,27 +2322,27 @@ msgstr ""
#. module: auction
#: rml:auction.total.rml:0
msgid "Auction Date:"
-msgstr ""
+msgstr "拍卖日期:"
#. module: auction
#: field:auction.lots,ach_inv_id:0
msgid "Buyer Invoice"
-msgstr ""
+msgstr "买家发票"
#. module: auction
#: rml:auction.bids:0
msgid "Tel"
-msgstr ""
+msgstr "Tel"
#. module: auction
#: wizard_field:auction.pay.buy,init,total:0
msgid "Amount to paid"
-msgstr ""
+msgstr "支付金额"
#. module: auction
#: field:auction.lots,artist_id:0
msgid "Artist/Author"
-msgstr ""
+msgstr "艺术家/ 作者"
#. module: auction
#: model:account.tax,name:auction.auction_tax1
@@ -2352,12 +2352,12 @@ msgstr ""
#. module: auction
#: model:ir.actions.report.xml,name:auction.total_result1
msgid "Auction Totals with lists"
-msgstr ""
+msgstr "拍卖列表合计"
#. module: auction
#: wizard_button:auction.lots.buyer_map,done,end:0
msgid "Close"
-msgstr ""
+msgstr "关闭"
#. module: auction
#: model:ir.model,name:auction.model_report_object_encoded
@@ -2373,32 +2373,32 @@ msgstr ""
#. module: auction
#: field:report.auction.view,nbuyer:0
msgid "No of buyers"
-msgstr ""
+msgstr "没买家"
#. module: auction
#: field:report.seller.auction,avg_price:0
msgid "Avg adjudication"
-msgstr ""
+msgstr "平均最终结果"
#. module: auction
#: view:report.object.encoded.manager:0
msgid "Object statistic"
-msgstr ""
+msgstr "物品统计"
#. module: auction
#: field:auction.dates,auction2:0
msgid "Last Auction Day"
-msgstr ""
+msgstr "最后拍卖日"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_auction_dates_next1
msgid "Next Auction Dates"
-msgstr ""
+msgstr "下一个拍卖日"
#. module: auction
#: model:ir.model,name:auction.model_report_attendance
msgid "Report Sign In/Out"
-msgstr ""
+msgstr "报告登进/ 登出"
#. module: auction
#: view:auction.deposit:0
@@ -2407,29 +2407,29 @@ msgstr ""
#: wizard_field:auction.lots.numerotate,search,obj_desc:0
#: rml:bids.phones.details:0
msgid "Description"
-msgstr ""
+msgstr "说明"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Cont. Art/Arts"
-msgstr ""
+msgstr "艺术品/ 艺术家"
#. module: auction
#: field:auction.lots,obj_price:0
#: field:report.auction.view,adj_price:0
#: field:report.unclassified.objects,obj_price:0
msgid "Adjudication price"
-msgstr ""
+msgstr "最终结果价格"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_all_objects_to_sell
msgid "Objects to sell"
-msgstr ""
+msgstr "物品销售"
#. module: auction
#: xsl:flagey.huissier:0
msgid "Ref."
-msgstr ""
+msgstr "参考"
#. module: auction
#: wizard_field:auction.lots.send.aie,date_ask,password:0
@@ -2438,196 +2438,196 @@ msgstr ""
#: wizard_field:auction.lots.send.aie.results,init,password:0
#: wizard_field:auction.lots.sms_send,init,password:0
msgid "Password"
-msgstr ""
+msgstr "密码"
#. module: auction
#: field:auction.lots,ach_avance:0
msgid "Buyer Advance"
-msgstr ""
+msgstr "买家进展"
#. module: auction
#: field:auction.lots,name:0
#: wizard_field:auction.lots.numerotate,search,name:0
#: field:report.unclassified.objects,name:0
msgid "Short Description"
-msgstr ""
+msgstr "简短说明"
#. module: auction
#: model:ir.ui.menu,name:auction.auction_report_employees_menu
msgid "Employees"
-msgstr ""
+msgstr "员工"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Clocks and watches"
-msgstr ""
+msgstr "古董/ 钟表"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Scientific Instruments"
-msgstr ""
+msgstr "古董/ 科学仪器"
#. module: auction
#: wizard_view:auction.lots.enable,init:0
msgid "Confirmation enable taken away"
-msgstr ""
+msgstr "设置允许带走"
#. module: auction
#: wizard_view:auction.pay.buy,init:0
msgid "Pay objects"
-msgstr ""
+msgstr "物品付款"
#. module: auction
#: view:report.object.encoded:0
#: view:report.object.encoded.manager:0
msgid "# objects"
-msgstr ""
+msgstr "# 物品"
#. module: auction
#: rml:auction.total.rml:0
msgid "Adjudication:"
-msgstr ""
+msgstr "最终结果:"
#. module: auction
#: field:report.buyer.auction2,sumadj:0
msgid "Sum of adjustication"
-msgstr ""
+msgstr "最终结果总计"
#. module: auction
#: model:ir.actions.report.xml,name:auction.details_bids_phones
msgid "Bids per lot (phone)"
-msgstr ""
+msgstr "每次出价(电话)"
#. module: auction
#: field:report.buyer.auction,buyer_login:0
#: field:report.buyer.auction2,buyer_login:0
msgid "Buyer Login"
-msgstr ""
+msgstr "买家登录"
#. module: auction
#: field:auction.deposit,tax_id:0
msgid "Expenses"
-msgstr ""
+msgstr "费用"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Wine"
-msgstr ""
+msgstr "古董/ 酒"
#. module: auction
#: rml:auction.total.rml:0
msgid "Auction name:"
-msgstr ""
+msgstr "拍卖名称:"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/African Arts"
-msgstr ""
+msgstr "古董/ 非洲艺术"
#. module: auction
#: model:ir.actions.report.xml,name:auction.art2
msgid "Artists Biography"
-msgstr ""
+msgstr "艺术家简历"
#. module: auction
#: selection:auction.lot.category,aie_categ:0
msgid "Antique/Posters"
-msgstr ""
+msgstr "古董/ 海报"
#. module: auction
#: field:auction.lots,history_ids:0
msgid "Auction history"
-msgstr ""
+msgstr "拍卖日志"
#. module: auction
#: xsl:report.auction.lots.list.landscape:0
msgid "Orders"
-msgstr ""
+msgstr "订单"
#. module: auction
#: view:board.board:0
msgid "Objects by day"
-msgstr ""
+msgstr "每天物品"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_board_auction_manager
msgid "Auction Manager"
-msgstr ""
+msgstr "拍卖管理"
#. module: auction
#: view:board.board:0
msgid "Summary pointing by user"
-msgstr ""
+msgstr "用户摘要"
#. module: auction
#: model:ir.ui.menu,name:auction.menu_board_auction
msgid "Auction Member"
-msgstr ""
+msgstr "拍卖会员"
#. module: auction
#: model:ir.actions.act_window,name:auction.open_board_auction
msgid "Auction member board"
-msgstr ""
+msgstr "拍卖会员控制台"
#. module: auction
#: view:board.board:0
msgid "Auction manager "
-msgstr ""
+msgstr "拍卖管理 "
#. module: auction
#: model:ir.module.module,shortdesc:auction.module_meta_information
msgid "Board for Auction"
-msgstr ""
+msgstr "拍卖控制台"
#. module: auction
#: view:board.board:0
msgid "Estimations/Adjudication"
-msgstr ""
+msgstr "估价/ 最终结果"
#. module: auction
#: view:board.board:0
msgid "Total Adjudications"
-msgstr ""
+msgstr "最终结果合计"
#. module: auction
#: view:board.board:0
msgid "Latest objects"
-msgstr ""
+msgstr "最新的物品"
#. module: auction
#: view:board.board:0
msgid "Latest deposits"
-msgstr ""
+msgstr "最近的押金"
#. module: auction
#: view:board.board:0
msgid "Menu"
-msgstr ""
+msgstr "菜单"
#. module: auction
#: view:board.board:0
msgid "My objects By Day"
-msgstr ""
+msgstr "每天我的物品"
#. module: auction
#: view:board.board:0
msgid "My board"
-msgstr ""
+msgstr "我的控制台"
#. module: auction
#: model:ir.actions.act_window,name:auction.open_board_auction_manager
msgid "Auction manager board"
-msgstr ""
+msgstr "拍卖管理控制台"
#. module: auction
#: view:board.board:0
msgid "Min/Adj/Max"
-msgstr ""
+msgstr "最少/ 最终结果/ 最大"
#. module: auction
#: view:board.board:0
msgid "My Latest Objects"
-msgstr ""
+msgstr "我最近的物品"
#, python-format
#~ msgid "The Buyer \"%s\" has no Invoice Address."
diff --git a/addons/audittrail/i18n/zh_CN.po b/addons/audittrail/i18n/zh_CN.po
index 6573c20e894..b554277f990 100644
--- a/addons/audittrail/i18n/zh_CN.po
+++ b/addons/audittrail/i18n/zh_CN.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.6\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-03-20 07:34+0000\n"
+"PO-Revision-Date: 2010-07-15 17:26+0000\n"
"Last-Translator: Black Jack \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: 2010-06-22 04:16+0000\n"
+"X-Launchpad-Export-Date: 2010-07-16 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: audittrail
@@ -35,7 +35,7 @@ msgstr "日志"
#. module: audittrail
#: selection:audittrail.rule,state:0
msgid "Subscribed"
-msgstr "订阅"
+msgstr "已订阅"
#. module: audittrail
#: view:audittrail.log:0
@@ -105,7 +105,7 @@ msgstr "资源ID"
#. module: audittrail
#: selection:audittrail.log,method:0
msgid "Write"
-msgstr "写"
+msgstr "写入"
#. module: audittrail
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail
diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index 743650d5497..4b1aad7cce9 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -441,14 +441,13 @@ class crm_case_section(osv.osv):
_columns = {
'name': fields.char('Sales Team', size=64, required=True, translate=True),
'code': fields.char('Code', size=8),
- 'active': fields.boolean('Active', help="If the active field is set to \
- true, it will allow you to hide the sales team without removing it."),
+ 'active': fields.boolean('Active', help="If the active field is set to "\
+ "true, it will allow you to hide the sales team without removing it."),
'allow_unlink': fields.boolean('Allow Delete', help="Allows to delete non draft cases"),
'change_responsible': fields.boolean('Change Responsible', help="Thick this box if you want that on escalation, the responsible of this sale team automatically becomes responsible of the lead/opportunity escaladed"),
'user_id': fields.many2one('res.users', 'Responsible User'),
'member_ids':fields.many2many('res.users', 'sale_member_rel', 'section_id', 'member_id', 'Team Members'),
- 'reply_to': fields.char('Reply-To', size=64, help="The email address put \
- in the 'Reply-To' of all emails sent by Open ERP about cases in this sales team"),
+ 'reply_to': fields.char('Reply-To', size=64, help="The email address put in the 'Reply-To' of all emails sent by Open ERP about cases in this sales team"),
'parent_id': fields.many2one('crm.case.section', 'Parent Team'),
'child_ids': fields.one2many('crm.case.section', 'parent_id', 'Child Teams'),
'resource_calendar_id': fields.many2one('resource.calendar', "Resource's Calendar"),
@@ -586,8 +585,7 @@ class crm_case_stage(osv.osv):
_columns = {
'name': fields.char('Stage Name', size=64, required=True, translate=True),
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
- 'sequence': fields.integer('Sequence', help="Gives the sequence order \
- when displaying a list of case stages."),
+ 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of case stages."),
'object_id': fields.many2one('ir.model', 'Object Name'),
'probability': fields.float('Probability (%)', required=True),
'on_change': fields.boolean('Change Probability Automatically', \
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index 5c7fdb08522..08a58ac145c 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -113,11 +113,10 @@ class crm_lead(osv.osv, crm_case):
'date_action_next': fields.datetime('Next Action', readonly=1),
'email_from': fields.char('Email', size=128, help="E-mail address of the contact"),
'section_id': fields.many2one('crm.case.section', 'Sales Team', \
- select=True, help='Sales team to which this case belongs to.\
- Defines responsible user and e-mail address for the mail gateway.'),
+ select=True, help='Sales team to which this case belongs to. Defines responsible user and e-mail address for the mail gateway.'),
'create_date': fields.datetime('Creation Date' , readonly=True),
'email_cc': fields.text('Watchers Emails', size=252 , help="These \
-addresses will receive a copy of the future e-mail communication between partner \
+addresses(Comma-separated) will receive a copy of the future e-mail communication between partner \
and users"),
'description': fields.text('Notes'),
'write_date': fields.datetime('Update Date' , readonly=True),
diff --git a/addons/crm/crm_meeting.py b/addons/crm/crm_meeting.py
index 1bc5948fe73..159e0b31691 100644
--- a/addons/crm/crm_meeting.py
+++ b/addons/crm/crm_meeting.py
@@ -51,8 +51,7 @@ class crm_meeting(osv.osv, crm_case):
'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \
domain="[('partner_id','=',partner_id)]", states={'done': [('readonly', True)]}),
'section_id': fields.many2one('crm.case.section', 'Sales Team', states={'done': [('readonly', True)]}, \
- select=True, help='Sales team to which Case belongs to.\
- Define Responsible user and Email account for mail gateway.'),
+ select=True, help='Sales team to which Case belongs to.'),
'email_from': fields.char('Email', size=128, states={'done': [('readonly', True)]}, help="These people will receive email."),
'id': fields.integer('ID'),
'create_date': fields.datetime('Creation Date' , readonly=True),
diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py
index 05413ddcd8f..1f1311e1191 100644
--- a/addons/crm/crm_phonecall.py
+++ b/addons/crm/crm_phonecall.py
@@ -41,8 +41,7 @@ class crm_phonecall(osv.osv, crm_case):
'date_action_next': fields.datetime('Next Action', readonly=1),
'create_date': fields.datetime('Creation Date' , readonly=True),
'section_id': fields.many2one('crm.case.section', 'Sales Team', \
- select=True, help='Sales team to which Case belongs to.\
- Define Responsible user and Email account for mail gateway.'),
+ select=True, help='Sales team to which Case belongs to.'),
'user_id': fields.many2one('res.users', 'Responsible'),
'partner_id': fields.many2one('res.partner', 'Partner'),
'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \
diff --git a/addons/crm/wizard/crm_lead_to_opportunity.py b/addons/crm/wizard/crm_lead_to_opportunity.py
index 7f47e27a4ff..acb259718f1 100644
--- a/addons/crm/wizard/crm_lead_to_opportunity.py
+++ b/addons/crm/wizard/crm_lead_to_opportunity.py
@@ -126,9 +126,9 @@ class crm_lead2opportunity(osv.osv_memory):
if lead.state in ['done', 'cancel']:
raise osv.except_osv(_("Warning !"), _("Closed/Cancelled \
Leads Could not convert into Opportunity"))
- if lead.state != 'open':
+ if lead.state not in ('open', 'pending'):
raise osv.except_osv(_('Warning !'), _('Lead should be in \
-\'Open\' state before converting to Opportunity.'))
+\'Open\' or \'Pending\' state before converting to Opportunity.'))
return False
def default_get(self, cr, uid, fields, context=None):
@@ -289,9 +289,9 @@ class crm_lead2opportunity_partner(osv.osv_memory):
if lead.state in ['done', 'cancel']:
raise osv.except_osv(_("Warning !"), _("Closed/Cancelled \
Leads Could not convert into Opportunity"))
- if lead.state != 'open':
+ if lead.state not in ('open', 'pending'):
raise osv.except_osv(_('Warning !'), _('Lead should be in \
-\'Open\' state before converting to Opportunity.'))
+\'Open\' or \'Pending\' state before converting to Opportunity.'))
return False
crm_lead2opportunity_partner()
diff --git a/addons/crm/wizard/crm_send_email.py b/addons/crm/wizard/crm_send_email.py
index 58aa729e454..3f1c1916585 100644
--- a/addons/crm/wizard/crm_send_email.py
+++ b/addons/crm/wizard/crm_send_email.py
@@ -26,6 +26,7 @@ from tools.translate import _
import base64
import itertools
import tools
+import re
class crm_send_new_email_attachment(osv.osv_memory):
_name = 'crm.send.mail.attachment'
@@ -47,8 +48,7 @@ class crm_send_new_email(osv.osv_memory):
'email_to' : fields.char('To', size=512, required=True),
'email_from' : fields.char('From', size=128, required=True),
'reply_to' : fields.char('Reply To', size=128, required=True, help="Reply-to of the Sales team defined on this case"),
- 'email_cc' : fields.char('CC', size=512, help="Carbon Copy: list of recipients that will receive"\
- " a copy of this mail, and future communication related to this case"),
+ 'email_cc' : fields.char('CC', size=512, help="Carbon Copy: list of recipients that will receive a copy of this mail"),
'subject': fields.char('Subject', size=512, required=True),
'body': fields.text('Message Body', required=True),
'state': fields.selection(crm.AVAILABLE_STATES, string='Set New State To', required=True),
@@ -105,7 +105,7 @@ class crm_send_new_email(osv.osv_memory):
ref_id = hist.ref_id
case = case_pool.browse(cr, uid, res_id, context=context)
emails = [obj.email_to]
- email_cc = obj.email_cc and obj.email_cc.split(',') or ''
+ email_cc = re.findall(r'([^ ,<@]+@[^> ,]+)', obj.email_cc)
emails = filter(None, emails)
body = obj.body
diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py
index 85dfc8b9dd0..1625cc2ae8b 100644
--- a/addons/crm_claim/crm_claim.py
+++ b/addons/crm_claim/crm_claim.py
@@ -74,7 +74,7 @@ class crm_claim(osv.osv, crm.crm_case):
'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \
# domain="[('partner_id','=',partner_id)]"
),
- 'email_cc': fields.text('Watchers Emails', size=252, help="These people will receive a copy of the future communication between partner and users by email"),
+ 'email_cc': fields.text('Watchers Emails', size=252, help="These addresses(Comma-separated) will receive a copy of the future communication between partner and users"),
'email_from': fields.char('Email', size=128, help="These people will receive email."),
'partner_name': fields.char("Employee's Name", size=64),
'partner_mobile': fields.char('Mobile', size=32),
diff --git a/addons/crm_fundraising/crm_fundraising.py b/addons/crm_fundraising/crm_fundraising.py
index 2fd7f4c6f52..1dd6211e915 100644
--- a/addons/crm_fundraising/crm_fundraising.py
+++ b/addons/crm_fundraising/crm_fundraising.py
@@ -46,7 +46,7 @@ class crm_fundraising(osv.osv, crm.crm_case):
'partner_id': fields.many2one('res.partner', 'Partner'),
'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \
domain="[('partner_id','=',partner_id)]"),
- 'email_cc': fields.text('Watchers Emails', size=252 , help="These people will receive a copy of the future communication between partner and users by email"),
+ 'email_cc': fields.text('Watchers Emails', size=252 , help="These addresses(Comma-separated) will receive a copy of the future communication between partner and users"),
'email_from': fields.char('Email', size=128, help="These people will receive email."),
'date_closed': fields.datetime('Closed', readonly=True),
'date': fields.datetime('Date'),
diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py
index 38352691db0..8d9985e5cb1 100644
--- a/addons/crm_helpdesk/crm_helpdesk.py
+++ b/addons/crm_helpdesk/crm_helpdesk.py
@@ -49,9 +49,7 @@ class crm_helpdesk(osv.osv, crm.crm_case):
'partner_id': fields.many2one('res.partner', 'Partner'),
'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \
domain="[('partner_id','=',partner_id)]"),
- 'email_cc': fields.text('Watchers Emails', size=252 , help="These people\
- will receive a copy of the future" \
-" communication between partner and users by email"),
+ 'email_cc': fields.text('Watchers Emails', size=252 , help="These addresses(Comma-separated) will receive a copy of the future communication between partner and users"),
'email_from': fields.char('Email', size=128, help="These people will receive email."),
'date': fields.datetime('Date'),
'ref' : fields.reference('Reference', selection=crm._links_get, size=128),
diff --git a/addons/event/__openerp__.py b/addons/event/__openerp__.py
index 634484deecb..452e6577e73 100644
--- a/addons/event/__openerp__.py
+++ b/addons/event/__openerp__.py
@@ -45,6 +45,7 @@
'init_xml': ['event_data.xml'],
'update_xml': [
'wizard/event_confirm_registration_view.xml',
+ 'wizard/event_confirm_view.xml',
'event_view.xml',
'report/report_event_registration_view.xml',
'event_sequence.xml',
diff --git a/addons/event/event.py b/addons/event/event.py
index d7daca5552a..a26960639db 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -26,7 +26,7 @@ import netsvc
import pooler
import time
import tools
-
+import decimal_precision as dp
class event_type(osv.osv):
""" Event Type """
@@ -41,16 +41,8 @@ class event_event(osv.osv):
"""Event"""
_name = 'event.event'
_description = __doc__
- _inherit = 'crm.case.section'
_order = 'date_begin'
- def _get_currency(self, cr, uid, context):
- user = self.pool.get('res.users').browse(cr, uid, [uid])[0]
- if user.company_id:
- return user.company_id.currency_id.id
- else:
- return self.pool.get('res.currency').search(cr, uid, [('rate','=',1.0)])[0]
-
def copy(self, cr, uid, id, default=None, context=None):
""" Copy record of Given id
@param id: Id of Event record.
@@ -87,14 +79,9 @@ class event_event(osv.osv):
def button_done(self, cr, uid, ids, context=None):
return self.write(cr, uid, ids, {'state': 'done'}, context=context)
- def button_confirm(self, cr, uid, ids, context=None):
- """This Funtion send reminder who had already confirmed their event registration.
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of Event IDs
- @param return: True
- """
+ def do_confirm(self, cr, uid, ids, context=None):
+ """ Confirm Event and send confirmation email to all register peoples
+ """
register_pool = self.pool.get('event.registration')
for event in self.browse(cr, uid, ids, context=context):
if event.mail_auto_confirm:
@@ -106,6 +93,39 @@ class event_event(osv.osv):
return self.write(cr, uid, ids, {'state': 'confirm'})
+ def button_confirm(self, cr, uid, ids, context=None):
+ """This Function Confirm Event.
+ @param ids: List of Event IDs
+ @param context: A standard dictionary for contextual values
+ @return: True
+ """
+ data_pool = self.pool.get('ir.model.data')
+ unconfirmed_ids = []
+ for event in self.browse(cr, uid, ids, context=context):
+ total_confirmed = event.register_current
+ if total_confirmed >= event.register_min or event.register_max == 0:
+ self.do_confirm(cr, uid, [event.id], context=context)
+ else:
+ unconfirmed_ids.append(event.id)
+ if unconfirmed_ids:
+ view_id = data_pool._get_id(cr, uid, 'event', 'view_event_confirm')
+ view_data = data_pool.browse(cr, uid, view_id)
+ view_id = view_data.res_id
+ context['event_ids'] = unconfirmed_ids
+ return {
+ 'name': _('Confirm Event'),
+ 'context': context,
+ 'view_type': 'form',
+ 'view_mode': 'tree,form',
+ 'res_model': 'event.confirm',
+ 'views': [(view_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ 'context': context,
+ 'nodestroy': True
+ }
+ return True
+
def _get_register(self, cr, uid, ids, fields, args, context=None):
"""Get Confirm or uncofirm register value.
@@ -122,7 +142,7 @@ class event_event(osv.osv):
res[event.id][field] = False
state = []
if 'register_current' in fields:
- state.append('open')
+ state += ['open', 'done']
if 'register_prospect' in fields:
state.append('draft')
@@ -169,77 +189,134 @@ class event_event(osv.osv):
return res
_columns = {
- 'type': fields.many2one('event.type', 'Type', help="Type of Event like Seminar, Exhibition, Conference, Training."),
- 'register_max': fields.integer('Maximum Registrations', help="Provide Maximun Number of Registrations"),
- 'register_min': fields.integer('Minimum Registrations', help="Providee Minimum Number of Registrations"),
- 'register_current': fields.function(_get_register, method=True, string='Confirmed Registrations', multi='register_current', help="Total of Open Registrations"),
- 'register_prospect': fields.function(_get_register, method=True, string='Unconfirmed Registrations', multi='register_prospect', help="Total of Prospect Registrations"),
- 'date_begin': fields.datetime('Beginning date', required=True, help="Beginning Date of Event"),
- 'date_end': fields.datetime('Closing date', required=True, help="Closing Date of Event"),
- 'state': fields.selection([('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, required=True, help='If event is created, the state is \'Draft\'.\n If event is confirmed for the particular dates the state is set to \'Confirmed\'.\
- \nIf the event is over, the state is set to \'Done\'.\n If event is cancelled the state is set to \'Cancelled\'.'),
- 'mail_auto_registr': fields.boolean('Mail Auto Register', help='Check this box if you want to use the automatic mailing for new registration'),
- 'mail_auto_confirm': fields.boolean('Mail Auto Confirm', help='Check this box if you want ot use the automatic confirmation emailing or the reminder'),
- 'mail_registr': fields.text('Registration Email', help='This email will be sent when someone subscribes to the event.'),
- 'mail_confirm': fields.text('Confirmation Email', help="This email will be sent when the event gets confimed or when someone subscribes to a confirmed event. This is also the email sent to remind someone about the event."),
- 'product_id': fields.many2one('product.product', 'Product', required=True, help="Product which is provided cost of event. Invoice of event will be created with this Product."),
- 'note': fields.text('Notes', help="Description or Summary of Event"),
- 'currency_id': fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)]}),
- "unit_price": fields.float('Cost'),
- 'main_speaker_id': fields.many2one('res.partner','Main Speaker'),
- 'speaker_ids':fields.many2many('res.partner', 'event_speaker_rel', 'speaker_id', 'partner_id', 'Other Speakers'),
- 'address_id': fields.many2one('res.partner.address','Location Room'),
- 'speaker_confirmed': fields.boolean('Speaker Confirmed'),
+ 'name': fields.char('Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}),
+ 'user_id': fields.many2one('res.users', 'Responsible User', readonly=False, states={'done': [('readonly', True)]}),
+ 'parent_id': fields.many2one('event.event', 'Parent Event', readonly=False, states={'done': [('readonly', True)]}),
+ 'section_id': fields.many2one('crm.case.section', 'Sale Team', readonly=False, states={'done': [('readonly', True)]}),
+ 'child_ids': fields.one2many('event.event', 'parent_id', 'Child Events', readonly=False, states={'done': [('readonly', True)]}),
+ 'reply_to': fields.char('Reply-To', size=64, readonly=False, states={'done': [('readonly', True)]}, help="The email address put in the 'Reply-To' of all emails sent by Open ERP"),
+ 'type': fields.many2one('event.type', 'Type', help="Type of Event like Seminar, Exhibition, Conference, Training.", readonly=False, states={'done': [('readonly', True)]}),
+ 'register_max': fields.integer('Maximum Registrations', help="Provide Maximun Number of Registrations", readonly=True, states={'draft': [('readonly', False)]}),
+ 'register_min': fields.integer('Minimum Registrations', help="Providee Minimum Number of Registrations", readonly=True, states={'draft': [('readonly', False)]}),
+ 'register_current': fields.function(_get_register, method=True, string='Confirmed Registrations', multi='register_current',
+ help="Total of Open and Done Registrations"),
+ 'register_prospect': fields.function(_get_register, method=True, string='Unconfirmed Registrations', multi='register_prospect',
+ help="Total of Prospect Registrations"),
+ 'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}),
+ 'date_begin': fields.datetime('Beginning date', required=True, help="Beginning Date of Event", readonly=True, states={'draft': [('readonly', False)]}),
+ 'date_end': fields.datetime('Closing date', required=True, help="Closing Date of Event", readonly=True, states={'draft': [('readonly', False)]}),
+ 'state': fields.selection([
+ ('draft', 'Draft'),
+ ('confirm', 'Confirmed'),
+ ('done', 'Done'),
+ ('cancel', 'Cancelled')],
+ 'State', readonly=True, required=True,
+ help='If event is created, the state is \'Draft\'.If event is confirmed for the particular dates the state is set to \'Confirmed\'. If the event is over, the state is set to \'Done\'.If event is cancelled the state is set to \'Cancelled\'.'),
+ 'mail_auto_registr': fields.boolean('Mail Auto Register', readonly=False, states={'done': [('readonly', True)]}, help='Check this box if you want to use the automatic mailing for new registration'),
+ 'mail_auto_confirm': fields.boolean('Mail Auto Confirm', readonly=False, states={'done': [('readonly', True)]}, help='Check this box if you want ot use the automatic confirmation emailing or the reminder'),
+ 'mail_registr': fields.text('Registration Email', readonly=False, states={'done': [('readonly', True)]}, help='This email will be sent when someone subscribes to the event.'),
+ 'mail_confirm': fields.text('Confirmation Email', readonly=False, states={'done': [('readonly', True)]}, help="This email will be sent when the event gets confimed or when someone subscribes to a confirmed event. This is also the email sent to remind someone about the event."),
+ 'product_id': fields.many2one('product.product', 'Product', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="Product which is provided cost of event. Invoice of event will be created with this Product."),
+ 'note': fields.text('Notes', help="Description or Summary of Event", readonly=False, states={'done': [('readonly', True)]}),
+ 'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', readonly=True, states={'draft': [('readonly', False)]}, help="Pricelist version for current event."),
+ "unit_price": fields.float('Registration Cost', digits_compute= dp.get_precision('Event Price'), readonly=True, states={'draft': [('readonly', False)]}),
+ 'main_speaker_id': fields.many2one('res.partner','Main Speaker', readonly=False, states={'done': [('readonly', True)]}),
+ 'speaker_ids':fields.many2many('res.partner', 'event_speaker_rel', 'speaker_id', 'partner_id', 'Other Speakers', readonly=False, states={'done': [('readonly', True)]}),
+ 'address_id': fields.many2one('res.partner.address','Location Address', readonly=False, states={'done': [('readonly', True)]}),
+ 'speaker_confirmed': fields.boolean('Speaker Confirmed', readonly=False, states={'done': [('readonly', True)]}),
'country_id': fields.related('address_id', 'country_id',
- type='many2one', relation='res.country', string='Country'),
- 'language': fields.char('Language',size=64),
+ type='many2one', relation='res.country', string='Country', readonly=False, states={'done': [('readonly', True)]}),
+ 'language': fields.char('Language',size=64, readonly=False, states={'done': [('readonly', True)]}),
+ 'note': fields.text('Description', readonly=False, states={'done': [('readonly', True)]}),
+ 'company_id': fields.many2one('res.company', 'Company', required=True, change_default=True, readonly=False, states={'done': [('readonly', True)]}),
}
_defaults = {
'state': 'draft',
- # 'code': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'event.event'),
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'event.event', context=c),
'user_id': lambda obj, cr, uid, context: uid,
- 'currency_id': _get_currency,
}
+ def _check_recursion(self, cr, uid, ids):
+ """
+ Checks for recursion level for event
+ """
+ level = 100
+
+ while len(ids):
+ cr.execute('select distinct parent_id from event_event where id IN %s', (tuple(ids),))
+ ids = filter(None, map(lambda x: x[0], cr.fetchall()))
+ if not level:
+ return False
+ level -= 1
+
+ return True
+
+ _constraints = [
+ (_check_recursion, 'Error ! You cannot create recursive event.', ['parent_id'])
+ ]
+
+ def do_team_change(self, cr, uid, ids, team_id, context=None):
+ """
+ On Change Callback: when team change, this is call.
+ on this function, take value of reply_to from selected team.
+ """
+ if not team_id:
+ return {}
+ if context is None:
+ context = {}
+ team_pool = self.pool.get('crm.case.section')
+ team = team_pool.browse(cr, uid, team_id, context=context)
+ res = {}
+ if team.reply_to:
+ res = {'value': {'reply_to': team.reply_to}}
+ return res
event_event()
class event_registration(osv.osv):
- """Event Registration"""
-
+ """Event Registration"""
_name= 'event.registration'
_description = __doc__
_inherit = 'crm.meeting'
+ def _amount_line(self, cr, uid, ids, field_name, arg, context=None):
+ cur_obj = self.pool.get('res.currency')
+ res = {}
+ context = context or {}
+ for line in self.browse(cr, uid, ids, context=context):
+ price = line.unit_price * line.nb_register
+ pricelist = line.event_id.pricelist_id or line.partner_invoice_id.property_product_pricelist
+ cur = pricelist and pricelist.currency_id or False
+ res[line.id] = cur and cur_obj.round(cr, uid, cur, price) or price
+ return res
+
_columns = {
- 'email_cc': fields.text('CC', size=252 , help="These \
-people will receive a copy of the future communication between partner \
-and users by email"),
- 'nb_register': fields.integer('Number of Registration', readonly=True, states={'draft': [('readonly', False)]}),
- 'event_id': fields.many2one('event.event', 'Event Related', required=True),
- "partner_invoice_id": fields.many2one('res.partner', 'Partner Invoiced'),
- "contact_id": fields.many2one('res.partner.contact', 'Partner Contact'), #TODO: filter only the contacts that have a function into the selected partner_id
- "unit_price": fields.float('Unit Price'),
- "badge_title": fields.char('Badge Title', size=128),
- "badge_name": fields.char('Badge Name', size=128),
- "badge_partner": fields.char('Badge Partner', size=128),
- "event_product": fields.char("Product Name", size=128, required=True),
- "tobe_invoiced": fields.boolean("To be Invoiced"),
+ 'name': fields.char('Summary', size=124, readonly=True, states={'draft': [('readonly', False)]}),
+ 'email_cc': fields.text('CC', size=252 , readonly=False, states={'done': [('readonly', True)]}, help="These people will receive a copy of the future communication between partner and users by email"),
+ 'nb_register': fields.integer('Quantity', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="Number of Registrations or Tickets"),
+ 'event_id': fields.many2one('event.event', 'Event Related', required=True, readonly=True, states={'draft': [('readonly', False)]}),
+ "partner_invoice_id": fields.many2one('res.partner', 'Partner Invoiced', readonly=True, states={'draft': [('readonly', False)]}),
+ "contact_id": fields.many2one('res.partner.contact', 'Partner Contact', readonly=False, states={'done': [('readonly', True)]}), #TODO: filter only the contacts that have a function into the selected partner_id
+ "unit_price": fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Event Price'), readonly=True, states={'draft': [('readonly', False)]}),
+ 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal', digits_compute= dp.get_precision('Event Price')),
+ "badge_ids": fields.one2many('event.registration.badge', 'registration_id', 'Badges', readonly=False, states={'done': [('readonly', True)]}),
+ "event_product": fields.char("Invoice Name", size=128, required=True, readonly=True, states={'draft': [('readonly', False)]}),
+ "tobe_invoiced": fields.boolean("To be Invoiced", readonly=True, states={'draft': [('readonly', False)]}),
"invoice_id": fields.many2one("account.invoice", "Invoice", readonly=True),
'date_closed': fields.datetime('Closed', readonly=True),
'ref': fields.reference('Reference', selection=crm._links_get, size=128),
'ref2': fields.reference('Reference 2', selection=crm._links_get, size=128),
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('history', '=', True),('model','=',_name)]),
'log_ids': fields.one2many('mailgate.message', 'res_id', 'Logs', domain=[('history', '=', False),('model','=',_name)]),
- 'currency_id': fields.many2one('res.currency', 'Currency', readonly=True),
+ 'section_id': fields.related('event_id', 'section_id', type='many2one', relation='crm.case.section', string='Sale Team', store=True, readonly=True, states={'draft':[('readonly',False)]}),
+ 'company_id': fields.related('event_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True, states={'draft':[('readonly',False)]}),
}
_defaults = {
'nb_register': 1,
'tobe_invoiced': True,
- 'name': 'Registration',
- # 'currency_id': _get_currency,
+ 'date': time.strftime('%Y-%m-%d %H:%M:%S')
}
def _make_invoice(self, cr, uid, reg, lines, context=None):
@@ -323,16 +400,38 @@ and users by email"),
res = self._make_invoice(cr, uid, val[0][0], [v for k , v in val], context=context)
for k , v in val:
- self.write(cr, uid, [k.id], {'state': 'done', 'invoice_id': res}, context=context)
+ self.do_close(cr, uid, [k.id], context={'invoice_id': res})
else:
for k , v in val:
res = self._make_invoice(cr, uid, k, [v], context=context)
- self.write(cr, uid, [k.id], {'state': 'done', 'invoice_id': res}, context=context)
+ self.do_close(cr, uid, [k.id], context={'invoice_id': res})
if res: new_invoice_ids.append(res)
return new_invoice_ids
+ def do_open(self, cr, uid, ids, context=None):
+ """ Open Registration
+ """
+ res = self.write(cr, uid, ids, {'state': 'open'}, context=context)
+ self.mail_user(cr, uid, ids)
+ self._history(cr, uid, ids, _('Open'))
+ return res
+
+ def do_close(self, cr, uid, ids, context=None):
+ """ Close Registration
+ """
+ if not context:
+ context = {}
+ invoice_id = context.get('invoice_id', False)
+ values = {'state': 'done', 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')}
+ msg = _('Done')
+ if invoice_id:
+ values['invoice_id'] = invoice_id
+ res = self.write(cr, uid, ids, values)
+ self._history(cr, uid, ids, msg)
+ return res
+
def check_confirm(self, cr, uid, ids, context=None):
"""This Function Open Event Registration and send email to user.
@param ids: List of Event registration's IDs
@@ -344,9 +443,7 @@ and users by email"),
for registration in self.browse(cr, uid, ids, context=context):
total_confirmed = registration.event_id.register_current + registration.nb_register
if total_confirmed <= registration.event_id.register_max or registration.event_id.register_max == 0:
- self.write(cr, uid, [registration.id], {'state': 'open'}, context=context)
- self.mail_user(cr, uid, [registration.id])
- self._history(cr, uid, [registration], _('Open'))
+ self.do_open(cr, uid, [registration.id], context)
else:
unconfirmed_ids.append(registration.id)
if unconfirmed_ids:
@@ -368,12 +465,35 @@ and users by email"),
}
return True
- def button_reg_close(self, cr, uid, ids, *args):
+ def button_reg_close(self, cr, uid, ids, context=None):
"""This Function Close Event Registration.
"""
- registrations = self.browse(cr, uid, ids)
- self._history(cr, uid, registrations, _('Done'))
- self.write(cr, uid, ids, {'state': 'done', 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')})
+ if not context:
+ context = {}
+ data_pool = self.pool.get('ir.model.data')
+ unclosed_ids = []
+ for registration in self.browse(cr, uid, ids, context=context):
+ if registration.tobe_invoiced and not registration.invoice_id:
+ unclosed_ids.append(registration.id)
+ else:
+ self.do_close(cr, uid, [registration.id])
+ if unclosed_ids:
+ view_id = data_pool._get_id(cr, uid, 'event', 'view_event_make_invoice')
+ view_data = data_pool.browse(cr, uid, view_id)
+ view_id = view_data.res_id
+ context['active_ids'] = unclosed_ids
+ return {
+ 'name': _('Close Registration'),
+ 'context': context,
+ 'view_type': 'form',
+ 'view_mode': 'tree,form',
+ 'res_model': 'event.make.invoice',
+ 'views': [(view_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ 'context': context,
+ 'nodestroy': True
+ }
return True
def button_reg_cancel(self, cr, uid, ids, *args):
@@ -391,7 +511,6 @@ and users by email"),
event = event_obj.browse(cr, uid, values['event_id'], context=context)
values['date_deadline']= event.date_begin
values['description']= event.mail_confirm
- values['currency_id'] = event.currency_id.id
res = super(event_registration, self).create(cr, uid, values, context=context)
registrations = self.browse(cr, uid, [res], context=context)
self._history(cr, uid, registrations, _('Created'))
@@ -414,32 +533,35 @@ and users by email"),
if not context:
context = {}
- for reg_id in self.browse(cr, uid, ids):
- src = reg_id.event_id.reply_to or False
- dest = []
- if reg_id.email_from:
- dest += [reg_id.email_from]
- if reg_id.email_cc:
- dest += [reg_id.email_cc]
- if dest and src:
- if confirm:
- tools.email_send(src, dest,
- _('Auto Confirmation: [%s] %s') %(reg_id.id, reg_id.name),
- reg_id.event_id.mail_confirm,
- openobject_id = reg_id.id)
- elif reg_id.event_id.mail_auto_confirm or reg_id.event_id.mail_auto_registr:
- if reg_id.event_id.state in ['draft', 'fixed', 'open', 'confirm', 'running'] and reg_id.event_id.mail_auto_registr:
- tools.email_send(src, dest,
- _('Auto Registration: [%s] %s') %(reg_id.id, reg_id.name),
- reg_id.event_id.mail_registr, openobject_id = reg_id.id)
- if (reg_id.event_id.state in ['confirm', 'running']) and reg_id.event_id.mail_auto_confirm:
- tools.email_send(src, dest,
- _('Auto Confirmation: [%s] %s') %(reg_id.id, reg_id.name),
- reg_id.event_id.mail_confirm, openobject_id = reg_id.id)
-
- if not src:
- raise osv.except_osv(_('Error!'), _('You must define a reply-to address in order to mail the participant. You can do this in the Mailing tab of your event. Note that this is also the place where you can configure your event to not send emails automaticly while registering'))
-
+ for regestration in self.browse(cr, uid, ids, context=context):
+ src = regestration.event_id.reply_to or False
+ email_to = []
+ email_cc = []
+ if regestration.email_from:
+ email_to = regestration.email_from
+ if regestration.email_cc:
+ email_cc += [regestration.email_cc]
+ if not (email_to and email_cc):
+ continue
+ subject = ""
+ body = ""
+ if confirm:
+ subject = _('Auto Confirmation: [%s] %s') %(regestration.id, regestration.name)
+ body = regestration.event_id.mail_confirm
+ elif regestration.event_id.mail_auto_confirm or regestration.event_id.mail_auto_registr:
+ if regestration.event_id.state in ['draft', 'fixed', 'open', 'confirm', 'running'] and regestration.event_id.mail_auto_registr:
+ subject = _('Auto Registration: [%s] %s') %(regestration.id, regestration.name)
+ body = regestration.event_id.mail_registr
+ if (regestration.event_id.state in ['confirm', 'running']) and regestration.event_id.mail_auto_confirm:
+ subject = _('Auto Confirmation: [%s] %s') %(regestration.id, regestration.name)
+ body = regestration.event_id.mail_confirm
+ if subject or body:
+ tools.email_send(src, email_to, subject, body, email_cc = email_cc, openobject_id = regestration.id)
+ self.history(cr, uid, [regestration], subject, history=True, \
+ email=email_to, details=body, \
+ subject=subject, email_from=src, \
+ email_cc=', '.join(email_cc))
+
return True
def mail_user_confirm(self, cr, uid, ids, context=None):
@@ -451,22 +573,7 @@ and users by email"),
def _create_invoice_lines(self, cr, uid, ids, vals):
""" Create account Invoice line for Registration Id.
"""
- return self.pool.get('account.invoice.line').create(cr, uid, vals)
-
- def onchange_badge_name(self, cr, uid, ids, badge_name):
- """This function returns value of Registration Name based on Partner Badge Name.
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of Registration IDs
- @param badge_name: Badge Name
- """
-
- data ={}
- if not badge_name:
- return data
- data['name'] = 'Registration: ' + badge_name
- return {'value': data}
+ return self.pool.get('account.invoice.line').create(cr, uid, vals)
def onchange_contact_id(self, cr, uid, ids, contact, partner):
@@ -486,15 +593,11 @@ and users by email"),
job_obj = self.pool.get('res.partner.job')
contact_id = contact_obj.browse(cr, uid, contact)
- data['badge_name'] = contact_id.name
- data['badge_title'] = contact_id.title.name
if partner:
partner_addresses = addr_obj.search(cr, uid, [('partner_id', '=', partner)])
job_ids = job_obj.search(cr, uid, [('contact_id', '=', contact), ('address_id', 'in', partner_addresses)])
if job_ids:
data['email_from'] = job_obj.browse(cr, uid, job_ids[0]).email
- d = self.onchange_badge_name(cr, uid, ids, data['badge_name'])
- data.update(d['value'])
return {'value': data}
def onchange_event(self, cr, uid, ids, event_id, partner_invoice_id):
@@ -515,20 +618,17 @@ and users by email"),
res_obj = self.pool.get('res.partner')
data_event = event_obj.browse(cr, uid, event_id)
- context['currency_id'] = data_event.currency_id.id
+ res = {'value': {'unit_price': False, 'event_product': False, 'user_id': False}}
if data_event.user_id.id:
- return {'value': {'user_id':data_event.user_id.id}}
-
+ res['value'].update({'user_id':data_event.user_id.id})
if data_event.product_id:
- if not partner_invoice_id:
- unit_price=prod_obj.price_get(cr, uid, [data_event.product_id.id], context=context)[data_event.product_id.id]
- return {'value': {'unit_price': unit_price, 'event_product': data_event.product_id.name, 'currency_id': data_event.currency_id.id}}
- data_partner = res_obj.browse(cr, uid, partner_invoice_id)
- context.update({'partner_id': data_partner})
- unit_price = prod_obj._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': data_partner.property_product_pricelist.id})[data_event.product_id.id]
- return {'value': {'unit_price': unit_price, 'event_product': data_event.product_id.name, 'currency_id': data_event.currency_id.id}}
-
- return {'value': {'unit_price': False, 'event_product': False}}
+ pricelist_id = data_event.pricelist_id and data_event.pricelist_id.id or False
+ if partner_invoice_id:
+ partner = res_obj.browse(cr, uid, partner_invoice_id, context=context)
+ pricelist_id = pricelist_id or partner.property_product_pricelist.id
+ unit_price = prod_obj._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': pricelist_id})[data_event.product_id.id]
+ res['value'].update({'unit_price': unit_price, 'event_product': data_event.product_id.name})
+ return res
def onchange_partner_id(self, cr, uid, ids, part, event_id, email=False):
"""This function returns value of Patner Invoice id, Unit Price, badget title based on partner and Event.
@@ -542,8 +642,8 @@ and users by email"),
job_obj = self.pool.get('res.partner.job')
res_obj = self.pool.get('res.partner')
- data={}
- data['badge_partner'] = data['contact_id'] = data['partner_invoice_id'] = data['email_from'] = data['badge_title'] = data['badge_name'] = False
+ data = {}
+ data['contact_id'], data['partner_invoice_id'], data['email_from'] = (False, False, False)
if not part:
return {'value': data}
data['partner_invoice_id']=part
@@ -559,9 +659,7 @@ and users by email"),
data['contact_id'] = job_obj.browse(cr, uid, job_ids[0]).contact_id.id
d = self.onchange_contact_id(cr, uid, ids, data['contact_id'], part)
data.update(d['value'])
- partner_data = res_obj.browse(cr, uid, part)
- data['badge_partner'] = partner_data.name
-
+ partner_data = res_obj.browse(cr, uid, part)
return {'value': data}
def onchange_partner_invoice_id(self, cr, uid, ids, event_id, partner_invoice_id):
@@ -584,17 +682,26 @@ and users by email"),
return {'value': data}
data_event = event_obj.browse(cr, uid, event_id)
if data_event.product_id:
- data['event_product']=data_event.product_id.name
- if not partner_invoice_id:
- data['unit_price']=prod_obj.price_get(cr, uid, [data_event.product_id.id], context=context)[data_event.product_id.id]
- return {'value': data}
- data_partner = res_obj.browse(cr, uid, partner_invoice_id)
- context.update({'partner_id': data_partner})
- data['unit_price'] = prod_obj._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': data_partner.property_product_pricelist.id})[data_event.product_id.id]
- return {'value': data}
+ data['event_product'] = data_event.product_id.name
+ pricelist_id = data_event.pricelist_id and data_event.pricelist_id.id or False
+ if partner_invoice_id:
+ partner = res_obj.browse(cr, uid, partner_invoice_id, context=context)
+ pricelist_id = pricelist_id or partner.property_product_pricelist.id
+ data['unit_price'] = prod_obj._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': pricelist_id})[data_event.product_id.id]
return {'value': data}
event_registration()
+class event_registration_badge(osv.osv):
+ _name = 'event.registration.badge'
+ _description = __doc__
+ _columns = {
+ 'registration_id': fields.many2one('event.registration', 'Registration', required=True),
+ "title": fields.char('Title', size=128),
+ "name": fields.char('Name', size=128, required=True),
+ "address_id": fields.many2one('res.partner.address', 'Address'),
+ }
+event_registration_badge()
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/event/event_demo.xml b/addons/event/event_demo.xml
index 88927cd0f25..d390708b58c 100644
--- a/addons/event/event_demo.xml
+++ b/addons/event/event_demo.xml
@@ -55,8 +55,8 @@
Concert of Bon Jovi
- 2008-01-01 19:00:00
- 2008-01-01 23:00:00
+
+
68.00
@@ -64,33 +64,11 @@
draft
-
Opera of Verdi
- 2008-03-05 18:00:00
- 2008-03-05 21:00:00
+
+
24.00
@@ -101,8 +79,8 @@
Conference on ERP Buisness
- 2008-09-09 14:00:00
- 2008-09-09 16:30:00
+
+
15.50
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index 9caaae6e722..f7586c31f1d 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -45,31 +45,33 @@
@@ -233,7 +280,6 @@
-
event.registration.tree
@@ -241,12 +287,15 @@
tree
-
-
+
+
+
+
+
@@ -258,31 +307,29 @@
-
-
-
-
-
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
@@ -290,10 +337,32 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -333,33 +402,7 @@
name="%(crm.action_crm_send_mail)d"
context="{'mail':'new', 'model': 'event.registration'}"
icon="gtk-go-forward" type="action" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/addons/event/security/ir.model.access.csv b/addons/event/security/ir.model.access.csv
index a59748aa534..b8db28fbef2 100644
--- a/addons/event/security/ir.model.access.csv
+++ b/addons/event/security/ir.model.access.csv
@@ -9,3 +9,5 @@
"access_crm_case_section_manager","crm.case.section manager","crm.model_crm_case_section","event.group_event_manager",1,1,1,1
"access_product_product","product.product.product manager","product.model_product_product","event.group_event_manager",1,1,1,1
"access_report_event_registration","report.event.registration","model_report_event_registration","event.group_event_manager",1,1,1,1
+"access_event_registration_badge","event.registration.badge","model_event_registration_badge","event.group_event_subscriber",1,1,1,1
+"access_event_registration_badge","event.registration.badge","model_event_registration_badge","event.group_event_manager",1,1,1,1
diff --git a/addons/event/test/test_event.yml b/addons/event/test/test_event.yml
index 32fe487762d..c3d89ebd5cb 100644
--- a/addons/event/test/test_event.yml
+++ b/addons/event/test/test_event.yml
@@ -54,7 +54,6 @@
we create it with a "Conference on OpenERP Offshore Business" event and provide "Beginning date", "Ending Date" and "Product" as Concert Ticket.
-
!record {model: event.event, id: event_event_conference0}:
- code: C/004
date_begin: '2010-06-07 13:39:00'
date_end: '2010-06-10 13:39:00'
name: Conference on OpenERP Offshore Business.
@@ -94,8 +93,6 @@
I create New Registration for "Conference on OpenERP Offshore Business.
-
!record {model: event.registration, id: event_registration_registrationjacot0}:
- badge_name: Jacot
- badge_partner: Mark Johnson
contact_id: base_contact.res_partner_contact_jacot0
date_deadline: '2010-06-07 13:39:00'
event_id: event.event_event_conference0
@@ -128,8 +125,6 @@
They create New registraion for This event.
-
!record {model: event.registration, id: event_registration_registrationzen0}:
- badge_name: Zen
- badge_partner: China Export
contact_id: base_contact.res_partner_contact_zen0
date_deadline: '2010-06-07 13:39:00'
event_id: event.event_event_conference0
@@ -149,8 +144,6 @@
Third person create New Registration for "Conference on OpenERP Offshore Business" event.
-
!record {model: event.registration, id: event_registration_registrationpassot0}:
- badge_name: Passot
- badge_partner: Mediapole SPRL
contact_id: base_contact.res_partner_contact_passot0
date_deadline: '2010-06-07 13:39:00'
email_from: info@mediapole.net
diff --git a/addons/event/wizard/__init__.py b/addons/event/wizard/__init__.py
index 945e5f84607..fbc44f417f4 100644
--- a/addons/event/wizard/__init__.py
+++ b/addons/event/wizard/__init__.py
@@ -21,5 +21,6 @@
import event_make_invoice
import event_confirm_registration
+import event_confirm
import partner_event_registration
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/event/wizard/event_confirm.py b/addons/event/wizard/event_confirm.py
new file mode 100644
index 00000000000..936d5dc8d72
--- /dev/null
+++ b/addons/event/wizard/event_confirm.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+from osv import fields, osv
+from tools.translate import _
+
+class event_confirm(osv.osv_memory):
+ """
+ Confirm Event
+ """
+ _name = "event.confirm"
+ _description = "Event Confirmation"
+
+ _columns = {
+ 'msg': fields.text('Message', readonly=True),
+ }
+ _defaults = {
+ 'msg': _('Total Registrations of this Event could not reached Minimum Registration Limit. What do you want to do?')
+ }
+
+ def confirm(self, cr, uid, ids, context):
+ event_pool = self.pool.get('event.event')
+ event_ids = context.get('event_ids', [])
+ event_pool.do_confirm(cr, uid, event_ids, context=context)
+ return {}
+
+event_confirm()
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/event/wizard/event_confirm_registration.py b/addons/event/wizard/event_confirm_registration.py
index 0e175979084..f115c630bc4 100644
--- a/addons/event/wizard/event_confirm_registration.py
+++ b/addons/event/wizard/event_confirm_registration.py
@@ -50,8 +50,8 @@ class event_confirm_registration(osv.osv_memory):
register_max = registration.event_id.register_max
if registration.event_id.id not in overlimit_event_ids:
overlimit_event_ids.append(registration.event_id.id)
- msg += _("The Event '%s' is reached Maximum Limit(%s). It has %s Confirmed registration\n") \
- %(registration.event_id.name, register_max, total_confirmed)
+ msg += _("The Event '%s' is reached Maximum Limit(%s).") \
+ %(registration.event_id.name, register_max)
if 'msg' in fields:
res.update({'msg': msg})
@@ -60,10 +60,7 @@ class event_confirm_registration(osv.osv_memory):
def confirm(self, cr, uid, ids, context):
registration_pool = self.pool.get('event.registration')
registration_ids = context.get('registration_ids', [])
- for reg_id in registration_ids:
- registration_pool.write(cr, uid, [reg_id], {'state':'open', })
- registration_pool._history(cr, uid, [reg_id], _('Open'))
- registration_pool.mail_user(cr, uid, [reg_id])
+ registration_pool.do_open(cr, uid, registration_ids, context=context)
return {}
event_confirm_registration()
diff --git a/addons/event/wizard/event_confirm_view.xml b/addons/event/wizard/event_confirm_view.xml
new file mode 100644
index 00000000000..fa3e8e73ef2
--- /dev/null
+++ b/addons/event/wizard/event_confirm_view.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Event Confirmation
+ event.confirm
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Event Confirmation
+ ir.actions.act_window
+ event.confirm
+ form
+ form
+
+ {'record_id' : active_id}
+ new
+
+
+
+
diff --git a/addons/event_project/event_view.xml b/addons/event_project/event_view.xml
index 45baae0f846..1af9e098127 100644
--- a/addons/event_project/event_view.xml
+++ b/addons/event_project/event_view.xml
@@ -10,21 +10,11 @@
form
-
+
+
-
-
-
-
-
- Events
- event.event
-
- form
-
-
@@ -36,10 +26,10 @@
-
+
+
-
\n"
+"PO-Revision-Date: 2010-07-15 07:49+0000\n"
+"Last-Translator: Salvatore Udda \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: 2010-06-22 04:17+0000\n"
+"X-Launchpad-Export-Date: 2010-07-16 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_attendance
@@ -97,7 +97,7 @@ msgstr "Stampa Rapporto Errori Presenze"
#. module: hr_attendance
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Nome di modello non valido nella definizione dell'azione."
#. module: hr_attendance
#: model:ir.actions.wizard,name:hr_attendance.print_week
@@ -140,17 +140,17 @@ msgstr "Motivi Azione"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "March"
-msgstr ""
+msgstr "Marzo"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "August"
-msgstr ""
+msgstr "Agosto"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "May"
-msgstr ""
+msgstr "Maggio"
#. module: hr_attendance
#: wizard_field:hr.si_so,so_ask_si,last_time:0
@@ -160,7 +160,7 @@ msgstr "Ultima Entrata"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "June"
-msgstr ""
+msgstr "Giugno"
#. module: hr_attendance
#: model:ir.actions.wizard,name:hr_attendance.print_month
@@ -203,7 +203,7 @@ msgstr "Data"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "July"
-msgstr ""
+msgstr "Luglio"
#. module: hr_attendance
#: wizard_view:hr.si_so,si_ask_so:0
@@ -238,12 +238,12 @@ msgstr "Assente"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "February"
-msgstr ""
+msgstr "Febbraio"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "October"
-msgstr ""
+msgstr "Ottobre"
#. module: hr_attendance
#: wizard_field:hr.si_so,si_ask_so,last_time:0
@@ -285,12 +285,12 @@ msgstr "Stato Attuale"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "January"
-msgstr ""
+msgstr "Gennaio"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "April"
-msgstr ""
+msgstr "Aprile"
#. module: hr_attendance
#: model:ir.actions.act_window,name:hr_attendance.open_view_attendance
@@ -324,7 +324,7 @@ msgstr "Motivazioni Presenza"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "November"
-msgstr ""
+msgstr "Novembre"
#. module: hr_attendance
#: wizard_view:hr.attendance.report,init:0
@@ -334,7 +334,7 @@ msgstr ""
#. module: hr_attendance
#: wizard_field:hr.attendance.report,init,max_delay:0
msgid "Max. Delay (Min)"
-msgstr ""
+msgstr "Ritardo Massimo (min.)"
#. module: hr_attendance
#: wizard_view:hr.attendance.print_week,init:0
@@ -359,12 +359,12 @@ msgstr ""
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "September"
-msgstr ""
+msgstr "Settembre"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "December"
-msgstr ""
+msgstr "Dicembre"
#. module: hr_attendance
#: view:hr.attendance:0
@@ -374,12 +374,12 @@ msgstr "Presenza Dipendente"
#. module: hr_attendance
#: wizard_view:hr.attendance.print_month,init:0
msgid "Select a month"
-msgstr ""
+msgstr "Selezionare un mese"
#. module: hr_attendance
#: wizard_field:hr.attendance.print_month,init,month:0
msgid "Month"
-msgstr ""
+msgstr "Mese"
#. module: hr_attendance
#: model:ir.module.module,description:hr_attendance.module_meta_information
@@ -394,7 +394,7 @@ msgstr "Report Errori Presenze"
#. module: hr_attendance
#: wizard_field:hr.attendance.print_month,init,year:0
msgid "Year"
-msgstr ""
+msgstr "Anno"
#. module: hr_attendance
#: wizard_button:hr.attendance.print_month,init,end:0
diff --git a/addons/partner_geo_assign/__openerp__.py b/addons/partner_geo_assign/__openerp__.py
index ccfe6ba7c45..cf57609b4a6 100644
--- a/addons/partner_geo_assign/__openerp__.py
+++ b/addons/partner_geo_assign/__openerp__.py
@@ -32,7 +32,6 @@ based on geolocalization.
'depends': ['crm'],
'data': [
'res_partner_view.xml',
- 'crm_lead_view.xml',
],
'installable': True,
'active': False,
diff --git a/addons/project_planning/project_planning.py b/addons/project_planning/project_planning.py
index 69dfde4e6bf..38fadb88f5d 100644
--- a/addons/project_planning/project_planning.py
+++ b/addons/project_planning/project_planning.py
@@ -214,7 +214,7 @@ class project_task(osv.osv):
def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False):
if not context:
- context = context
+ context = {}
if not context.get('planning'):
return super(project_task,self).search(cr, user, args, offset, limit, order, context)
cr.execute(" SELECT t.id, t.name \
@@ -498,7 +498,7 @@ class report_account_analytic_planning_stat(osv.osv):
WHERE user_id=%s and account_id=%s and date>=%s and date<=%s''', (line.user_id.id, line.account_id.id, line.planning_id.date_from, line.planning_id.date_to))
else:
cr.execute('SELECT sum(unit_amount) FROM account_analytic_line WHERE account_id=%s AND date>=%s AND date<=%s', (line.account_id.id, line.planning_id.date_from, line.planning_id.date_to))
-
+
sum = cr.fetchone()
if sum and sum[0]:
result[line.id] = sum[0] * div2
diff --git a/addons/project_scrum/project_scrum_demo.xml b/addons/project_scrum/project_scrum_demo.xml
index a4fad8eb307..d162a396abe 100644
--- a/addons/project_scrum/project_scrum_demo.xml
+++ b/addons/project_scrum/project_scrum_demo.xml
@@ -247,16 +247,7 @@ Demo :Bugfix - memory leak
-
-
-
- Create a script for migration and testing
-
-
-
-
-
-
+
Add on top or bottom and shortcuts
diff --git a/addons/purchase/i18n/pt_BR.po b/addons/purchase/i18n/pt_BR.po
index 6109fb02cbf..9df1b629088 100644
--- a/addons/purchase/i18n/pt_BR.po
+++ b/addons/purchase/i18n/pt_BR.po
@@ -8,13 +8,14 @@ msgstr ""
"Project-Id-Version: pt_BR\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-10-02 17:40+0000\n"
-"Last-Translator: Cristiano Korndörfer \n"
+"PO-Revision-Date: 2010-07-15 22:07+0000\n"
+"Last-Translator: Renato Lima - http://www.akretion.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: 2010-06-22 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-07-16 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: purchase
@@ -30,42 +31,42 @@ msgstr ""
#. module: purchase
#: field:purchase.order,location_id:0
msgid "Destination"
-msgstr ""
+msgstr "Destino"
#. module: purchase
#: selection:purchase.order,invoice_method:0
msgid "From Picking"
-msgstr ""
+msgstr "Da Lista de Separação"
#. module: purchase
#: rml:purchase.order:0
msgid "Validated By"
-msgstr ""
+msgstr "Validado Por"
#. module: purchase
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Nome de modelo inválido na definição da ação"
#. module: purchase
#: field:purchase.order,partner_id:0
msgid "Supplier"
-msgstr ""
+msgstr "Fornecedor"
#. module: purchase
#: view:purchase.order:0
msgid "Delivery"
-msgstr ""
+msgstr "Entrega"
#. module: purchase
#: field:purchase.order.line,product_qty:0
msgid "Quantity"
-msgstr ""
+msgstr "Quantidade"
#. module: purchase
#: selection:purchase.order,invoice_method:0
msgid "From Order"
-msgstr ""
+msgstr "Da Ordem"
#. module: purchase
#: model:process.node,name:purchase.process_node_confirmpurchaseorder0
@@ -97,7 +98,7 @@ msgstr ""
#. module: purchase
#: rml:purchase.order:0
msgid "Fax :"
-msgstr ""
+msgstr "Fax :"
#. module: purchase
#: model:process.transition,note:purchase.process_transition_productrecept0
@@ -114,12 +115,12 @@ msgstr ""
#. module: purchase
#: model:process.process,name:purchase.process_process_purchaseprocess0
msgid "Purchase Process"
-msgstr ""
+msgstr "Processo de Compras"
#. module: purchase
#: model:process.transition,name:purchase.process_transition_invoicefrompackinglist0
msgid "Invoice from Packing list"
-msgstr ""
+msgstr "Faturar a partir da lista de Separação"
#. module: purchase
#: view:purchase.order:0
@@ -153,6 +154,7 @@ msgstr "Notas"
#. module: purchase
#: rml:purchase.order:0
#: field:purchase.order,amount_tax:0
+#: view:purchase.order.line:0
#: field:purchase.order.line,taxes_id:0
msgid "Taxes"
msgstr ""
@@ -293,7 +295,7 @@ msgstr ""
#: model:process.node,name:purchase.process_node_draftpurchaseorder0
#: model:process.node,name:purchase.process_node_draftpurchaseorder1
msgid "RFQ"
-msgstr ""
+msgstr "RFQ"
#. module: purchase
#: selection:purchase.order,state:0
@@ -876,3 +878,56 @@ msgstr ""
#: view:purchase.order.line:0
msgid "Stock Moves"
msgstr ""
+
+#, python-format
+#~ msgid "No Pricelist !"
+#~ msgstr "Sem Lista de Preços !"
+
+#, python-format
+#~ msgid "Wrong Product UOM !"
+#~ msgstr "UdM do Produto errada !"
+
+#, python-format
+#~ msgid "Error !"
+#~ msgstr "Erro !"
+
+#, python-format
+#~ msgid "Invalid action !"
+#~ msgstr "Ação Inválida !"
+
+#, python-format
+#~ msgid ""
+#~ "You have to select a product UOM in the same category than the purchase UOM "
+#~ "of the product"
+#~ msgstr ""
+#~ "Deve-se selecionar uma UdM do produto da mesma categoria que a UdM de compra "
+#~ "do produto"
+
+#, python-format
+#~ msgid "Could not cancel this purchase order !"
+#~ msgstr "Não é possível cancelar esta ordem de compra!"
+
+#, python-format
+#~ msgid "No Partner!"
+#~ msgstr "Sem Parceiro!"
+
+#, python-format
+#~ msgid "Could not cancel purchase order !"
+#~ msgstr "Não foi possível cancelar a ordem de compra!"
+
+#, python-format
+#~ msgid "You must first cancel all invoices attached to this purchase order."
+#~ msgstr ""
+#~ "Primeiro deve-se cancelar todas as faturas associadas a esta ordem de "
+#~ "compra."
+
+#, python-format
+#~ msgid "There is no expense account defined for this product: \"%s\" (id:%d)"
+#~ msgstr ""
+#~ "No existe conta de despesas definida para este produto: \"%s\" (id:%d)"
+
+#, python-format
+#~ msgid "You must first cancel all packing attached to this purchase order."
+#~ msgstr ""
+#~ "Primeiramente deve-se cancelar todas as embalagens associadas a esta ordem "
+#~ "de compra."