diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 6e770864799..4cadfdfe5fe 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_invoice_workflow.xml b/addons/account/account_invoice_workflow.xml
index 917f004e7f0..ba8d1ba2bc8 100644
--- a/addons/account/account_invoice_workflow.xml
+++ b/addons/account/account_invoice_workflow.xml
@@ -12,17 +12,19 @@
True
draft
+
-
-
- proforma
- action_move_create()
-write({'state':'proforma'})
- function
-
+
+
+
+
+
+
+
+
@@ -70,28 +72,28 @@ write({'state':'cancel'})
-->
-
-
-
- invoice_proforma
-
+
+
+
+
+
invoice_open
-
-
-
- invoice_open
-
-
-
-
- account.move.line
- move_line_id_payment_get()
- test_paid()
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -104,11 +106,11 @@ write({'state':'cancel'})
invoice_cancel
-
-
-
- invoice_cancel
-
+
+
+
+
+
@@ -124,8 +126,8 @@ write({'state':'cancel'})
invoice_cancel
-
-
+
+
account.move.line
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 b89ee255daa..236870572fe 100644
--- a/addons/account/invoice.py
+++ b/addons/account/invoice.py
@@ -300,7 +300,7 @@ class account_invoice(osv.osv):
'account.move.reconcile': (_get_invoice_from_reconcile, None, 50),
}, help="The Ledger Postings of the invoice have been reconciled with Ledger Postings of the payment(s)."),
'partner_bank': fields.many2one('res.partner.bank', 'Bank Account',
- help='The bank account to pay to or to be paid from', readonly=True, states={'draft':[('readonly',False)]}),
+ help='Bank Account Number, Company bank account if Invoice is customer or supplier refund, otherwise Parner bank account number.', readonly=True, states={'draft':[('readonly',False)]}),
'move_lines':fields.function(_get_lines , method=True, type='many2many', relation='account.move.line', string='Entry Lines'),
'residual': fields.function(_amount_residual, method=True, digits_compute=dp.get_precision('Account'), string='Residual',
store={
@@ -892,7 +892,7 @@ class account_invoice(osv.osv):
self.write(cr, uid, [inv.id], {'move_id': move_id,'period_id':period_id, 'move_name':new_move_name})
self.pool.get('account.move').post(cr, uid, [move_id])
self._log_event(cr, uid, ids)
-
+
return True
def line_get_convert(self, cr, uid, x, part, date, context=None):
@@ -925,11 +925,11 @@ class account_invoice(osv.osv):
reference = obj_inv.reference
if not number:
tmp_context = {
- 'fiscalyear_id': inv.period_id.fiscalyear_id.id
+ 'fiscalyear_id': obj_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,
+ if obj_inv.journal_id.invoice_sequence_id:
+ sequence_id = obj_inv.journal_id.invoice_sequence_id.id
+ number = self.pool.get('ir.sequence').get_id(cr, uid,
sequence_id,
'id',
context=tmp_context)
diff --git a/addons/account/process/customer_invoice_process.xml b/addons/account/process/customer_invoice_process.xml
index c69b8008961..172de7b7b1c 100644
--- a/addons/account/process/customer_invoice_process.xml
+++ b/addons/account/process/customer_invoice_process.xml
@@ -125,9 +125,9 @@
-
-
-
+
+
+
@@ -154,7 +154,7 @@
-
+
diff --git a/addons/account/process/supplier_invoice_process.xml b/addons/account/process/supplier_invoice_process.xml
index b3ec1676691..e24431c48b4 100644
--- a/addons/account/process/supplier_invoice_process.xml
+++ b/addons/account/process/supplier_invoice_process.xml
@@ -124,7 +124,7 @@
-
+
diff --git a/addons/account/report/general_ledger.py b/addons/account/report/general_ledger.py
index 32186c269f9..c7153e65921 100644
--- a/addons/account/report/general_ledger.py
+++ b/addons/account/report/general_ledger.py
@@ -266,7 +266,7 @@ class general_ledger(rml_parse.rml_parse):
JOIN account_journal j on (l.journal_id=j.id)
WHERE %s AND l.account_id = %%s AND l.date<=%%s AND l.date>=%%s ORDER by %s
""" % (self.query, sql_sort)
- self.cr.execute(sql, (account.id, self.date_borne['max_date'], self.date_borne['min_date']))
+ self.cr.execute(sql, (account.id, self.date_borne['max_date'], self.date_borne['min_date']))
res = self.cr.dictfetchall()
account_sum = 0.0
account_move_line_obj = pooler.get_pool(self.cr.dbname).get('account.move.line')
diff --git a/addons/account/wizard/account_invoice_refund_view.xml b/addons/account/wizard/account_invoice_refund_view.xml
index c1e4eb9b888..a48dd1a402e 100644
--- a/addons/account/wizard/account_invoice_refund_view.xml
+++ b/addons/account/wizard/account_invoice_refund_view.xml
@@ -2,31 +2,37 @@
-
+
account.invoice.refund.form
account.invoice.refund
form
-
+
Credit Note
diff --git a/addons/account_report/account_report.xml b/addons/account_report/account_report.xml
index 48273cdd3b3..07db255d4c4 100644
--- a/addons/account_report/account_report.xml
+++ b/addons/account_report/account_report.xml
@@ -5,7 +5,7 @@
-
-
board.account.report.form
board.board
-
+
form
-
-
-
+
+
+
diff --git a/addons/auction/auction.py b/addons/auction/auction.py
index e7c6198579a..e55d999a1d1 100644
--- a/addons/auction/auction.py
+++ b/addons/auction/auction.py
@@ -695,7 +695,7 @@ class auction_lots(osv.osv):
# wf_service = netsvc.LocalService('workflow')
# wf_service.trg_validate(uid, 'account.invoice', inv_id, 'invoice_open', cr)
inv_ref.button_compute(cr, uid, invoice.values())
- wf_service.trg_validate(uid, 'account.invoice', inv_id, 'invoice_proforma', cr)
+ wf_service.trg_validate(uid, 'account.invoice', inv_id, 'invoice_proforma2', cr)
return invoices.values()
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_lead.py b/addons/crm/crm_lead.py
index 08a58ac145c..16f3bb0355c 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -151,8 +151,7 @@ and users"),
\nIf the case is in progress the state is set to \'Open\'.\
\nWhen the case is over, the state is set to \'Done\'.\
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
- 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('history', '=', True),('model','=',_name)], readonly=True),
- 'log_ids': fields.one2many('mailgate.message', 'res_id', 'Logs', domain=[('history', '=', False),('model','=',_name)], readonly=True),
+ 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)], readonly=True),
'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner', help="Partner this case has been forwarded/assigned to.", select=True),
'date_assign': fields.date('Assignation Date', help="Last date this case was forwarded/assigned to a partner"),
}
diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml
index bcc72d74042..ba8418eaec0 100644
--- a/addons/crm/crm_lead_view.xml
+++ b/addons/crm/crm_lead_view.xml
@@ -154,12 +154,19 @@
-
+
-
+
-
-
+
+
+
+
+
+ string="Reply"
+ name="%(crm.action_crm_send_mail)d"
+ context="{'mail':'reply', 'model': 'crm.lead', 'include_original' : True}"
+ icon="gtk-undo" type="action" />
-
-
-
-
-
-
-
+
-
+
-
+
+
+
+
+
+ string="Reply"
+ name="%(crm.action_crm_send_mail)d"
+ context="{'mail':'reply', 'model': 'crm.lead', 'include_original' : True}"
+ icon="gtk-undo" type="action" />
-
-
-
-
-
-
-
+
@@ -176,19 +178,6 @@
-
-
-
-
-
-
-
-
diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py
index 1f1311e1191..61bb4f3751e 100644
--- a/addons/crm/crm_phonecall.py
+++ b/addons/crm/crm_phonecall.py
@@ -82,8 +82,7 @@ class crm_phonecall(osv.osv, crm_case):
'date_closed': fields.datetime('Closed', readonly=True),
'date': fields.datetime('Date'),
'opportunity_id': fields.many2one ('crm.lead', 'Opportunity'),
- '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)]),
+ 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
}
_defaults = {
diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml
index daf4b118a58..b968c0c1370 100644
--- a/addons/crm/crm_view.xml
+++ b/addons/crm/crm_view.xml
@@ -229,26 +229,6 @@
-
-
-
- crm.case.log.tree
- crm.case.log
- tree
-
-
-
-
-
-
-
-
-
-
-
@@ -564,54 +544,43 @@
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
,]+)', obj.email_cc)
+ email_cc = re.findall(r'([^ ,<@]+@[^> ,]+)', obj.email_cc or '')
emails = filter(None, emails)
body = obj.body
@@ -233,7 +233,8 @@ class crm_send_new_email(osv.osv_memory):
if 'subject' in fields:
res.update({u'subject': u'Re: %s' %(tools.ustr(hist.name or ''))})
if 'email_cc' in fields:
- res.update({'email_cc': case.email_cc and tools.ustr(case.email_cc) or False})
+ email_cc = (case.email_cc and tools.ustr(case.email_cc) + ', ' or '') + (hist.email_cc or '')
+ res.update({'email_cc': email_cc})
if 'reply_to' in fields:
res.update({'reply_to': case.section_id.reply_to})
if 'state' in fields:
diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py
index 1625cc2ae8b..e31b585a592 100644
--- a/addons/crm_claim/crm_claim.py
+++ b/addons/crm_claim/crm_claim.py
@@ -22,6 +22,7 @@
from osv import fields, osv
from crm import crm
import time
+
class crm_claim(osv.osv, crm.crm_case):
"""
Crm claim
@@ -86,8 +87,7 @@ class crm_claim(osv.osv, crm.crm_case):
\nIf the case is in progress the state is set to \'Open\'.\
\nWhen the case is over, the state is set to \'Done\'.\
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
- '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)]),
+ 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
}
_defaults = {
diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml
index a0a8a93f247..7357ef14039 100644
--- a/addons/crm_claim/crm_claim_view.xml
+++ b/addons/crm_claim/crm_claim_view.xml
@@ -164,16 +164,26 @@
type="object" icon="gtk-convert" />
-
+
-
+
-
+
+
+
+
+
-
-
-
-
-
-
-
+
@@ -209,19 +213,6 @@
-
-
-
-
-
-
-
-
diff --git a/addons/crm_fundraising/crm_fundraising.py b/addons/crm_fundraising/crm_fundraising.py
index 1dd6211e915..8c5ca0ccdb9 100644
--- a/addons/crm_fundraising/crm_fundraising.py
+++ b/addons/crm_fundraising/crm_fundraising.py
@@ -85,8 +85,7 @@ class crm_fundraising(osv.osv, crm.crm_case):
\nIf the case is in progress the state is set to \'Open\'.\
\nWhen the case is over, the state is set to \'Done\'.\
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
- '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)]),
+ 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
}
_defaults = {
diff --git a/addons/crm_fundraising/crm_fundraising_view.xml b/addons/crm_fundraising/crm_fundraising_view.xml
index 22a437e4142..1b2a1bdc6d2 100644
--- a/addons/crm_fundraising/crm_fundraising_view.xml
+++ b/addons/crm_fundraising/crm_fundraising_view.xml
@@ -154,16 +154,26 @@
type="object" icon="gtk-convert" />
-
+
-
+
-
+
+
+
+
+
-
-
-
-
-
-
-
+
@@ -212,19 +216,6 @@
-
-
-
-
-
-
-
-
diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py
index 8d9985e5cb1..777fc54ebf0 100644
--- a/addons/crm_helpdesk/crm_helpdesk.py
+++ b/addons/crm_helpdesk/crm_helpdesk.py
@@ -75,8 +75,7 @@ class crm_helpdesk(osv.osv, crm.crm_case):
\nIf the case is in progress the state is set to \'Open\'.\
\nWhen the case is over, the state is set to \'Done\'.\
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
- '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)]),
+ 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
}
_defaults = {
diff --git a/addons/crm_helpdesk/crm_helpdesk_view.xml b/addons/crm_helpdesk/crm_helpdesk_view.xml
index f91da940991..b22e59abb7d 100644
--- a/addons/crm_helpdesk/crm_helpdesk_view.xml
+++ b/addons/crm_helpdesk/crm_helpdesk_view.xml
@@ -92,16 +92,26 @@
icon="gtk-convert" />
-
+
-
+
-
+
+
+
+
+
-
-
-
-
-
-
-
+
@@ -150,19 +154,6 @@
-
-
-
-
-
-
-
-
diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py
index 07dce405c07..5aedea7ed72 100644
--- a/addons/email_template/email_template.py
+++ b/addons/email_template/email_template.py
@@ -133,11 +133,13 @@ class email_template(osv.osv):
string="Enforce From Account",
help="Emails will be sent only from this account(which are approved)."),
'from_email' : fields.related('enforce_from_account', 'email_id',
- type='char', string='From',),
+ type='char', string='From',
+ help='From Email (select mail account)',
+ readonly=True),
'def_to':fields.char(
- 'Recepient (To)',
+ 'Recipient (To)',
size=250,
- help="The default recepient of email."
+ help="The default recipient of email."
"Placeholders can be used here."),
'def_cc':fields.char(
'Default CC',
@@ -172,7 +174,7 @@ class email_template(osv.osv):
'use_sign':fields.boolean(
'Signature',
help="the signature from the User details"
- "will be appened to the mail"),
+ " will be appended to the mail"),
'file_name':fields.char(
'File Name Pattern',
size=200,
diff --git a/addons/email_template/email_template_account.py b/addons/email_template/email_template_account.py
index e5bbe0f5e56..8c71ce05ddf 100644
--- a/addons/email_template/email_template_account.py
+++ b/addons/email_template/email_template_account.py
@@ -59,21 +59,23 @@ class email_template_account(osv.osv):
'user':fields.many2one('res.users',
'Related User', required=True,
readonly=True, states={'draft':[('readonly', False)]}),
- 'email_id': fields.char('Email ID',
+ 'email_id': fields.char('From Email',
size=120, required=True,
readonly=True, states={'draft':[('readonly', False)]} ,
- help=" eg:yourname@yourdomain.com "),
+ help="eg: yourname@yourdomain.com "),
'smtpserver': fields.char('Server',
size=120, required=True,
readonly=True, states={'draft':[('readonly', False)]},
- help="Enter name of outgoing server,eg:smtp.gmail.com "),
+ help="Enter name of outgoing server, eg:smtp.gmail.com "),
'smtpport': fields.integer('SMTP Port ',
size=64, required=True,
readonly=True, states={'draft':[('readonly', False)]},
help="Enter port number,eg:SMTP-587 "),
'smtpuname': fields.char('User Name',
size=120, required=False,
- readonly=True, states={'draft':[('readonly', False)]}),
+ readonly=True, states={'draft':[('readonly', False)]},
+ help="Specify the username if your SMTP server requires authentication, "
+ "otherwise leave it empty."),
'smtppass': fields.char('Password',
size=120, invisible=True,
required=False, readonly=True,
@@ -91,11 +93,11 @@ class email_template_account(osv.osv):
'company':fields.selection([
('yes', 'Yes'),
('no', 'No')
- ], 'Company Mail A/c',
+ ], 'Corporate',
readonly=True,
- help="Select if this mail account does not belong" \
- "to specific user but the organisation as a whole." \
- "eg:info@somedomain.com",
+ help="Select if this mail account does not belong " \
+ "to specific user but to the organization as a whole. " \
+ "eg: info@companydomain.com",
required=True, states={
'draft':[('readonly', False)]
}),
@@ -316,8 +318,6 @@ class email_template_account(osv.osv):
msg['To'] = u','.join(addresses_l['To'])
if addresses_l['CC']:
msg['CC'] = u','.join(addresses_l['CC'])
-# if addresses_l['BCC']:
-# msg['BCC'] = u','.join(addresses_l['BCC'])
if body.get('text', False):
temp_body_text = body.get('text', '')
l = len(temp_body_text.replace(' ', '').replace('\r', '').replace('\n', ''))
diff --git a/addons/email_template/email_template_account_view.xml b/addons/email_template/email_template_account_view.xml
index 4a35134bb41..d86b4187858 100644
--- a/addons/email_template/email_template_account_view.xml
+++ b/addons/email_template/email_template_account_view.xml
@@ -24,7 +24,7 @@
-
+
diff --git a/addons/event/__openerp__.py b/addons/event/__openerp__.py
index 452e6577e73..e55d282ed9d 100644
--- a/addons/event/__openerp__.py
+++ b/addons/event/__openerp__.py
@@ -32,8 +32,6 @@
* ...
A dashboard for associations that includes:
* Registration by Events (graph)
- * Next Events (list)
- * Unpaid Invoices (list)
Note that:
- You can define new types of events in
Events / Configuration / Types of Events
@@ -42,15 +40,14 @@
""",
'author': 'Tiny',
'depends': ['crm', 'base_contact', 'account'],
- 'init_xml': ['event_data.xml'],
+ 'init_xml': [],
'update_xml': [
+ 'security/event_security.xml',
+ 'security/ir.model.access.csv',
'wizard/event_confirm_registration_view.xml',
'wizard/event_confirm_view.xml',
'event_view.xml',
'report/report_event_registration_view.xml',
- 'event_sequence.xml',
- 'security/event_security.xml',
- 'security/ir.model.access.csv',
'wizard/event_make_invoice_view.xml',
'wizard/partner_event_registration_view.xml',
'board_association_view.xml',
diff --git a/addons/event/board_association_demo.xml b/addons/event/board_association_demo.xml
index c30dad64790..1e66696aa8b 100644
--- a/addons/event/board_association_demo.xml
+++ b/addons/event/board_association_demo.xml
@@ -2,17 +2,6 @@
-
-
-
-
-
-
-
-
diff --git a/addons/event/event.py b/addons/event/event.py
index a26960639db..127aa5b1b30 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -28,34 +28,33 @@ import time
import tools
import decimal_precision as dp
-class event_type(osv.osv):
- """ Event Type """
+class event_type(osv.osv):
+ """ Event Type """
_name = 'event.type'
_description = __doc__
_columns = {
- 'name': fields.char('Event type', size=64, required=True),
+ 'name': fields.char('Event type', size=64, required=True),
}
event_type()
-class event_event(osv.osv):
- """Event"""
+class event_event(osv.osv):
+ """Event"""
_name = 'event.event'
_description = __doc__
_order = 'date_begin'
-
- def copy(self, cr, uid, id, default=None, context=None):
- """ Copy record of Given id
+
+ def copy(self, cr, uid, id, default=None, context=None):
+ """ Copy record of Given id
@param id: Id of Event record.
@param context: A standard dictionary for contextual values
"""
if not default:
default = {}
default.update({
- 'code': self.pool.get('ir.sequence').get(cr, uid, 'event.event'),
- 'state': 'draft'
- })
+ 'state': 'draft',
+ 'registration_ids': False,
+ })
return super(event_event, self).copy(cr, uid, id, default=default, context=context)
-
def onchange_product(self, cr, uid, ids, product_id):
"""This function returns value of product's unit price based on product id.
@param self: The object pointer
@@ -77,20 +76,22 @@ class event_event(osv.osv):
return self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
def button_done(self, cr, uid, ids, context=None):
+ if type(ids) in (int, long,):
+ ids = [ids]
return self.write(cr, uid, ids, {'state': 'done'}, context=context)
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:
#send reminder that will confirm the event for all the people that were already confirmed
reg_ids = register_pool.search(cr, uid, [
- ('event_id', '=', event.id),
+ ('event_id', '=', event.id),
('state', 'not in', ['draft', 'cancel'])])
register_pool.mail_user_confirm(cr, uid, reg_ids)
-
+
return self.write(cr, uid, ids, {'state': 'confirm'})
def button_confirm(self, cr, uid, ids, context=None):
@@ -99,12 +100,17 @@ class event_event(osv.osv):
@param context: A standard dictionary for contextual values
@return: True
"""
+ if not context:
+ context = {}
+ res = False
+ if type(ids) in (int, long,):
+ ids = [ids]
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)
+ res = self.do_confirm(cr, uid, [event.id], context=context)
else:
unconfirmed_ids.append(event.id)
if unconfirmed_ids:
@@ -113,26 +119,26 @@ class event_event(osv.osv):
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',
+ '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
+ }
+ return res
- def _get_register(self, cr, uid, ids, fields, args, context=None):
+ def _get_register(self, cr, uid, ids, fields, args, context=None):
"""Get Confirm or uncofirm register value.
@param ids: List of Event registration type's id
@param fields: List of function fields(register_current and register_prospect).
@param context: A standard dictionary for contextual values
- @return: Dictionary of function fields value.
+ @return: Dictionary of function fields value.
"""
register_pool = self.pool.get('event.registration')
res = {}
@@ -143,18 +149,18 @@ class event_event(osv.osv):
state = []
if 'register_current' in fields:
state += ['open', 'done']
- if 'register_prospect' in fields:
+ if 'register_prospect' in fields:
state.append('draft')
-
+
reg_ids = register_pool.search(cr, uid, [
- ('event_id', '=', event.id),
+ ('event_id', '=', event.id),
('state', 'in', state)])
-
+
if 'register_current' in fields:
res[event.id]['register_current'] = len(reg_ids)
- if 'register_prospect' in fields:
+ if 'register_prospect' in fields:
res[event.id]['register_prospect'] = len(reg_ids)
-
+
return res
def write(self, cr, uid, ids, vals, context=None):
@@ -189,37 +195,37 @@ class event_event(osv.osv):
return res
_columns = {
- 'name': fields.char('Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}),
+ 'name': fields.char('Summary', 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',
+ '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)]}),
+ '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."),
+ ('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)]}),
+ 'unit_price': fields.related('product_id', 'list_price', type='float', string='Registration Cost', 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)]}),
@@ -229,13 +235,13 @@ class event_event(osv.osv):
'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',
+ 'state': 'draft',
'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,
+ 'user_id': lambda obj, cr, uid, context: uid,
}
def _check_recursion(self, cr, uid, ids):
@@ -260,7 +266,7 @@ class event_event(osv.osv):
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.
+ on this function, take value of reply_to from selected team.
"""
if not team_id:
return {}
@@ -275,7 +281,7 @@ class event_event(osv.osv):
event_event()
-class event_registration(osv.osv):
+class event_registration(osv.osv):
"""Event Registration"""
_name= 'event.registration'
_description = __doc__
@@ -293,58 +299,59 @@ class event_registration(osv.osv):
return res
_columns = {
- '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)]}),
+ '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')),
+ '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),
+ "event_product": fields.char("Invoice Name", size=128, 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)]),
+ 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'log_ids': fields.one2many('mailgate.message', 'res_id', 'Logs', domain=[('history', '=', False),('model','=',_name)]),
+ 'date_deadline': fields.related('event_id','date_end', type='datetime', string="End Date", readonly=True, store=True),
+ 'date': fields.related('event_id', 'date_begin', type='datetime', string="Start Date", readonly=True, store=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,
- 'date': time.strftime('%Y-%m-%d %H:%M:%S')
+ 'nb_register': 1,
+ 'tobe_invoiced': True,
}
def _make_invoice(self, cr, uid, reg, lines, context=None):
""" Create Invoice from Invoice lines
@param reg : Model of Event Registration
- @param lines: Ids of Invoice lines
+ @param lines: Ids of Invoice lines
"""
if context is None:
context = {}
inv_pool = self.pool.get('account.invoice')
inv_lines_pool = self.pool.get('account.invoice.line')
-
- val_invoice = inv_pool.onchange_partner_id(cr, uid, [], 'out_invoice', reg.partner_invoice_id.id, False, False)
+
+ val_invoice = inv_pool.onchange_partner_id(cr, uid, [], 'out_invoice', reg.partner_invoice_id.id, False, False)
val_invoice['value'].update({'partner_id': reg.partner_invoice_id.id})
partner_address_id = val_invoice['value']['address_invoice_id']
value = inv_lines_pool.product_id_change(cr, uid, [], reg.event_id.product_id.id, uom =False, partner_id=reg.partner_invoice_id.id, fposition_id=reg.partner_invoice_id.property_account_position.id)
-
+
l = inv_lines_pool.read(cr, uid, lines)
-
+
val_invoice['value'].update({
- 'origin': reg.event_product,
- 'reference': False,
- 'invoice_line': [(6, 0, lines)],
- 'comment': "",
+ 'origin': reg.event_product,
+ 'reference': False,
+ 'invoice_line': [(6, 0, lines)],
+ 'comment': "",
'date_invoice': context.get('date_inv', False)
})
- inv_id = inv_pool.create(cr, uid, val_invoice['value'])
+ inv_id = inv_pool.create(cr, uid, val_invoice['value'])
inv_pool.button_compute(cr, uid, [inv_id])
self._history(cr, uid, [reg], _('Invoiced'))
return inv_id
@@ -367,16 +374,16 @@ class event_registration(osv.osv):
context['date_inv'] = date_inv
for reg in self.browse(cr, uid, ids, context=context):
-
+
val_invoice = inv_pool.onchange_partner_id(cr, uid, [], 'out_invoice', reg.partner_invoice_id.id, False, False)
-
+
val_invoice['value'].update({'partner_id': reg.partner_invoice_id.id})
partner_address_id = val_invoice['value']['address_invoice_id']
-
+
if not partner_address_id:
raise osv.except_osv(_('Error !'),
_("Registered partner doesn't have an address to make the invoice."))
-
+
value = inv_lines_pool.product_id_change(cr, uid, [], reg.event_id.product_id.id, uom =False, partner_id=reg.partner_invoice_id.id, fposition_id=reg.partner_invoice_id.property_account_position.id)
product = product_pool.browse(cr, uid, reg.event_id.product_id.id, context=context)
for tax in product.taxes_id:
@@ -385,38 +392,38 @@ class event_registration(osv.osv):
vals = value['value']
c_name = reg.contact_id and ('-' + contact_pool.name_get(cr, uid, [reg.contact_id.id])[0][1]) or ''
vals.update({
- 'name': reg.event_product + '-' + c_name,
- 'price_unit': reg.unit_price,
- 'quantity': reg.nb_register,
- 'product_id':reg.event_id.product_id.id,
- 'invoice_line_tax_id': [(6, 0, tax_ids)],
+ 'name': reg.event_product + '-' + c_name,
+ 'price_unit': reg.unit_price,
+ 'quantity': reg.nb_register,
+ 'product_id':reg.event_id.product_id.id,
+ 'invoice_line_tax_id': [(6, 0, tax_ids)],
})
inv_line_ids = self._create_invoice_lines(cr, uid, [reg.id], vals)
invoices.setdefault(reg.partner_id.id, []).append((reg, inv_line_ids))
-
+
for val in invoices.values():
res = False
if grouped:
res = self._make_invoice(cr, uid, val[0][0], [v for k , v in val], context=context)
-
+
for k , v in val:
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.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.mail_user(cr, uid, ids)
self._history(cr, uid, ids, _('Open'))
- return res
+ return res
def do_close(self, cr, uid, ids, context=None):
""" Close Registration
@@ -427,7 +434,7 @@ class event_registration(osv.osv):
values = {'state': 'done', 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')}
msg = _('Done')
if invoice_id:
- values['invoice_id'] = invoice_id
+ values['invoice_id'] = invoice_id
res = self.write(cr, uid, ids, values)
self._history(cr, uid, ids, msg)
return res
@@ -438,6 +445,8 @@ class event_registration(osv.osv):
@param context: A standard dictionary for contextual values
@return: True
"""
+ if not context:
+ context = {}
data_pool = self.pool.get('ir.model.data')
unconfirmed_ids = []
for registration in self.browse(cr, uid, ids, context=context):
@@ -452,22 +461,22 @@ class event_registration(osv.osv):
view_id = view_data.res_id
context['registration_ids'] = unconfirmed_ids
return {
- 'name': _('Confirm Registration'),
- 'context': context,
- 'view_type': 'form',
- 'view_mode': 'tree,form',
- 'res_model': 'event.confirm.registration',
- 'views': [(view_id, 'form')],
- 'type': 'ir.actions.act_window',
- 'target': 'new',
+ 'name': _('Confirm Registration'),
+ 'context': context,
+ 'view_type': 'form',
+ 'view_mode': 'tree,form',
+ 'res_model': 'event.confirm.registration',
+ 'views': [(view_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
'context': context,
'nodestroy': True
}
- return True
+ return True
def button_reg_close(self, cr, uid, ids, context=None):
- """This Function Close Event Registration.
- """
+ """This Function Close Event Registration.
+ """
if not context:
context = {}
data_pool = self.pool.get('ir.model.data')
@@ -483,56 +492,34 @@ class event_registration(osv.osv):
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',
+ '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):
"""This Function Cancel Event Registration.
- """
+ """
registrations = self.browse(cr, uid, ids)
self._history(cr, uid, registrations, _('Cancel'))
self.write(cr, uid, ids, {'state': 'cancel'})
- return True
-
- def create(self, cr, uid, values, context=None):
- """ Overrides orm create method.
- """
- event_obj = self.pool.get('event.event')
- event = event_obj.browse(cr, uid, values['event_id'], context=context)
- values['date_deadline']= event.date_begin
- values['description']= event.mail_confirm
- 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'))
- return res
-
- def write(self, cr, uid, ids, values, context=None):
- """ Overrides orm write method.
- """
- event_obj = self.pool.get('event.event')
- if 'event_id' in values:
- event = event_obj.browse(cr, uid, values['event_id'], context=context)
- values['date_deadline']= event.date_begin
- values['description']= event.mail_confirm
- return super(event_registration, self).write(cr, uid, ids, values, context=context)
+ return True
def mail_user(self, cr, uid, ids, confirm=False, context=None):
"""
- Send email to user
+ Send email to user
"""
if not context:
context = {}
-
+
for regestration in self.browse(cr, uid, ids, context=context):
src = regestration.event_id.reply_to or False
email_to = []
@@ -560,30 +547,30 @@ class event_registration(osv.osv):
self.history(cr, uid, [regestration], subject, history=True, \
email=email_to, details=body, \
subject=subject, email_from=src, \
- email_cc=', '.join(email_cc))
-
+ email_cc=', '.join(email_cc))
+
return True
def mail_user_confirm(self, cr, uid, ids, context=None):
"""
- Send email to user
+ Send email to user
"""
return self.mail_user(cr, uid, ids, confirm=True, context=context)
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)
+ return self.pool.get('account.invoice.line').create(cr, uid, vals)
def onchange_contact_id(self, cr, uid, ids, contact, partner):
-
+
"""This function returns value of Badge Name , Badge Title based on Partner contact.
@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 contact: Patner Contact IDS
- @param partner: Partner IDS
+ @param partner: Partner IDS
"""
data ={}
if not contact:
@@ -591,7 +578,7 @@ class event_registration(osv.osv):
contact_obj = self.pool.get('res.partner.contact')
addr_obj = self.pool.get('res.partner.address')
job_obj = self.pool.get('res.partner.job')
-
+
contact_id = contact_obj.browse(cr, uid, contact)
if partner:
partner_addresses = addr_obj.search(cr, uid, [('partner_id', '=', partner)])
@@ -607,18 +594,19 @@ class event_registration(osv.osv):
@param uid: the current user’s ID for security checks,
@param ids: List of Registration IDs
@param event_id: Event ID
- @param partner_invoice_id: Partner Invoice ID
+ @param partner_invoice_id: Partner Invoice ID
"""
context={}
if not event_id:
return {'value': {'unit_price': False, 'event_product': False}}
-
+
event_obj = self.pool.get('event.event')
prod_obj = self.pool.get('product.product')
- res_obj = self.pool.get('res.partner')
-
+ res_obj = self.pool.get('res.partner')
+
data_event = event_obj.browse(cr, uid, event_id)
- res = {'value': {'unit_price': False, 'event_product': False, 'user_id': False}}
+ res = {'value': {'unit_price': False, 'event_product': False, 'user_id': False,
+ 'date': data_event.date_begin, 'date_deadline': data_event.date_end, 'description': data_event.note, 'name': data_event.name}}
if data_event.user_id.id:
res['value'].update({'user_id':data_event.user_id.id})
if data_event.product_id:
@@ -627,7 +615,7 @@ class event_registration(osv.osv):
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})
+ 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):
@@ -641,7 +629,7 @@ class event_registration(osv.osv):
"""
job_obj = self.pool.get('res.partner.job')
res_obj = self.pool.get('res.partner')
-
+
data = {}
data['contact_id'], data['partner_invoice_id'], data['email_from'] = (False, False, False)
if not part:
@@ -659,7 +647,7 @@ class event_registration(osv.osv):
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)
+ 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):
@@ -676,7 +664,7 @@ class event_registration(osv.osv):
event_obj = self.pool.get('event.event')
prod_obj = self.pool.get('product.product')
res_obj = self.pool.get('res.partner')
-
+
data['unit_price']=False
if not event_id:
return {'value': data}
@@ -687,7 +675,7 @@ class event_registration(osv.osv):
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]
+ 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()
@@ -697,9 +685,9 @@ class event_registration_badge(osv.osv):
_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'),
+ "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()
diff --git a/addons/event/event_data.xml b/addons/event/event_data.xml
deleted file mode 100644
index ebfe70e4c50..00000000000
--- a/addons/event/event_data.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/addons/event/event_demo.xml b/addons/event/event_demo.xml
index d390708b58c..3bf58691c0f 100644
--- a/addons/event/event_demo.xml
+++ b/addons/event/event_demo.xml
@@ -62,7 +62,6 @@
500
- draft
@@ -74,9 +73,8 @@
350
- confirm
-
+
Conference on ERP Buisness
@@ -88,10 +86,10 @@
True
True
- done
Thanks for registrering. We will keep you informed of the modalities.
Thanks for registrering. The conference will begin at 2 PM and will be given by Mister Pinckaers.
-
+
+
diff --git a/addons/event/event_sequence.xml b/addons/event/event_sequence.xml
deleted file mode 100644
index eb8d45137cf..00000000000
--- a/addons/event/event_sequence.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
- #
- # Sequences for crm.case.section
- #
-
-
- Section Code
- event.event
-
-
- Section Code
- event.event
- C/
- 3
-
-
-
-
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index f7586c31f1d..c625a44fc06 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -1,9 +1,9 @@
-
-
-
+
+
+
@@ -33,7 +33,7 @@
event.type
form
-
+
@@ -45,17 +45,17 @@
-
+
event.event.tree
event.event
@@ -175,13 +173,13 @@
-
+
-
-
-
+
+
+
event.event.calendar
event.event
@@ -194,9 +192,9 @@
-
+
-
+
Event Graph
event.event
@@ -236,7 +234,7 @@
-
+
-
+
Events
ir.actions.act_window
@@ -257,7 +255,7 @@
{"search_default_draft": "1"}
-
+
-
+
+ view_type="form"/>
-
+
event.registration.tree
event.registration
@@ -308,26 +306,30 @@
-
+
-
+
-
-
-
-
-
-
-
+
+
+
-
+
+
+
+
+
+
+
+
+
@@ -353,30 +355,37 @@
-
-
-
+
+
-
+
-
+
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -386,43 +395,37 @@
+ string="Reply"
+ name="%(crm.action_crm_send_mail)d"
+ context="{'mail':'reply', 'model': 'event.registration', 'include_original' : True}"
+ icon="gtk-undo" type="action" />
-
-
-
-
-
-
-
+
-
+
-
-
-
+
+
+
event.registration.calendar
event.registration
calendar
-
+
-
+
Registration Graph
event.registration
@@ -434,7 +437,7 @@
-
+
@@ -451,7 +454,7 @@
-
+
-
+
-
+
@@ -480,11 +483,11 @@
{"search_default_draft": "1"}
-
+
-
+
diff --git a/addons/event/res_partner_view.xml b/addons/event/res_partner_view.xml
index 0b6ace47b19..2fafec3e2ef 100644
--- a/addons/event/res_partner_view.xml
+++ b/addons/event/res_partner_view.xml
@@ -30,9 +30,16 @@
+
-
+
+
+
+
+
+
+
diff --git a/addons/event/security/event_security.xml b/addons/event/security/event_security.xml
index 6cf4adeb5b9..4f29fc90837 100644
--- a/addons/event/security/event_security.xml
+++ b/addons/event/security/event_security.xml
@@ -1,6 +1,6 @@
-
+
@@ -10,14 +10,7 @@
EVENT / Subscriber
-
-
-
-
-
-
-
-
+
diff --git a/addons/event/test/test_event.yml b/addons/event/test/test_event.yml
index c3d89ebd5cb..3440ef5d28d 100644
--- a/addons/event/test/test_event.yml
+++ b/addons/event/test/test_event.yml
@@ -1,34 +1,55 @@
- |
- In order to test the 'event' module in OpenERP, we create a new event.
-
+ In order to test the "Event Organisation" in Association system.
- |
- Given that I have product "Ticket for Concert".
+ I want to organize one conference event on "OpenERP Business".
+- |
+ I'm creating new product "Ticket for Conference" to specify registration Cost of conference.
-
!record {model: product.product, id: product_product_ticketforconcert0}:
categ_id: product.cat1
- cost_method: standard
list_price: 68.0
- mes_type: fixed
- name: Ticket for Concert
- procure_method: make_to_stock
- standard_price: 15.0
- supply_method: buy
- type: product
- uom_id: product.product_uom_unit
- uom_po_id: product.product_uom_unit
- volume: 0.0
- warranty: 0.0
- weight: 0.0
- weight_net: 0.0
-
+ name: Ticket for Conference
- |
- Given that I have also Event type "Conference".
+ I'm creating Event type "Conference".
-
!record {model: event.type, id: event_type_conference0}:
- name: Conference
+ name: Conferences
- |
- I create partner "Mark Johnson" and and I provide an address to this
- new customer, as well as an email "info@mycustomer.com".
+ I'm creating one Event "Conference on OpenERP Business" which will be started beetween 1 and 10 in this month.
+-
+ !record {model: event.event, id: event_event_conference0}:
+ date_begin: 2010-08-01
+ date_end: 2010-08-10
+ name: Conference on OpenERP Business.
+ product_id: 'product_product_ticketforconcert0'
+ type: 'event_type_conference0'
+ reply_to: 'info@customer.com'
+- |
+ Check that the new conference event is "Draft" or not.
+-
+ !assert {model: event.event, id: event_event_conference0}:
+ - state == 'draft', "Event should be in draft by default when first time created"
+- |
+ Need Minimun 10 Registrations to confirm/start this Conference Event and does not allowed more than 100 Registrations.
+- |
+ So I set Minimun and Maximun Registrations limit.
+-
+ !python {model: event.event}: |
+ self.write(cr, uid, [ref('event_event_conference0')], {'register_max': 100, 'register_min': 10})
+- |
+ I'm doing to confirm that conference event.
+-
+ !python {model: event.event}: |
+ self.button_confirm(cr, uid, [ref("event_event_conference0")])
+- |
+ But this conference event need minimum 10 Confirmed Registrations. so Check that Event is not "confirmed".
+-
+ !assert {model: event.event, id: event_event_conference0}:
+ - state != 'confirm', "Event should not confirmed if minimum registrations does not reached"
+- |
+ "Mark Johnson" want to subscribe/join into "Conference on OpenERP Business" with 10 tickets.
+- |
+ I'm creating new partner "Mark Johnson" with him email "info@mycustomer.com".
-
!record {model: res.partner, id: res_partner_markjohnson0}:
address:
@@ -44,155 +65,108 @@
type: default
zip: '1000'
email: 'info@mycustomer.com'
- credit_limit: 0.0
- lang: en_US
name: Mark Johnson
- property_account_payable: account.a_pay
- property_account_receivable: account.a_recv
- |
- 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}:
- date_begin: '2010-06-07 13:39:00'
- date_end: '2010-06-10 13:39:00'
- name: Conference on OpenERP Offshore Business.
- product_id: 'product_product_ticketforconcert0'
- register_max: 0.0
- register_min: 0.0
- state: draft
- type: 'event_type_conference0'
- reply_to: 'info@customer.com'
-
-- |
- we set the limit of registrations to this event using "Minimum Registrations" 2 and "Maximum Registrations" 10.
--
- !python {model: event.event}: |
- self.write(cr, uid, [ref('event_event_conference0')], {'register_max': 10, 'register_min': 2})
-
-- |
- We Check that the event is in "Draft" state.
--
- !assert {model: event.event, id: event_event_conference0}:
- - state == 'draft'
-
-- |
- Then we confirm it press on "Confirm Event" button.
--
- !python {model: event.event}: |
- self.button_confirm(cr, uid, [ref("event_event_conference0")], {"active_ids": [ref("event.menu_event_event")]})
-
-- |
- Check that Event is "confirmed" or not.
--
- !assert {model: event.event, id: event_event_conference0}:
- - state == 'confirm'
-
-- |
- person "Mark Johnson" want to confirm their registrations. for that
- I create New Registration for "Conference on OpenERP Offshore Business.
+ I'm creating Registration for "Mark Johnson" on "Conference on OpenERP Business" with 10 tickets.
-
!record {model: event.registration, id: event_registration_registrationjacot0}:
contact_id: base_contact.res_partner_contact_jacot0
- date_deadline: '2010-06-07 13:39:00'
event_id: event.event_event_conference0
- event_product: Ticket for Concert
- name: 'Registration: Jacot'
- partner_id: 'res_partner_markjohnson0'
- partner_invoice_id: 'res_partner_markjohnson0'
+ partner_id: event.res_partner_markjohnson0
+ partner_invoice_id: event.res_partner_markjohnson0
+ event_product: Ticket for Conference
unit_price: 68.0
+ nb_register: 10
- |
- I check that "Number of registration" is less than "Maximum registration" defined in "Conference on OpenERP Offshore Business" event.
- if not then confirmation will fail because its greater then the Maximum registration.
--
- !python {model: event.event}: |
- from tools.translate import _
- obj_register = self.pool.get('event.registration')
- event_id1 = self.browse(cr, uid, ref('event_event_conference0'))
- register_ids = obj_register.search(cr, uid, [('event_id', '=', event_id1.id)])
- register_id = obj_register.browse(cr, uid, register_ids)[0]
- assert register_id.nb_register <= event_id1.register_max, _('NO. of Registration for this event is More than Maximum Registration Defined !')
-
-
-- |
- And Confirm that Registration by click on "Confirm Registration" button of Registraion form.
+ I'm doing to Open that Registration.
-
!python {model: event.registration}: |
- self.check_confirm(cr, uid, [ref("event_registration_registrationjacot0")], {"active_ids": [ref("event.menu_action_registration")]})
-
+ self.check_confirm(cr, uid, [ref("event_registration_registrationjacot0")])
- |
- one other Person "Zen" also want to confirm their Registraions. so
- They create New registraion for This event.
--
- !record {model: event.registration, id: event_registration_registrationzen0}:
- contact_id: base_contact.res_partner_contact_zen0
- date_deadline: '2010-06-07 13:39:00'
- event_id: event.event_event_conference0
- event_product: Ticket for Concert
- name: 'Registration: Zen'
- partner_id: base.res_partner_3
- partner_invoice_id: base.res_partner_3
- unit_price: 68.0
-
-- |
- And Confirm that Registration by click on "Confirm Registration" button of Registraion form.
--
- !python {model: event.registration}: |
- self.check_confirm(cr, uid, [ref("event_registration_registrationzen0")], {"active_ids": [ref("event.menu_action_registration")]})
-
-- |
- Third person create New Registration for "Conference on OpenERP Offshore Business" event.
--
- !record {model: event.registration, id: event_registration_registrationpassot0}:
- contact_id: base_contact.res_partner_contact_passot0
- date_deadline: '2010-06-07 13:39:00'
- email_from: info@mediapole.net
- event_id: 'event_event_conference0'
- event_product: Ticket for Concert
- name: 'Registration: Passot'
- partner_id: base.res_partner_8
- partner_invoice_id: base.res_partner_8
- unit_price: 68.0
-- |
- This person cannot Confirm their registration.so I check that state is "Unconfirmed".
--
- !assert {model: event.registration, id: event_registration_registrationpassot0}:
- - state == 'draft'
-
-- |
- I Check that the total number of confirmed is 2 and unconfirmed registrations 1.
--
- !python {model: event.event}: |
- from tools.translate import _
- obj_event = self.browse(cr, uid, ref('event_event_conference0'))
- assert obj_event.register_current == 2, "Number of Confirmed Registration for this event is %s"%(obj_event.register_current)
- assert obj_event.register_prospect == 1, "Number of Unconfirmed Registration for this event is %s" %(obj_event.register_prospect)
-- |
- This event is finished by click on "Event Done" button of this event form.
--
- !python {model: event.event}: |
- self.button_done(cr, uid, [ref("event.event_event_conference0")], {"active_ids": [ref("event.menu_event_event")] })
-- |
- We can create invoice if the registration is in "Open" state otherwise it gives the warning to the user.
- so I check that Registration is in "Open" state before click on "Make Invoices."
+ Check that Registration is in "Open" or not."
-
!assert {model: event.registration, id: event_registration_registrationjacot0}:
- - state == 'open'
-- |
- Now, I will invoice the participant who have address using "Make Invoices".Create invoice will be linked to Invoice Field available on Payments tab of registrations.
+ - state == 'open', "Registration should be open here."
--
- !record {model: event.make.invoice, id: event_make_invoice_0}:
- {}
- |
- I click on "Done" button of this "Make Invoices" wizard.
--
- !python {model: event.make.invoice}: |
- self.make_invoice(cr, uid, [ref("event_make_invoice_0")], {"active_ids": [ref("event_registration_registrationzen0")]})
+ I'm again try to confirm that conference event.
+-
+ !python {model: event.event}: |
+ self.button_confirm(cr, uid, [ref("event_event_conference0")])
+
- |
- I check that Invoice for this partner is created or not.
+ Now Minimun requirement of Registration is fullfil. so Check that Event is "confirmed" or not.
+-
+ !assert {model: event.event, id: event_event_conference0}:
+ - state == 'confirm', "Event should be confirmed here."
+
+- |
+ I'm creating invoice of Registration of "Mark Johnson" on "Conference on OpenERP Business".
-
!python {model: event.registration}: |
- from tools.translate import _
- data_event_reg = self.browse(cr, uid, ref('event_registration_registrationzen0'), context=context)
- assert data_event_reg.invoice_id, _("Invoices has not been generated for this partner")
+ self.action_invoice_create(cr, uid, [ref("event_registration_registrationjacot0")])
+
+- |
+ Check Invoice of Registration of "Mark Johnson" is created or not.
+-
+ !assert {model: event.registration, id: event_registration_registrationjacot0}:
+ - invoice_id != False, "Invoice should be generated"
+
+- |
+ Check Registration of "Mark Johnson" is closed or not after invoice generated.
+-
+ !assert {model: event.registration, id: event_registration_registrationjacot0}:
+ - state != 'done', "Registration should be closed after invoice generated"
+
+- |
+ Now "Mark Johnson" want to another registration on "Conference on OpenERP Business" with 120 tickets.
+- |
+ I'm creating new registration for "Mark Johnson" with 100 tickets.
+-
+ !record {model: event.registration, id: event_registration_registrationzen0}:
+ event_id: event.event_event_conference0
+ partner_id: event.res_partner_markjohnson0
+ partner_invoice_id: event.res_partner_markjohnson0
+ event_product: Ticket for Conference
+ unit_price: 68.0
+ nb_register: 100
+
+- |
+ I'm doing to open "Mark Johnson" registration.
+-
+ !python {model: event.registration}: |
+ self.check_confirm(cr, uid, [ref("event_registration_registrationzen0")])
+
+- |
+ But conference event do not allowed more than 100 Registrations. so Check that registration is not "open".
+-
+ !assert {model: event.registration, id: event_registration_registrationzen0}:
+ - state == 'draft', "Registration should be in draft by default."
+- |
+ Now I'm modify number of tickets of "Mark Johnson"'s registration with 90 tickets.
+-
+ !python {model: event.registration}: |
+ self.write(cr, uid, [ref("event_registration_registrationzen0")], {'nb_register': 90})
+- |
+ I'm again try to open "Mark Johnson" registration.
+-
+ !python {model: event.registration}: |
+ self.check_confirm(cr, uid, [ref("event_registration_registrationzen0")])
+
+- |
+ Check that registration "open" or not.
+-
+ !assert {model: event.registration, id: event_registration_registrationzen0}:
+ - state == 'open', "Registration should be open here."
+- |
+ I'm closing "Conference on OpenERP Business" Conference event
+-
+ !python {model: event.event}: |
+ self.button_done(cr, uid, [ref("event_event_conference0")])
+- |
+ Check that conference "close" or not.
+-
+ !assert {model: event.event, id: event_event_conference0}:
+ - state == 'done', "Registration should be Closed here."
+
diff --git a/addons/event/wizard/event_confirm.py b/addons/event/wizard/event_confirm.py
index 936d5dc8d72..3af4b1c12b3 100644
--- a/addons/event/wizard/event_confirm.py
+++ b/addons/event/wizard/event_confirm.py
@@ -21,7 +21,7 @@
from osv import fields, osv
from tools.translate import _
-
+
class event_confirm(osv.osv_memory):
"""
Confirm Event
@@ -30,11 +30,11 @@ class event_confirm(osv.osv_memory):
_description = "Event Confirmation"
_columns = {
- 'msg': fields.text('Message', readonly=True),
+ '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')
diff --git a/addons/event/wizard/event_confirm_registration.py b/addons/event/wizard/event_confirm_registration.py
index f115c630bc4..b592f2c8994 100644
--- a/addons/event/wizard/event_confirm_registration.py
+++ b/addons/event/wizard/event_confirm_registration.py
@@ -21,7 +21,7 @@
from osv import fields, osv
from tools.translate import _
-
+
class event_confirm_registration(osv.osv_memory):
"""
Confirm Event Registration
@@ -30,7 +30,7 @@ class event_confirm_registration(osv.osv_memory):
_description = "Event Registraion"
_columns = {
- 'msg': fields.text('Message', readonly=True),
+ 'msg': fields.text('Message', readonly=True),
}
_defaults = {
'msg': 'The event limit is reached. What do you want to do?'
@@ -38,14 +38,14 @@ class event_confirm_registration(osv.osv_memory):
def default_get(self, cr, uid, fields, context=None):
"""
- This function gets default values
+ This function gets default values
"""
registration_pool = self.pool.get('event.registration')
registration_ids = context.get('registration_ids', [])
res = super(event_confirm_registration, self).default_get(cr, uid, fields, context=context)
msg = ""
overlimit_event_ids = []
- for registration in registration_pool.browse(cr, uid, registration_ids, context=context):
+ for registration in registration_pool.browse(cr, uid, registration_ids, context=context):
total_confirmed = registration.event_id.register_current
register_max = registration.event_id.register_max
if registration.event_id.id not in overlimit_event_ids:
@@ -54,7 +54,7 @@ class event_confirm_registration(osv.osv_memory):
%(registration.event_id.name, register_max)
if 'msg' in fields:
res.update({'msg': msg})
-
+
return res
def confirm(self, cr, uid, ids, context):
diff --git a/addons/event/wizard/event_confirm_registration_view.xml b/addons/event/wizard/event_confirm_registration_view.xml
index e82ce52acb0..72ecbe2cad8 100644
--- a/addons/event/wizard/event_confirm_registration_view.xml
+++ b/addons/event/wizard/event_confirm_registration_view.xml
@@ -25,7 +25,6 @@
form
form
- {'record_id' : active_id}
new
diff --git a/addons/event/wizard/event_make_invoice.py b/addons/event/wizard/event_make_invoice.py
index ab446f67ef6..9d2fbe7db50 100644
--- a/addons/event/wizard/event_make_invoice.py
+++ b/addons/event/wizard/event_make_invoice.py
@@ -28,7 +28,7 @@ class event_make_invoice(osv.osv_memory):
_name = "event.make.invoice"
_description = "Event Make Invoice"
_columns = {
-
+
'grouped': fields.boolean('Group the invoices'),
'invoice_date':fields.date('Invoice Date'),
# 'invoice_ids': fields.char('Invoice Ids', size=128), # Improve me
@@ -45,7 +45,7 @@ class event_make_invoice(osv.osv_memory):
"""
obj_event_reg = self.pool.get('event.registration')
data = context and context.get('active_ids', [])
-
+
for event_reg in obj_event_reg.browse(cr, uid, data, context=context):
if event_reg.state == 'draft':
raise osv.except_osv(_('Warning !'),
@@ -53,7 +53,7 @@ class event_make_invoice(osv.osv_memory):
if event_reg.state == 'done':
raise osv.except_osv(_('Warning !'),
_("Invoice cannot be created if the registration is in done state."))
-
+
if (not event_reg.tobe_invoiced):
raise osv.except_osv(_('Warning !'),
_("Registration is set as Cannot be invoiced"))
@@ -63,27 +63,27 @@ class event_make_invoice(osv.osv_memory):
_("Event related doesn't have any product defined"))
if not event_reg.partner_invoice_id:
raise osv.except_osv(_('Warning !'),
- _("Registration doesn't have any partner to invoice."))
+ _("Registration doesn't have any partner to invoice."))
def default_get(self, cr, uid, fields_list, context=None):
res = super(event_make_invoice, self).default_get(cr, uid, fields_list, context)
return res
def make_invoice(self, cr, uid, ids, context={}):
-
+
reg_obj = self.pool.get('event.registration')
newinv = []
-
+
for data in self.browse(cr, uid, ids):
res = reg_obj.action_invoice_create(cr, uid, context.get(('active_ids'),[]), data.grouped, date_inv = data.invoice_date)
mod_obj =self.pool.get('ir.model.data')
result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter')
-
- id = mod_obj.read(cr, uid, result, ['res_id'])
-
+
+ id = mod_obj.read(cr, uid, result, ['res_id'])
+
return {
- 'domain': "[('id','in',%s)]" % res,
+ 'domain': "[('id','in',%s)]" % res,
'name': 'Invoices',
'view_type': 'form',
'view_mode': 'tree,form',
@@ -91,8 +91,8 @@ class event_make_invoice(osv.osv_memory):
'view_id': False,
'context': "{'type':'out_refund'}",
'type': 'ir.actions.act_window',
- 'search_view_id': id['id']
+ 'search_view_id': id['id']
}
-
+
event_make_invoice()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/event/wizard/event_make_invoice_view.xml b/addons/event/wizard/event_make_invoice_view.xml
index ce9a9e2375f..9d0d96352c0 100644
--- a/addons/event/wizard/event_make_invoice_view.xml
+++ b/addons/event/wizard/event_make_invoice_view.xml
@@ -28,7 +28,6 @@
form
form
- {'record_id' : active_id}
new
diff --git a/addons/event/wizard/partner_event_registration.py b/addons/event/wizard/partner_event_registration.py
index 79f92562df9..8462a812313 100644
--- a/addons/event/wizard/partner_event_registration.py
+++ b/addons/event/wizard/partner_event_registration.py
@@ -36,28 +36,26 @@ class partner_event_registration(osv.osv_memory):
_columns = {
'event_id': fields.many2one('event.event', 'Event'),
'event_type': fields.many2one('event.type', 'Type', readonly=True),
- 'unit_price': fields.float('Cost', readonly=True),
- 'currency_id': fields.many2one('res.currency', 'Currency', readonly=True),
- 'start_date': fields.datetime('Start date', required=True, help="Beginning Date of Event", readonly=True),
- 'end_date': fields.datetime('Closing date', required=True, help="Closing Date of Event", readonly=True),
+ 'unit_price': fields.float('Registration Cost'),
+ 'start_date': fields.datetime('Start date', required=True, help="Beginning Date of Event", readonly=True),
+ 'end_date': fields.datetime('Closing date', required=True, help="Closing Date of Event", readonly=True),
'nb_register': fields.integer('Number of Registration'),
}
_defaults = {
- 'nb_register': 1,
+ 'nb_register': 1,
}
def open_registration(self, cr, uid, ids, context=None):
"""This Function Open Registration For Given Event id and Partner.
-
+
"""
-
value = {}
res_obj = self.pool.get('res.partner')
job_obj = self.pool.get('res.partner.job')
event_obj = self.pool.get('event.event')
reg_obj = self.pool.get('event.registration')
mod_obj = self.pool.get('ir.model.data')
-
+
record_ids = context and context.get('active_ids', []) or []
addr = res_obj.address_get(cr, uid, record_ids)
contact_id = False
@@ -83,22 +81,21 @@ class partner_event_registration(osv.osv_memory):
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
for current in self.browse(cr, uid, ids, context=context):
- for reg in reg_obj.browse(cr, uid, record_ids, context=context):
+ for partner in res_obj.browse(cr, uid, record_ids, context=context):
new_case = reg_obj.create(cr, uid, {
'name' : 'Registration',
'event_id' : current.event_id and current.event_id.id or False,
- 'unit_price' : current.event_id.unit_price,
- 'currency_id' : current.event_id.currency_id and current.event_id.currency_id.id or False,
- 'partner_id' : record_ids[0],
- 'partner_invoice_id' : record_ids[0] or False,
+ 'unit_price' : current.unit_price,
+ 'partner_id' : partner.id,
+ 'partner_invoice_id' : partner.id,
'event_product': current.event_id.product_id.name,
'contact_id': contact_id,
'email_from': email,
'nb_register': current.nb_register,
-
+
}, context=context)
- value = {
+ value = {
'name': _('Event Registration'),
'view_type': 'form',
'view_mode': 'tree,form',
@@ -109,14 +106,14 @@ class partner_event_registration(osv.osv_memory):
'search_view_id': res['res_id']
}
return value
-
+
def name_get(self, cr, uid, ids, context=None):
"""Overrides orm name_get method
@param ids: List of partner_event_register ids
"""
if not context:
context = {}
-
+
res = []
if not ids:
return res
@@ -127,22 +124,31 @@ class partner_event_registration(osv.osv_memory):
event_id = record['event_type'][1] + ' on ' + event_id
res.append((record['id'], event_id))
return res
-
- def onchange_event_id(self, cr, uid, ids, event_id, context={}):
+
+ def onchange_event_id(self, cr, uid, ids, event_id, context=None):
res = {}
event_obj = self.pool.get('event.event')
-
- if event_id:
+ product_obj = self.pool.get('product.product')
+ partner_obj = self.pool.get('res.partner')
+ if not context:
+ context = {}
+ partner_id = context.get('active_id', False)
+ if event_id:
event = event_obj.browse(cr, uid, event_id)
+ pricelist_id = event.pricelist_id and event.pricelist_id.id or False
+ if partner_id:
+ partner = partner_obj.browse(cr, uid, partner_id, context=context)
+ pricelist_id = pricelist_id or partner.property_product_pricelist.id
+ unit_price = product_obj._product_price(cr, uid, [event.product_id.id], False, False, {'pricelist': pricelist_id})[event.product_id.id]
+
res['value'] = {
'event_type': event.type and event.type.id or False,
'start_date': event.date_begin,
'end_date': event.date_end,
- 'unit_price': event.unit_price,
- 'currency_id': event.currency_id and event.currency_id.id or False
- }
+ 'unit_price': unit_price,
+ }
return res
-
+
partner_event_registration()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/event/wizard/partner_event_registration_view.xml b/addons/event/wizard/partner_event_registration_view.xml
index 4efb1733942..c0b10a89ea9 100644
--- a/addons/event/wizard/partner_event_registration_view.xml
+++ b/addons/event/wizard/partner_event_registration_view.xml
@@ -16,17 +16,14 @@
-
+
-
-
-
-
-
-
-
+
+
+
+
diff --git a/addons/hr_attendance/i18n/it.po b/addons/hr_attendance/i18n/it.po
index 657a7385ba2..58810049fda 100644
--- a/addons/hr_attendance/i18n/it.po
+++ b/addons/hr_attendance/i18n/it.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 15:55+0000\n"
-"Last-Translator: Mario Riva \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/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py
index 2845768f59c..4d482b6fbca 100644
--- a/addons/hr_recruitment/hr_recruitment.py
+++ b/addons/hr_recruitment/hr_recruitment.py
@@ -65,8 +65,7 @@ class hr_applicant(osv.osv, crm.crm_case):
_inherit = ['mailgate.thread']
_columns = {
'name': fields.char('Name', size=128, required=True),
- '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)]),
+ 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the case without removing it."),
'description': fields.text('Description'),
'section_id': fields.many2one('crm.case.section', 'Sales Team', \
diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml
index 9956010fcb6..201d6dba07d 100644
--- a/addons/hr_recruitment/hr_recruitment_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_view.xml
@@ -140,56 +140,47 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/mail_gateway/mail_gateway.py b/addons/mail_gateway/mail_gateway.py
index 1abda444116..d7da882ed03 100644
--- a/addons/mail_gateway/mail_gateway.py
+++ b/addons/mail_gateway/mail_gateway.py
@@ -41,8 +41,7 @@ class mailgate_thread(osv.osv):
_description = 'Mailgateway Thread'
_columns = {
- 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('history', '=', True)], readonly=True),
- 'log_ids': fields.one2many('mailgate.message', 'res_id', 'Logs', domain=[('history', '=', False)], readonly=True),
+ 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', readonly=True),
}
def message_new(self, cr, uid, msg, context):
@@ -145,9 +144,25 @@ class mailgate_message(osv.osv):
'''
Mailgateway Message
'''
+ def _get_display_text(self, cr, uid, ids, name, arg, context=None):
+ result = {}
+ for message in self.browse(cr, uid, ids, context=context):
+ msg_txt = ''
+ if message.history:
+ msg_txt += (message.email_from or '/') + ' wrote on ' + message.date + ':\n\t'
+ msg_txt += '\n\t'.join(message.description.split('\n')[:3]) + '...'
+ else:
+ msg_txt = (message.user_id.name or '/') + ' on ' + message.date + ':\n\t'
+ if message.name == 'Opportunity':
+ msg_txt += "Converted to Opportunity"
+ else:
+ msg_txt += "Changed Status to: " + message.name
+ result[message.id] = msg_txt
+ return result
+
_name = 'mailgate.message'
_description = 'Mailgateway Message'
- _order = 'id desc'
+ _order = 'date desc'
_columns = {
'name':fields.text('Subject', readonly=True),
'model': fields.char('Object Name', size=128, select=1, readonly=True),
@@ -166,6 +181,7 @@ class mailgate_message(osv.osv):
'description': fields.text('Description', readonly=True),
'partner_id': fields.many2one('res.partner', 'Partner', required=False),
'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments', readonly=True),
+ 'display_text': fields.function(_get_display_text, method=True, type='text', size="512", string='Display Text'),
}
def init(self, cr):
diff --git a/addons/mail_gateway/mail_gateway_view.xml b/addons/mail_gateway/mail_gateway_view.xml
index 415dc192e50..a9a2d1f96fc 100644
--- a/addons/mail_gateway/mail_gateway_view.xml
+++ b/addons/mail_gateway/mail_gateway_view.xml
@@ -79,41 +79,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py
index 83e5ed4f19f..b6d2bc72b94 100644
--- a/addons/marketing_campaign/marketing_campaign.py
+++ b/addons/marketing_campaign/marketing_campaign.py
@@ -26,6 +26,7 @@ from dateutil.relativedelta import relativedelta
from operator import itemgetter
from traceback import format_exception
from sys import exc_info
+from tools.safe_eval import safe_eval as eval
from osv import fields, osv
import netsvc
@@ -82,6 +83,13 @@ class marketing_campaign(osv.osv):
_name = "marketing.campaign"
_description = "Marketing Campaign"
+
+ def _check_has_start(self, cr, uid, ids, context=None):
+ for campaign in self.browse(cr, uid, ids, context=context):
+ if not any(a.start for a in campaign.activity_ids):
+ return False
+ return True
+
_columns = {
'name': fields.char('Name', size=64, required=True),
'object_id': fields.many2one('ir.model', 'Model', required=True,
@@ -90,15 +98,15 @@ this campaign to be run"),
'partner_field_id': fields.many2one('ir.model.fields', 'Partner Field',
domain="[('model_id', '=', object_id), ('ttype', '=', 'many2one'), ('relation', '=', 'res.partner')]",
help="The generated workitems will be linked to the partner related to the record. If the record is the partner itself left this field empty."),
- 'mode':fields.selection([('test', 'Test Directly'),
+ 'mode': fields.selection([('test', 'Test Directly'),
('test_realtime', 'Test in Realtime'),
('manual', 'With Manual Confirmation'),
('active', 'Normal')],
'Mode', required=True, help= \
-"""Test - It creates and process all the activities directly (without waiting for the delay on transitions) but do not send emails or produce reports.
-Test in Realtime - It creates and process all the activities directly but do not send emails or produce reports.
+"""Test - It creates and process all the activities directly (without waiting for the delay on transitions) but does not send emails or produce reports.
+Test in Realtime - It creates and processes all the activities directly but does not send emails or produce reports.
With Manual Confirmation - the campaigns runs normally, but the user has to validate all workitem manually.
-Normal - the campaign runs normally and automatically sends all emails and reports"""),
+Normal - the campaign runs normally and automatically sends all emails and reports (be very careful with this mode, you're live!)"""),
'state': fields.selection([('draft', 'Draft'),
('running', 'Running'),
('done', 'Done'),
@@ -106,32 +114,34 @@ Normal - the campaign runs normally and automatically sends all emails and repor
'State',),
'activity_ids': fields.one2many('marketing.campaign.activity',
'campaign_id', 'Activities'),
- 'fixed_cost': fields.float('Fixed Cost', help="The fixed cost is cost\
-you required for the campaign"),
+ 'fixed_cost': fields.float('Fixed Cost', help="Fixed cost for the campaign (used for campaign analysis), see also variable cost on activities"),
}
+
_defaults = {
'state': lambda *a: 'draft',
'mode': lambda *a: 'test',
}
+
+ _constraints = [(_check_has_start, 'Please mark at least one activity as a start activity', ['Activities'])]
def state_running_set(self, cr, uid, ids, *args):
# TODO check that all subcampaigns are running
campaign = self.browse(cr, uid, ids[0])
if not campaign.activity_ids :
raise osv.except_osv("Error", "There is no activitity in the campaign")
- actvity_ids = [ act_id.id for act_id in campaign.activity_ids]
+ activity_ids = [ act_id.id for act_id in campaign.activity_ids]
+
+ if not activity_ids:
+ raise osv.except_osv(_("Error"), _("The campaign cannot be started : there are no activities in it"))
+
act_obj = self.pool.get('marketing.campaign.activity')
- act_ids = act_obj.search(cr, uid, [('id', 'in', actvity_ids),
- ('start', '=', True)])
- if not act_ids :
- raise osv.except_osv("Error", "There is no starting activitity in the campaign")
- act_ids = act_obj.search(cr, uid, [('id', 'in', actvity_ids),
+ act_ids = act_obj.search(cr, uid, [('id', 'in', activity_ids),
('type', '=', 'email')])
for activity in act_obj.browse(cr, uid, act_ids):
if not activity.email_template_id.enforce_from_account :
- raise osv.except_osv("Error", "Campaign cannot be start : Email Account is missing in email activity")
+ raise osv.except_osv(_("Error"), _("The campaign cannot be started: an email account is missing in the email activity '%s'")%activity.name)
if activity.email_template_id.enforce_from_account.state != 'approved' :
- raise osv.except_osv("Error", "Campaign cannot be start : Email Account is not approved for email activity")
+ raise osv.except_osv(_("Error"), _("The campaign cannot be started: the email account is not approved in the email activity '%s'")%activity.name)
self.write(cr, uid, ids, {'state': 'running'})
return True
@@ -141,7 +151,7 @@ you required for the campaign"),
[('campaign_id', 'in', ids),
('state', '=', 'running')])
if segment_ids :
- raise osv.except_osv("Error", "Campaign cannot be marked as done before all segments are done")
+ raise osv.except_osv(_("Error"), _("The campaign cannot be marked as done before all segments are done"))
self.write(cr, uid, ids, {'state': 'done'})
return True
@@ -187,7 +197,7 @@ you required for the campaign"),
partner_field = campaign.partner_field_id.name
if partner_field:
return getattr(record, partner_field)
- elif campaign.model_id.model == 'res.partner':
+ elif campaign.object_id.model == 'res.partner':
return record
return None
@@ -206,9 +216,10 @@ class marketing_campaign_segment(osv.osv):
string='Object'),
'ir_filter_id': fields.many2one('ir.filters', 'Filter', help=""),
'sync_last_date': fields.datetime('Latest Synchronization'),
- 'sync_mode': fields.selection([('create_date', 'Sync only on creation'),
- ('write_date', 'Sync at each modification')],
- 'Synchronization Mode'),
+ 'sync_mode': fields.selection([('create_date', 'If record created after last sync'),
+ ('write_date', 'If record modified after last sync (no duplicates)')],
+ 'Workitem creation mode',
+ help="Determines when new workitems should be created for records matching a segment."),
'state': fields.selection([('draft', 'Draft'),
('running', 'Running'),
('done', 'Done'),
@@ -269,6 +280,7 @@ class marketing_campaign_segment(osv.osv):
criteria += eval(segment.ir_filter_id.domain)
object_ids = model_obj.search(cr, uid, criteria, context=context)
+ # XXX TODO: rewrite this loop more efficiently without doing 1 search per record!
for o_ids in model_obj.browse(cr, uid, object_ids, context=context):
# avoid duplicated workitem for the same resource
if segment.sync_mode == 'write_date':
@@ -318,9 +330,9 @@ class marketing_campaign_activity(osv.osv):
'object_id': fields.related('campaign_id','object_id',
type='many2one', relation='ir.model',
string='Object', readonly=True),
- 'start': fields.boolean('Start',help= "This activity is launched when the campaign starts."),
+ 'start': fields.boolean('Start', help= "This activity is launched when the campaign starts.", select=True),
'condition': fields.char('Condition', size=256, required=True,
- help="Python condition to know if the activity can be launched"),
+ help="Python condition to know if the activity can be executed, otherwise it will be deleted or cancelled."),
'type': fields.selection(_action_types, 'Type', required=True,
help="Describe type of action to be performed on the Activity.Eg : Send email,Send paper.."),
'email_template_id': fields.many2one('email.template','Email Template'),
@@ -341,9 +353,9 @@ class marketing_campaign_activity(osv.osv):
'variable_cost': fields.float('Variable Cost'),
'revenue': fields.float('Revenue'),
'signal': fields.char('Signal', size=128,
- help='An activity with a signal can be called programmatically. Attention, the workitem is always created when the signal is send'),
- 'keep_if_condition_not_met': fields.boolean('Keep if condition not met',
- help="By activating this option, the workitems that aren't processed because the condition is not met are marked as cancelled instead of being deleted.")
+ help='An activity with a signal can be called programmatically. Be careful, the workitem is always created when a signal is sent'),
+ 'keep_if_condition_not_met': fields.boolean('Keep as cancelled when condition not met',
+ help="By activating this option, workitems that aren't executed because the condition is not met are marked as cancelled instead of being deleted.")
}
_defaults = {
@@ -460,7 +472,7 @@ class marketing_campaign_transition(osv.osv):
('cosmetic', 'Cosmetic'), # fake plastic transition
],
'Trigger', required=True,
- help="How is triggered the destination workitem"),
+ help="How is the destination workitem triggered"),
}
_defaults = {
@@ -516,7 +528,7 @@ class marketing_campaign_workitem(osv.osv):
def button_draft(self, cr, uid, workitem_ids, context={}):
for wi in self.browse(cr, uid, workitem_ids, context=context):
- if wi.state=='exception':
+ if wi.state in ('exception', 'cancelled'):
self.write(cr, uid, [wi.id], {'state':'todo'}, context=context)
return True
@@ -531,13 +543,13 @@ class marketing_campaign_workitem(osv.osv):
return
activity = workitem.activity_id
+ proxy = self.pool.get(workitem.object_id.model)
+ object_id = proxy.browse(cr, uid, workitem.res_id, context=context)
eval_context = {
- 'pool': self.pool,
- 'cr': cr,
- 'uid': uid,
- 'wi': workitem,
- 'object': activity,
+ 'activity': activity,
+ 'workitem': workitem,
+ 'object': object_id,
'transition': activity.to_ids
}
try:
@@ -585,7 +597,7 @@ class marketing_campaign_workitem(osv.osv):
wi_id = self.create(cr, uid, values, context=context)
# Now, depending of the trigger and the campaign mode
- # we now if must run the newly created workitem.
+ # we know if must run the newly created workitem.
#
# rows = transition trigger \ colums = campaign mode
#
@@ -675,6 +687,9 @@ class email_template(osv.osv):
_defaults = {
'object_name': lambda obj, cr, uid, context: context.get('object_id',False),
}
+
+ # TODO: add constraint to prevent disabling / disapproving an email account used in a running campaign
+
email_template()
class report_xml(osv.osv):
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index 1d07fc1e99c..289730a1531 100644
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -236,20 +236,15 @@
-
-
-
+
-
-
-
+
@@ -350,7 +345,7 @@
-
+
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index 473d67750e0..2e9320e420b 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -188,8 +188,7 @@ class project_issue(osv.osv, crm.crm_case):
method=True, multi='working_days_open', type="float", store=True),
'working_hours_close': fields.function(_compute_day, string='Working Hours to Close the Issue', \
method=True, multi='working_days_close', type="float", store=True),
- '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)]),
+ 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'date_action_last': fields.datetime('Last Action', readonly=1),
'date_action_next': fields.datetime('Next Action', readonly=1),
}
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index cbf24b18f76..d014181bcb5 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -73,14 +73,24 @@
-
+
-
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
@@ -90,17 +100,13 @@
-
+
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/project_scrum/project_scrum.py b/addons/project_scrum/project_scrum.py
index 5fc873c40aa..11e1b785405 100644
--- a/addons/project_scrum/project_scrum.py
+++ b/addons/project_scrum/project_scrum.py
@@ -168,7 +168,7 @@ class project_scrum_product_backlog(osv.osv):
if match:
ids = self.search(cr, uid, [('sprint_id','=', int(match.group(1)))], limit=limit, context=context)
return self.name_get(cr, uid, ids, context=context)
- return super(scrum_product_backlog, self).name_search(cr, uid, name, args, operator,context, limit=limit)
+ return super(project_scrum_product_backlog, self).name_search(cr, uid, name, args, operator,context, limit=limit)
def _calc_progress(self, cr, uid, ids, name, args, context):
res = {}
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/project_scrum/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml
index fd044427869..007399c40a8 100644
--- a/addons/project_scrum/project_scrum_view.xml
+++ b/addons/project_scrum/project_scrum_view.xml
@@ -90,7 +90,7 @@
-
+
\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."
diff --git a/addons/thunderbird/plugin/tiny_plugin-2.0.xpi b/addons/thunderbird/plugin/tiny_plugin-2.0.xpi
index f1ee999490d..e39b655a0fb 100644
Binary files a/addons/thunderbird/plugin/tiny_plugin-2.0.xpi and b/addons/thunderbird/plugin/tiny_plugin-2.0.xpi differ