diff options
| author | Christophe Matthieu <chm@openerp.com> | 2013-07-10 17:13:56 +0200 |
|---|---|---|
| committer | Christophe Matthieu <chm@openerp.com> | 2013-07-10 17:13:56 +0200 |
| commit | f3b72182bf0c97fa328ccc4338469b2cd43a5bce (patch) | |
| tree | 82413672da8ebf3777b05223486aafaa0655e1d3 /addons | |
| parent | c8b21aafe7405ec1a76a771dd6a21199ba69cb01 (diff) | |
| parent | f38ef93a05f4d01c1a883565b5520af6ddb21384 (diff) | |
[MERGE] from trunk
bzr revid: chm@openerp.com-20130710151356-b5prp1zqlgd8lz19
Diffstat (limited to 'addons')
80 files changed, 3254 insertions, 1078 deletions
diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po index 6e2fd083b54..c666e4dcf2e 100644 --- a/addons/account/i18n/ru.po +++ b/addons/account/i18n/ru.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-06-27 14:01+0000\n" +"PO-Revision-Date: 2013-07-02 06:32+0000\n" "Last-Translator: Chertykov Denis <chertykov@gmail.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: 2013-06-28 05:42+0000\n" -"X-Generator: Launchpad (build 16681)\n" +"X-Launchpad-Export-Date: 2013-07-03 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -4707,7 +4707,7 @@ msgstr "Месяц" #: code:addons/account/account.py:668 #, python-format msgid "You cannot change the code of account which contains journal items!" -msgstr "" +msgstr "Нальзя изменить код счета который содержит проводки!" #. module: account #: field:account.config.settings,purchase_sequence_prefix:0 @@ -4826,7 +4826,7 @@ msgstr "Отметьте, если хотите выводить счета с 0 #. module: account #: field:account.move.reconcile,opening_reconciliation:0 msgid "Opening Entries Reconciliation" -msgstr "" +msgstr "Сверка проводок открытия" #. module: account #. openerp-web diff --git a/addons/account/i18n/vi.po b/addons/account/i18n/vi.po index 4bab5df9a60..66b82d479b2 100644 --- a/addons/account/i18n/vi.po +++ b/addons/account/i18n/vi.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-05-10 17:34+0000\n" -"Last-Translator: Raphael Collet (OpenERP) <Unknown>\n" +"PO-Revision-Date: 2013-06-29 14:38+0000\n" +"Last-Translator: Hung Tran <vanda6688@yahoo.com>\n" "Language-Team: Vietnamese <vi@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:19+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-06-30 05:55+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -60,7 +60,7 @@ msgid "Residual" msgstr "Còn lại" #. module: account -#: code:addons/account/account_bank_statement.py:368 +#: code:addons/account/account_bank_statement.py:369 #, python-format msgid "Journal item \"%s\" is not valid." msgstr "" @@ -73,12 +73,12 @@ msgstr "Aged Receivable Till Today" #. module: account #: model:process.transition,name:account.process_transition_invoiceimport0 msgid "Import from invoice or payment" -msgstr "Import from invoice or payment" +msgstr "Nhập từ hóa đơn hoặc khoản thanh toán" #. module: account -#: code:addons/account/account_move_line.py:1061 -#: code:addons/account/account_move_line.py:1146 -#: code:addons/account/account_move_line.py:1213 +#: code:addons/account/account_move_line.py:1058 +#: code:addons/account/account_move_line.py:1143 +#: code:addons/account/account_move_line.py:1210 #, python-format msgid "Bad Account!" msgstr "" @@ -94,7 +94,7 @@ msgstr "Tổng Nợ" msgid "" "Error!\n" "You cannot create recursive account templates." -msgstr "" +msgstr "Lỗi!" #. module: account #. openerp-web @@ -132,15 +132,15 @@ msgstr "" #: code:addons/account/account.py:641 #: code:addons/account/account.py:686 #: code:addons/account/account.py:781 -#: code:addons/account/account.py:1049 -#: code:addons/account/account_invoice.py:788 -#: code:addons/account/account_invoice.py:791 -#: code:addons/account/account_invoice.py:794 -#: code:addons/account/account_invoice.py:1514 +#: code:addons/account/account.py:1058 +#: code:addons/account/account_invoice.py:820 +#: code:addons/account/account_invoice.py:823 +#: code:addons/account/account_invoice.py:826 +#: code:addons/account/account_invoice.py:1545 #: code:addons/account/account_move_line.py:98 -#: code:addons/account/account_move_line.py:774 -#: code:addons/account/account_move_line.py:827 -#: code:addons/account/account_move_line.py:867 +#: code:addons/account/account_move_line.py:771 +#: code:addons/account/account_move_line.py:824 +#: code:addons/account/account_move_line.py:864 #: code:addons/account/wizard/account_fiscalyear_close.py:62 #: code:addons/account/wizard/account_invoice_state.py:44 #: code:addons/account/wizard/account_invoice_state.py:68 @@ -152,7 +152,7 @@ msgid "Warning!" msgstr "Cảnh báo!" #. module: account -#: code:addons/account/account.py:3159 +#: code:addons/account/account.py:3197 #, python-format msgid "Miscellaneous Journal" msgstr "" @@ -192,12 +192,12 @@ msgstr "Hoá đơn được tạo trong 15 ngày qua" #. module: account #: field:accounting.report,label_filter:0 msgid "Column Label" -msgstr "" +msgstr "Nhãn cột" #. module: account #: help:account.config.settings,code_digits:0 msgid "No. of digits to use for account code" -msgstr "" +msgstr "Số chữ số dùng cho mã tài khoản" #. module: account #: help:account.analytic.journal,type:0 @@ -242,7 +242,7 @@ msgstr "Báo cáo của Bỉ" #. module: account #: model:mail.message.subtype,name:account.mt_invoice_validated msgid "Validated" -msgstr "" +msgstr "Đã xác nhận" #. module: account #: model:account.account.type,name:account.account_type_income_view1 @@ -318,7 +318,7 @@ msgstr "Tài khoản chưa đối soát" #. module: account #: field:account.config.settings,module_account_budget:0 msgid "Budget management" -msgstr "" +msgstr "Quản lý quỹ" #. module: account #: view:product.template:0 @@ -336,10 +336,10 @@ msgstr "" #. module: account #: field:account.config.settings,group_multi_currency:0 msgid "Allow multi currencies" -msgstr "" +msgstr "Cho phép đa tiền tệ" #. module: account -#: code:addons/account/account_invoice.py:74 +#: code:addons/account/account_invoice.py:77 #, python-format msgid "You must define an analytic journal of type '%s'!" msgstr "" @@ -357,7 +357,7 @@ msgstr "Tháng Sáu" #: code:addons/account/wizard/account_automatic_reconcile.py:148 #, python-format msgid "You must select accounts to reconcile." -msgstr "" +msgstr "Bạn phải chọn một tài khoản để đối soát" #. module: account #: help:account.config.settings,group_analytic_accounting:0 @@ -370,7 +370,7 @@ msgstr "" #: view:account.invoice.report:0 #: field:account.invoice.report,user_id:0 msgid "Salesperson" -msgstr "" +msgstr "Nhân viên bán hàng" #. module: account #: view:account.bank.statement:0 @@ -660,7 +660,7 @@ msgid "Profit Account" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:1159 +#: code:addons/account/account_move_line.py:1156 #, python-format msgid "No period found or more than one period found for the given date." msgstr "" @@ -671,13 +671,13 @@ msgid "Report of the Sales by Account Type" msgstr "Báo cáo Bán hàng theo Loại Tài khoản" #. module: account -#: code:addons/account/account.py:3163 +#: code:addons/account/account.py:3201 #, python-format msgid "SAJ" msgstr "SAJ" #. module: account -#: code:addons/account/account.py:1553 +#: code:addons/account/account.py:1591 #, python-format msgid "Cannot create move with currency different from .." msgstr "" @@ -730,7 +730,9 @@ msgstr "" #: selection:account.common.partner.report,result_selection:0 #: selection:account.partner.balance,result_selection:0 #: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 #: code:addons/account/report/account_partner_balance.py:297 +#: code:addons/account/report/account_partner_ledger.py:272 #, python-format msgid "Receivable Accounts" msgstr "Các tài khoản phải thu" @@ -738,7 +740,7 @@ msgstr "Các tài khoản phải thu" #. module: account #: view:account.config.settings:0 msgid "Configure your company bank accounts" -msgstr "" +msgstr "Cấu hình tài khoản ngân hàng của công ty" #. module: account #: view:account.invoice.refund:0 @@ -768,7 +770,7 @@ msgid "Are you sure you want to create entries?" msgstr "Are you sure you want to create entries?" #. module: account -#: code:addons/account/account_invoice.py:1330 +#: code:addons/account/account_invoice.py:1361 #, python-format msgid "Invoice partially paid: %s%s of %s%s (%s%s remaining)." msgstr "" @@ -817,7 +819,7 @@ msgstr "" #. module: account #: model:ir.ui.menu,name:account.menu_account_report msgid "Financial Report" -msgstr "" +msgstr "Báo cáo tài chính" #. module: account #: view:account.analytic.account:0 @@ -837,7 +839,7 @@ msgid "Type" msgstr "Loại" #. module: account -#: code:addons/account/account_invoice.py:794 +#: code:addons/account/account_invoice.py:826 #, python-format msgid "" "Taxes are missing!\n" @@ -860,10 +862,10 @@ msgid "Supplier Invoices And Refunds" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:854 +#: code:addons/account/account_move_line.py:851 #, python-format msgid "Entry is already reconciled." -msgstr "" +msgstr "Bút toán đã đối soát xong." #. module: account #: view:account.move.line.unreconcile.select:0 @@ -880,7 +882,7 @@ msgstr "Account Analytic Journal" #. module: account #: view:account.invoice:0 msgid "Send by Email" -msgstr "" +msgstr "Gửi qua Email" #. module: account #: help:account.central.journal,amount_currency:0 @@ -900,7 +902,7 @@ msgstr "J.C./Move name" #. module: account #: view:account.account:0 msgid "Account Code and Name" -msgstr "" +msgstr "Mã tài khoản và tên" #. module: account #: selection:account.entries.report,month:0 @@ -931,9 +933,13 @@ msgid "" " </p>\n" " " msgstr "" +"<p>\n" +" Không tìm thấy mục nhật ký.\n" +" </p>\n" +" " #. module: account -#: code:addons/account/account.py:1639 +#: code:addons/account/account.py:1677 #, python-format msgid "" "You cannot unreconcile journal items if they has been generated by the " @@ -977,7 +983,7 @@ msgstr "Đến hạn" #. module: account #: field:account.config.settings,purchase_journal_id:0 msgid "Purchase journal" -msgstr "" +msgstr "Nhật ký mua hàng" #. module: account #: model:mail.message.subtype,description:account.mt_invoice_paid @@ -1017,7 +1023,7 @@ msgid "Liability" msgstr "Liability" #. module: account -#: code:addons/account/account_invoice.py:867 +#: code:addons/account/account_invoice.py:899 #, python-format msgid "Please define sequence on the journal related to this invoice." msgstr "" @@ -1088,13 +1094,13 @@ msgstr "Mã" #. module: account #: view:account.config.settings:0 msgid "Features" -msgstr "" +msgstr "Tính năng" #. module: account -#: code:addons/account/account.py:2308 -#: code:addons/account/account_bank_statement.py:423 -#: code:addons/account/account_invoice.py:74 -#: code:addons/account/account_invoice.py:744 +#: code:addons/account/account.py:2346 +#: code:addons/account/account_bank_statement.py:424 +#: code:addons/account/account_invoice.py:77 +#: code:addons/account/account_invoice.py:775 #: code:addons/account/account_move_line.py:195 #, python-format msgid "No Analytic Journal !" @@ -1220,7 +1226,7 @@ msgstr "" #. module: account #: model:account.account.type,name:account.data_account_type_bank #: selection:account.bank.accounts.wizard,account_type:0 -#: code:addons/account/account.py:3054 +#: code:addons/account/account.py:3092 #, python-format msgid "Bank" msgstr "Ngân hàng" @@ -1309,7 +1315,7 @@ msgstr "Outgoing Currencies Rate" #: view:account.analytic.account:0 #: field:account.config.settings,chart_template_id:0 msgid "Template" -msgstr "" +msgstr "Mẫu" #. module: account #: selection:account.analytic.journal,type:0 @@ -1401,7 +1407,7 @@ msgstr "Mức" #: code:addons/account/wizard/account_change_currency.py:38 #, python-format msgid "You can only change currency for Draft Invoice." -msgstr "" +msgstr "Bạn chỉ có thể thay đổi đồng tiền cho dự thảo hóa đơn" #. module: account #: report:account.invoice:0 @@ -1427,7 +1433,7 @@ msgstr "Chọn một chu kỳ bắt đầu và một chu kỳ kết thúc" #: model:account.financial.report,name:account.account_financial_report_profitandloss0 #: model:ir.actions.act_window,name:account.action_account_report_pl msgid "Profit and Loss" -msgstr "" +msgstr "Lãi và lỗ" #. module: account #: model:ir.model,name:account.model_account_account_template @@ -1500,7 +1506,7 @@ msgstr "" #. module: account #: field:account.invoice.report,state:0 msgid "Invoice Status" -msgstr "" +msgstr "Tình trạng hóa đơn" #. module: account #: view:account.bank.statement:0 @@ -1522,18 +1528,20 @@ msgstr "Khoản phải thu" #: code:addons/account/account.py:768 #, python-format msgid "%s (copy)" -msgstr "" +msgstr "%s (sao chép)" #. module: account +#: report:account.account.balance:0 #: selection:account.balance.report,display_account:0 #: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 #: selection:account.partner.balance,display_partner:0 #: selection:account.report.general.ledger,display_account:0 msgid "With balance is not equal to 0" msgstr "With balance is not equal to 0" #. module: account -#: code:addons/account/account.py:1445 +#: code:addons/account/account.py:1483 #, python-format msgid "" "There is no default debit account defined \n" @@ -1601,7 +1609,7 @@ msgstr "" #. module: account #: view:account.config.settings:0 msgid "eInvoicing & Payments" -msgstr "" +msgstr "Hóa đơn điện tử & Thanh toán" #. module: account #: view:account.analytic.cost.ledger.journal.report:0 @@ -1640,7 +1648,7 @@ msgstr "Case Code" #. module: account #: field:account.config.settings,company_footer:0 msgid "Bank accounts footer preview" -msgstr "" +msgstr "Xem trước lề dưới tài khoản ngân hàng" #. module: account #: selection:account.account,type:0 @@ -1681,7 +1689,7 @@ msgstr "Không bị thuế" #. module: account #: view:account.journal:0 msgid "Advanced Settings" -msgstr "" +msgstr "Thiết lập nâng cao" #. module: account #: view:account.bank.statement:0 @@ -1756,8 +1764,10 @@ msgstr "" #: view:account.invoice:0 #: view:account.invoice.report:0 #: field:account.move.line,invoice:0 +#: code:addons/account/account_invoice.py:1157 #: model:ir.model,name:account.model_account_invoice #: model:res.request.link,name:account.req_link_invoice +#, python-format msgid "Invoice" msgstr "Hóa đơn" @@ -1810,7 +1820,7 @@ msgstr "Doanh số theo loại tài khoản" #: model:account.payment.term,name:account.account_payment_term_15days #: model:account.payment.term,note:account.account_payment_term_15days msgid "15 Days" -msgstr "" +msgstr "15 ngày" #. module: account #: model:ir.ui.menu,name:account.periodical_processing_invoicing @@ -1832,7 +1842,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:857 +#: code:addons/account/account_move_line.py:854 #, python-format msgid "Some entries are already reconciled." msgstr "" @@ -1880,7 +1890,7 @@ msgstr "nếu thiết lập này bị sai. bạn có thể ẩn nó thay vì xó #. module: account #: field:account.report.general.ledger,sortby:0 msgid "Sort by" -msgstr "" +msgstr "Xếp theo" #. module: account #: model:ir.actions.act_window,name:account.act_account_partner_account_move_all @@ -1948,12 +1958,12 @@ msgstr "Draft statement" #. module: account #: model:mail.message.subtype,description:account.mt_invoice_validated msgid "Invoice validated" -msgstr "" +msgstr "Hóa đơn đã xác nhận" #. module: account #: field:account.config.settings,module_account_check_writing:0 msgid "Pay your suppliers by check" -msgstr "" +msgstr "Trả tiền cho NCC bằng séc" #. module: account #: field:account.move.line.reconcile,credit:0 @@ -1984,36 +1994,36 @@ msgstr "" #: code:addons/account/account.py:634 #: code:addons/account/account.py:636 #: code:addons/account/account.py:930 -#: code:addons/account/account.py:1062 -#: code:addons/account/account.py:1064 -#: code:addons/account/account.py:1103 -#: code:addons/account/account.py:1283 -#: code:addons/account/account.py:1297 -#: code:addons/account/account.py:1320 -#: code:addons/account/account.py:1327 -#: code:addons/account/account.py:1549 -#: code:addons/account/account.py:1553 -#: code:addons/account/account.py:1639 -#: code:addons/account/account.py:2320 -#: code:addons/account/account.py:2640 -#: code:addons/account/account.py:3427 +#: code:addons/account/account.py:1071 +#: code:addons/account/account.py:1073 +#: code:addons/account/account.py:1116 +#: code:addons/account/account.py:1319 +#: code:addons/account/account.py:1333 +#: code:addons/account/account.py:1356 +#: code:addons/account/account.py:1363 +#: code:addons/account/account.py:1587 +#: code:addons/account/account.py:1591 +#: code:addons/account/account.py:1677 +#: code:addons/account/account.py:2358 +#: code:addons/account/account.py:2678 +#: code:addons/account/account.py:3465 #: code:addons/account/account_analytic_line.py:89 #: code:addons/account/account_analytic_line.py:98 -#: code:addons/account/account_bank_statement.py:367 -#: code:addons/account/account_bank_statement.py:380 -#: code:addons/account/account_bank_statement.py:418 +#: code:addons/account/account_bank_statement.py:368 +#: code:addons/account/account_bank_statement.py:381 +#: code:addons/account/account_bank_statement.py:419 #: code:addons/account/account_cash_statement.py:256 #: code:addons/account/account_cash_statement.py:300 -#: code:addons/account/account_invoice.py:867 -#: code:addons/account/account_invoice.py:901 -#: code:addons/account/account_invoice.py:1091 -#: code:addons/account/account_move_line.py:578 -#: code:addons/account/account_move_line.py:831 +#: code:addons/account/account_invoice.py:899 +#: code:addons/account/account_invoice.py:933 +#: code:addons/account/account_invoice.py:1124 +#: code:addons/account/account_move_line.py:579 +#: code:addons/account/account_move_line.py:828 +#: code:addons/account/account_move_line.py:851 #: code:addons/account/account_move_line.py:854 -#: code:addons/account/account_move_line.py:857 -#: code:addons/account/account_move_line.py:1122 -#: code:addons/account/account_move_line.py:1124 -#: code:addons/account/account_move_line.py:1159 +#: code:addons/account/account_move_line.py:1119 +#: code:addons/account/account_move_line.py:1121 +#: code:addons/account/account_move_line.py:1156 #: code:addons/account/report/common_report_header.py:92 #: code:addons/account/wizard/account_change_currency.py:38 #: code:addons/account/wizard/account_change_currency.py:59 @@ -2027,11 +2037,11 @@ msgstr "" #: code:addons/account/wizard/account_report_common.py:158 #: code:addons/account/wizard/account_report_common.py:164 #: code:addons/account/wizard/account_use_model.py:44 -#: code:addons/account/wizard/pos_box.py:32 -#: code:addons/account/wizard/pos_box.py:36 +#: code:addons/account/wizard/pos_box.py:31 +#: code:addons/account/wizard/pos_box.py:35 #, python-format msgid "Error!" -msgstr "" +msgstr "Lỗi!" #. module: account #: model:ir.actions.act_window,help:account.action_invoice_tree2 @@ -2070,7 +2080,7 @@ msgid "period close" msgstr "đóng chu kỳ" #. module: account -#: code:addons/account/account.py:1049 +#: code:addons/account/account.py:1058 #, python-format msgid "" "This journal already contains items for this period, therefore you cannot " @@ -2085,7 +2095,7 @@ msgstr "Entries By Line" #. module: account #: field:account.vat.declaration,based_on:0 msgid "Based on" -msgstr "" +msgstr "Dựa trên" #. module: account #: model:ir.actions.act_window,help:account.action_bank_statement_tree @@ -2133,7 +2143,7 @@ msgstr "Phân tích ngân quỹ" #. module: account #: model:ir.actions.report.xml,name:account.account_journal_sale_purchase msgid "Sale/Purchase Journal" -msgstr "" +msgstr "Nhật ký Mua/Bán hàng" #. module: account #: view:account.analytic.account:0 @@ -2142,7 +2152,7 @@ msgid "Analytic account" msgstr "Tài khoản phân tích" #. module: account -#: code:addons/account/account_bank_statement.py:405 +#: code:addons/account/account_bank_statement.py:406 #, python-format msgid "Please verify that an account is defined in the journal." msgstr "Vui lòng kiểm tra việc gán một tài khoản cho sổ nhật ký này." @@ -2156,7 +2166,7 @@ msgstr "Hợp lệ" #: field:account.bank.statement,message_follower_ids:0 #: field:account.invoice,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Người theo dõi" #. module: account #: model:ir.actions.act_window,name:account.action_account_print_journal @@ -2185,14 +2195,14 @@ msgstr "Account Aged Trial balance Report" #. module: account #: view:account.fiscalyear.close.state:0 msgid "Close Fiscal Year" -msgstr "" +msgstr "Đóng năm tài khóa" #. module: account #. openerp-web #: code:addons/account/static/src/xml/account_move_line_quickadd.xml:14 #, python-format msgid "Journal :" -msgstr "" +msgstr "Nhật ký:" #. module: account #: sql_constraint:account.fiscal.position.tax:0 @@ -2209,12 +2219,12 @@ msgstr "Định nghĩa thuế" #: view:account.config.settings:0 #: model:ir.actions.act_window,name:account.action_account_config msgid "Configure Accounting" -msgstr "" +msgstr "Cấu hình kế toán" #. module: account #: field:account.invoice.report,uom_name:0 msgid "Reference Unit of Measure" -msgstr "" +msgstr "Tham chiếu đơn vị tính" #. module: account #: help:account.journal,allow_date:0 @@ -2230,12 +2240,12 @@ msgstr "" #: code:addons/account/static/src/xml/account_move_reconciliation.xml:8 #, python-format msgid "Good job!" -msgstr "" +msgstr "Tốt lắm!" #. module: account #: field:account.config.settings,module_account_asset:0 msgid "Assets management" -msgstr "" +msgstr "Quản lý tài sản" #. module: account #: view:account.account:0 @@ -2244,7 +2254,9 @@ msgstr "" #: selection:account.common.partner.report,result_selection:0 #: selection:account.partner.balance,result_selection:0 #: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 #: code:addons/account/report/account_partner_balance.py:299 +#: code:addons/account/report/account_partner_ledger.py:274 #, python-format msgid "Payable Accounts" msgstr "Các tài khoản phải trả" @@ -2411,7 +2423,7 @@ msgstr "Search Chart of Account Templates" #. module: account #: report:account.invoice:0 msgid "Customer Code" -msgstr "" +msgstr "Mã khách hàng" #. module: account #: view:account.account.type:0 @@ -2554,7 +2566,7 @@ msgid "Create an Account Based on this Template" msgstr "Tạo một Tài khoản dựa trên mẫu này" #. module: account -#: code:addons/account/account_invoice.py:901 +#: code:addons/account/account_invoice.py:933 #, python-format msgid "" "Cannot create the invoice.\n" @@ -2575,7 +2587,7 @@ msgid "Main Sequence" msgstr "Main Sequence" #. module: account -#: code:addons/account/account_bank_statement.py:477 +#: code:addons/account/account_bank_statement.py:478 #, python-format msgid "" "In order to delete a bank statement, you must first cancel it to delete " @@ -2599,7 +2611,7 @@ msgid "Fiscal Positions" msgstr "Fiscal Positions" #. module: account -#: code:addons/account/account_move_line.py:578 +#: code:addons/account/account_move_line.py:579 #, python-format msgid "You cannot create journal items on a closed account %s %s." msgstr "" @@ -2707,7 +2719,7 @@ msgid "Account Model Entries" msgstr "Account Model Entries" #. module: account -#: code:addons/account/account.py:3164 +#: code:addons/account/account.py:3202 #, python-format msgid "EXJ" msgstr "EXJ" @@ -2823,21 +2835,20 @@ msgid "Accounts" msgstr "Các tài khoản" #. module: account -#: code:addons/account/account.py:3503 -#: code:addons/account/account_bank_statement.py:404 -#: code:addons/account/account_invoice.py:378 -#: code:addons/account/account_invoice.py:484 -#: code:addons/account/account_invoice.py:582 -#: code:addons/account/account_invoice.py:597 -#: code:addons/account/account_invoice.py:605 -#: code:addons/account/account_invoice.py:627 -#: code:addons/account/account_move_line.py:535 +#: code:addons/account/account.py:3541 +#: code:addons/account/account_bank_statement.py:405 +#: code:addons/account/account_invoice.py:507 +#: code:addons/account/account_invoice.py:609 +#: code:addons/account/account_invoice.py:624 +#: code:addons/account/account_invoice.py:632 +#: code:addons/account/account_invoice.py:657 +#: code:addons/account/account_move_line.py:536 #, python-format msgid "Configuration Error!" msgstr "Lỗi cấu hình!" #. module: account -#: code:addons/account/account_bank_statement.py:433 +#: code:addons/account/account_bank_statement.py:434 #, python-format msgid "Statement %s confirmed, journal items were created." msgstr "" @@ -3030,7 +3041,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account.py:1062 +#: code:addons/account/account.py:1071 #, python-format msgid "You should choose the periods that belong to the same company." msgstr "" @@ -3043,7 +3054,7 @@ msgid "Sales by Account" msgstr "Doanh thu theo tài khoản" #. module: account -#: code:addons/account/account.py:1411 +#: code:addons/account/account.py:1449 #, python-format msgid "You cannot delete a posted journal entry \"%s\"." msgstr "" @@ -3059,8 +3070,8 @@ msgid "Sale journal" msgstr "" #. module: account -#: code:addons/account/account.py:2308 -#: code:addons/account/account_invoice.py:744 +#: code:addons/account/account.py:2346 +#: code:addons/account/account_invoice.py:775 #: code:addons/account/account_move_line.py:195 #, python-format msgid "You have to define an analytic journal on the '%s' journal!" @@ -3227,7 +3238,7 @@ msgid "Fiscal Position" msgstr "Fiscal Position" #. module: account -#: code:addons/account/account_invoice.py:791 +#: code:addons/account/account_invoice.py:823 #, python-format msgid "" "Tax base different!\n" @@ -3325,7 +3336,7 @@ msgstr "" "always use the rate at date." #. module: account -#: code:addons/account/account.py:2640 +#: code:addons/account/account.py:2678 #, python-format msgid "There is no parent code for the template account." msgstr "" @@ -3388,8 +3399,8 @@ msgid "View" msgstr "View" #. module: account -#: code:addons/account/account.py:3422 -#: code:addons/account/account_bank.py:95 +#: code:addons/account/account.py:3460 +#: code:addons/account/account_bank.py:94 #, python-format msgid "BNK" msgstr "BNK" @@ -3659,7 +3670,7 @@ msgstr "" "have the same references than the statement itself" #. module: account -#: code:addons/account/account_invoice.py:984 +#: code:addons/account/account_invoice.py:1016 #, python-format msgid "" "You cannot create an invoice on a centralized journal. Uncheck the " @@ -3674,7 +3685,7 @@ msgid "Starting Balance" msgstr "Số dư ban đầu" #. module: account -#: code:addons/account/account_invoice.py:1434 +#: code:addons/account/account_invoice.py:1465 #, python-format msgid "No Partner Defined !" msgstr "Không có đối tác được định nghĩa" @@ -3728,7 +3739,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:535 +#: code:addons/account/account_move_line.py:536 #, python-format msgid "" "Cannot find any account journal of %s type for this company.\n" @@ -3878,7 +3889,7 @@ msgid "Period Length (days)" msgstr "" #. module: account -#: code:addons/account/account.py:1327 +#: code:addons/account/account.py:1363 #, python-format msgid "" "You cannot modify a posted entry of this journal.\n" @@ -3947,9 +3958,13 @@ msgid "VAT :" msgstr "Thuế GTGT :" #. module: account +#: report:account.account.balance:0 #: report:account.central.journal:0 #: view:account.config.settings:0 +#: report:account.general.journal:0 #: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.journal.period.print:0 #: report:account.partner.balance:0 #: report:account.third_party_ledger:0 #: report:account.third_party_ledger_other:0 @@ -4041,7 +4056,7 @@ msgid "Chart of Accounts Template" msgstr "Hoạch đồ Kế toán Mẫu" #. module: account -#: code:addons/account/account.py:2320 +#: code:addons/account/account.py:2358 #, python-format msgid "" "Maturity date of entry line generated by model line '%s' of model '%s' is " @@ -4053,8 +4068,10 @@ msgstr "" "Hãy xác định đối tác trên nó" #. module: account +#: report:account.account.balance:0 #: selection:account.balance.report,display_account:0 #: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 #: selection:account.report.general.ledger,display_account:0 #: selection:account.tax,type_tax_use:0 #: selection:account.tax.template,type_tax_use:0 @@ -4213,7 +4230,7 @@ msgid "Name" msgstr "Tên" #. module: account -#: code:addons/account/installer.py:94 +#: code:addons/account/installer.py:115 #, python-format msgid "No unconfigured company !" msgstr "" @@ -4284,8 +4301,8 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:1061 -#: code:addons/account/account_move_line.py:1146 +#: code:addons/account/account_move_line.py:1058 +#: code:addons/account/account_move_line.py:1143 #, python-format msgid "You cannot use an inactive account." msgstr "" @@ -4315,7 +4332,7 @@ msgid "Consolidated Children" msgstr "Consolidated Children" #. module: account -#: code:addons/account/account_invoice.py:550 +#: code:addons/account/account_invoice.py:573 #: code:addons/account/wizard/account_invoice_refund.py:146 #, python-format msgid "Insufficient Data!" @@ -4523,7 +4540,7 @@ msgid "Cancel the Selected Invoices" msgstr "Hủy bỏ các hóa đơn được chọn" #. module: account -#: code:addons/account/account_bank_statement.py:423 +#: code:addons/account/account_bank_statement.py:424 #, python-format msgid "You have to assign an analytic journal on the '%s' journal!" msgstr "" @@ -4590,8 +4607,8 @@ msgid "Supplier invoice sequence" msgstr "" #. module: account -#: code:addons/account/account_invoice.py:583 -#: code:addons/account/account_invoice.py:598 +#: code:addons/account/account_invoice.py:610 +#: code:addons/account/account_invoice.py:625 #, python-format msgid "" "Cannot find a chart of account, you should create one from Settings\\" @@ -4654,7 +4671,7 @@ msgid "Account Base Code" msgstr "Account Base Code" #. module: account -#: code:addons/account/account_move_line.py:867 +#: code:addons/account/account_move_line.py:864 #, python-format msgid "" "You have to provide an account for the write off/exchange difference entry." @@ -4720,7 +4737,7 @@ msgid "Statement from invoice or payment" msgstr "Statement from invoice or payment" #. module: account -#: code:addons/account/installer.py:94 +#: code:addons/account/installer.py:115 #, python-format msgid "" "There is currently no company without chart of account. The wizard will " @@ -4774,7 +4791,7 @@ msgid "Bank statements are entered in the system." msgstr "Bank statements are entered in the system." #. module: account -#: code:addons/account/wizard/account_reconcile.py:121 +#: code:addons/account/wizard/account_reconcile.py:122 #, python-format msgid "Reconcile Writeoff" msgstr "Reconcile Writeoff" @@ -4864,7 +4881,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_invoice.py:627 +#: code:addons/account/account_invoice.py:658 #, python-format msgid "" "Cannot find any account journal of %s type for this company.\n" @@ -4879,7 +4896,7 @@ msgid "Based On" msgstr "Dựa trên" #. module: account -#: code:addons/account/account.py:3166 +#: code:addons/account/account.py:3204 #, python-format msgid "ECNJ" msgstr "ECNJ" @@ -4945,7 +4962,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account.py:3356 +#: code:addons/account/account.py:3394 #, python-format msgid "Purchase Tax %.2f%%" msgstr "" @@ -5019,7 +5036,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account.py:3167 +#: code:addons/account/account.py:3205 #, python-format msgid "MISC" msgstr "" @@ -5188,7 +5205,7 @@ msgid "Tax Application" msgstr "Tax Application" #. module: account -#: code:addons/account/account_invoice.py:890 +#: code:addons/account/account_invoice.py:922 #, python-format msgid "" "Please verify the price of the invoice !\n" @@ -5362,7 +5379,7 @@ msgid "Target Moves" msgstr "Target Moves" #. module: account -#: code:addons/account/account.py:1416 +#: code:addons/account/account.py:1454 #, python-format msgid "" "Move cannot be deleted if linked to an invoice. (Invoice: %s - Move ID:%s)" @@ -5443,7 +5460,7 @@ msgid "Internal Name" msgstr "Tên nội bộ" #. module: account -#: code:addons/account/account_move_line.py:1188 +#: code:addons/account/account_move_line.py:1185 #, python-format msgid "" "Cannot create an automatic sequence for this piece.\n" @@ -5515,7 +5532,7 @@ msgid "Compute Code (if type=code)" msgstr "Compute Code (if type=code)" #. module: account -#: code:addons/account/account_invoice.py:485 +#: code:addons/account/account_invoice.py:508 #, python-format msgid "" "Cannot find a chart of accounts for this company, you should create one." @@ -5646,7 +5663,7 @@ msgid "Recompute taxes and total" msgstr "" #. module: account -#: code:addons/account/account.py:1103 +#: code:addons/account/account.py:1116 #, python-format msgid "You cannot modify/delete a journal with entries for this period." msgstr "" @@ -5676,7 +5693,7 @@ msgid "Amount Computation" msgstr "Tính toán giá trị" #. module: account -#: code:addons/account/account_move_line.py:1108 +#: code:addons/account/account_move_line.py:1105 #, python-format msgid "You can not add/modify entries in a closed period %s of journal %s." msgstr "" @@ -5976,7 +5993,7 @@ msgid "Fixed Amount" msgstr "Giá trị cố định" #. module: account -#: code:addons/account/account_move_line.py:1059 +#: code:addons/account/account_move_line.py:1056 #, python-format msgid "You cannot change the tax, you should remove and recreate lines." msgstr "" @@ -6027,14 +6044,14 @@ msgid "Child Accounts" msgstr "Tài khoản con" #. module: account -#: code:addons/account/account_move_line.py:1120 +#: code:addons/account/account_move_line.py:1117 #, python-format msgid "Move name (id): %s (%s)" msgstr "" #. module: account #: view:account.move.line.reconcile:0 -#: code:addons/account/account_move_line.py:882 +#: code:addons/account/account_move_line.py:879 #, python-format msgid "Write-Off" msgstr "Miễn bỏ" @@ -6060,7 +6077,7 @@ msgstr "Income" #: view:account.config.settings:0 #: view:account.invoice:0 #: view:account.invoice.report:0 -#: code:addons/account/account_invoice.py:355 +#: code:addons/account/account_invoice.py:390 #, python-format msgid "Supplier" msgstr "Nhà cung cấp" @@ -6080,7 +6097,7 @@ msgid "Account n°" msgstr "Tài khoản số" #. module: account -#: code:addons/account/account_invoice.py:92 +#: code:addons/account/account_invoice.py:95 #, python-format msgid "Free Reference" msgstr "Tham chiếu tự do" @@ -6090,7 +6107,9 @@ msgstr "Tham chiếu tự do" #: selection:account.common.partner.report,result_selection:0 #: selection:account.partner.balance,result_selection:0 #: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 #: code:addons/account/report/account_partner_balance.py:301 +#: code:addons/account/report/account_partner_ledger.py:276 #, python-format msgid "Receivable and Payable Accounts" msgstr "Các Tài khoản Phải thu và Phải trả" @@ -6199,7 +6218,7 @@ msgid "Filter by" msgstr "Lọc theo" #. module: account -#: code:addons/account/account.py:2296 +#: code:addons/account/account.py:2334 #, python-format msgid "You have a wrong expression \"%(...)s\" in your model !" msgstr "" @@ -6247,7 +6266,7 @@ msgid "Number of Days" msgstr "Số ngày" #. module: account -#: code:addons/account/account.py:1321 +#: code:addons/account/account.py:1357 #, python-format msgid "" "You cannot validate this journal entry because account \"%s\" does not " @@ -6395,7 +6414,7 @@ msgid "Models" msgstr "" #. module: account -#: code:addons/account/account_invoice.py:1091 +#: code:addons/account/account_invoice.py:1124 #, python-format msgid "" "You cannot cancel an invoice which is partially paid. You need to " @@ -6567,7 +6586,7 @@ msgid "You cannot create journal items on closed account." msgstr "" #. module: account -#: code:addons/account/account_invoice.py:606 +#: code:addons/account/account_invoice.py:633 #, python-format msgid "Invoice line account's company and invoice's compnay does not match." msgstr "" @@ -6588,7 +6607,7 @@ msgid "The related account currency if not equal to the company one." msgstr "The related account currency if not equal to the company one." #. module: account -#: code:addons/account/installer.py:48 +#: code:addons/account/installer.py:69 #, python-format msgid "Custom" msgstr "" @@ -6615,7 +6634,7 @@ msgid "Internal Transfers Account" msgstr "" #. module: account -#: code:addons/account/wizard/pos_box.py:33 +#: code:addons/account/wizard/pos_box.py:32 #, python-format msgid "Please check that the field 'Journal' is set on the Bank Statement" msgstr "" @@ -6641,7 +6660,7 @@ msgid "Power" msgstr "Power" #. module: account -#: code:addons/account/account.py:3427 +#: code:addons/account/account.py:3465 #, python-format msgid "Cannot generate an unused journal code." msgstr "" @@ -6717,12 +6736,12 @@ msgstr "" "children. In this case, the evaluation order is important." #. module: account -#: code:addons/account/account.py:1410 -#: code:addons/account/account.py:1415 -#: code:addons/account/account.py:1444 -#: code:addons/account/account.py:1451 -#: code:addons/account/account_invoice.py:983 -#: code:addons/account/account_move_line.py:1008 +#: code:addons/account/account.py:1448 +#: code:addons/account/account.py:1453 +#: code:addons/account/account.py:1482 +#: code:addons/account/account.py:1489 +#: code:addons/account/account_invoice.py:1015 +#: code:addons/account/account_move_line.py:1005 #: code:addons/account/wizard/account_automatic_reconcile.py:148 #: code:addons/account/wizard/account_fiscalyear_close.py:88 #: code:addons/account/wizard/account_fiscalyear_close.py:99 @@ -6807,7 +6826,9 @@ msgstr "" #: report:account.invoice:0 #: selection:account.invoice,type:0 #: selection:account.invoice.report,type:0 +#: code:addons/account/account_invoice.py:1160 #: selection:report.invoice.created,type:0 +#, python-format msgid "Supplier Refund" msgstr "Hoàn tiền cho Nhà cung cấp" @@ -6952,7 +6973,7 @@ msgstr "Analytic Entries Statistics" #. module: account #: code:addons/account/account_analytic_line.py:142 -#: code:addons/account/account_move_line.py:958 +#: code:addons/account/account_move_line.py:955 #, python-format msgid "Entries: " msgstr "Các bút toán: " @@ -7065,7 +7086,7 @@ msgstr "" #. module: account #: code:addons/account/account.py:1024 -#: code:addons/account/account_move_line.py:1108 +#: code:addons/account/account_move_line.py:1105 #, python-format msgid "Error !" msgstr "Lỗi !" @@ -7292,7 +7313,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account.py:2266 +#: code:addons/account/account.py:2304 #, python-format msgid "" "You can specify year, month and date in the name of the model using the " @@ -7371,7 +7392,7 @@ msgid "Done" msgstr "Hoàn tất" #. module: account -#: code:addons/account/account.py:1283 +#: code:addons/account/account.py:1319 #, python-format msgid "" "You cannot validate a non-balanced entry.\n" @@ -7667,7 +7688,7 @@ msgstr "Báo cáo" #. module: account #. openerp-web -#: code:addons/account/account_move_line.py:783 +#: code:addons/account/account_move_line.py:780 #: code:addons/account/static/src/js/account_move_reconciliation.js:90 #, python-format msgid "Warning" @@ -7733,7 +7754,7 @@ msgid "Use model" msgstr "Sử dụng mô hình" #. module: account -#: code:addons/account/account.py:1452 +#: code:addons/account/account.py:1490 #, python-format msgid "" "There is no default credit account defined \n" @@ -7784,7 +7805,7 @@ msgid "Root/View" msgstr "" #. module: account -#: code:addons/account/account.py:3168 +#: code:addons/account/account.py:3206 #, python-format msgid "OPEJ" msgstr "" @@ -7853,7 +7874,7 @@ msgid "Maturity Date" msgstr "" #. module: account -#: code:addons/account/account.py:3155 +#: code:addons/account/account.py:3193 #, python-format msgid "Sales Journal" msgstr "Sổ nhật ký Bán hàng" @@ -7864,7 +7885,7 @@ msgid "Invoice Tax" msgstr "Thuế Hóa đơn" #. module: account -#: code:addons/account/account_move_line.py:1188 +#: code:addons/account/account_move_line.py:1185 #, python-format msgid "No piece number !" msgstr "No piece number !" @@ -7903,7 +7924,7 @@ msgid "Sales Properties" msgstr "Các thuộc tính Bán hàng" #. module: account -#: code:addons/account/account.py:3503 +#: code:addons/account/account.py:3541 #, python-format msgid "" "You have to set a code for the bank account defined on the selected chart of " @@ -7928,7 +7949,7 @@ msgstr "Đến" #. module: account #: selection:account.move.line,centralisation:0 -#: code:addons/account/account.py:1503 +#: code:addons/account/account.py:1541 #, python-format msgid "Currency Adjustment" msgstr "" @@ -7960,7 +7981,7 @@ msgid "May" msgstr "Tháng Năm" #. module: account -#: code:addons/account/account_invoice.py:788 +#: code:addons/account/account_invoice.py:820 #, python-format msgid "Global taxes defined, but they are not in invoice lines !" msgstr "" @@ -8001,7 +8022,7 @@ msgstr "Post Journal Entries" #: view:account.config.settings:0 #: view:account.invoice:0 #: view:account.invoice.report:0 -#: code:addons/account/account_invoice.py:353 +#: code:addons/account/account_invoice.py:388 #, python-format msgid "Customer" msgstr "Khách hàng" @@ -8017,7 +8038,7 @@ msgstr "" #: selection:account.bank.accounts.wizard,account_type:0 #: selection:account.entries.report,type:0 #: selection:account.journal,type:0 -#: code:addons/account/account.py:3054 +#: code:addons/account/account.py:3092 #, python-format msgid "Cash" msgstr "Tiền mặt" @@ -8187,6 +8208,7 @@ msgstr "Đã sửa" #: code:addons/account/account.py:653 #: code:addons/account/account.py:656 #: code:addons/account/account.py:668 +#: code:addons/account/account.py:1031 #, python-format msgid "Warning !" msgstr "Cảnh báo !" @@ -8254,7 +8276,7 @@ msgid "Select a currency to apply on the invoice" msgstr "Chọn một loại tiền để áp dụng cho hóa đơn" #. module: account -#: code:addons/account/account_invoice.py:869 +#: code:addons/account/account_invoice.py:901 #, python-format msgid "No Invoice Lines !" msgstr "No Invoice Lines !" @@ -8279,7 +8301,7 @@ msgid "Tax Use In" msgstr "Thuế sử dụng trong" #. module: account -#: code:addons/account/account_bank_statement.py:381 +#: code:addons/account/account_bank_statement.py:382 #, python-format msgid "" "The statement balance is incorrect !\n" @@ -8287,7 +8309,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_bank_statement.py:419 +#: code:addons/account/account_bank_statement.py:420 #, python-format msgid "The account entries lines are not in valid state." msgstr "The account entries lines are not in valid state." @@ -8331,7 +8353,7 @@ msgid "Associated Partner" msgstr "Đối tác Liên quan" #. module: account -#: code:addons/account/account_invoice.py:1434 +#: code:addons/account/account_invoice.py:1465 #, python-format msgid "You must first select a partner !" msgstr "You must first select a partner !" @@ -8412,13 +8434,13 @@ msgstr "" "tính toán các khoản thuế tiếp theo" #. module: account -#: code:addons/account/account.py:3158 +#: code:addons/account/account.py:3196 #, python-format msgid "Purchase Refund Journal" msgstr "Sổ nhật ký Hoàn tiền Mua hàng" #. module: account -#: code:addons/account/account.py:1297 +#: code:addons/account/account.py:1333 #, python-format msgid "Please define a sequence on the journal." msgstr "" @@ -8663,7 +8685,7 @@ msgid "${object.company_id.name} Invoice (Ref ${object.number or 'n/a'})" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:1213 +#: code:addons/account/account_move_line.py:1210 #, python-format msgid "" "You cannot use this general account in this journal, check the tab 'Entry " @@ -8764,7 +8786,7 @@ msgid "The partner account used for this invoice." msgstr "The partner account used for this invoice." #. module: account -#: code:addons/account/account.py:3353 +#: code:addons/account/account.py:3391 #, python-format msgid "Tax %.2f%%" msgstr "" @@ -8782,7 +8804,7 @@ msgid "Payment Term Line" msgstr "Payment Term Line" #. module: account -#: code:addons/account/account.py:3156 +#: code:addons/account/account.py:3194 #, python-format msgid "Purchase Journal" msgstr "Purchase Journal" @@ -8953,7 +8975,7 @@ msgid "Journal Name" msgstr "Journal Name" #. module: account -#: code:addons/account/account_move_line.py:832 +#: code:addons/account/account_move_line.py:829 #, python-format msgid "Entry \"%s\" is not valid !" msgstr "Bút toán \"%s\" không hợp lệ !" @@ -9005,7 +9027,7 @@ msgstr "" "entry." #. module: account -#: code:addons/account/account_move_line.py:1009 +#: code:addons/account/account_move_line.py:1006 #, python-format msgid "The account move (%s) for centralisation has been confirmed." msgstr "" @@ -9067,7 +9089,7 @@ msgid "Reconciled entries" msgstr "Reconciled entries" #. module: account -#: code:addons/account/account.py:2296 +#: code:addons/account/account.py:2334 #, python-format msgid "Wrong model !" msgstr "" @@ -9089,7 +9111,7 @@ msgid "Print Account Partner Balance" msgstr "Print Account Partner Balance" #. module: account -#: code:addons/account/account_move_line.py:1124 +#: code:addons/account/account_move_line.py:1121 #, python-format msgid "" "You cannot do this modification on a reconciled entry. You can just change " @@ -9123,7 +9145,7 @@ msgstr "chưa biết" #. module: account #: field:account.fiscalyear.close,journal_id:0 -#: code:addons/account/account.py:3160 +#: code:addons/account/account.py:3198 #, python-format msgid "Opening Entries Journal" msgstr "Opening Entries Journal" @@ -9220,7 +9242,7 @@ msgid "Unit of Currency" msgstr "" #. module: account -#: code:addons/account/account.py:3157 +#: code:addons/account/account.py:3195 #, python-format msgid "Sales Refund Journal" msgstr "Sales Refund Journal" @@ -9286,13 +9308,13 @@ msgid "Purchase Tax(%)" msgstr "Thuế mua hàng(%)" #. module: account -#: code:addons/account/account_invoice.py:869 +#: code:addons/account/account_invoice.py:901 #, python-format msgid "Please create some invoice lines." msgstr "Please create some invoice lines." #. module: account -#: code:addons/account/wizard/pos_box.py:37 +#: code:addons/account/wizard/pos_box.py:36 #, python-format msgid "" "Please check that the field 'Internal Transfers Account' is set on the " @@ -9305,7 +9327,7 @@ msgid "Display Detail" msgstr "" #. module: account -#: code:addons/account/account.py:3165 +#: code:addons/account/account.py:3203 #, python-format msgid "SCNJ" msgstr "SCNJ" @@ -9467,8 +9489,8 @@ msgid "Receivable Account" msgstr "Tài khoản Phải thu" #. module: account -#: code:addons/account/account_move_line.py:774 -#: code:addons/account/account_move_line.py:827 +#: code:addons/account/account_move_line.py:771 +#: code:addons/account/account_move_line.py:824 #, python-format msgid "To reconcile the entries company should be the same for all entries." msgstr "" @@ -9569,7 +9591,7 @@ msgid "Move" msgstr "Move" #. module: account -#: code:addons/account/account_bank_statement.py:477 +#: code:addons/account/account_bank_statement.py:478 #: code:addons/account/wizard/account_period_close.py:51 #, python-format msgid "Invalid Action!" @@ -9666,7 +9688,7 @@ msgid "Balance :" msgstr "Số dư :" #. module: account -#: code:addons/account/account.py:1549 +#: code:addons/account/account.py:1587 #, python-format msgid "Cannot create moves for different companies." msgstr "" @@ -9757,7 +9779,7 @@ msgid "Immediate Payment" msgstr "" #. module: account -#: code:addons/account/account.py:1464 +#: code:addons/account/account.py:1502 #, python-format msgid " Centralisation" msgstr "" @@ -9846,7 +9868,7 @@ msgid "Unreconciled" msgstr "Chưa được đối soát" #. module: account -#: code:addons/account/account_invoice.py:890 +#: code:addons/account/account_invoice.py:922 #, python-format msgid "Bad total !" msgstr "Tổng không hợp lệ !" @@ -9938,7 +9960,7 @@ msgid "Comparison" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:1122 +#: code:addons/account/account_move_line.py:1119 #, python-format msgid "" "You cannot do this modification on a confirmed entry. You can just change " @@ -10027,7 +10049,7 @@ msgid "Journal Entry Model" msgstr "Journal Entry Model" #. module: account -#: code:addons/account/account.py:1064 +#: code:addons/account/account.py:1073 #, python-format msgid "Start period should precede then end period." msgstr "" @@ -10329,6 +10351,7 @@ msgstr "Mở việc đối soát với ngân hàng" #. module: account #: field:account.account,company_id:0 +#: report:account.account.balance:0 #: field:account.aged.trial.balance,company_id:0 #: field:account.analytic.journal,company_id:0 #: field:account.balance.report,company_id:0 @@ -10344,7 +10367,9 @@ msgstr "Mở việc đối soát với ngân hàng" #: field:account.entries.report,company_id:0 #: field:account.fiscal.position,company_id:0 #: field:account.fiscalyear,company_id:0 +#: report:account.general.journal:0 #: field:account.general.journal,company_id:0 +#: report:account.general.ledger_landscape:0 #: field:account.installer,company_id:0 #: field:account.invoice,company_id:0 #: field:account.invoice.line,company_id:0 @@ -10353,6 +10378,7 @@ msgstr "Mở việc đối soát với ngân hàng" #: field:account.invoice.tax,company_id:0 #: field:account.journal,company_id:0 #: field:account.journal.period,company_id:0 +#: report:account.journal.period.print:0 #: field:account.model,company_id:0 #: field:account.move,company_id:0 #: field:account.move.line,company_id:0 @@ -10448,7 +10474,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:1059 +#: code:addons/account/account_move_line.py:1056 #, python-format msgid "Unable to change tax!" msgstr "" @@ -10517,8 +10543,10 @@ msgstr "Accounts Fiscal Position" #: view:account.invoice:0 #: selection:account.invoice,type:0 #: selection:account.invoice.report,type:0 +#: code:addons/account/account_invoice.py:1158 #: model:process.process,name:account.process_process_supplierinvoiceprocess0 #: selection:report.invoice.created,type:0 +#, python-format msgid "Supplier Invoice" msgstr "Hóa đơn nhà cung cấp" @@ -10604,8 +10632,10 @@ msgid "" msgstr "" #. module: account +#: report:account.account.balance:0 #: selection:account.balance.report,display_account:0 #: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 #: selection:account.report.general.ledger,display_account:0 msgid "With movements" msgstr "With movements" @@ -10701,7 +10731,7 @@ msgid "Entries Sorted by" msgstr "" #. module: account -#: code:addons/account/account_invoice.py:1515 +#: code:addons/account/account_invoice.py:1546 #, python-format msgid "" "The selected unit of measure is not compatible with the unit of measure of " @@ -10782,6 +10812,8 @@ msgstr "Tìm kiếm hóa đơn" #: report:account.invoice:0 #: view:account.invoice:0 #: view:account.invoice.report:0 +#: code:addons/account/account_invoice.py:1159 +#, python-format msgid "Refund" msgstr "Hoàn tiền" @@ -10852,7 +10884,7 @@ msgid "Manual Invoice Taxes" msgstr "Manual Invoice Taxes" #. module: account -#: code:addons/account/account_invoice.py:550 +#: code:addons/account/account_invoice.py:573 #, python-format msgid "The payment term of supplier does not have a payment term line." msgstr "" diff --git a/addons/account/report/account_aged_partner_balance.py b/addons/account/report/account_aged_partner_balance.py index 897b8366b7a..3b000e40592 100644 --- a/addons/account/report/account_aged_partner_balance.py +++ b/addons/account/report/account_aged_partner_balance.py @@ -366,12 +366,13 @@ class aged_trial_report(report_sxw.rml_parse, common_report_header): return period or 0.0 def _get_partners(self,data): + # TODO: deprecated, to remove in trunk if data['form']['result_selection'] == 'customer': - return 'Receivable Accounts' + return self._translate('Receivable Accounts') elif data['form']['result_selection'] == 'supplier': - return 'Payable Accounts' + return self._translate('Payable Accounts') elif data['form']['result_selection'] == 'customer_supplier': - return 'Receivable and Payable Accounts' + return self._translate('Receivable and Payable Accounts') return '' report_sxw.report_sxw('report.account.aged_trial_balance', 'res.partner', diff --git a/addons/account/report/account_aged_partner_balance.rml b/addons/account/report/account_aged_partner_balance.rml index fb79ab0d199..5b5404e9c86 100644 --- a/addons/account/report/account_aged_partner_balance.rml +++ b/addons/account/report/account_aged_partner_balance.rml @@ -147,7 +147,9 @@ <para style="terp_default_Centre_8">[[ data['form']['period_length'] ]]</para> </td> <td> - <para style="terp_default_Centre_8">[[ get_partners(data) ]]</para> + <para style="terp_default_Centre_8">Receivable Accounts[[ data['form']['result_selection'] == 'customer' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_8">Payable Accounts[[ data['form']['result_selection'] == 'supplier' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_8">Receivable and Payable Accounts[[ data['form']['result_selection'] == 'customer_supplier' or removeParentNode('para') ]]</para> </td> <td> <para style="terp_default_Centre_8">[[ data['form']['direction_selection'] ]]</para> @@ -166,7 +168,8 @@ <para style="terp_tblheader_Details">Partners</para> </td> <td> - <para style="terp_tblheader_Details_Right">[[ data['form']['direction_selection'] == 'future' and 'Due' or 'Not due' ]]</para> + <para style="terp_tblheader_Details_Right">Due[[ data['form']['direction_selection'] == 'future' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_tblheader_Details_Right">Not due[[ data['form']['direction_selection'] != 'future' and ' ' or removeParentNode('para') ]]</para> </td> <td> <para style="terp_tblheader_Details_Right">[[ data['form']['4']['name'] ]]</para> diff --git a/addons/account/report/account_balance.rml b/addons/account/report/account_balance.rml index 88980a9cd97..6ddfc238bff 100644 --- a/addons/account/report/account_balance.rml +++ b/addons/account/report/account_balance.rml @@ -211,8 +211,10 @@ </para> <blockTable colWidths="130.0,80.0,100.0,140.0,90.0" style="Table8"> <tr> - <td><para style="terp_tblheader_General_Centre">[[ data['model']=='account.account' and 'Company'or removeParentNode('para') ]]</para> - <para style="terp_tblheader_General_Centre"> [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para></td> + <td> + <para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.account' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para> + </td> <td> <para style="terp_tblheader_General_Centre">Fiscal Year</para> </td> @@ -233,7 +235,11 @@ <td> <para style="terp_default_Centre_8">[[ get_fiscalyear(data) or '' ]]</para> </td> - <td><para style="terp_default_Centre_8">[[ (data['form']['display_account']=='all' and 'All') or (data['form']['display_account']=='movement' and 'With movements') or 'With balance is not equal to 0']]</para></td> + <td> + <para style="terp_default_Centre_7">All[[ data['form']['display_account']=='all' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_7">With movements[[ data['form']['display_account']=='movement' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_7">With balance is not equal to 0[[ data['form']['display_account']=='not_zero' and ' ' or removeParentNode('para') ]]</para> + </td> <td> <para style="terp_default_Centre_8">[[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]] </para> <blockTable colWidths="60.0,60.0" style="Table5">[[ data['form']['filter']=='filter_date' or removeParentNode('blockTable') ]] <tr> diff --git a/addons/account/report/account_general_journal.rml b/addons/account/report/account_general_journal.rml index 4ad086d6bd4..dce30e59918 100644 --- a/addons/account/report/account_general_journal.rml +++ b/addons/account/report/account_general_journal.rml @@ -220,8 +220,8 @@ </blockTable> <blockTable colWidths="80.0,100,80.0,150.0,100.0" style="Table2"> <tr> - <td><para style="terp_tblheader_General_Centre">[[ data['model']=='account.journal.period' and 'Company' or removeParentNode('para') ]]</para> - <para style="terp_tblheader_General_Centre"> [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para></td> + <td><para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.journal.period' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para></td> <td><para style="terp_tblheader_General_Centre">Fiscal Year</para></td> <td><para style="terp_tblheader_General_Centre">Journals</para></td> <td><para style="terp_tblheader_General_Centre">Filter By [[ data['form']['filter']!='filter_no' and get_filter(data) ]]</para></td> diff --git a/addons/account/report/account_general_ledger_landscape.rml b/addons/account/report/account_general_ledger_landscape.rml index 7ae5db98f20..c5d24343148 100644 --- a/addons/account/report/account_general_ledger_landscape.rml +++ b/addons/account/report/account_general_ledger_landscape.rml @@ -360,9 +360,8 @@ <blockTable colWidths="110.0,110.0,110.0,110.0,128.0,93.0,110.0" style="Table1"> <tr> <td> - <para style="terp_tblheader_General_Centre">[[ data['model']=='account.account' and 'Company' or removeParentNode('para') ]]</para> - <para style="terp_tblheader_General_Centre">[[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para> - </td> + <para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.account' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para></td> <td> <para style="terp_tblheader_General_Centre">Fiscal Year</para> </td> @@ -395,7 +394,9 @@ <para style="terp_default_Centre_7">[[', '.join([ lt or '' for lt in get_journal(data) ]) ]]</para> </td> <td> - <para style="terp_default_Centre_7">[[ (data['form']['display_account']=='all' and 'All') or (data['form']['display_account']=='movement' and 'With movements') or 'With balance is not equal to 0']]</para> + <para style="terp_default_Centre_7">All[[ data['form']['display_account']=='all' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_7">With movements[[ data['form']['display_account']=='movement' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_7">With balance is not equal to 0[[ data['form']['display_account']=='not_zero' and ' ' or removeParentNode('para') ]]</para> </td> <td> <para style="terp_default_Centre_7">[[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]]</para> diff --git a/addons/account/report/account_journal.py b/addons/account/report/account_journal.py index 769a8335f55..97e19be4b0c 100644 --- a/addons/account/report/account_journal.py +++ b/addons/account/report/account_journal.py @@ -189,11 +189,12 @@ class journal_print(report_sxw.rml_parse, common_report_header): return data['form']['amount_currency'] def _get_sortby(self, data): + # TODO: deprecated, to remove in trunk if self.sort_selection == 'date': - return 'Date' + return self._translate('Date') elif self.sort_selection == 'ref': - return 'Reference Number' - return 'Date' + return self._translate('Reference Number') + return self._translate('Date') report_sxw.report_sxw('report.account.journal.period.print', 'account.journal.period', 'addons/account/report/account_journal.rml', parser=journal_print, header='external') report_sxw.report_sxw('report.account.journal.period.print.sale.purchase', 'account.journal.period', 'addons/account/report/account_journal_sale_purchase.rml', parser=journal_print, header='external') diff --git a/addons/account/report/account_journal.rml b/addons/account/report/account_journal.rml index fb203d4e664..6d606ed1937 100644 --- a/addons/account/report/account_journal.rml +++ b/addons/account/report/account_journal.rml @@ -186,8 +186,8 @@ </para> <blockTable colWidths="85.0,80.0,80.0,120.0,70.0,100.0" style="Table2"> <tr> - <td><para style="terp_tblheader_General_Centre"> [[ data['model']=='account.journal.period'and 'Company' or removeParentNode('para') ]]</para> - <para style="terp_tblheader_General_Centre">[[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para></td> + <td><para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.journal.period'and ' ' or removeParentNode('para') ]]</para> + <para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para></td> <td><para style="terp_tblheader_General_Centre">Fiscal Year</para></td> <td><para style="terp_tblheader_General_Centre">Journal</para></td> <td><para style="terp_tblheader_General_Centre">Period</para></td> @@ -199,8 +199,10 @@ <td><para style="terp_default_Centre_8">[[ get_fiscalyear(data) or '' ]]</para></td> <td><para style="terp_default_Centre_8">[[ o.journal_id.name ]]</para></td> <td><para style="terp_default_Centre_8">[[ o.period_id.name ]] </para></td> - <td><para style="terp_default_Centre_8">[[ get_sortby(data) ]]</para></td> - <td><para style="terp_default_Centre_8">[[ get_target_move(data) ]] </para></td> + <td> + <para style="terp_default_Centre_8">Date[[ data['form'].get('sort_selection', 'date') == 'date' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_8">Reference Number[[ data['form'].get('sort_selection', 'date') == 'ref' and ' ' or removeParentNode('para') ]]</para> + </td> </tr> </blockTable> <para style="P9"> diff --git a/addons/account/report/account_partner_ledger.py b/addons/account/report/account_partner_ledger.py index 21c1ee3d846..d21323e02fc 100644 --- a/addons/account/report/account_partner_ledger.py +++ b/addons/account/report/account_partner_ledger.py @@ -267,12 +267,13 @@ class third_party_ledger(report_sxw.rml_parse, common_report_header): return result_tmp + result_init def _get_partners(self): + # TODO: deprecated, to remove in trunk if self.result_selection == 'customer': - return 'Receivable Accounts' + return _('Receivable Accounts') elif self.result_selection == 'supplier': - return 'Payable Accounts' + return _('Payable Accounts') elif self.result_selection == 'customer_supplier': - return 'Receivable and Payable Accounts' + return _('Receivable and Payable Accounts') return '' def _sum_currency_amount_account(self, account, form): diff --git a/addons/account/report/account_partner_ledger.rml b/addons/account/report/account_partner_ledger.rml index 0d7122369c6..48ed6d4afe3 100644 --- a/addons/account/report/account_partner_ledger.rml +++ b/addons/account/report/account_partner_ledger.rml @@ -423,7 +423,9 @@ </para> </td> <td> - <para style="terp_default_Centre_8">[[ get_partners() ]]</para> + <para style="terp_default_Centre_8">Receivable Accounts[[ data['form'].get('result_selection', 'customer') == 'customer' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_8">Payable Accounts[[ data['form'].get('result_selection', 'customer') == 'supplier' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_8">Receivable and Payable Accounts[[ data['form'].get('result_selection', 'customer') == 'customer_supplier' or removeParentNode('para') ]]</para> </td> <td> <para style="terp_default_Centre_8">[[ get_target_move(data) ]]</para> diff --git a/addons/account/static/src/js/account_move_line_quickadd.js b/addons/account/static/src/js/account_move_line_quickadd.js index 997b2b03bb6..0b904e19da6 100644 --- a/addons/account/static/src/js/account_move_line_quickadd.js +++ b/addons/account/static/src/js/account_move_line_quickadd.js @@ -84,7 +84,7 @@ openerp.account.quickadd = function (instance) { }, search_by_journal_period: function() { var self = this; - var domain = []; + var domain = ['|',['debit', '!=', 0], ['credit', '!=', 0]]; if (self.current_journal !== null) domain.push(["journal_id", "=", self.current_journal]); if (self.current_period !== null) domain.push(["period_id", "=", self.current_period]); self.last_context["journal_id"] = self.current_journal === null ? false : self.current_journal; diff --git a/addons/account/wizard/account_report_common.py b/addons/account/wizard/account_report_common.py index c457140684a..871aea9e4d9 100644 --- a/addons/account/wizard/account_report_common.py +++ b/addons/account/wizard/account_report_common.py @@ -175,7 +175,7 @@ class account_common_report(osv.osv_memory): data['form'][field] = data['form'][field][0] used_context = self._build_contexts(cr, uid, ids, data, context=context) data['form']['periods'] = used_context.get('periods', False) and used_context['periods'] or [] - data['form']['used_context'] = used_context + data['form']['used_context'] = dict(used_context, lang=context.get('lang', 'en_US')) return self._print_report(cr, uid, ids, data, context=context) diff --git a/addons/account_analytic_plans/account_analytic_plans_view.xml b/addons/account_analytic_plans/account_analytic_plans_view.xml index 7fb4091b45f..42b17ae06c3 100644 --- a/addons/account_analytic_plans/account_analytic_plans_view.xml +++ b/addons/account_analytic_plans/account_analytic_plans_view.xml @@ -248,9 +248,12 @@ <field name="model">account.analytic.default</field> <field name="inherit_id" ref="account_analytic_default.view_account_analytic_default_tree"/> <field name="arch" type="xml"> - <field name="analytic_id" required="1" position="replace"> + <xpath expr="//field[@name='analytic_id']" position="attributes"> + <attribute name="invisible">1</attribute> + </xpath> + <xpath expr="//field[@name='analytic_id']" position="after"> <field name="analytics_id" required="1"/> - </field> + </xpath> </field> </record> diff --git a/addons/account_cancel/i18n/vi.po b/addons/account_cancel/i18n/vi.po index 8198e802022..89a7feb7942 100644 --- a/addons/account_cancel/i18n/vi.po +++ b/addons/account_cancel/i18n/vi.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-12-21 14:22+0000\n" -"Last-Translator: OpenERP Administrators <Unknown>\n" +"PO-Revision-Date: 2013-06-30 16:08+0000\n" +"Last-Translator: Hung Tran <vanda6688@yahoo.com>\n" "Language-Team: Vietnamese <vi@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:42+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-07-01 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: account_cancel #: view:account.invoice:0 msgid "Cancel" -msgstr "" +msgstr "Hủy bỏ" #~ msgid "Account Cancel" #~ msgstr "Hủy bỏ Tài khoản" diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index 8c61af1f03c..e42dc64151f 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -42,7 +42,7 @@ class Controller(http.Controller): } return config - @http.route('/auth_signup/retrieve', type='json', auth="user") + @http.route('/auth_signup/retrieve', type='json', auth="none") def retrieve(self, dbname, token): """ retrieve the user info (name, login or email) corresponding to a signup token """ registry = RegistryManager.get(dbname) @@ -51,7 +51,7 @@ class Controller(http.Controller): user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token) return user_info - @http.route('/auth_signup/signup', type='json', auth="user") + @http.route('/auth_signup/signup', type='json', auth="none") def signup(self, dbname, token, **values): """ sign up a user (new or existing)""" try: @@ -66,7 +66,7 @@ class Controller(http.Controller): res_users = registry.get('res.users') res_users.signup(cr, openerp.SUPERUSER_ID, values, token) - @http.route('/auth_signup/reset_password', type='json', auth="user") + @http.route('/auth_signup/reset_password', type='json', auth="none") def reset_password(self, dbname, login): """ retrieve user, and perform reset password """ registry = RegistryManager.get(dbname) diff --git a/addons/auth_signup/i18n/zh_CN.po b/addons/auth_signup/i18n/zh_CN.po index aa8d9f952c1..497b872997f 100644 --- a/addons/auth_signup/i18n/zh_CN.po +++ b/addons/auth_signup/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-04-16 04:33+0000\n" -"Last-Translator: Key <key.diagram@gmail.com>\n" +"PO-Revision-Date: 2013-07-02 08:11+0000\n" +"Last-Translator: DWXXX <Unknown>\n" "Language-Team: Chinese (Simplified) <zh_CN@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-17 05:15+0000\n" -"X-Generator: Launchpad (build 16567)\n" +"X-Launchpad-Export-Date: 2013-07-03 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: auth_signup #: field:res.partner,signup_type:0 @@ -29,7 +29,7 @@ msgstr "允许外部用户登录" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:19 #, python-format msgid "Confirm Password" msgstr "确认密码" @@ -37,7 +37,7 @@ msgstr "确认密码" #. module: auth_signup #: help:base.config.settings,auth_signup_uninvited:0 msgid "If unchecked, only invited users may sign up." -msgstr "" +msgstr "如果不勾选,只有被邀请用户才能注册。" #. module: auth_signup #: model:ir.model,name:auth_signup.model_base_config_settings @@ -45,15 +45,15 @@ msgid "base.config.settings" msgstr "base.config.settings" #. module: auth_signup -#: code:addons/auth_signup/res_users.py:265 +#: code:addons/auth_signup/res_users.py:266 #, python-format msgid "Cannot send email: user has no email address." -msgstr "" +msgstr "无法发送邮件:用户邮件地址为空。" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24 -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:28 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:27 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:31 #, python-format msgid "Reset password" msgstr "重设密码" @@ -70,7 +70,7 @@ msgstr "重置密码" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:117 +#: code:addons/auth_signup/static/src/js/auth_signup.js:120 #, python-format msgid "Please enter a password and confirm it." msgstr "请输入密码并确认。" @@ -78,12 +78,12 @@ msgstr "请输入密码并确认。" #. module: auth_signup #: view:res.users:0 msgid "Send an email to the user to (re)set their password." -msgstr "" +msgstr "向用户发送重置密码邮件。" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23 #: code:addons/auth_signup/static/src/xml/auth_signup.xml:26 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:29 #, python-format msgid "Sign Up" msgstr "注册" @@ -119,10 +119,10 @@ msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:111 +#: code:addons/auth_signup/static/src/js/auth_signup.js:114 #, python-format msgid "Please enter a name." -msgstr "" +msgstr "请输入名字" #. module: auth_signup #: model:ir.model,name:auth_signup.model_res_users @@ -136,10 +136,10 @@ msgstr "注册 URL" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:114 +#: code:addons/auth_signup/static/src/js/auth_signup.js:117 #, python-format msgid "Please enter a username." -msgstr "" +msgstr "请输入您的用户名" #. module: auth_signup #: selection:res.users,state:0 @@ -147,7 +147,7 @@ msgid "Active" msgstr "启用" #. module: auth_signup -#: code:addons/auth_signup/res_users.py:269 +#: code:addons/auth_signup/res_users.py:270 #, python-format msgid "" "Cannot send email: no outgoing email server configured.\n" @@ -170,10 +170,10 @@ msgstr "姓名" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:170 +#: code:addons/auth_signup/static/src/js/auth_signup.js:173 #, python-format msgid "Please enter a username or email address." -msgstr "" +msgstr "请输入用户名和邮件地址" #. module: auth_signup #: selection:res.users,state:0 @@ -199,7 +199,7 @@ msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25 #, python-format msgid "Log in" msgstr "登录" @@ -211,35 +211,35 @@ msgstr "注册令牌( Token )是有效的" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:108 #: code:addons/auth_signup/static/src/js/auth_signup.js:111 #: code:addons/auth_signup/static/src/js/auth_signup.js:114 #: code:addons/auth_signup/static/src/js/auth_signup.js:117 #: code:addons/auth_signup/static/src/js/auth_signup.js:120 -#: code:addons/auth_signup/static/src/js/auth_signup.js:167 +#: code:addons/auth_signup/static/src/js/auth_signup.js:123 #: code:addons/auth_signup/static/src/js/auth_signup.js:170 +#: code:addons/auth_signup/static/src/js/auth_signup.js:173 #, python-format msgid "Login" msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:94 +#: code:addons/auth_signup/static/src/js/auth_signup.js:97 #, python-format msgid "Invalid signup token" msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:120 +#: code:addons/auth_signup/static/src/js/auth_signup.js:123 #, python-format msgid "Passwords do not match; please retype them." msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:108 -#: code:addons/auth_signup/static/src/js/auth_signup.js:167 +#: code:addons/auth_signup/static/src/js/auth_signup.js:111 +#: code:addons/auth_signup/static/src/js/auth_signup.js:170 #, python-format msgid "No database selected !" msgstr "" @@ -256,7 +256,7 @@ msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:27 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:30 #, python-format msgid "Back to Login" msgstr "返回登录页面" @@ -266,12 +266,12 @@ msgstr "返回登录页面" #: code:addons/auth_signup/static/src/xml/auth_signup.xml:22 #, python-format msgid "Sign up" -msgstr "" +msgstr "注册" #. module: auth_signup #: model:ir.model,name:auth_signup.model_res_partner msgid "Partner" -msgstr "业务伙伴" +msgstr "合作伙伴" #. module: auth_signup #: field:res.partner,signup_token:0 diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index 896349ec5e6..a9061c0afce 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -1510,7 +1510,7 @@ rule or repeating pattern of time to exclude from the recurring rule."), continue if r['class']=='private': for f in r.keys(): - if f not in ('id','date','date_deadline','duration','user_id','state'): + if f not in ('id','date','date_deadline','duration','user_id','state','interval','count'): if isinstance(r[f], list): r[f] = [] else: diff --git a/addons/base_calendar/i18n/zh_CN.po b/addons/base_calendar/i18n/zh_CN.po index ed1cddd716b..a5ede7a80c9 100644 --- a/addons/base_calendar/i18n/zh_CN.po +++ b/addons/base_calendar/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-11-28 16:50+0000\n" -"Last-Translator: Joshua Jan(SHINEIT) <popkar77@gmail.com>\n" +"PO-Revision-Date: 2013-06-29 05:34+0000\n" +"Last-Translator: David.Xu <xzxyxu@gmail.com>\n" "Language-Team: Chinese (Simplified) <zh_CN@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:45+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: base_calendar #: selection:calendar.alarm,trigger_related:0 @@ -42,7 +42,7 @@ msgstr "这属性定义循环日程的日期/时间异常列表。" #: selection:calendar.todo,rrule_type:0 #: selection:crm.meeting,rrule_type:0 msgid "Week(s)" -msgstr "" +msgstr "周" #. module: base_calendar #: field:calendar.event,we:0 @@ -248,7 +248,7 @@ msgid "To" msgstr "到" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1260 +#: code:addons/base_calendar/base_calendar.py:1262 #, python-format msgid "Error!" msgstr "错误!" @@ -300,7 +300,7 @@ msgstr "与会者的参与状况" #. module: base_calendar #: view:crm.meeting:0 msgid "Mail To" -msgstr "" +msgstr "收信人" #. module: base_calendar #: field:crm.meeting,name:0 @@ -361,9 +361,9 @@ msgstr "保存复杂的摘要(消息数量,……等)。为了插入到看板视 #. module: base_calendar #: code:addons/base_calendar/base_calendar.py:399 #: code:addons/base_calendar/base_calendar.py:441 -#: code:addons/base_calendar/base_calendar.py:1013 #: code:addons/base_calendar/base_calendar.py:1015 -#: code:addons/base_calendar/base_calendar.py:1460 +#: code:addons/base_calendar/base_calendar.py:1017 +#: code:addons/base_calendar/base_calendar.py:1462 #, python-format msgid "Warning!" msgstr "警告!" @@ -478,7 +478,7 @@ msgstr "日期" #. module: base_calendar #: field:crm.meeting,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "关注者" #. module: base_calendar #: field:calendar.event,location:0 @@ -522,7 +522,7 @@ msgid "Event alarm information" msgstr "事件提醒信息" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1015 +#: code:addons/base_calendar/base_calendar.py:1017 #, python-format msgid "Count cannot be negative or 0." msgstr "" @@ -530,21 +530,21 @@ msgstr "" #. module: base_calendar #: field:crm.meeting,create_date:0 msgid "Creation Date" -msgstr "" +msgstr "创建日期" #. module: base_calendar #: view:crm.meeting:0 #: model:ir.model,name:base_calendar.model_crm_meeting #: model:res.request.link,name:base_calendar.request_link_meeting msgid "Meeting" -msgstr "" +msgstr "会议" #. module: base_calendar #: selection:calendar.event,rrule_type:0 #: selection:calendar.todo,rrule_type:0 #: selection:crm.meeting,rrule_type:0 msgid "Month(s)" -msgstr "" +msgstr "月" #. module: base_calendar #: view:calendar.event:0 @@ -566,7 +566,7 @@ msgstr "Caldav 服务的URL" #. module: base_calendar #: model:ir.model,name:base_calendar.model_mail_wizard_invite msgid "Invite wizard" -msgstr "" +msgstr "邀请向导" #. module: base_calendar #: selection:calendar.event,month_list:0 @@ -590,7 +590,7 @@ msgstr "周四" #. module: base_calendar #: view:crm.meeting:0 msgid "Meeting Details" -msgstr "" +msgstr "会议详情" #. module: base_calendar #: field:calendar.attendee,child_ids:0 @@ -601,21 +601,21 @@ msgstr "代表人" #: code:addons/base_calendar/crm_meeting.py:102 #, python-format msgid "The following contacts have no email address :" -msgstr "" +msgstr "下列联系人没有电子邮件地址:" #. module: base_calendar #: selection:calendar.event,rrule_type:0 #: selection:calendar.todo,rrule_type:0 #: selection:crm.meeting,rrule_type:0 msgid "Year(s)" -msgstr "" +msgstr "年" #. module: base_calendar #: view:crm.meeting.type:0 #: model:ir.actions.act_window,name:base_calendar.action_crm_meeting_type #: model:ir.ui.menu,name:base_calendar.menu_crm_meeting_type msgid "Meeting Types" -msgstr "" +msgstr "会议类型" #. module: base_calendar #: field:calendar.event,create_date:0 @@ -633,7 +633,7 @@ msgstr "全员可见" #. module: base_calendar #: view:crm.meeting:0 msgid "hours" -msgstr "" +msgstr "小时" #. module: base_calendar #: field:calendar.attendee,partner_id:0 @@ -655,7 +655,7 @@ msgstr "重复直到" #. module: base_calendar #: view:crm.meeting:0 msgid "Options" -msgstr "" +msgstr "选项" #. module: base_calendar #: selection:calendar.event,byday:0 @@ -694,7 +694,7 @@ msgstr "周二" #. module: base_calendar #: field:crm.meeting,categ_ids:0 msgid "Tags" -msgstr "" +msgstr "标签" #. module: base_calendar #: view:calendar.event:0 @@ -741,7 +741,7 @@ msgid "Declined" msgstr "已拒绝" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1460 +#: code:addons/base_calendar/base_calendar.py:1462 #, python-format msgid "Group by date is not supported, use the calendar view instead." msgstr "" @@ -1200,7 +1200,7 @@ msgid "Select Weekdays" msgstr "" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1519 +#: code:addons/base_calendar/base_calendar.py:1521 #: selection:calendar.attendee,availability:0 #: selection:calendar.event,show_as:0 #: selection:calendar.todo,show_as:0 @@ -1453,7 +1453,7 @@ msgid "Weekday" msgstr "工作日" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1013 +#: code:addons/base_calendar/base_calendar.py:1015 #, python-format msgid "Interval cannot be negative." msgstr "" diff --git a/addons/base_crypt/i18n/vi.po b/addons/base_crypt/i18n/vi.po index 7ab8f31bc3c..2265e70eb2e 100644 --- a/addons/base_crypt/i18n/vi.po +++ b/addons/base_crypt/i18n/vi.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2011-07-20 09:55+0000\n" -"Last-Translator: OpenBMS JSC <Unknown>\n" +"PO-Revision-Date: 2013-06-30 16:09+0000\n" +"Last-Translator: Hung Tran <vanda6688@yahoo.com>\n" "Language-Team: Vietnamese <vi@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:49+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-07-01 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: base_crypt #: model:ir.model,name:base_crypt.model_res_users msgid "Users" -msgstr "" +msgstr "Người dùng" #, python-format #~ msgid "Error" diff --git a/addons/base_status/i18n/sv.po b/addons/base_status/i18n/sv.po new file mode 100644 index 00000000000..eb1b42e6a53 --- /dev/null +++ b/addons/base_status/i18n/sv.po @@ -0,0 +1,79 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-07-08 15:10+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-07-09 05:16+0000\n" +"X-Generator: Launchpad (build 16696)\n" + +#. module: base_status +#: code:addons/base_status/base_state.py:107 +#, python-format +msgid "Error !" +msgstr "Fel !" + +#. module: base_status +#: code:addons/base_status/base_state.py:166 +#, python-format +msgid "%s has been <b>opened</b>." +msgstr "%s har <b>öppnats</b>." + +#. module: base_status +#: code:addons/base_status/base_state.py:199 +#, python-format +msgid "%s has been <b>renewed</b>." +msgstr "%s har <b>förnyats</b>." + +#. module: base_status +#: code:addons/base_status/base_stage.py:210 +#, python-format +msgid "Error!" +msgstr "Fel!" + +#. module: base_status +#: code:addons/base_status/base_state.py:107 +#, python-format +msgid "" +"You can not escalate, you are already at the top level regarding your sales-" +"team category." +msgstr "" +"Du kan inte eskalera längre, du har nått toppen för denna säljlags-kategori." + +#. module: base_status +#: code:addons/base_status/base_state.py:193 +#, python-format +msgid "%s is now <b>pending</b>." +msgstr "%s är nu <b>pågående</b>." + +#. module: base_status +#: code:addons/base_status/base_state.py:187 +#, python-format +msgid "%s has been <b>canceled</b>." +msgstr "%s har <b>avbrutits</b>." + +#. module: base_status +#: code:addons/base_status/base_stage.py:210 +#, python-format +msgid "" +"You are already at the top level of your sales-team category.\n" +"Therefore you cannot escalate furthermore." +msgstr "" +"Du har nått översta nivån för din säljlagskategori.\n" +"Det går därför inte att eskalera ytterligare." + +#. module: base_status +#: code:addons/base_status/base_state.py:181 +#, python-format +msgid "%s has been <b>closed</b>." +msgstr "%s har <b>stängts</b>." diff --git a/addons/claim_from_delivery/i18n/vi.po b/addons/claim_from_delivery/i18n/vi.po new file mode 100644 index 00000000000..f308bafb1ea --- /dev/null +++ b/addons/claim_from_delivery/i18n/vi.po @@ -0,0 +1,33 @@ +# Vietnamese translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-30 16:10+0000\n" +"Last-Translator: Hung Tran <vanda6688@yahoo.com>\n" +"Language-Team: Vietnamese <vi@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-07-01 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: claim_from_delivery +#: view:stock.picking.out:0 +msgid "Claims" +msgstr "Các khiếu nại" + +#. module: claim_from_delivery +#: model:res.request.link,name:claim_from_delivery.request_link_claim_from_delivery +msgid "Delivery Order" +msgstr "" + +#. module: claim_from_delivery +#: model:ir.actions.act_window,name:claim_from_delivery.action_claim_from_delivery +msgid "Claim From Delivery" +msgstr "" diff --git a/addons/contacts/i18n/ko.po b/addons/contacts/i18n/ko.po new file mode 100644 index 00000000000..19e46f9e0b0 --- /dev/null +++ b/addons/contacts/i18n/ko.po @@ -0,0 +1,37 @@ +# Korean translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-28 09:32+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Korean <ko@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: contacts +#: model:ir.actions.act_window,help:contacts.action_contacts +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to add a contact in your address book.\n" +" </p><p>\n" +" OpenERP helps you easily track all activities related to\n" +" a customer; discussions, history of business opportunities,\n" +" documents, etc.\n" +" </p>\n" +" " +msgstr "" + +#. module: contacts +#: model:ir.actions.act_window,name:contacts.action_contacts +#: model:ir.ui.menu,name:contacts.menu_contacts +msgid "Contacts" +msgstr "연락처" diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 1070af22b3c..af02e3be1bf 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -19,7 +19,6 @@ # ############################################################################## -from openerp.addons.base_status.base_stage import base_stage import crm from datetime import datetime from operator import itemgetter @@ -68,7 +67,7 @@ CRM_LEAD_PENDING_STATES = ( crm.AVAILABLE_STATES[4][0], # Pending ) -class crm_lead(base_stage, format_address, osv.osv): +class crm_lead(format_address, osv.osv): """ CRM Lead Case """ _name = "crm.lead" _description = "Lead/Opportunity" @@ -93,20 +92,6 @@ class crm_lead(base_stage, format_address, osv.osv): context['empty_list_help_document_name'] = _("leads") return super(crm_lead, self).get_empty_list_help(cr, uid, help, context=context) - def create(self, cr, uid, vals, context=None): - if context is None: - context = {} - if not vals.get('stage_id'): - ctx = context.copy() - if vals.get('section_id'): - ctx['default_section_id'] = vals['section_id'] - if vals.get('type'): - ctx['default_type'] = vals['type'] - vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx) - # context: no_log, because subtype already handle this - create_context = dict(context, mail_create_nolog=True) - return super(crm_lead, self).create(cr, uid, vals, context=create_context) - def _get_default_section_id(self, cr, uid, context=None): """ Gives default section by checking if present in the context """ return self._resolve_section_id_from_context(cr, uid, context=context) or False @@ -126,8 +111,7 @@ class crm_lead(base_stage, format_address, osv.osv): if type(context.get('default_section_id')) in (int, long): return context.get('default_section_id') if isinstance(context.get('default_section_id'), basestring): - section_name = context['default_section_id'] - section_ids = self.pool.get('crm.case.section').name_search(cr, uid, name=section_name, context=context) + section_ids = self.pool.get('crm.case.section').name_search(cr, uid, name=context['default_section_id'], context=context) if len(section_ids) == 1: return int(section_ids[0][0]) return None @@ -326,8 +310,7 @@ class crm_lead(base_stage, format_address, osv.osv): _defaults = { 'active': 1, 'type': 'lead', - 'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c), - 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), + 'user_id': lambda s, cr, uid, c: uid, 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c), 'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c), 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.lead', context=c), @@ -341,30 +324,29 @@ class crm_lead(base_stage, format_address, osv.osv): def onchange_stage_id(self, cr, uid, ids, stage_id, context=None): if not stage_id: - return {'value':{}} + return {'value': {}} stage = self.pool.get('crm.case.stage').browse(cr, uid, stage_id, context) if not stage.on_change: - return {'value':{}} - return {'value':{'probability': stage.probability}} + return {'value': {}} + return {'value': {'probability': stage.probability}} - def on_change_partner(self, cr, uid, ids, partner_id, context=None): - result = {} + def on_change_partner_id(self, cr, uid, ids, partner_id, context=None): values = {} if partner_id: partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context) values = { - 'partner_name' : partner.name, - 'street' : partner.street, - 'street2' : partner.street2, - 'city' : partner.city, - 'state_id' : partner.state_id and partner.state_id.id or False, - 'country_id' : partner.country_id and partner.country_id.id or False, - 'email_from' : partner.email, - 'phone' : partner.phone, - 'mobile' : partner.mobile, - 'fax' : partner.fax, + 'partner_name': partner.name, + 'street': partner.street, + 'street2': partner.street2, + 'city': partner.city, + 'state_id': partner.state_id and partner.state_id.id or False, + 'country_id': partner.country_id and partner.country_id.id or False, + 'email_from': partner.email, + 'phone': partner.phone, + 'mobile': partner.mobile, + 'fax': partner.fax, } - return {'value' : values} + return {'value': values} def on_change_user(self, cr, uid, ids, user_id, context=None): """ When changing the user, also set a section_id or restrict section id @@ -405,7 +387,7 @@ class crm_lead(base_stage, format_address, osv.osv): # collect all section_ids section_ids = [] types = ['both'] - if not cases : + if not cases: type = context.get('default_type') types += [type] if section_id: @@ -433,24 +415,18 @@ class crm_lead(base_stage, format_address, osv.osv): return stage_ids[0] return False - def case_cancel(self, cr, uid, ids, context=None): - """ Overrides case_cancel from base_stage to set probability """ - res = super(crm_lead, self).case_cancel(cr, uid, ids, context=context) - self.write(cr, uid, ids, {'probability' : 0.0}, context=context) - return res - - def case_reset(self, cr, uid, ids, context=None): - """ Overrides case_reset from base_stage to set probability """ - res = super(crm_lead, self).case_reset(cr, uid, ids, context=context) - self.write(cr, uid, ids, {'probability': 0.0}, context=context) - return res + def stage_set(self, cr, uid, ids, stage_id, context=None): + """ Set the new stage. Now just writes the stage. + TDE TODO: remove me when removing state + """ + return self.write(cr, uid, ids, {'stage_id': stage_id}, context=context) def case_mark_lost(self, cr, uid, ids, context=None): """ Mark the case as lost: state=cancel and probability=0 """ for lead in self.browse(cr, uid, ids): stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 0.0),('on_change','=',True)], context=context) if stage_id: - self.case_set(cr, uid, [lead.id], values_to_update={'probability': 0.0}, new_stage_id=stage_id, context=context) + self.stage_set(cr, uid, [lead.id], stage_id, context=context) return True def case_mark_won(self, cr, uid, ids, context=None): @@ -458,7 +434,21 @@ class crm_lead(base_stage, format_address, osv.osv): for lead in self.browse(cr, uid, ids): stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 100.0),('on_change','=',True)], context=context) if stage_id: - self.case_set(cr, uid, [lead.id], values_to_update={'probability': 100.0}, new_stage_id=stage_id, context=context) + self.stage_set(cr, uid, [lead.id], stage_id, context=context) + return True + + def case_escalate(self, cr, uid, ids, context=None): + """ Escalates case to parent level """ + for case in self.browse(cr, uid, ids, context=context): + data = {'active': True} + if case.section_id.parent_id: + data['section_id'] = case.section_id.parent_id.id + if case.section_id.parent_id.change_responsible: + if case.section_id.parent_id.user_id: + data['user_id'] = case.section_id.parent_id.user_id.id + else: + raise osv.except_osv(_('Error!'), _("You are already at the top level of your sales-team category.\nTherefore you cannot escalate furthermore.")) + self.write(cr, uid, [case.id], data, context=context) return True def set_priority(self, cr, uid, ids, priority): @@ -932,12 +922,22 @@ class crm_lead(base_stage, format_address, osv.osv): } return res + def create(self, cr, uid, vals, context=None): + if context is None: + context = {} + if vals.get('type') and not context.get('default_type'): + context['default_type'] = vals.get('type') + if vals.get('section_id') and not context.get('default_section_id'): + context['default_section_id'] = vals.get('section_id') + + # context: no_log, because subtype already handle this + create_context = dict(context, mail_create_nolog=True) + return super(crm_lead, self).create(cr, uid, vals, context=create_context) + def write(self, cr, uid, ids, vals, context=None): if vals.get('stage_id') and not vals.get('probability'): - # change probability of lead(s) if required by stage - stage = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context) - if stage.on_change: - vals['probability'] = stage.probability + onchange_stage_values = self.onchange_stage_id(cr, uid, ids, vals.get('stage_id'), context=context)['value'] + vals.update(onchange_stage_values) return super(crm_lead, self).write(cr, uid, ids, vals, context=context) def new_mail_send(self, cr, uid, ids, context=None): @@ -1024,7 +1024,7 @@ class crm_lead(base_stage, format_address, osv.osv): 'user_id': False, } if msg.get('author_id'): - defaults.update(self.on_change_partner(cr, uid, None, msg.get('author_id'), context=context)['value']) + defaults.update(self.on_change_partner_id(cr, uid, None, msg.get('author_id'), context=context)['value']) if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES): defaults['priority'] = msg.get('priority') defaults.update(custom_values) diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml index 4c6cf47c4f7..3917fadbd32 100644 --- a/addons/crm/crm_lead_demo.xml +++ b/addons/crm/crm_lead_demo.xml @@ -263,13 +263,6 @@ Andrew</field> <field eval="1" name="active"/> </record> - <!-- Call Function to Cancel the leads (set as Dead) --> - <function model="crm.lead" name="case_cancel" - eval="[ ref('crm_case_12'), ref('crm_case_7'), - ref('crm_case_3'), ref('crm_case_8')], - {'install_mode': True}" - /> - <!-- Call Function to set the leads as Unread --> <function model="crm.lead" name="message_mark_as_unread" eval="[ ref('crm_case_1'), ref('crm_case_2'), diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index df6a4a07a8e..cb4302166a1 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -95,10 +95,6 @@ <header> <button name="%(crm.action_crm_lead2opportunity_partner)d" string="Convert to Opportunity" type="action" states="draft,open,pending" help="Convert to Opportunity" class="oe_highlight"/> - <button name="case_reset" string="Reset" type="object" - states="cancel"/> - <button name="case_cancel" string="Cancel Case" type="object" - states="draft,open,pending"/> <field name="stage_id" widget="statusbar" clickable="True" domain="['&', '|', ('case_default', '=', True), ('section_ids', '=', section_id), '|', ('type', '=', type), ('type', '=', 'both')]" on_change="onchange_stage_id(stage_id)"/> @@ -118,7 +114,7 @@ <field name="partner_name" string="Company Name"/> <!-- Preload all the partner's information --> <field name="partner_id" string="Customer" - on_change="on_change_partner(partner_id)" + on_change="on_change_partner_id(partner_id)" options='{"create_name_field": "name"}' context="{'default_name': contact_name, 'default_street': street, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_function': function, 'default_phone': phone, 'default_mobile': mobile, 'default_fax': fax, 'default_email': email_from, 'default_user_id': user_id, 'default_section_id': section_id}"/> <label for="street" string="Address"/> @@ -617,7 +613,7 @@ <field name="state">code</field> <field name="code"> if context.get('active_model') == 'crm.lead' and context.get('active_ids'): - self.case_cancel(cr, uid, context['active_ids'], context=context) + self.case_mark_lost(cr, uid, context['active_ids'], context=context) </field> <field name="groups_id" eval="[(4,ref('base.group_sale_salesman'))]"/> </record> diff --git a/addons/crm/crm_phonecall_menu.xml b/addons/crm/crm_phonecall_menu.xml index 2344604a294..f6f94547173 100644 --- a/addons/crm/crm_phonecall_menu.xml +++ b/addons/crm/crm_phonecall_menu.xml @@ -58,7 +58,7 @@ <field name="view_mode">tree,calendar</field> <field name="view_id" ref="crm_case_inbound_phone_tree_view"/> <field name="domain">[]</field> - <field name="context">{}</field> + <field name="context">{'default_state': 'done'}</field> <field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/> <field name="help" type="html"> <p class="oe_view_nocontent_create"> diff --git a/addons/crm/doc/changelog.rst b/addons/crm/doc/changelog.rst new file mode 100644 index 00000000000..cb1602a8d39 --- /dev/null +++ b/addons/crm/doc/changelog.rst @@ -0,0 +1,11 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-2)` +---------------- + +- ``crm``, ``crm_claim``: removed inheritance from ``base_stage`` class. Missing + methods have been added into ``crm`` and ``crm_claim``. Also removed inheritance + in ``crm_helpdesk`` because it uses states, not stages.
\ No newline at end of file diff --git a/addons/crm/doc/index.rst b/addons/crm/doc/index.rst new file mode 100644 index 00000000000..d70e045befe --- /dev/null +++ b/addons/crm/doc/index.rst @@ -0,0 +1,13 @@ +CRM module documentation +======================== + +CRM documentation topics +''''''''''''''''''''''''' + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/crm/i18n/hu.po b/addons/crm/i18n/hu.po index 6673d2da235..0289fac77cf 100644 --- a/addons/crm/i18n/hu.po +++ b/addons/crm/i18n/hu.po @@ -7,14 +7,19 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-06-21 07:11+0000\n" +"PO-Revision-Date: 2013-07-09 07:36+0000\n" "Last-Translator: krnkris <Unknown>\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: 2013-06-22 05:36+0000\n" -"X-Generator: Launchpad (build 16677)\n" +"X-Launchpad-Export-Date: 2013-07-10 05:25+0000\n" +"X-Generator: Launchpad (build 16696)\n" + +#. module: crm +#: model:crm.case.stage,name:crm.stage_lead3 +msgid "Qualification" +msgstr "Besorolás" #. module: crm #: view:crm.lead.report:0 @@ -2687,11 +2692,6 @@ msgid "My Phone Calls" msgstr "Telefonhívásaim" #. module: crm -#: model:crm.case.stage,name:crm.stage_lead3 -msgid "Qualification" -msgstr "Besorolás" - -#. module: crm #: field:crm.lead2opportunity.partner,name:0 #: field:crm.lead2opportunity.partner.mass,name:0 msgid "Conversion Action" @@ -3961,10 +3961,20 @@ msgstr "" #~ msgid "Can not add note!" #~ msgstr "Nem lehet hozzáadni megjegyzést!" +#, python-format +#~ msgid "" +#~ "Opportunity must have Partner assigned before merging with other Opportunity." +#~ msgstr "" +#~ "Csak a Partnerhez rendelt Lehetőséget lehet más Lehetőséggel összefűzni." + #~ msgid "_Merge" #~ msgstr "Össze_fésülés" #, python-format +#~ msgid "The opportunity '%s' has been marked as lost." +#~ msgstr "A '%s' lehetőséget elvesztettnek jelöltem." + +#, python-format #~ msgid "Lead '%s' has been converted to an opportunity." #~ msgstr "A '%s'" @@ -3991,3 +4001,17 @@ msgstr "" #~ msgid "Convert To Opportunity" #~ msgstr "Átalakítás lehetőséggé" + +#~ msgid "Edit all Occurrences of recurrent Meeting." +#~ msgstr "Az ismétlődő találkozók összes eseményének szerkesztése." + +#~ msgid "" +#~ "Leads Analysis allows you to check different CRM related information. Check " +#~ "for treatment delays, number of responses given and emails sent. You can " +#~ "sort out your leads analysis by different groups to get accurate grained " +#~ "analysis." +#~ msgstr "" +#~ "Az érdeklődések elemzése több CRM-hez kapcsolódó információt nyújt. " +#~ "Ellenőrizhetjük az eljárás elnapolását, a kiküldött válaszok és e-mailek " +#~ "számát. A részletes eredmény érdekében az érdeklődéseket különféle " +#~ "csoportosítások szerint is elemezhetjük." diff --git a/addons/crm/res_partner.py b/addons/crm/res_partner.py index f25b1303c02..fca9222082d 100644 --- a/addons/crm/res_partner.py +++ b/addons/crm/res_partner.py @@ -56,7 +56,7 @@ class res_partner(osv.osv): default.update({'opportunity_ids': [], 'meeting_ids' : [], 'phonecall_ids' : []}) - super(res_partner, self).copy(cr, uid, record_id, default, context) + return super(res_partner, self).copy(cr, uid, record_id, default, context) def redirect_partner_form(self, cr, uid, partner_id, context=None): search_view = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'view_res_partner_filter') diff --git a/addons/crm/test/crm_lead_cancel.yml b/addons/crm/test/crm_lead_cancel.yml index 8749675bf23..0f8d9ba1df9 100644 --- a/addons/crm/test/crm_lead_cancel.yml +++ b/addons/crm/test/crm_lead_cancel.yml @@ -4,37 +4,6 @@ !python {model: crm.lead}: | section_id = self.pool.get('crm.case.section').create(cr, uid, {'name': "Phone Marketing", 'parent_id': ref("crm.crm_case_section_2")}) self.write(cr, uid, [ref("crm_case_1")], {'section_id': section_id}) - self.case_cancel(cr, uid, [ref("crm_case_1")]) -- - I check cancelled lead. -- - !python {model: crm.lead}: | - lead = self.browse(cr, uid, ref('crm_case_1')) - assert lead.stage_id.id == ref('crm.stage_lead7'), "Stage should be 'Dead' and is %s." % (lead.stage_id.name) - assert lead.state == 'cancel', "Opportunity is not in 'cancel' state." - assert lead.probability == 0.0, 'Opportunity is probably wrong and should be 0.0.' -- - I reset cancelled lead into unqualified lead. -- - !python {model: crm.lead}: | - self.case_reset(cr, uid, [ref("crm_case_1")]) -- - I check unqualified lead after reset. -- - !assert {model: crm.lead, id: crm.crm_case_1, string: Lead is in draft state}: - - state == "draft" -- - I re-open the lead -- - !python {model: crm.lead}: | - self.case_open(cr, uid, [ref("crm_case_1")]) -- - I check stage and state of the re-opened lead -- - !python {model: crm.lead}: | - lead = self.browse(cr, uid, ref('crm.crm_case_1')) - assert lead.stage_id.id == ref('crm.stage_lead2'), "Opportunity stage should be 'Qualification'." - assert lead.state == 'open', "Opportunity should be in 'open' state." - I escalate the lead to parent team. - diff --git a/addons/crm/test/crm_lead_onchange.yml b/addons/crm/test/crm_lead_onchange.yml index 9154ffdf513..45e140e890e 100644 --- a/addons/crm/test/crm_lead_onchange.yml +++ b/addons/crm/test/crm_lead_onchange.yml @@ -20,9 +20,4 @@ - !record {model: crm.phonecall, id: crm_phonecall_5}: name: 'Bad time' - partner_id: base.res_partner_5 -- - I set the next stage to "New" for the lead. -- - !python {model: crm.lead}: | - self.stage_next(cr, uid, [ref("crm_case_4")], context={'stage_type': 'lead'}) + partner_id: base.res_partner_5
\ No newline at end of file diff --git a/addons/crm/test/lead2opportunity2win.yml b/addons/crm/test/lead2opportunity2win.yml index 94e7149ef77..23545c61bc1 100644 --- a/addons/crm/test/lead2opportunity2win.yml +++ b/addons/crm/test/lead2opportunity2win.yml @@ -1,25 +1,15 @@ - In order to test the conversion of a lead into a opportunity, - - I open a lead. -- - !python {model: crm.lead}: | - self.case_open(cr, uid, [ref("crm_case_4")]) -- - I check if the lead state is "Open". -- - !assert {model: crm.lead, id: crm.crm_case_4, string: Lead state is Open}: - - state == "open" -- I convert lead into opportunity for exiting customer. - !python {model: crm.lead}: | - self.convert_opportunity(cr, uid ,[ref("crm_case_4")], ref("base.res_partner_2")) + self.convert_opportunity(cr, uid ,[ref("crm_case_1")], ref("base.res_partner_2")) - I check details of converted opportunity. - !python {model: crm.lead}: | - lead = self.browse(cr, uid, ref('crm_case_4')) + lead = self.browse(cr, uid, ref('crm_case_1')) assert lead.type == 'opportunity', 'Lead is not converted to opportunity!' assert lead.partner_id.id == ref("base.res_partner_2"), 'Partner mismatch!' assert lead.stage_id.id == ref("stage_lead1"), 'Stage of opportunity is incorrect!' @@ -28,7 +18,7 @@ - !python {model: crm.opportunity2phonecall}: | import time - context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_4')]}) + context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_1')]}) call_id = self.create(cr, uid, {'date': time.strftime('%Y-%m-%d %H:%M:%S'), 'name': "Bonjour M. Jean, Comment allez-vous? J'ai bien reçu votre demande, pourrions-nous en parler quelques minutes?"}, context=context) self.action_schedule(cr, uid, [call_id], context=context) @@ -36,28 +26,28 @@ I check that phonecall is scheduled for that opportunity. - !python {model: crm.phonecall}: | - ids = self.search(cr, uid, [('opportunity_id', '=', ref('crm_case_4'))]) + ids = self.search(cr, uid, [('opportunity_id', '=', ref('crm_case_1'))]) assert len(ids), 'Phonecall is not scheduled' - Now I schedule meeting with customer. - !python {model: crm.lead}: | - self.action_makeMeeting(cr, uid, [ref('crm_case_4')]) + self.action_makeMeeting(cr, uid, [ref('crm_case_1')]) - After communicated with customer, I put some notes with contract details. - !python {model: crm.lead}: | - self.message_post(cr, uid, [ref('crm_case_4')], subject='Test note', body='Détails envoyés par le client sur le FAX pour la qualité') + self.message_post(cr, uid, [ref('crm_case_1')], subject='Test note', body='Détails envoyés par le client sur le FAX pour la qualité') - I win this opportunity - !python {model: crm.lead}: | - self.case_mark_won(cr, uid, [ref("crm_case_4")]) + self.case_mark_won(cr, uid, [ref("crm_case_1")]) - I check details of the opportunity after having won the opportunity. - !python {model: crm.lead}: | - lead = self.browse(cr, uid, ref('crm_case_4')) + lead = self.browse(cr, uid, ref('crm_case_1')) assert lead.stage_id.id == ref('crm.stage_lead6'), "Opportunity stage should be 'Won'." assert lead.state == 'done', "Opportunity is not in 'done' state!" assert lead.probability == 100.0, "Revenue probability should be 100.0!" @@ -104,7 +94,6 @@ - !python {model: crm.meeting}: | context.update({'active_model': 'crm.meeting'}) - self.case_open(cr, uid, [ref('base_calendar.crm_meeting_4')]) - I invite a user for meeting. - diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py index 774571b0314..1e3ed2faad1 100644 --- a/addons/crm_claim/crm_claim.py +++ b/addons/crm_claim/crm_claim.py @@ -19,20 +19,12 @@ # ############################################################################## -from openerp.addons.base_status.base_stage import base_stage -import binascii from openerp.addons.crm import crm from openerp.osv import fields, osv -import time from openerp import tools from openerp.tools.translate import _ from openerp.tools import html2plaintext -CRM_CLAIM_PENDING_STATES = ( - crm.AVAILABLE_STATES[2][0], # Cancelled - crm.AVAILABLE_STATES[3][0], # Done - crm.AVAILABLE_STATES[4][0], # Pending -) class crm_claim_stage(osv.osv): """ Model for claim stages. This models the main stages of a claim @@ -51,8 +43,6 @@ class crm_claim_stage(osv.osv): 'section_ids':fields.many2many('crm.case.section', 'section_claim_stage_rel', 'stage_id', 'section_id', string='Sections', help="Link between stages and sales teams. When set, this limitate the current stage to the selected sales teams."), 'state': fields.selection(crm.AVAILABLE_STATES, 'Status', required=True, help="The related status for the stage. The status of your document will automatically change regarding the selected stage. For example, if a stage is related to the status 'Close', when your document reaches this stage, it will be automatically have the 'closed' status."), - 'case_refused': fields.boolean('Refused stage', - help='Refused stages are specific stages for done.'), 'case_default': fields.boolean('Common to All Teams', help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."), 'fold': fields.boolean('Hide in Views when Empty', @@ -63,10 +53,9 @@ class crm_claim_stage(osv.osv): 'sequence': lambda *args: 1, 'state': 'draft', 'fold': False, - 'case_refused': False, } -class crm_claim(base_stage, osv.osv): +class crm_claim(osv.osv): """ Crm claim """ _name = "crm.claim" @@ -74,6 +63,15 @@ class crm_claim(base_stage, osv.osv): _order = "priority,date desc" _inherit = ['mail.thread'] + def _get_default_section_id(self, cr, uid, context=None): + """ Gives default section by checking if present in the context """ + return self.pool.get('crm.lead')._resolve_section_id_from_context(cr, uid, context=context) or False + + def _get_default_stage_id(self, cr, uid, context=None): + """ Gives default stage_id """ + section_id = self._get_default_section_id(cr, uid, context=context) + return self.stage_find(cr, uid, [], section_id, [('state', '=', 'draft')], context=context) + _columns = { 'id': fields.integer('ID', readonly=True), 'name': fields.char('Claim Subject', size=128, required=True), @@ -117,15 +115,13 @@ class crm_claim(base_stage, osv.osv): } _defaults = { - 'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c), - 'partner_id': lambda s, cr, uid, c: s._get_default_partner(cr, uid, c), - 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), + 'user_id': lambda s, cr, uid, c: uid, 'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c), - 'date': fields.datetime.now, + 'date': fields.datetime.now(), 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.case', context=c), 'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0], 'active': lambda *a: 1, - 'stage_id':lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c) + 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c) } def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None): @@ -158,27 +154,24 @@ class crm_claim(base_stage, osv.osv): return stage_ids[0] return False - def case_refuse(self, cr, uid, ids, context=None): - """ Mark the case as refused: state=done and case_refused=True """ - for lead in self.browse(cr, uid, ids): - stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, ['&', ('state', '=', 'done'), ('case_refused', '=', True)], context=context) - if stage_id: - self.case_set(cr, uid, [lead.id], values_to_update={}, new_stage_id=stage_id, context=context) - return True - - def onchange_partner_id(self, cr, uid, ids, part, email=False): + def onchange_partner_id(self, cr, uid, ids, partner_id, email=False, context=None): """This function returns value of partner address based on partner - :param part: Partner's id :param email: ignored """ - if not part: - return {'value': {'email_from': False, - 'partner_phone': False - } - } - address = self.pool.get('res.partner').browse(cr, uid, part) + if not partner_id: + return {'value': {'email_from': False, 'partner_phone': False}} + address = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context) return {'value': {'email_from': address.email, 'partner_phone': address.phone}} + def create(self, cr, uid, vals, context=None): + if context is None: + context = {} + if vals.get('section_id') and not context.get('default_section_id'): + context['default_section_id'] = vals.get('section_id') + + # context: no_log, because subtype already handle this + return super(crm_claim, self).create(cr, uid, vals, context=context) + # ------------------------------------------------------- # Mail gateway # ------------------------------------------------------- diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml index 0d2d8b391e7..28d0f7c731c 100644 --- a/addons/crm_claim/crm_claim_view.xml +++ b/addons/crm_claim/crm_claim_view.xml @@ -52,7 +52,6 @@ <field name="case_default"/> <field name="sequence"/> <field name="state"/> - <field name="case_refused"/> <field name="fold"/> </form> </field> @@ -102,10 +101,6 @@ <field name="arch" type="xml"> <form string="Claim" version="7.0"> <header> - <button name="case_close" string="Settle" type="object" class="oe_highlight" - states="draft,open,pending" groups="base.group_user"/> - <button name="case_cancel" string="Reject" type="object" groups="base.group_user" - states="draft,open,pending"/> <field name="stage_id" widget="statusbar" clickable="True"/> </header> <sheet string="Claims"> diff --git a/addons/crm_claim/test/process/claim.yml b/addons/crm_claim/test/process/claim.yml index a843372956e..f6c6f6d315c 100644 --- a/addons/crm_claim/test/process/claim.yml +++ b/addons/crm_claim/test/process/claim.yml @@ -21,25 +21,9 @@ - !python {model: crm.claim}: | claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')]) - self.case_open(cr, uid, claim_ids) - - I check Claim Details after open. + I check Claim Details after open. - !python {model: crm.claim}: | claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')]) claim = self.browse(cr, uid, claim_ids[0]) - assert claim.state == "open", "Claim is not in Open state" - assert claim.stage_id.id == ref("crm.stage_lead2"), "Claim is not in Qualification stage" -- - After complete all service from our side, I close this claim. -- - !python {model: crm.claim}: | - claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')]) - self.case_close(cr, uid, claim_ids) -- - I check Claim details after closed. -- - !python {model: crm.claim}: | - claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')]) - claim = self.browse(cr, uid, claim_ids[0]) - assert claim.state == "done", "Claim is not in close state" diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py index 2d0383962b1..ea58016b4c1 100644 --- a/addons/crm_helpdesk/crm_helpdesk.py +++ b/addons/crm_helpdesk/crm_helpdesk.py @@ -20,20 +20,14 @@ ############################################################################## from openerp.addons.base_status.base_state import base_state -from openerp.addons.base_status.base_stage import base_stage from openerp.addons.crm import crm from openerp.osv import fields, osv from openerp import tools from openerp.tools.translate import _ from openerp.tools import html2plaintext -CRM_HELPDESK_STATES = ( - crm.AVAILABLE_STATES[2][0], # Cancelled - crm.AVAILABLE_STATES[3][0], # Done - crm.AVAILABLE_STATES[4][0], # Pending -) -class crm_helpdesk(base_state, base_stage, osv.osv): +class crm_helpdesk(base_state, osv.osv): """ Helpdesk Cases """ _name = "crm.helpdesk" @@ -80,9 +74,7 @@ class crm_helpdesk(base_state, base_stage, osv.osv): _defaults = { 'active': lambda *a: 1, - 'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c), - 'partner_id': lambda s, cr, uid, c: s._get_default_partner(cr, uid, c), - 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), + 'user_id': lambda s, cr, uid, c: uid, 'state': lambda *a: 'draft', 'date': lambda *a: fields.datetime.now(), 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c), diff --git a/addons/decimal_precision/i18n/ko.po b/addons/decimal_precision/i18n/ko.po new file mode 100644 index 00000000000..0b3df57f440 --- /dev/null +++ b/addons/decimal_precision/i18n/ko.po @@ -0,0 +1,49 @@ +# Korean translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-28 09:31+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Korean <ko@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: decimal_precision +#: field:decimal.precision,digits:0 +msgid "Digits" +msgstr "자리수" + +#. module: decimal_precision +#: model:ir.actions.act_window,name:decimal_precision.action_decimal_precision_form +#: model:ir.ui.menu,name:decimal_precision.menu_decimal_precision_form +msgid "Decimal Accuracy" +msgstr "소숫점 정확성" + +#. module: decimal_precision +#: field:decimal.precision,name:0 +msgid "Usage" +msgstr "사용량" + +#. module: decimal_precision +#: sql_constraint:decimal.precision:0 +msgid "Only one value can be defined for each given usage!" +msgstr "" + +#. module: decimal_precision +#: view:decimal.precision:0 +msgid "Decimal Precision" +msgstr "소수점 정확성" + +#. module: decimal_precision +#: model:ir.model,name:decimal_precision.model_decimal_precision +msgid "decimal.precision" +msgstr "decimal.precision" diff --git a/addons/document_page/document_page.py b/addons/document_page/document_page.py index f74cfe02a21..7f885018001 100644 --- a/addons/document_page/document_page.py +++ b/addons/document_page/document_page.py @@ -66,7 +66,7 @@ class document_page(osv.osv): 'create_date': fields.datetime("Created on", select=True, readonly=True), 'create_uid': fields.many2one('res.users', 'Author', select=True, readonly=True), 'write_date': fields.datetime("Modification Date", select=True, readonly=True), - 'write_uid': fields.many2one('res.users', "Last Contributor", select=True), + 'write_uid': fields.many2one('res.users', "Last Contributor", select=True, readonly=True), } _defaults = { 'type':'content', diff --git a/addons/fetchmail/i18n/ko.po b/addons/fetchmail/i18n/ko.po new file mode 100644 index 00000000000..a4b6e4e03b9 --- /dev/null +++ b/addons/fetchmail/i18n/ko.po @@ -0,0 +1,322 @@ +# Korean translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-28 09:25+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Korean <ko@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: fetchmail +#: selection:fetchmail.server,state:0 +msgid "Confirmed" +msgstr "확정됨" + +#. module: fetchmail +#: field:fetchmail.server,server:0 +msgid "Server Name" +msgstr "서버 이름" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "POP" +msgstr "POP" + +#. module: fetchmail +#: help:fetchmail.server,priority:0 +msgid "Defines the order of processing, lower values mean higher priority" +msgstr "" + +#. module: fetchmail +#: help:fetchmail.server,is_ssl:0 +msgid "" +"Connections are encrypted with SSL/TLS through a dedicated port (default: " +"IMAPS=993, POP3S=995)" +msgstr "" + +#. module: fetchmail +#: field:fetchmail.server,attach:0 +msgid "Keep Attachments" +msgstr "첨부파일 보관" + +#. module: fetchmail +#: field:fetchmail.server,is_ssl:0 +msgid "SSL/TLS" +msgstr "SSL/TLS" + +#. module: fetchmail +#: help:fetchmail.server,original:0 +msgid "" +"Whether a full original copy of each email should be kept for referenceand " +"attached to each processed message. This will usually double the size of " +"your message database." +msgstr "" + +#. module: fetchmail +#: view:base.config.settings:0 +msgid "Configure the incoming email gateway" +msgstr "수신 이메일 게이트웨이 구성" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Fetch Now" +msgstr "지금 가져오기" + +#. module: fetchmail +#: model:ir.actions.act_window,name:fetchmail.action_email_server_tree +#: model:ir.ui.menu,name:fetchmail.menu_action_fetchmail_server_tree +msgid "Incoming Mail Servers" +msgstr "수신 메일 서버" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server type IMAP." +msgstr "서버유형 IMAP." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "POP/IMAP Servers" +msgstr "POP/IMAP 서버" + +#. module: fetchmail +#: selection:fetchmail.server,type:0 +msgid "Local Server" +msgstr "로컬 서버" + +#. module: fetchmail +#: field:fetchmail.server,state:0 +msgid "Status" +msgstr "상태" + +#. module: fetchmail +#: model:ir.model,name:fetchmail.model_fetchmail_server +msgid "POP/IMAP Server" +msgstr "POP/IMAP 서버" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Reset Confirmation" +msgstr "" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "SSL" +msgstr "SSL" + +#. module: fetchmail +#: model:ir.model,name:fetchmail.model_fetchmail_config_settings +msgid "fetchmail.config.settings" +msgstr "fetchmail.config.settings" + +#. module: fetchmail +#: field:fetchmail.server,date:0 +msgid "Last Fetch Date" +msgstr "마지막으로 가져온 날짜" + +#. module: fetchmail +#: help:fetchmail.server,action_id:0 +msgid "" +"Optional custom server action to trigger for each incoming mail, on the " +"record that was created or updated by this mail" +msgstr "" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "# of emails" +msgstr "이메일 개수" + +#. module: fetchmail +#: field:fetchmail.server,original:0 +msgid "Keep Original" +msgstr "원본 유지" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Advanced Options" +msgstr "고급 옵션" + +#. module: fetchmail +#: view:fetchmail.server:0 +#: field:fetchmail.server,configuration:0 +msgid "Configuration" +msgstr "구성" + +#. module: fetchmail +#: field:fetchmail.server,script:0 +msgid "Script" +msgstr "스크립트" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Incoming Mail Server" +msgstr "수신 메일 서버" + +#. module: fetchmail +#: code:addons/fetchmail/fetchmail.py:163 +#, python-format +msgid "Connection test failed!" +msgstr "연결 시험에 실패함!" + +#. module: fetchmail +#: field:fetchmail.server,user:0 +msgid "Username" +msgstr "사용자명" + +#. module: fetchmail +#: help:fetchmail.server,server:0 +msgid "Hostname or IP of the mail server" +msgstr "메일서버의 호스트이름 또는 IP" + +#. module: fetchmail +#: field:fetchmail.server,name:0 +msgid "Name" +msgstr "이름" + +#. module: fetchmail +#: code:addons/fetchmail/fetchmail.py:163 +#, python-format +msgid "" +"Here is what we got instead:\n" +" %s." +msgstr "" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Test & Confirm" +msgstr "시험 & 확정" + +#. module: fetchmail +#: field:fetchmail.server,action_id:0 +msgid "Server Action" +msgstr "서버 동작" + +#. module: fetchmail +#: field:mail.mail,fetchmail_server_id:0 +msgid "Inbound Mail Server" +msgstr "수신메일서버" + +#. module: fetchmail +#: field:fetchmail.server,message_ids:0 +#: model:ir.actions.act_window,name:fetchmail.act_server_history +msgid "Messages" +msgstr "메시지" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Search Incoming Mail Servers" +msgstr "수신메일서버 검색" + +#. module: fetchmail +#: field:fetchmail.server,active:0 +msgid "Active" +msgstr "활성" + +#. module: fetchmail +#: help:fetchmail.server,attach:0 +msgid "" +"Whether attachments should be downloaded. If not enabled, incoming emails " +"will be stripped of any attachments before being processed" +msgstr "" + +#. module: fetchmail +#: model:ir.model,name:fetchmail.model_mail_mail +msgid "Outgoing Mails" +msgstr "발신 이메일" + +#. module: fetchmail +#: field:fetchmail.server,priority:0 +msgid "Server Priority" +msgstr "서버 우선 순위" + +#. module: fetchmail +#: selection:fetchmail.server,type:0 +msgid "IMAP Server" +msgstr "IMAP 서버" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "IMAP" +msgstr "IMAP" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server type POP." +msgstr "" + +#. module: fetchmail +#: field:fetchmail.server,password:0 +msgid "Password" +msgstr "암호" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Actions to Perform on Incoming Mails" +msgstr "수신 메일에 실행할 동작" + +#. module: fetchmail +#: field:fetchmail.server,type:0 +msgid "Server Type" +msgstr "서버 유형" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Login Information" +msgstr "로그인 정보" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server Information" +msgstr "서버 정보" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "If SSL required." +msgstr "SSL이 필요할 경우." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Advanced" +msgstr "고급" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server & Login" +msgstr "서버 & 로그인" + +#. module: fetchmail +#: help:fetchmail.server,object_id:0 +msgid "" +"Process each incoming mail as part of a conversation corresponding to this " +"document type. This will create new documents for new conversations, or " +"attach follow-up emails to the existing conversations (documents)." +msgstr "" + +#. module: fetchmail +#: field:fetchmail.server,object_id:0 +msgid "Create a New Record" +msgstr "" + +#. module: fetchmail +#: selection:fetchmail.server,state:0 +msgid "Not Confirmed" +msgstr "확정되지 않음" + +#. module: fetchmail +#: selection:fetchmail.server,type:0 +msgid "POP Server" +msgstr "POP 서버" + +#. module: fetchmail +#: field:fetchmail.server,port:0 +msgid "Port" +msgstr "포트" diff --git a/addons/google_drive/i18n/zh_CN.po b/addons/google_drive/i18n/zh_CN.po index 29e36e5d117..f7171c9225e 100644 --- a/addons/google_drive/i18n/zh_CN.po +++ b/addons/google_drive/i18n/zh_CN.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2013-06-27 16:03+0000\n" -"PO-Revision-Date: 2013-01-04 11:38+0000\n" -"Last-Translator: Roc Wu <irocwu@gmail.com>\n" +"PO-Revision-Date: 2013-06-29 04:39+0000\n" +"Last-Translator: David.Xu <xzxyxu@gmail.com>\n" "Language-Team: Chinese (Simplified) <zh_CN@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" -"X-Generator: Launchpad (build 16681)\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: google_drive #: model:ir.ui.menu,name:google_drive.menu_google_drive_config msgid "Google Drive configuration" -msgstr "" +msgstr "Google Drive配置" #. module: google_drive #: code:addons/google_drive/google_drive.py:48 @@ -50,7 +50,7 @@ msgstr "" #. module: google_drive #: view:google.drive.config:0 msgid "To create a new filter:" -msgstr "" +msgstr "创建新过滤器" #. module: google_drive #: model:ir.model,name:google_drive.model_base_config_settings @@ -78,12 +78,12 @@ msgstr "" #: code:addons/google_drive/google_drive.py:150 #, python-format msgid "Incorrect URL!" -msgstr "" +msgstr "错误的URL" #. module: google_drive #: view:base.config.settings:0 msgid "Configure your templates" -msgstr "" +msgstr "配置你的模版" #. module: google_drive #: help:google.drive.config,name_template:0 @@ -132,7 +132,7 @@ msgstr "" #: code:addons/google_drive/google_drive.py:150 #, python-format msgid "Please enter a valid Google Document URL." -msgstr "" +msgstr "请输入一个有效的Google文档URL" #. module: google_drive #: field:google.drive.config,google_drive_client_id:0 @@ -149,7 +149,7 @@ msgstr "" #. module: google_drive #: field:google.drive.config,filter_id:0 msgid "Filter" -msgstr "" +msgstr "过滤器" #. module: google_drive #: field:google.drive.config,name_template:0 @@ -222,7 +222,7 @@ msgstr "" #. module: google_drive #: field:google.drive.config,name:0 msgid "Template Name" -msgstr "" +msgstr "模板名称" #. module: google_drive #: constraint:google.drive.config:0 @@ -243,7 +243,7 @@ msgstr "" #. module: google_drive #: field:base.config.settings,google_drive_authorization_code:0 msgid "Authorization Code" -msgstr "" +msgstr "授权码" #. module: google_drive #: model:ir.model,name:google_drive.model_google_drive_config diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml index a383f72e2ab..0d9e2a247fd 100644 --- a/addons/hr_expense/hr_expense_view.xml +++ b/addons/hr_expense/hr_expense_view.xml @@ -86,7 +86,7 @@ </group> <notebook> <page string="Description"> - <field name="line_ids" context="{'currency_id': currency_id, 'default_analytic_account': context.get('analytic_account')}"> + <field name="line_ids" context="{'currency_id': currency_id, 'default_analytic_account': context.get('analytic_account', '')}"> <form string="Expense Lines" version="7.0"> <group> <group> diff --git a/addons/hr_recruitment/__openerp__.py b/addons/hr_recruitment/__openerp__.py index e83c546af04..23eaef1b886 100644 --- a/addons/hr_recruitment/__openerp__.py +++ b/addons/hr_recruitment/__openerp__.py @@ -47,7 +47,6 @@ You can define the different phases of interviews and easily rate the applicant 'fetchmail', ], 'data': [ - 'wizard/hr_recruitment_employee_hired.xml', 'wizard/hr_recruitment_create_partner_job_view.xml', 'hr_recruitment_view.xml', 'hr_recruitment_menu.xml', diff --git a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml index 79e09937705..2bec80858a5 100644 --- a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml +++ b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml @@ -22,7 +22,7 @@ <field name="res_model">hr.applicant</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> - <field name="domain">[('state','in',('draft','open'))]</field> + <field name="domain">[('stage_id.fold', '!=', True)]</field> <field name="view_id" ref="view_applicants_status_tree"/> </record> diff --git a/addons/hr_recruitment/doc/changelog.rst b/addons/hr_recruitment/doc/changelog.rst new file mode 100644 index 00000000000..404b94ee6d1 --- /dev/null +++ b/addons/hr_recruitment/doc/changelog.rst @@ -0,0 +1,16 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-2)` +---------------- + +- Stage/state update + + - ``hr.applicant``: removed inheritance from ``base_stage`` class and removed + ``state`` field. Added ``date_last_stage_update`` field holding last stage_id + modification. Removed ``date`` field not used anywhere. Updated reports. + - ``hr.recruitment.stage``: removed ``state`` field. + +- Removed ``hired.employee`` wizard. diff --git a/addons/hr_recruitment/doc/index.rst b/addons/hr_recruitment/doc/index.rst new file mode 100644 index 00000000000..d9e83fc9c10 --- /dev/null +++ b/addons/hr_recruitment/doc/index.rst @@ -0,0 +1,22 @@ +===================== +HR Recruitment DevDoc +===================== + +Hr Recruitment module documentation +=================================== + +Documentation topics +'''''''''''''''''''' + +.. toctree:: + :maxdepth: 1 + + stage_status.rst + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/hr_recruitment/doc/stage_status.rst b/addons/hr_recruitment/doc/stage_status.rst new file mode 100644 index 00000000000..111c43db250 --- /dev/null +++ b/addons/hr_recruitment/doc/stage_status.rst @@ -0,0 +1,54 @@ +.. _stage_status: + +Stage and Status +================ + +.. versionchanged:: 8.0 saas-2 state/stage cleaning + +Stage ++++++ + +This revision removed the concept of state on hr.applicant objects. The ``state`` +field has been totally removed and replaced by stages, using ``stage_id``. The +following models are impacted: + + - ``hr.applicant`` now use only stages. However a convention still exists about + 'New' stage. An applicant is consdered as ``new`` when it has the following + properties: + + - ``stage_id and stage_id.sequence = 1`` + + - ``hr.recruitment.stage`` do not have any ``state`` field anymore. + - ``hr.recruitment.report`` do not have any ``state`` field anymore. + +By default a newly created applicant be in a new stage. It means that it will +fetch the stage having ``sequence = 1``. Stage mangement is done using the +kanban view or the clikable statusbar. It is not done using buttons anymore. +Employee creation is still feasible directly from a link button in the form view. + +Stage analysis +++++++++++++++ + +Stage analysis can be performed using the newly introduced ``date_last_stage_update`` +datetime field. This field is updated everytime ``stage_id`` is updated. + +``hr.recruitment.report`` model also uses the ``date_last_stage_update`` field. +This allows to group and analyse the time spend in the various stages. + +Open / Assignation date ++++++++++++++++++++++++ + +The ``date_open`` field meaning has been updated. It is now set when the ``user_id`` +(responsible) is set. It is therefore the assignation date. + +Subtypes +++++++++ + +The following subtypes are triggered on ``hr.applicant``: + + - ``mt_applicant_new``: new applicants. Condition: ``obj.stage_id and obj.stage_id.sequence == 1`` + - ``mt_applicant_stage_changed``: stage changed. Condition: ``obj.stage_id and obj.stage_id.sequence != 1`` + +The following subtype is trigerred on ``hr.job``: + + - ``mt_job_new_applicant``: new applicant in the job. diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index d8c00c40a31..ce6f60669c4 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -19,23 +19,13 @@ # ############################################################################## -import time from openerp import tools -from openerp.addons.base_status.base_stage import base_stage from datetime import datetime from openerp.osv import fields, osv from openerp.tools.translate import _ from openerp.tools import html2plaintext -AVAILABLE_STATES = [ - ('draft', 'New'), - ('cancel', 'Refused'), - ('open', 'In Progress'), - ('pending', 'Pending'), - ('done', 'Hired') -] - AVAILABLE_PRIORITIES = [ ('', ''), ('5', 'Not Good'), @@ -62,13 +52,11 @@ class hr_recruitment_stage(osv.osv): 'name': fields.char('Name', size=64, required=True, translate=True), 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of stages."), 'department_id':fields.many2one('hr.department', 'Specific to a Department', help="Stages of the recruitment process may be different per department. If this stage is common to all departments, keep this field empty."), - 'state': fields.selection(AVAILABLE_STATES, 'Status', required=True, help="The related status for the stage. The status of your document will automatically change according to the selected stage. Example, a stage is related to the status 'Close', when your document reach this stage, it will be automatically closed."), 'fold': fields.boolean('Hide in views if empty', help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."), 'requirements': fields.text('Requirements'), } _defaults = { 'sequence': 1, - 'state': 'draft', 'fold': False, } @@ -87,18 +75,15 @@ class hr_recruitment_degree(osv.osv): ('name_uniq', 'unique (name)', 'The name of the Degree of Recruitment must be unique!') ] -class hr_applicant(base_stage, osv.Model): +class hr_applicant(osv.Model): _name = "hr.applicant" _description = "Applicant" _order = "id desc" _inherit = ['mail.thread', 'ir.needaction_mixin'] _track = { - 'state': { - 'hr_recruitment.mt_applicant_hired': lambda self, cr, uid, obj, ctx=None: obj.state == 'done', - 'hr_recruitment.mt_applicant_refused': lambda self, cr, uid, obj, ctx=None: obj.state == 'cancel', - }, 'stage_id': { - 'hr_recruitment.mt_stage_changed': lambda self, cr, uid, obj, ctx=None: obj.state not in ['done', 'cancel'], + 'hr_recruitment.mt_applicant_new': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence == 1, + 'hr_recruitment.mt_applicant_stage_changed': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence != 1, }, } @@ -109,7 +94,7 @@ class hr_applicant(base_stage, osv.Model): def _get_default_stage_id(self, cr, uid, context=None): """ Gives default stage_id """ department_id = self._get_default_department_id(cr, uid, context=context) - return self.stage_find(cr, uid, [], department_id, [('state', '=', 'draft')], context=context) + return self.stage_find(cr, uid, [], department_id, [('sequence', '=', '1')], context=context) def _resolve_department_id_from_context(self, cr, uid, context=None): """ Returns ID of department based on the value of 'default_department_id' @@ -197,20 +182,12 @@ class hr_applicant(base_stage, osv.Model): 'write_date': fields.datetime('Update Date', readonly=True), 'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage', track_visibility='onchange', domain="['|', ('department_id', '=', department_id), ('department_id', '=', False)]"), - 'state': fields.related('stage_id', 'state', type="selection", store=True, - selection=AVAILABLE_STATES, string="Status", readonly=True, - help='The status is set to \'Draft\', when a case is created.\ - If the case is in progress the status is set to \'Open\'.\ - When the case is over, the status is set to \'Done\'.\ - If the case needs to be reviewed then the status is \ - set to \'Pending\'.'), 'categ_ids': fields.many2many('hr.applicant_category', string='Tags'), 'company_id': fields.many2one('res.company', 'Company'), 'user_id': fields.many2one('res.users', 'Responsible', track_visibility='onchange'), - # Applicant Columns 'date_closed': fields.datetime('Closed', readonly=True, select=True), - 'date_open': fields.datetime('Opened', readonly=True, select=True), - 'date': fields.datetime('Date'), + 'date_open': fields.datetime('Assigned', readonly=True, select=True), + 'date_last_stage_update': fields.datetime('Last Stage Update', select=True), 'date_action': fields.date('Next Action Date'), 'title_action': fields.char('Next Action', size=64), 'priority': fields.selection(AVAILABLE_PRIORITIES, 'Appreciation'), @@ -234,37 +211,35 @@ class hr_applicant(base_stage, osv.Model): 'day_close': fields.function(_compute_day, string='Days to Close', \ multi='day_close', type="float", store=True), 'color': fields.integer('Color Index'), - 'emp_id': fields.many2one('hr.employee', 'employee'), + 'emp_id': fields.many2one('hr.employee', string='Employee', + help='Employee linked to the applicant.'), 'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True), } _defaults = { 'active': lambda *a: 1, - 'user_id': lambda s, cr, uid, c: uid, - 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), + 'user_id': lambda s, cr, uid, c: uid, 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c), 'department_id': lambda s, cr, uid, c: s._get_default_department_id(cr, uid, c), 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'hr.applicant', context=c), 'color': 0, + 'date_last_stage_update': fields.datetime.now(), } _group_by_full = { 'stage_id': _read_group_stage_ids } - def onchange_job(self, cr, uid, ids, job, context=None): - result = {} + def onchange_job(self, cr, uid, ids, job_id=False, context=None): + if job_id: + job_record = self.pool.get('hr.job').browse(cr, uid, job_id, context=context) + if job_record and job_record.department_id: + return {'value': {'department_id': job_record.department_id.id}} + return {} - if job: - job_obj = self.pool.get('hr.job') - result['department_id'] = job_obj.browse(cr, uid, job, context=context).department_id.id - return {'value': result} - return {'value': {'department_id': False}} - - def onchange_department_id(self, cr, uid, ids, department_id=False, context=None): - obj_recru_stage = self.pool.get('hr.recruitment.stage') - stage_ids = obj_recru_stage.search(cr, uid, ['|',('department_id','=',department_id),('department_id','=',False)], context=context) - stage_id = stage_ids and stage_ids[0] or False + def onchange_department_id(self, cr, uid, ids, department_id=False, stage_id=False, context=None): + if not stage_id: + stage_id = self.stage_find(cr, uid, [], department_id, [('sequence', '=', '1')], context=context) return {'value': {'stage_id': stage_id}} def onchange_partner_id(self, cr, uid, ids, partner_id, context=None): @@ -403,27 +378,31 @@ class hr_applicant(base_stage, osv.Model): return super(hr_applicant, self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context) def create(self, cr, uid, vals, context=None): + if context is None: + context = {} + if vals.get('department_id') and not context.get('default_department_id'): + context['default_department_id'] = vals.get('department_id') + obj_id = super(hr_applicant, self).create(cr, uid, vals, context=context) applicant = self.browse(cr, uid, obj_id, context=context) if applicant.job_id: self.pool.get('hr.job').message_post(cr, uid, [applicant.job_id.id], body=_('Applicant <b>created</b>'), subtype="hr_recruitment.mt_job_new_applicant", context=context) return obj_id - def case_open(self, cr, uid, ids, context=None): - """ - open Request of the applicant for the hr_recruitment - """ - res = super(hr_applicant, self).case_open(cr, uid, ids, context) - date = self.read(cr, uid, ids, ['date_open'])[0] - if not date['date_open']: - self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'),}) - return res + def write(self, cr, uid, ids, vals, context=None): + if isinstance(ids, (int, long)): + ids = [ids] + # stage change: update date_last_stage_update + if 'stage_id' in vals: + vals['date_last_stage_update'] = fields.datetime.now() + # user_id change: update date_start + if vals.get('user_id'): + vals['date_start'] = fields.datetime.now() - def case_close(self, cr, uid, ids, context=None): - res = super(hr_applicant, self).case_close(cr, uid, ids, context) - return res + return super(hr_applicant, self).write(cr, uid, ids, vals, context=context) - def case_close_with_emp(self, cr, uid, ids, context=None): + def create_employee_from_applicant(self, cr, uid, ids, context=None): + """ Create an hr.employee from the hr.applicants """ if context is None: context = {} hr_employee = self.pool.get('hr.employee') @@ -433,17 +412,16 @@ class hr_applicant(base_stage, osv.Model): for applicant in self.browse(cr, uid, ids, context=context): address_id = contact_name = False if applicant.partner_id: - address_id = self.pool.get('res.partner').address_get(cr,uid,[applicant.partner_id.id],['contact'])['contact'] - contact_name = self.pool.get('res.partner').name_get(cr,uid,[applicant.partner_id.id])[0][1] + address_id = self.pool.get('res.partner').address_get(cr, uid, [applicant.partner_id.id], ['contact'])['contact'] + contact_name = self.pool.get('res.partner').name_get(cr, uid, [applicant.partner_id.id])[0][1] if applicant.job_id and (applicant.partner_name or contact_name): applicant.job_id.write({'no_of_recruitment': applicant.job_id.no_of_recruitment - 1}) - emp_id = hr_employee.create(cr,uid,{'name': applicant.partner_name or contact_name, + emp_id = hr_employee.create(cr, uid, {'name': applicant.partner_name or contact_name, 'job_id': applicant.job_id.id, 'address_home_id': address_id, 'department_id': applicant.department_id.id }) self.write(cr, uid, [applicant.id], {'emp_id': emp_id}, context=context) - self.case_close(cr, uid, [applicant.id], context) else: raise osv.except_osv(_('Warning!'), _('You must define an Applied Job and a Contact Name for this applicant.')) @@ -454,26 +432,6 @@ class hr_applicant(base_stage, osv.Model): dict_act_window['view_mode'] = 'form,tree' return dict_act_window - def case_cancel(self, cr, uid, ids, context=None): - """Overrides cancel for crm_case for setting probability - """ - res = super(hr_applicant, self).case_cancel(cr, uid, ids, context) - self.write(cr, uid, ids, {'probability': 0.0}) - return res - - def case_pending(self, cr, uid, ids, context=None): - """Marks case as pending""" - res = super(hr_applicant, self).case_pending(cr, uid, ids, context) - self.write(cr, uid, ids, {'probability': 0.0}) - return res - - def case_reset(self, cr, uid, ids, context=None): - """Resets case as draft - """ - res = super(hr_applicant, self).case_reset(cr, uid, ids, context) - self.write(cr, uid, ids, {'date_open': False, 'date_closed': False}) - return res - def set_priority(self, cr, uid, ids, priority, *args): """Set applicant priority """ diff --git a/addons/hr_recruitment/hr_recruitment_data.xml b/addons/hr_recruitment/hr_recruitment_data.xml index f3f1b3e712d..854dea0548f 100644 --- a/addons/hr_recruitment/hr_recruitment_data.xml +++ b/addons/hr_recruitment/hr_recruitment_data.xml @@ -51,34 +51,29 @@ <field name="name">Doctoral Degree</field> <field name="sequence">4</field> </record> + <record model="hr.recruitment.stage" id="stage_job1"> <field name="name">Initial Qualification</field> - <field name="state">draft</field> <field name="sequence">1</field> </record> <record model="hr.recruitment.stage" id="stage_job2"> <field name="name">First Interview</field> - <field name="state">open</field> <field name="sequence">2</field> </record> <record model="hr.recruitment.stage" id="stage_job3"> <field name="name">Second Interview</field> - <field name="state">open</field> <field name="sequence">3</field> </record> <record model="hr.recruitment.stage" id="stage_job4"> <field name="name">Contract Proposed</field> - <field name="state">pending</field> <field name="sequence">4</field> </record> <record model="hr.recruitment.stage" id="stage_job5"> <field name="name">Contract Signed</field> - <field name="state">done</field> <field name="sequence">5</field> </record> <record model="hr.recruitment.stage" id="stage_job6"> <field name="name">Refused</field> - <field name="state">cancel</field> <field name="sequence">6</field> <field name="fold" eval="True"/> </record> @@ -467,24 +462,24 @@ <field name="res_model">hr.job</field> </record> <!-- Applicant-related subtypes for messaging / Chatter --> - <record id="mt_stage_changed" model="mail.message.subtype"> + <record id="mt_applicant_new" model="mail.message.subtype"> + <field name="name">New Applicant</field> + <field name="res_model">hr.applicant</field> + <field name="default" eval="False"/> + <field name="description">Applicant created</field> + </record> + <record id="mt_applicant_stage_changed" model="mail.message.subtype"> <field name="name">Stage Changed</field> <field name="res_model">hr.applicant</field> <field name="default" eval="False"/> <field name="description">Stage changed</field> </record> - <record id="mt_applicant_hired" model="mail.message.subtype"> + <record id="mt_applicant_employee" model="mail.message.subtype"> <field name="name">Applicant Hired</field> <field name="res_model">hr.applicant</field> <field name="default" eval="False"/> <field name="description">Applicant hired</field> </record> - <record id="mt_applicant_refused" model="mail.message.subtype"> - <field name="name">Applicant Refused</field> - <field name="res_model">hr.applicant</field> - <field name="default" eval="False"/> - <field name="description">Applicant refused</field> - </record> <!-- Applicant Categories(Tag) --> <record id="tag_applicant_reserve" model="hr.applicant_category"> <field name="name">Reserve</field> diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index 9cbfd4560e7..d743a280691 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -39,9 +39,10 @@ <field name="name">Applicants</field> <field name="model">hr.applicant</field> <field name="arch" type="xml"> - <tree string="Applicants" fonts="bold:message_unread==True" colors="grey:state in ('cancel','done');blue:state=='pending'"> + <tree string="Applicants" fonts="bold:message_unread==True"> <field name="message_unread" invisible="1"/> <field name="create_date"/> + <field name="date_last_stage_update" invisible="1"/> <field name="name" string="Subject"/> <field name="partner_name"/> <field name="email_from"/> @@ -58,7 +59,6 @@ <field name="availability" invisible="1"/> <field name="department_id" invisible="context.get('invisible_department', True)"/> <field name="user_id"/> - <field name="state" invisible="1"/> </tree> </field> </record> @@ -69,13 +69,7 @@ <field name="arch" type="xml"> <form string="Jobs - Recruitment Form" version="7.0"> <header> - <button name="case_close_with_emp" string="Hire & Create Employee" type="object" - class="oe_highlight" - attrs="{'invisible':['|', ('emp_id','!=',False), ('state','=','cancel')]}"/> - <button name="case_cancel" string="Refuse" type="object" - states="draft,open,pending" class="oe_highlight"/> <field name="stage_id" widget="statusbar" clickable="True"/> - <field name="emp_id" invisible="1"/> </header> <sheet> <div class="oe_right oe_button_box"> @@ -93,9 +87,12 @@ <label for="name" class="oe_edit_only"/> <h1><field name="name"/></h1> <label for="partner_name" class="oe_edit_only"/> - <h2> + <h2 style="display: inline-block;"> <field name="partner_name" class="oe_inline"/> </h2> + <button string="Create Employee" name="create_employee_from_applicant" type="object" + class="oe_link oe_inline" style="margin-left: 8px;" + attrs="{'invisible': [('emp_id', '!=', False)]}"/> </div> <group> <group> @@ -115,7 +112,6 @@ <field name="title_action" class="oe_inline" placeholder="e.g. Call for interview"/> </div> <field name="priority"/> - <field name="state" invisible="1"/> <field name="source_id"/> <field name="reference"/> </group> @@ -123,7 +119,7 @@ <field name="survey" invisible="1"/> <field name="response" invisible="1"/> <field name="job_id" on_change="onchange_job(job_id)"/> - <field name="department_id" on_change="onchange_department_id(department_id)"/> + <field name="department_id" on_change="onchange_department_id(department_id, stage_id)"/> <label for="availability"/> <div> <field name="availability" class="oe_inline"/> <label string="Day(s)" class="oe_inline"/> @@ -142,6 +138,7 @@ <span class="oe_inline" attrs="{'invisible':[('salary_proposed_extra','=',False)]}"> + </span> <field name="salary_proposed_extra" class="oe_inline" placeholder="Extra advantages..."/> </div> + <field name="emp_id" readonly="1"/> </group> </group> <group> @@ -165,7 +162,7 @@ <graph string="Cases By Stage and Estimates" type="bar" orientation="vertical"> <field name="job_id"/> <field name="salary_expected" operator="+"/> - <field name="state" group="True"/> + <field name="stage_id" group="True"/> </graph> </field> </record> @@ -174,22 +171,22 @@ <field name="name">Jobs - Recruitment Search</field> <field name="model">hr.applicant</field> <field name="arch" type="xml"> - <search string="Search Jobs"> + <search string="Search Applicants"> <field name="partner_name" filter_domain="['|','|',('name','ilike',self),('partner_name','ilike',self),('email_from','ilike',self)]" string="Subject / Applicant"/> - <filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/> - <separator/> - <filter string="New" domain="[('state','=','draft')]" help="All Initial Jobs"/> - <filter string="In Progress" domain="[('state','=','open')]" help="Open Jobs"/> - <filter string="Pending" domain="[('state','=','pending')]" help="Pending Jobs"/> + <filter string="Unassigned" domain="[('user_id', '=', False)]"/> + <filter string="My" domain="[('user_id', '=', uid)]"/> <separator/> - <filter string="Unassigned Recruitments" domain="[('user_id','=',False)]" help="Unassigned Recruitments"/> + <filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/> <separator/> <filter string="Next Actions" context="{'invisible_next_action':False, 'invisible_next_date':False}" domain="[('date_action','<>',False)]" help="Filter and view on next actions and date"/> <field name="job_id"/> + <field name="department_id"/> <field name="user_id"/> + <field name="stage_id" domain="[]"/> <separator/> <field name="categ_ids"/> + <separator/> <group expand="0" string="Group By..."> <filter string="Responsible" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Department" domain="[]" context="{'group_by':'department_id'}"/> @@ -200,6 +197,7 @@ <filter string="Stage" domain="[]" context="{'group_by':'stage_id'}"/> <filter string="Source" domain="[]" context="{'group_by':'source_id'}"/> <filter string="Creation Date" domain="[]" context="{'group_by':'create_date'}"/> + <filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}"/> </group> </search> </field> @@ -342,7 +340,6 @@ <field name="sequence" invisible="1"/> <field name="name"/> <field name="department_id"/> - <field name="state"/> </tree> </field> </record> @@ -360,7 +357,6 @@ <field name="department_id"/> </group> <group> - <field name="state"/> <field name="sequence"/> <field name="fold"/> </group> diff --git a/addons/hr_recruitment/report/hr_recruitment_report.py b/addons/hr_recruitment/report/hr_recruitment_report.py index 8c365b10070..93384c95ed4 100644 --- a/addons/hr_recruitment/report/hr_recruitment_report.py +++ b/addons/hr_recruitment/report/hr_recruitment_report.py @@ -18,30 +18,24 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## + from openerp import tools -from openerp.osv import fields,osv +from openerp.osv import fields, osv from .. import hr_recruitment from openerp.addons.decimal_precision import decimal_precision as dp -AVAILABLE_STATES = [ - ('draft','New'), - ('open','Open'), - ('cancel', 'Refused'), - ('done', 'Hired'), - ('pending','Pending') -] - -class hr_recruitment_report(osv.osv): +class hr_recruitment_report(osv.Model): _name = "hr.recruitment.report" _description = "Recruitments Statistics" _auto = False - _rec_name = 'date' + _rec_name = 'date_create' + _order = 'date_create desc' _columns = { 'user_id': fields.many2one('res.users', 'User', readonly=True), 'nbr': fields.integer('# of Applications', readonly=True), - 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True), + # TDE TODO: use MONTHS 'month':fields.selection([('01', 'January'), ('02', 'February'), \ ('03', 'March'), ('04', 'April'),\ ('05', 'May'), ('06', 'June'), \ @@ -51,7 +45,8 @@ class hr_recruitment_report(osv.osv): 'company_id': fields.many2one('res.company', 'Company', readonly=True), 'day': fields.char('Day', size=128, readonly=True), 'year': fields.char('Year', size=4, readonly=True), - 'date': fields.date('Date', readonly=True), + 'date_create': fields.date('Create Date', readonly=True), + 'date_last_stage_update': fields.datetime('Last Stage Update', readonly=True), 'date_closed': fields.date('Closed', readonly=True), 'job_id': fields.many2one('hr.job', 'Applied Job',readonly=True), 'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage'), @@ -67,19 +62,19 @@ class hr_recruitment_report(osv.osv): 'delay_close': fields.float('Avg. Delay to Close', digits=(16,2), readonly=True, group_operator="avg", help="Number of Days to close the project issue"), } - _order = 'date desc' + def init(self, cr): tools.drop_view_if_exists(cr, 'hr_recruitment_report') cr.execute(""" create or replace view hr_recruitment_report as ( select min(s.id) as id, - date_trunc('day',s.create_date) as date, + date_trunc('day',s.create_date) as date_create, date_trunc('day',s.date_closed) as date_closed, + date_trunc('day',s.date_last_stage_update) as date_last_stage_update, to_char(s.create_date, 'YYYY') as year, to_char(s.create_date, 'MM') as month, to_char(s.create_date, 'YYYY-MM-DD') as day, - s.state, s.partner_id, s.company_id, s.user_id, @@ -93,7 +88,7 @@ class hr_recruitment_report(osv.osv): (sum(salary_proposed)/count(*)) as salary_prop_avg, sum(salary_expected) as salary_exp, (sum(salary_expected)/count(*)) as salary_exp_avg, - extract('epoch' from (s.date_closed-s.create_date))/(3600*24) as delay_close, + extract('epoch' from (s.date_closed-s.create_date))/(3600*24) as delay_close, count(*) as nbr from hr_applicant s group by @@ -105,7 +100,7 @@ class hr_recruitment_report(osv.osv): s.date_open, s.create_date, s.date_closed, - s.state, + s.date_last_stage_update, s.partner_id, s.company_id, s.user_id, diff --git a/addons/hr_recruitment/report/hr_recruitment_report_view.xml b/addons/hr_recruitment/report/hr_recruitment_report_view.xml index b33b2eaa053..d75c29c17a2 100644 --- a/addons/hr_recruitment/report/hr_recruitment_report_view.xml +++ b/addons/hr_recruitment/report/hr_recruitment_report_view.xml @@ -6,7 +6,7 @@ <field name="model">hr.recruitment.report</field> <field name="arch" type="xml"> <tree string="Recruitment Analysis" create="false"> - <field name="date" invisible="1"/> + <field name="date_create" invisible="1"/> <field name="user_id" invisible="1"/> <field name="job_id"/> <field name="stage_id" invisible="1" /> @@ -14,10 +14,10 @@ <field name="type_id" invisible="1"/> <field name="partner_id" invisible="1"/> <field name="company_id" groups="base.group_multi_company" invisible="1"/> - <field name="state" invisible="1"/> <field name="year" invisible="1"/> <field name="day" invisible="1"/> <field name="month" invisible="1"/> + <field name="date_last_stage_update" invisible="1"/> <field name="nbr" sum="# of Applications"/> <field name="available" sum="Available"/> <field name="salary_exp" sum="Expected Salary"/> @@ -46,34 +46,33 @@ <field name="model">hr.recruitment.report</field> <field name="arch" type="xml"> <search string="Recruitment Analysis"> - <filter string="New" icon="terp-document-new" domain="[('state','=','draft')]" help = "Draft recruitment"/> - <filter string="In progress" icon="terp-camera_test" domain="[('state', '=' ,'open')]" help = "In progress recruitment"/> - <filter string="Pending" icon="terp-gtk-media-pause" domain="[('state','=','pending')]" help = "Pending recruitment"/> - <filter string="Hired" icon="terp-camera_test" domain="[('state','=','done')]" help = "Hired employees"/> - <separator/> - <filter icon="terp-personal" string="My Recruitment" help="My Recruitment" domain="[('user_id','=',uid)]"/> <field name="job_id"/> <field name="department_id"/> - <field name="user_id" string="Responsible"/> + <field name="user_id"/> + <filter string="New" domain="[('sequence', '=', 1)]"/> + <separator/> + <filter string="Unassigned" domain="[('user_id', '=', False)]"/> + <filter string="My" domain="[('user_id', '=', uid)]"/> + <separator/> <group expand="0" string="Extended Filters..."> - <!--field name="job_id"/--> <field name="priority"/> <field name="stage_id"/> <field name="company_id" groups="base.group_multi_company"/> - <field name="date" string="Creation Date"/> + <field name="date_create"/> <field name="date_closed"/> </group> <group expand="1" string="Group By ..."> - <filter string="Responsible" name='User' icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> - <filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> - <filter string="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}" /> - <filter string="Jobs" name="job" icon="terp-gtk-select-all" domain="[]" context="{'group_by':'job_id'}"/> - <filter string="Department" name="department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id'}"/> - <filter string="Degree" name="degree" icon="terp-gtk-select-all" domain="[]" context="{'group_by':'type_id'}"/> - <filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}" /> - <filter string="Day" name = "day" icon="terp-go-today" domain="[]" context="{'group_by':'day'}" help="Creation Date"/> - <filter string="Month" icon="terp-go-month" domain="[]" context="{'group_by':'month'}" help="Creation Date"/> - <filter string="Year" icon="terp-go-year" domain="[]" context="{'group_by':'year'}" help="Creation Date"/> + <filter string="Responsible" name='User' context="{'group_by':'user_id'}"/> + <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> + <filter string="Partner" context="{'group_by':'partner_id'}" /> + <filter string="Jobs" name="job" context="{'group_by':'job_id'}"/> + <filter string="Department" name="department" context="{'group_by':'department_id'}"/> + <filter string="Degree" name="degree" context="{'group_by':'type_id'}"/> + <filter string="Stage" context="{'group_by':'stage_id'}" /> + <filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}" /> + <filter string="Day" name="day" context="{'group_by':'day'}" help="Creation Date"/> + <filter string="Month" context="{'group_by':'month'}" help="Creation Date"/> + <filter string="Year" context="{'group_by':'year'}" help="Creation Date"/> </group> </search> </field> diff --git a/addons/hr_recruitment/test/recruitment_process.yml b/addons/hr_recruitment/test/recruitment_process.yml index 335edc71892..a48b70a5683 100644 --- a/addons/hr_recruitment/test/recruitment_process.yml +++ b/addons/hr_recruitment/test/recruitment_process.yml @@ -17,34 +17,9 @@ resume_ids = self.pool.get('ir.attachment').search(cr, uid, [('datas_fname','=','resume.pdf'),('res_model','=',self._name),('res_id','=',applicant.id)]) assert applicant.name == "Application for the post of Jr.application Programmer.", "Applicant name does not match." assert applicant.stage_id.id == ref('hr_recruitment.stage_job1'), "Stage should be 'Initial qualification' and is '%s'." % (applicant.stage_id.name) - assert applicant.state == "draft", "Applicant state should be 'draft'." + assert applicant.stage_id.sequence == 1, "Applicant stage sequence should be 1." assert len(resume_ids), "Resume is not attached." - - I refuse the applicant (hr_case_programmer) -- - !python {model: hr.applicant}: | - self.case_cancel(cr, uid, [ref("hr_case_programmer")]) -- - I check the details of the refused applicant. -- - !python {model: hr.applicant}: | - applicant = self.browse(cr, uid, ref("hr_case_programmer"), context=context) - assert applicant.stage_id.id == ref('hr_recruitment.stage_job6'), "Stage should be 'Refused' and is %s." % (applicant.stage_id.name) - assert applicant.state == 'cancel', "Applicant is not in 'cancel' state." -- - I reset and re-open the previously refused applicant. -- - !python {model: hr.applicant}: | - self.case_reset(cr, uid, [ref("hr_case_programmer")]) - self.case_open(cr, uid, [ref("hr_case_programmer")]) -- - I check the details of the re-opened applicant. -- - !python {model: hr.applicant}: | - applicant = self.browse(cr, uid, ref("hr_case_programmer"), context=context) - assert applicant.stage_id.id == ref('hr_recruitment.stage_job2'), "Stage should be 'First interview' and is '%s'." % (applicant.stage_id.name) - assert applicant.state == "open", "Applicant state should be 'open'." -- I assign the Job position to the applicant - !python {model: hr.applicant}: | @@ -55,21 +30,6 @@ !python {model: hr.applicant}: | self.action_makeMeeting(cr, uid, [ref('hr_case_programmer')]) - - I check Initial Qualification of applicant. -- - !python {model: hr.applicant}: | - self.stage_next(cr, uid, [ref('hr_case_programmer')]) -- - I schedule First Interview of applicant. -- - !python {model: hr.applicant}: | - self.stage_next(cr, uid, [ref('hr_case_programmer')]) -- - On a successful First Interview of applicant, I schedule Second Interview. -- - !python {model: hr.applicant}: | - self.stage_next(cr, uid, [ref('hr_case_programmer')]) -- Applicant fillup the answer of the interview quetion. - !python {model: survey.question.wiz}: | @@ -83,40 +43,8 @@ I print Applicant fill up the interview quetion - !python {model: hr.applicant}: | - self.action_print_survey(cr, uid, [ref('hr_case_programmer')]) -- - On a successful Second Interview of applicant Contract is Proposed to applicant. -- - !python {model: hr.applicant}: | - self.stage_next(cr, uid, [ref('hr_case_programmer')]) - self.stage_previous(cr, uid, [ref('hr_case_programmer')]) -- - I Hired Applicant. -- - !python {model: hr.applicant}: | - self.case_close_with_emp(cr, uid, [ref('hr_case_programmer')]) -- - I check that applicant is "Hired". -- - !assert {model: hr.applicant, id: hr_case_programmer, string: Applicant state is done}: - - state == 'done' -- - I do not give employment to the hired the applicant. -- - !python {model: hired.employee}: | context.update({'active_model': 'hr.applicant', 'active_ids': [ref("hr_recruitment.hr_case_programmer")], 'active_id': ref("hr_recruitment.hr_case_programmer")}) - emp_id = self.create(cr, uid, {}, context=context) - self.case_close(cr, uid, [emp_id], context=context) -- - Now I give employment to hired applicant . -- - !python {model: hr.applicant}: | - hired_emp_obj = self.pool.get('hired.employee') - self.case_reset(cr, uid, [ref("hr_case_programmer")]) - self.case_open(cr, uid, [ref("hr_case_programmer")]) - context.update({'active_model': 'hr.applicant', 'active_ids': [ref("hr_recruitment.hr_case_programmer")], 'active_id': ref("hr_recruitment.hr_case_programmer")}) - emp_hr_id = hired_emp_obj.create(cr, uid, {}, context=context) - hired_emp_obj.case_close_with_emp(cr, uid, [emp_hr_id], context=context) + self.action_print_survey(cr, uid, [ref('hr_case_programmer')]) - Now hired employee want to be a partner of company. - diff --git a/addons/hr_recruitment/wizard/__init__.py b/addons/hr_recruitment/wizard/__init__.py index fde7df63456..d52c7a9113a 100644 --- a/addons/hr_recruitment/wizard/__init__.py +++ b/addons/hr_recruitment/wizard/__init__.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-Today OpenERP (<http://www.openerp.com>). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,9 +19,7 @@ # ############################################################################## - import hr_recruitment_create_partner_job -import hr_recruitment_employee_hired # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py b/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py deleted file mode 100644 index 60d31e74eee..00000000000 --- a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved -# $Id$ -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## -from openerp.osv import fields, osv -from openerp.tools.translate import _ - -class hired_employee(osv.osv_memory): - _name = 'hired.employee' - _description = 'Create Employee' - - def case_close(self, cr, uid, ids, context=None): - """ - @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 case's Ids - @param *args: Give Tuple Value - """ - if context is None: - context = {} - self.pool.get('hr.applicant').case_close(cr, uid,context.get('active_ids',[])) - return {} - - def case_close_with_emp(self, cr, uid, ids, context=None): - """ - @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 case's Ids - """ - if context is None: - context = {} - return self.pool.get('hr.applicant').case_close_with_emp(cr, uid,context.get('active_ids', [])) - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.xml b/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.xml deleted file mode 100644 index d014bd54aa8..00000000000 --- a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - - <record id="view_hr_recruitment_hired_employee" model="ir.ui.view"> - <field name="name">hr.recruitment.hired2employee.form</field> - <field name="model">hired.employee</field> - <field name="arch" type="xml"> - <form string="Create New Employee" version="7.0"> - <header> - <button name="case_close_with_emp" string="Yes" type="object" class="oe_highlight" /> - <button name="case_close" string="No" type="object"/> - or - <button string="Cancel" class="oe_link" special="cancel" /> - </header> - <label string="Would you like to create an employee ?"/> - </form> - </field> - </record> - <record id="action_hr_recruitment_hired_employee" model="ir.actions.act_window"> - <field name="name">Create Employee</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">hired.employee</field> - <field name="view_type">form</field> - <field name="view_mode">form</field> - <field name="target">new</field> - </record> - - </data> -</openerp> diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py index 6c4f6022c39..b950b85ac48 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py @@ -173,7 +173,10 @@ class account_analytic_line(osv.osv): data = {} journal_types = {} + price = 0.0 for line in self.pool.get('account.analytic.line').browse(cr, uid, ids, context=context): + price += line.amount*-1 + line_name = line.name if line.journal_id.type not in journal_types: journal_types[line.journal_id.type] = set() journal_types[line.journal_id.type].add(line.account_id.id) @@ -204,7 +207,6 @@ class account_analytic_line(osv.osv): 'date_due': date_due, 'fiscal_position': account.partner_id.property_account_position.id } - context2 = context.copy() context2['lang'] = partner.lang # set company_id in context, so the correct default journal will be selected @@ -225,36 +227,42 @@ class account_analytic_line(osv.osv): if data.get('product'): product_id = data['product'][0] product = product_obj.browse(cr, uid, product_id, context=context2) - if not product: - raise osv.except_osv(_('Error!'), _('There is no product defined. Please select one or force the product through the wizard.')) factor = invoice_factor_obj.browse(cr, uid, factor_id, context=context2) - factor_name = product_obj.name_get(cr, uid, [product_id], context=context2)[0][1] - if factor.customer_name: - factor_name += ' - ' + factor.customer_name - - ctx = context.copy() - ctx.update({'uom':uom}) - - price = self._get_invoice_price(cr, uid, account, product_id, user_id, qty, ctx) - - general_account = product.property_account_income or product.categ_id.property_account_income_categ - if not general_account: - raise osv.except_osv(_("Configuration Error!"), _("Please define income account for product '%s'.") % product.name) - taxes = product.taxes_id or general_account.tax_ids - tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes) + factor_name = factor.customer_name and line_name + ' - ' + factor.customer_name or line_name curr_line = { 'price_unit': price, 'quantity': qty, - 'discount':factor.factor, - 'invoice_line_tax_id': [(6,0,tax )], + 'discount': factor.factor, 'invoice_id': last_invoice, 'name': factor_name, - 'product_id': product_id, - 'invoice_line_tax_id': [(6,0,tax)], 'uos_id': uom, - 'account_id': general_account.id, 'account_analytic_id': account.id, } + if product: + factor_name = product_obj.name_get(cr, uid, [product_id], context=context2)[0][1] + if factor.customer_name: + factor_name += ' - ' + factor.customer_name + + ctx = context.copy() + ctx.update({'uom': uom}) + + # check force product + if data.get('product'): + price = self._get_invoice_price(cr, uid, account, product_id, user_id, qty, ctx) + + general_account = product.property_account_income or product.categ_id.property_account_income_categ + if not general_account: + raise osv.except_osv(_("Configuration Error!"), _("Please define income account for product '%s'.") % product.name) + taxes = product.taxes_id or general_account.tax_ids + tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes) + curr_line.update({ + 'price_unit': price, + 'invoice_line_tax_id': [(6,0,tax )], + 'name': factor_name, + 'product_id': product_id, + 'invoice_line_tax_id': [(6,0,tax)], + 'account_id': general_account.id, + }) # # Compute for lines diff --git a/addons/idea/views/idea.xml b/addons/idea/views/idea.xml index b228af2da45..7df21f99f11 100644 --- a/addons/idea/views/idea.xml +++ b/addons/idea/views/idea.xml @@ -93,7 +93,6 @@ help="Accepted Ideas" /> <group expand="0" string="Group By..."> <filter string="Creator" help="By Responsible" context="{'group_by': 'user_id'}"/> - <filter string="Category" help="By Category" context="{'group_by': 'category_ids'}"/> <filter string="Status" help="By State" context="{'group_by': 'state'}"/> </group> </search> diff --git a/addons/l10n_be_coda/wizard/account_coda_import.py b/addons/l10n_be_coda/wizard/account_coda_import.py index 8aabe601bc8..aed99345fba 100644 --- a/addons/l10n_be_coda/wizard/account_coda_import.py +++ b/addons/l10n_be_coda/wizard/account_coda_import.py @@ -117,6 +117,8 @@ class account_coda_import(osv.osv_memory): # and so a 'like' operator would return the first account number in the database which matches. cr.execute("select id from res_partner_bank where replace(replace(acc_number,' ',''),'-','') = %s", (statement['acc_number'],)) bank_ids = [id[0] for id in cr.fetchall()] + # Filter bank accounts which are not allowed + bank_ids = self.pool.get('res.partner.bank').search(cr, uid, [('id', 'in', bank_ids)]) if bank_ids and len(bank_ids) > 0: bank_accs = self.pool.get('res.partner.bank').browse(cr, uid, bank_ids) for bank_acc in bank_accs: @@ -248,7 +250,7 @@ class account_coda_import(osv.osv_memory): elif line[0] == '9': statement['balanceMin'] = float(rmspaces(line[22:37])) / 1000 statement['balancePlus'] = float(rmspaces(line[37:52])) / 1000 - if not statement['balance_end_real']: + if not statement.get('balance_end_real'): statement['balance_end_real'] = statement['balance_start'] + statement['balancePlus'] - statement['balanceMin'] for i, statement in enumerate(statements): statement['coda_note'] = '' @@ -266,6 +268,8 @@ class account_coda_import(osv.osv_memory): raise osv.except_osv(_('Error'), _("Configuration Error in journal %s!\nPlease verify the Default Debit and Credit Account settings.") % statement['journal_id'].name) if balance_start_check != statement['balance_start']: statement['coda_note'] = _("The CODA Statement %s Starting Balance (%.2f) does not correspond with the previous Closing Balance (%.2f) in journal %s!") % (statement['description'] + ' #' + statement['paperSeqNumber'], statement['balance_start'], balance_start_check, statement['journal_id'].name) + if not(statement.get('period_id')): + raise osv.except_osv(_('Error') + ' R3006', _(' No transactions or no period in coda file !')) data = { 'name': statement['paperSeqNumber'], 'date': statement['date'], diff --git a/addons/l10n_be_invoice_bba/invoice.py b/addons/l10n_be_invoice_bba/invoice.py index a23dabd7c51..fca743928bf 100644 --- a/addons/l10n_be_invoice_bba/invoice.py +++ b/addons/l10n_be_invoice_bba/invoice.py @@ -153,25 +153,33 @@ class account_invoice(osv.osv): return {'value': {'reference': reference}}
def create(self, cr, uid, vals, context=None):
- if vals.has_key('reference_type'):
- reference_type = vals['reference_type']
+ reference = vals.get('reference', False)
+ reference_type = vals.get('reference_type', False)
+ if vals.get('type') == 'out_invoice' and not reference_type:
+ # fallback on default communication type for partner
+ reference_type = self.pool.get('res.partner').browse(cr, uid, vals['partner_id']).out_inv_comm_type
if reference_type == 'bba':
- if vals.has_key('reference'):
- bbacomm = vals['reference']
- else:
+ reference = self.generate_bbacomm(cr, uid, [], vals['type'], reference_type, vals['partner_id'], '', context={})['value']['reference']
+ vals.update({
+ 'reference_type': reference_type or 'none',
+ 'reference': reference,
+ })
+
+ if reference_type == 'bba':
+ if not reference:
+ raise osv.except_osv(_('Warning!'),
+ _('Empty BBA Structured Communication!' \
+ '\nPlease fill in a unique BBA Structured Communication.'))
+ if self.check_bbacomm(reference):
+ reference = re.sub('\D', '', reference)
+ vals['reference'] = '+++' + reference[0:3] + '/' + reference[3:7] + '/' + reference[7:] + '+++'
+ same_ids = self.search(cr, uid,
+ [('type', '=', 'out_invoice'), ('reference_type', '=', 'bba'),
+ ('reference', '=', vals['reference'])])
+ if same_ids:
raise osv.except_osv(_('Warning!'),
- _('Empty BBA Structured Communication!' \
- '\nPlease fill in a unique BBA Structured Communication.'))
- if self.check_bbacomm(bbacomm):
- reference = re.sub('\D', '', bbacomm)
- vals['reference'] = '+++' + reference[0:3] + '/' + reference[3:7] + '/' + reference[7:] + '+++'
- same_ids = self.search(cr, uid,
- [('type', '=', 'out_invoice'), ('reference_type', '=', 'bba'),
- ('reference', '=', vals['reference'])])
- if same_ids:
- raise osv.except_osv(_('Warning!'),
- _('The BBA Structured Communication has already been used!' \
- '\nPlease create manually a unique BBA Structured Communication.'))
+ _('The BBA Structured Communication has already been used!' \
+ '\nPlease create manually a unique BBA Structured Communication.'))
return super(account_invoice, self).create(cr, uid, vals, context=context)
def write(self, cr, uid, ids, vals, context=None):
diff --git a/addons/l10n_ca/account_tax_en.xml b/addons/l10n_ca/account_tax_en.xml index afe505f27f5..f0d2670d077 100644 --- a/addons/l10n_ca/account_tax_en.xml +++ b/addons/l10n_ca/account_tax_en.xml @@ -101,8 +101,8 @@ <record id="gsttvq_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">GST + TVQ for sales</field> - <field name="description">GSTTVQ_SALE</field> + <field name="name">GST + QST for sales</field> + <field name="description">GSTQST_SALE</field> <field name="type_tax_use">sale</field> <field name="amount">1</field> <field name="type">percent</field> @@ -127,8 +127,8 @@ <record id="tvq_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVQ for sales - 9.975%</field> - <field name="description">TVQ</field> + <field name="name">QST for sales - 9.975%</field> + <field name="description">QST</field> <field name="type_tax_use">sale</field> <field name="amount">0.099750</field> <field name="type">percent</field> @@ -192,8 +192,8 @@ <record id="hst12_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for sales - 12%</field> - <field name="description">TVH12_SALE</field> + <field name="name">HST for sales - 12%</field> + <field name="description">HST12_SALE</field> <field name="type_tax_use">sale</field> <field name="amount">0.120000</field> <field name="type">percent</field> @@ -207,8 +207,8 @@ <record id="hst13_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for sales - 13%</field> - <field name="description">TVH13_SALE</field> + <field name="name">HST for sales - 13%</field> + <field name="description">HST13_SALE</field> <field name="type_tax_use">sale</field> <field name="amount">0.130000</field> <field name="type">percent</field> @@ -222,8 +222,8 @@ <record id="hst135_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for sales - 13.5%</field> - <field name="description">TVH135_SALE</field> + <field name="name">HST for sales - 13.5%</field> + <field name="description">HST135_SALE</field> <field name="type_tax_use">sale</field> <field name="amount">0.135000</field> <field name="type">percent</field> @@ -237,8 +237,8 @@ <record id="hst15_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for sales - 15%</field> - <field name="description">TVH15_SALE</field> + <field name="name">HST for sales - 15%</field> + <field name="description">HST15_SALE</field> <field name="type_tax_use">sale</field> <field name="amount">0.150000</field> <field name="type">percent</field> @@ -367,8 +367,8 @@ <record id="gsttvq_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">GST + TVQ for purchases</field> - <field name="description">GSTTVQ_PURC</field> + <field name="name">GST + QST for purchases</field> + <field name="description">GSTQST_PURC</field> <field name="type_tax_use">purchase</field> <field name="amount">1</field> <field name="type">percent</field> @@ -393,8 +393,8 @@ <record id="tvq_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVQ for purchases - 9.975%</field> - <field name="description">TVQ</field> + <field name="name">QST for purchases - 9.975%</field> + <field name="description">QST</field> <field name="type_tax_use">purchase</field> <field name="amount">0.099750</field> <field name="type">percent</field> @@ -458,8 +458,8 @@ <record id="hst12_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for purchases - 12%</field> - <field name="description">TVH12_PURC</field> + <field name="name">HST for purchases - 12%</field> + <field name="description">HST12_PURC</field> <field name="type_tax_use">purchase</field> <field name="amount">0.120000</field> <field name="type">percent</field> @@ -473,8 +473,8 @@ <record id="hst13_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for purchases - 13%</field> - <field name="description">TVH13_PURC</field> + <field name="name">HST for purchases - 13%</field> + <field name="description">HST13_PURC</field> <field name="type_tax_use">purchase</field> <field name="amount">0.130000</field> <field name="type">percent</field> @@ -488,8 +488,8 @@ <record id="hst135_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for purchases - 13.5%</field> - <field name="description">TVH135_PURC</field> + <field name="name">HST for purchases - 13.5%</field> + <field name="description">HST135_PURC</field> <field name="type_tax_use">purchase</field> <field name="amount">0.135000</field> <field name="type">percent</field> @@ -503,8 +503,8 @@ <record id="hst15_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for purchases - 15%</field> - <field name="description">TVH15_PURC</field> + <field name="name">HST for purchases - 15%</field> + <field name="description">HST15_PURC</field> <field name="type_tax_use">purchase</field> <field name="amount">0.150000</field> <field name="type">percent</field> diff --git a/addons/l10n_ch/__openerp__.py b/addons/l10n_ch/__openerp__.py index 8960224891d..a7830784340 100644 --- a/addons/l10n_ch/__openerp__.py +++ b/addons/l10n_ch/__openerp__.py @@ -24,8 +24,8 @@ {'name': 'Switzerland - Accounting', 'description': """ - Swiss localization : - ==================== +Swiss localization +================== **Multilang swiss STERCHI account chart and taxes** **Author:** Camptocamp SA diff --git a/addons/mail/i18n/th.po b/addons/mail/i18n/th.po new file mode 100644 index 00000000000..a80d1aad14f --- /dev/null +++ b/addons/mail/i18n/th.po @@ -0,0 +1,1702 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-06-28 17:26+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: mail +#: view:mail.followers:0 +msgid "Followers Form" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_publisher_warranty_contract +msgid "publisher_warranty.contract" +msgstr "" + +#. module: mail +#: field:mail.compose.message,author_id:0 +#: view:mail.mail:0 +#: field:mail.message,author_id:0 +msgid "Author" +msgstr "ผู้สร้าง" + +#. module: mail +#: view:mail.mail:0 +msgid "Message Details" +msgstr "รายละเอียดข้อความ" + +#. module: mail +#: help:mail.mail,email_to:0 +msgid "Message recipients" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,default:0 +msgid "Activated by default when subscribing." +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Comments" +msgstr "ความคิดเห็น" + +#. module: mail +#: view:mail.alias:0 +#: view:mail.mail:0 +msgid "Group By..." +msgstr "กลุ่มตาม..." + +#. module: mail +#: help:mail.compose.message,body:0 +#: help:mail.message,body:0 +msgid "Automatically sanitized HTML contents" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_name:0 +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"<jobs@example.my.openerp.com>" +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_email_compose_message_wizard +#: view:mail.compose.message:0 +msgid "Compose Email" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:132 +#, python-format +msgid "Add them into recipients and followers" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Group Name" +msgstr "ชื่อกลุ่ม" + +#. module: mail +#: selection:mail.group,public:0 +msgid "Public" +msgstr "เปิดเผย" + +#. module: mail +#: view:mail.mail:0 +msgid "Body" +msgstr "เนื้อหา" + +#. module: mail +#: view:mail.message:0 +msgid "Show messages to read" +msgstr "แสดงข้อความที่จะอ่าน" + +#. module: mail +#: help:mail.compose.message,email_from:0 +#: help:mail.message,email_from:0 +msgid "" +"Email address of the sender. This field is set when no matching partner is " +"found for incoming emails." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_compose_message +msgid "Email composition wizard" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:23 +#, python-format +msgid "Add others" +msgstr "" + +#. module: mail +#: field:mail.message.subtype,parent_id:0 +msgid "Parent" +msgstr "" + +#. module: mail +#: field:mail.group,message_unread:0 +#: field:mail.thread,message_unread:0 +#: field:res.partner,message_unread:0 +msgid "Unread Messages" +msgstr "ข้อความที่ยังไม่ได้อ่าน" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:313 +#, python-format +msgid "show" +msgstr "" + +#. module: mail +#: help:mail.group,group_ids:0 +msgid "" +"Members of those groups will automatically added as followers. Note that " +"they will be able to manage their subscription manually if necessary." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail.js:1029 +#, python-format +msgid "Do you really want to delete this message?" +msgstr "" + +#. module: mail +#: view:mail.message:0 +#: field:mail.notification,read:0 +msgid "Read" +msgstr "อ่าน" + +#. module: mail +#: view:mail.group:0 +msgid "Search Groups" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail_followers.js:157 +#, python-format +msgid "followers" +msgstr "" + +#. module: mail +#: code:addons/mail/mail_message.py:737 +#, python-format +msgid "Access Denied" +msgstr "ไม่ได้รับอนุญาตให้เข้าใช้" + +#. module: mail +#: help:mail.group,image_medium:0 +msgid "" +"Medium-sized photo of the group. It is automatically resized as a 128x128px " +"image, with aspect ratio preserved. Use this field in form views or some " +"kanban views." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:212 +#, python-format +msgid "Uploading error" +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_support +msgid "Support" +msgstr "สนับสนุน" + +#. module: mail +#: code:addons/mail/mail_message.py:738 +#, python-format +msgid "" +"The requested operation cannot be completed due to security restrictions. " +"Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +#: selection:mail.mail,state:0 +msgid "Received" +msgstr "ได้รับ" + +#. module: mail +#: view:mail.mail:0 +msgid "Thread" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:29 +#, python-format +msgid "Open the full mail composer" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:29 +#, python-format +msgid "ò" +msgstr "" + +#. module: mail +#: field:base.config.settings,alias_domain:0 +msgid "Alias Domain" +msgstr "" + +#. module: mail +#: field:mail.group,group_ids:0 +msgid "Auto Subscription" +msgstr "" + +#. module: mail +#: field:mail.mail,references:0 +msgid "References" +msgstr "แหล่งอ้างอิง" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:206 +#, python-format +msgid "No messages." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_group +msgid "Discussion group" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:96 +#: code:addons/mail/static/src/xml/mail.xml:108 +#, python-format +msgid "uploading" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:52 +#, python-format +msgid "more." +msgstr "" + +#. module: mail +#: help:mail.compose.message,type:0 +#: help:mail.message,type:0 +msgid "" +"Message type: email for email message, notification for system message, " +"comment for other messages such as user replies" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,relation_field:0 +msgid "" +"Field used to link the related model to the subtype model when using " +"automatic subscription on a related document. The field is used to compute " +"getattr(related_document.relation_field)." +msgstr "" + +#. module: mail +#: selection:mail.mail,state:0 +msgid "Cancelled" +msgstr "ยกเลิกแล้ว" + +#. module: mail +#: field:mail.mail,reply_to:0 +msgid "Reply-To" +msgstr "ตอบกลับไปยัง" + +#. module: mail +#: code:addons/mail/wizard/invite.py:37 +#, python-format +msgid "<div>You have been invited to follow %s.</div>" +msgstr "" + +#. module: mail +#: help:mail.group,message_unread:0 +#: help:mail.thread,message_unread:0 +#: help:res.partner,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: mail +#: field:mail.group,image_medium:0 +msgid "Medium-sized photo" +msgstr "ภาพขนาดกลาง" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_to_me_feeds +#: model:ir.ui.menu,name:mail.mail_tomefeeds +msgid "To: me" +msgstr "" + +#. module: mail +#: field:mail.message.subtype,name:0 +msgid "Message Type" +msgstr "ประเภทข้อความ" + +#. module: mail +#: field:mail.mail,auto_delete:0 +msgid "Auto Delete" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:12 +#: view:mail.group:0 +#, python-format +msgid "Unfollow" +msgstr "เลิกติดตาม" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:312 +#, python-format +msgid "show one more message" +msgstr "" + +#. module: mail +#: code:addons/mail/mail_mail.py:75 +#: code:addons/mail/res_users.py:69 +#, python-format +msgid "Invalid Action!" +msgstr "การกระทำไม่ถูกต้อง!" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:25 +#, python-format +msgid "User img" +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_mail_mail +#: model:ir.ui.menu,name:mail.menu_mail_mail +#: view:mail.mail:0 +#: view:mail.message:0 +msgid "Emails" +msgstr "อีเมล์" + +#. module: mail +#: field:mail.followers,partner_id:0 +msgid "Related Partner" +msgstr "" + +#. module: mail +#: help:mail.group,message_summary:0 +#: help:mail.thread,message_summary:0 +#: help:res.partner,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: mail +#: help:mail.alias,alias_model_id:0 +msgid "" +"The model (OpenERP Document Kind) to which this alias corresponds. Any " +"incoming email that does not reply to an existing record will cause the " +"creation of a new record of this model (e.g. a Project Task)" +msgstr "" + +#. module: mail +#: field:mail.message.subtype,relation_field:0 +msgid "Relation field" +msgstr "" + +#. module: mail +#: selection:mail.compose.message,type:0 +#: selection:mail.message,type:0 +msgid "System notification" +msgstr "การแจ้งเตือนระบบ" + +#. module: mail +#: model:ir.model,name:mail.model_res_partner +msgid "Partner" +msgstr "พาร์ทเนอร์" + +#. module: mail +#: model:ir.ui.menu,name:mail.mail_my_stuff +msgid "Organizer" +msgstr "ผู้จัด" + +#. module: mail +#: field:mail.compose.message,subject:0 +#: field:mail.message,subject:0 +msgid "Subject" +msgstr "ชื่อเรื่อง" + +#. module: mail +#: field:mail.wizard.invite,partner_ids:0 +msgid "Partners" +msgstr "พาร์ทเนอร์" + +#. module: mail +#: view:mail.mail:0 +msgid "Retry" +msgstr "ลองใหม่" + +#. module: mail +#: field:mail.compose.message,email_from:0 +#: field:mail.mail,email_from:0 +#: field:mail.message,email_from:0 +msgid "From" +msgstr "จาก" + +#. module: mail +#: view:mail.mail:0 +#: view:mail.message.subtype:0 +msgid "Email message" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_base_config_settings +msgid "base.config.settings" +msgstr "base.config.settings" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:36 +#: view:mail.compose.message:0 +#, python-format +msgid "Send" +msgstr "ส่ง" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail_followers.js:153 +#, python-format +msgid "No followers" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Failed" +msgstr "ล้มเหลว" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:22 +#: model:ir.actions.act_window,name:mail.action_view_followers +#: model:ir.ui.menu,name:mail.menu_email_followers +#: view:mail.followers:0 +#: field:mail.group,message_follower_ids:0 +#: field:mail.thread,message_follower_ids:0 +#: field:res.partner,message_follower_ids:0 +#, python-format +msgid "Followers" +msgstr "ติดตาม" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_archives_feeds +#: model:ir.ui.menu,name:mail.mail_archivesfeeds +msgid "Archives" +msgstr "ที่เก็บถาวร" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:95 +#: code:addons/mail/static/src/xml/mail.xml:107 +#, python-format +msgid "Delete this attachment" +msgstr "ลบสิ่งที่แนบมานี้" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:245 +#: view:mail.mail:0 +#, python-format +msgid "Reply" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail_followers.js:155 +#, python-format +msgid "One follower" +msgstr "" + +#. module: mail +#: field:mail.compose.message,type:0 +#: field:mail.message,type:0 +msgid "Type" +msgstr "ชนิด" + +#. module: mail +#: selection:mail.compose.message,type:0 +#: view:mail.mail:0 +#: selection:mail.message,type:0 +msgid "Email" +msgstr "อีเมล์" + +#. module: mail +#: field:ir.ui.menu,mail_group_id:0 +msgid "Mail Group" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "Comments and Emails" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_defaults:0 +msgid "Default Values" +msgstr "ค่าปริยาย" + +#. module: mail +#: code:addons/mail/res_users.py:89 +#, python-format +msgid "%s has joined the %s network." +msgstr "" + +#. module: mail +#: help:mail.group,image_small:0 +msgid "" +"Small-sized photo of the group. It is automatically resized as a 64x64px " +"image, with aspect ratio preserved. Use this field anywhere a small image is " +"required." +msgstr "" + +#. module: mail +#: view:mail.compose.message:0 +#: field:mail.message,partner_ids:0 +msgid "Recipients" +msgstr "ผู้รับ" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:140 +#, python-format +msgid "<<<" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:43 +#, python-format +msgid "Write to the followers of this document..." +msgstr "" + +#. module: mail +#: field:mail.group,group_public_id:0 +msgid "Authorized Group" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Join Group" +msgstr "" + +#. module: mail +#: help:mail.mail,email_from:0 +msgid "Message sender, taken from user preferences." +msgstr "" + +#. module: mail +#: code:addons/mail/wizard/invite.py:40 +#, python-format +msgid "<div>You have been invited to follow a new document.</div>" +msgstr "" + +#. module: mail +#: field:mail.compose.message,parent_id:0 +#: field:mail.message,parent_id:0 +msgid "Parent Message" +msgstr "" + +#. module: mail +#: field:mail.compose.message,res_id:0 +#: field:mail.followers,res_id:0 +#: field:mail.message,res_id:0 +#: field:mail.wizard.invite,res_id:0 +msgid "Related Document ID" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_to_me_feeds +msgid "" +"<p>\n" +" <b>No private message.</b>\n" +" </p><p>\n" +" This list contains messages sent to you.\n" +" </p>\n" +" " +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_rd +msgid "R&D" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:61 +#, python-format +msgid "/web/binary/upload_attachment" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_thread +msgid "Email Thread" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Advanced" +msgstr "ขั้นสูง" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:244 +#, python-format +msgid "Move to Inbox" +msgstr "" + +#. module: mail +#: code:addons/mail/wizard/mail_compose_message.py:193 +#, python-format +msgid "Re:" +msgstr "" + +#. module: mail +#: field:mail.compose.message,to_read:0 +#: field:mail.message,to_read:0 +msgid "To read" +msgstr "" + +#. module: mail +#: code:addons/mail/res_users.py:69 +#, python-format +msgid "" +"You may not create a user. To create new users, you should use the " +"\"Settings > Users\" menu." +msgstr "" + +#. module: mail +#: help:mail.followers,res_model:0 +#: help:mail.wizard.invite,res_model:0 +msgid "Model of the followed resource" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:337 +#, python-format +msgid "like" +msgstr "" + +#. module: mail +#: view:mail.compose.message:0 +#: view:mail.wizard.invite:0 +msgid "Cancel" +msgstr "ยกเลิก" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:47 +#, python-format +msgid "Share with my followers..." +msgstr "" + +#. module: mail +#: field:mail.notification,partner_id:0 +msgid "Contact" +msgstr "ที่อยู่ติดต่อ" + +#. module: mail +#: view:mail.group:0 +msgid "" +"Only the invited followers can read the\n" +" discussions on this group." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_ir_ui_menu +msgid "ir.ui.menu" +msgstr "ir.ui.menu" + +#. module: mail +#: view:mail.message:0 +msgid "Has attachments" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "on" +msgstr "เปิด" + +#. module: mail +#: code:addons/mail/mail_message.py:926 +#, python-format +msgid "" +"The following partners chosen as recipients for the email have no email " +"address linked :" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_defaults:0 +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_message_subtype +msgid "Message subtypes" +msgstr "" + +#. module: mail +#: help:mail.compose.message,notified_partner_ids:0 +#: help:mail.message,notified_partner_ids:0 +msgid "" +"Partners that have a notification pushing this message in their mailboxes" +msgstr "" + +#. module: mail +#: selection:mail.compose.message,type:0 +#: view:mail.mail:0 +#: selection:mail.message,type:0 +msgid "Comment" +msgstr "ความคิดเห็น" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_inbox_feeds +msgid "" +"<p>\n" +" <b>Good Job!</b> Your inbox is empty.\n" +" </p><p>\n" +" Your inbox contains private messages or emails sent to " +"you\n" +" as well as information related to documents or people " +"you\n" +" follow.\n" +" </p>\n" +" " +msgstr "" +"<p>\n" +" <b>เยี่ยมยอด!</b> คุณอ่านข้อความหมดแล้ว\n" +" </p><p>\n" +" <b>ขอความร่วมมือ</b> ภาษาไทยสำหรับ OpenERP นั้น " +"ยังไม่สมบรูณ์และถูกต้อง \n" +" <p> เลือกหมวด Translations เพื่อแนะนำการแปลได้ที่ </p>\n" +"\n" +" https://launchpad.net/openobject-addons : business " +"application modules\n" +" https://launchpad.net/openobject-server : the " +"framework\n" +" https://launchpad.net/openerp-web : web " +"modules and frontend\n" +" </p>\n" +" " + +#. module: mail +#: field:mail.mail,notification:0 +msgid "Is Notification" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:188 +#, python-format +msgid "Compose a new message" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Send Now" +msgstr "ส่งทันที" + +#. module: mail +#: code:addons/mail/mail_mail.py:75 +#, python-format +msgid "" +"Unable to send email, please configure the sender's email address or alias." +msgstr "" + +#. module: mail +#: help:res.users,alias_id:0 +msgid "" +"Email address internally associated with this user. Incoming emails will " +"appear in the user's notifications." +msgstr "" + +#. module: mail +#: field:mail.group,image:0 +msgid "Photo" +msgstr "รูปภาพ" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:54 +#: code:addons/mail/static/src/xml/mail.xml:191 +#: view:mail.compose.message:0 +#: view:mail.wizard.invite:0 +#, python-format +msgid "or" +msgstr "หรือ" + +#. module: mail +#: help:mail.compose.message,vote_user_ids:0 +#: help:mail.message,vote_user_ids:0 +msgid "Users that voted for this message" +msgstr "" + +#. module: mail +#: help:mail.group,alias_id:0 +msgid "" +"The email address associated with this group. New emails received will " +"automatically create new topics." +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Month" +msgstr "เดือน" + +#. module: mail +#: view:mail.mail:0 +msgid "Email Search" +msgstr "" + +#. module: mail +#: field:mail.compose.message,child_ids:0 +#: field:mail.message,child_ids:0 +msgid "Child Messages" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_user_id:0 +msgid "Owner" +msgstr "เจ้าของ" + +#. module: mail +#: model:ir.model,name:mail.model_res_users +msgid "Users" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_message +#: field:mail.mail,mail_message_id:0 +#: view:mail.message:0 +#: field:mail.notification,message_id:0 +#: field:mail.wizard.invite,message:0 +msgid "Message" +msgstr "ข้อความ" + +#. module: mail +#: help:mail.followers,res_id:0 +#: help:mail.wizard.invite,res_id:0 +msgid "Id of the followed resource" +msgstr "" + +#. module: mail +#: field:mail.compose.message,body:0 +#: field:mail.message,body:0 +msgid "Contents" +msgstr "เนื้อหา" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_mail_alias +#: model:ir.ui.menu,name:mail.mail_alias_menu +msgid "Aliases" +msgstr "นามแฝง" + +#. module: mail +#: help:mail.message.subtype,description:0 +msgid "" +"Description that will be added in the message posted for this subtype. If " +"void, the name will be added instead." +msgstr "" + +#. module: mail +#: field:mail.compose.message,vote_user_ids:0 +#: field:mail.message,vote_user_ids:0 +msgid "Votes" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Group" +msgstr "กลุ่ม" + +#. module: mail +#: help:mail.compose.message,starred:0 +#: help:mail.message,starred:0 +msgid "Current user has a starred notification linked to this message" +msgstr "" + +#. module: mail +#: field:mail.group,public:0 +msgid "Privacy" +msgstr "ความเป็นส่วนตัว" + +#. module: mail +#: view:mail.mail:0 +msgid "Notification" +msgstr "การแจ้งเตือน" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail.js:654 +#, python-format +msgid "Please complete partner's informations" +msgstr "" + +#. module: mail +#: view:mail.wizard.invite:0 +msgid "Add Followers" +msgstr "" + +#. module: mail +#: view:mail.compose.message:0 +msgid "Followers of selected items and" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_force_thread_id:0 +msgid "Record Thread ID" +msgstr "" + +#. module: mail +#: model:ir.ui.menu,name:mail.mail_group_root +msgid "My Groups" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_archives_feeds +msgid "" +"<p>\n" +" No message found and no message sent yet.\n" +" </p><p>\n" +" Click on the top-right icon to compose a message. This\n" +" message will be sent by email if it's an internal " +"contact.\n" +" </p>\n" +" " +msgstr "" + +#. module: mail +#: view:mail.mail:0 +#: field:mail.mail,state:0 +msgid "Status" +msgstr "สถานะ" + +#. module: mail +#: view:mail.mail:0 +#: selection:mail.mail,state:0 +msgid "Outgoing" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "All feeds" +msgstr "" + +#. module: mail +#: help:mail.compose.message,record_name:0 +#: help:mail.message,record_name:0 +msgid "Name get of the related document." +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_notifications +#: model:ir.model,name:mail.model_mail_notification +#: model:ir.ui.menu,name:mail.menu_email_notifications +#: field:mail.compose.message,notification_ids:0 +#: view:mail.message:0 +#: field:mail.message,notification_ids:0 +#: view:mail.notification:0 +msgid "Notifications" +msgstr "การแจ้งให้ทราบ" + +#. module: mail +#: view:mail.alias:0 +msgid "Search Alias" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_force_thread_id:0 +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" + +#. module: mail +#: help:mail.message.subtype,name:0 +msgid "" +"Message subtype gives a more precise type on the message, especially for " +"system notifications. For example, it can be a notification related to a new " +"record (New), or to a stage change in a process (Stage change). Message " +"subtypes allow to precisely tune the notifications the user want to receive " +"on its wall." +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "by" +msgstr "โดย" + +#. module: mail +#: model:mail.group,name:mail.group_best_sales_practices +msgid "Best Sales Practices" +msgstr "" + +#. module: mail +#: selection:mail.group,public:0 +msgid "Selected Group Only" +msgstr "" + +#. module: mail +#: field:mail.group,message_is_follower:0 +#: field:mail.thread,message_is_follower:0 +#: field:res.partner,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: mail +#: view:mail.alias:0 +#: view:mail.mail:0 +msgid "User" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Groups" +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Messages Search" +msgstr "" + +#. module: mail +#: field:mail.compose.message,date:0 +#: field:mail.message,date:0 +msgid "Date" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:34 +#, python-format +msgid "Post" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Extended Filters..." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:120 +#, python-format +msgid "To:" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:193 +#, python-format +msgid "Write to my followers" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: mail +#: field:mail.message.subtype,default:0 +msgid "Default" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:311 +#, python-format +msgid "show more message" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:246 +#, python-format +msgid "Mark as Todo" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,parent_id:0 +msgid "Parent subtype, used for automatic subscription." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_wizard_invite +msgid "Invite wizard" +msgstr "" + +#. module: mail +#: field:mail.group,message_summary:0 +#: field:mail.thread,message_summary:0 +#: field:res.partner,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,res_model:0 +msgid "" +"Model the subtype applies to. If False, this subtype applies to all models." +msgstr "" + +#. module: mail +#: field:mail.compose.message,subtype_id:0 +#: field:mail.followers,subtype_ids:0 +#: field:mail.message,subtype_id:0 +#: view:mail.message.subtype:0 +msgid "Subtype" +msgstr "ประเภทย่อย" + +#. module: mail +#: view:mail.group:0 +msgid "Group Form" +msgstr "" + +#. module: mail +#: field:mail.compose.message,starred:0 +#: field:mail.message,starred:0 +#: field:mail.notification,starred:0 +msgid "Starred" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:313 +#, python-format +msgid "more messages" +msgstr "" + +#. module: mail +#: code:addons/mail/update.py:93 +#, python-format +msgid "Error" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:13 +#, python-format +msgid "Following" +msgstr "" + +#. module: mail +#: sql_constraint:mail.alias:0 +msgid "" +"Unfortunately this email alias is already used, please choose a unique one" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_user_id:0 +msgid "" +"The owner of records created upon receiving emails on this alias. If this " +"field is not set the system will attempt to find the right owner based on " +"the sender (From) address, or will use the Administrator account if no " +"system user is found for that address." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:52 +#, python-format +msgid "And" +msgstr "" + +#. module: mail +#: field:mail.compose.message,message_id:0 +#: field:mail.message,message_id:0 +msgid "Message-Id" +msgstr "" + +#. module: mail +#: help:mail.group,image:0 +msgid "" +"This field holds the image used as photo for the group, limited to " +"1024x1024px." +msgstr "" + +#. module: mail +#: field:mail.compose.message,attachment_ids:0 +#: view:mail.mail:0 +#: field:mail.message,attachment_ids:0 +msgid "Attachments" +msgstr "" + +#. module: mail +#: field:mail.compose.message,record_name:0 +#: field:mail.message,record_name:0 +msgid "Message Record Name" +msgstr "" + +#. module: mail +#: field:mail.mail,email_cc:0 +msgid "Cc" +msgstr "" + +#. module: mail +#: help:mail.notification,starred:0 +msgid "Starred message that goes into the todo mailbox" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:123 +#: view:mail.compose.message:0 +#, python-format +msgid "Followers of" +msgstr "" + +#. module: mail +#: help:mail.mail,auto_delete:0 +msgid "Permanently delete this email after sending it, to save space" +msgstr "" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_group_feeds +msgid "Discussion Group" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:242 +#, python-format +msgid "Done" +msgstr "" + +#. module: mail +#: model:mail.message.subtype,name:mail.mt_comment +msgid "Discussions" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:11 +#, python-format +msgid "Follow" +msgstr "" + +#. module: mail +#: field:mail.group,name:0 +msgid "Name" +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_all_employees +msgid "Whole Company" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:129 +#: code:addons/mail/static/src/xml/mail.xml:292 +#: view:mail.compose.message:0 +#, python-format +msgid "and" +msgstr "" + +#. module: mail +#: help:mail.mail,body_html:0 +msgid "Rich-text/HTML message" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Creation Month" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:323 +#, python-format +msgid "Compose new Message" +msgstr "" + +#. module: mail +#: field:mail.group,menu_id:0 +msgid "Related Menu" +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Content" +msgstr "" + +#. module: mail +#: field:mail.mail,email_to:0 +msgid "To" +msgstr "" + +#. module: mail +#: field:mail.compose.message,notified_partner_ids:0 +#: field:mail.message,notified_partner_ids:0 +msgid "Notified partners" +msgstr "" + +#. module: mail +#: help:mail.group,public:0 +msgid "" +"This group is visible by non members. Invisible groups can add " +"members through the invite button." +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_board +msgid "Board meetings" +msgstr "" + +#. module: mail +#: constraint:mail.alias:0 +msgid "" +"Invalid expression, it must be a literal python dictionary definition e.g. " +"\"{'field': 'value'}\"" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_model_id:0 +msgid "Aliased Model" +msgstr "" + +#. module: mail +#: help:mail.compose.message,message_id:0 +#: help:mail.message,message_id:0 +msgid "Message unique identifier" +msgstr "" + +#. module: mail +#: field:mail.group,description:0 +#: field:mail.message.subtype,description:0 +msgid "Description" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_followers +msgid "Document Followers" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:35 +#, python-format +msgid "Remove this follower" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "Never" +msgstr "" + +#. module: mail +#: field:mail.mail,mail_server_id:0 +msgid "Outgoing mail server" +msgstr "" + +#. module: mail +#: code:addons/mail/mail_message.py:930 +#, python-format +msgid "Partners email addresses not found" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +#: selection:mail.mail,state:0 +msgid "Sent" +msgstr "" + +#. module: mail +#: field:mail.mail,body_html:0 +msgid "Rich-text Contents" +msgstr "" + +#. module: mail +#: help:mail.compose.message,to_read:0 +#: help:mail.message,to_read:0 +msgid "Current user has an unread notification linked to this message" +msgstr "" + +#. module: mail +#: help:res.partner,notification_email_send:0 +msgid "" +"Choose in which case you want to receive an email when you receive new feeds." +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_groups +#: model:ir.ui.menu,name:mail.mail_allgroups +msgid "Join a group" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_group_feeds +msgid "" +"<p>\n" +" No message in this group.\n" +" </p>\n" +" " +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:213 +#, python-format +msgid "Please, wait while the file is uploading." +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "" +"This group is visible by everyone,\n" +" including your customers if you " +"installed\n" +" the portal module." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:243 +#, python-format +msgid "Set back to Todo" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:126 +#, python-format +msgid "this document" +msgstr "" + +#. module: mail +#: field:mail.compose.message,filter_id:0 +msgid "Filters" +msgstr "" + +#. module: mail +#: field:res.partner,notification_email_send:0 +msgid "Receive Feeds by Email" +msgstr "" + +#. module: mail +#: help:base.config.settings,alias_domain:0 +msgid "" +"If you have setup a catch-all email domain redirected to the OpenERP server, " +"enter the domain name here." +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_mail_message +#: model:ir.ui.menu,name:mail.menu_mail_message +#: field:mail.group,message_ids:0 +#: view:mail.message:0 +#: field:mail.thread,message_ids:0 +#: field:res.partner,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:139 +#, python-format +msgid "others..." +msgstr "" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_star_feeds +#: model:ir.ui.menu,name:mail.mail_starfeeds +msgid "To-do" +msgstr "" + +#. module: mail +#: view:mail.alias:0 +#: field:mail.alias,alias_name:0 +#: field:mail.group,alias_id:0 +#: field:res.users,alias_id:0 +msgid "Alias" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_mail +msgid "Outgoing Mails" +msgstr "" + +#. module: mail +#: help:mail.compose.message,notification_ids:0 +#: help:mail.message,notification_ids:0 +msgid "" +"Technical field holding the message notifications. Use notified_partner_ids " +"to access notified partners." +msgstr "" + +#. module: mail +#: model:ir.ui.menu,name:mail.mail_feeds +#: model:ir.ui.menu,name:mail.mail_feeds_main +msgid "Messaging" +msgstr "" + +#. module: mail +#: view:mail.alias:0 +#: field:mail.message.subtype,res_model:0 +msgid "Model" +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Unread" +msgstr "" + +#. module: mail +#: help:mail.followers,subtype_ids:0 +msgid "" +"Message subtypes followed, meaning subtypes that will be pushed onto the " +"user's Wall." +msgstr "" + +#. module: mail +#: help:mail.group,message_ids:0 +#: help:mail.thread,message_ids:0 +#: help:res.partner,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: mail +#: help:mail.mail,references:0 +msgid "Message references, such as identifiers of previous messages" +msgstr "" + +#. module: mail +#: field:mail.compose.message,composition_mode:0 +msgid "Composition mode" +msgstr "" + +#. module: mail +#: field:mail.compose.message,model:0 +#: field:mail.followers,res_model:0 +#: field:mail.message,model:0 +#: field:mail.wizard.invite,res_model:0 +msgid "Related Document Model" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:338 +#, python-format +msgid "unlike" +msgstr "" + +#. module: mail +#: help:mail.compose.message,author_id:0 +#: help:mail.message,author_id:0 +msgid "" +"Author of the message. If not set, email_from may hold an email address that " +"did not match any partner." +msgstr "" + +#. module: mail +#: help:mail.mail,email_cc:0 +msgid "Carbon copy message recipients" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_domain:0 +msgid "Alias domain" +msgstr "" + +#. module: mail +#: code:addons/mail/update.py:93 +#, python-format +msgid "Error during communication with the publisher warranty server." +msgstr "" + +#. module: mail +#: selection:mail.group,public:0 +msgid "Private" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_star_feeds +msgid "" +"<p>\n" +" <b>No todo.</b>\n" +" </p><p>\n" +" When you process messages in your inbox, you can mark " +"some\n" +" as <i>todo</i>. From this menu, you can process all your " +"todo.\n" +" </p>\n" +" " +msgstr "" + +#. module: mail +#: selection:mail.mail,state:0 +msgid "Delivery Failed" +msgstr "" + +#. module: mail +#: field:mail.compose.message,partner_ids:0 +msgid "Additional contacts" +msgstr "" + +#. module: mail +#: help:mail.compose.message,parent_id:0 +#: help:mail.message,parent_id:0 +msgid "Initial thread message." +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_hr_policies +msgid "HR Policies" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "Emails only" +msgstr "" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_inbox_feeds +#: model:ir.ui.menu,name:mail.mail_inboxfeeds +msgid "Inbox" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:58 +#, python-format +msgid "File" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/many2many_tags_email.js:63 +#, python-format +msgid "Please complete partner's informations and Email" +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_message_subtype +#: model:ir.ui.menu,name:mail.menu_message_subtype +msgid "Subtypes" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_alias +msgid "Email Aliases" +msgstr "" + +#. module: mail +#: field:mail.group,image_small:0 +msgid "Small-sized photo" +msgstr "" + +#. module: mail +#: help:mail.mail,reply_to:0 +msgid "Preferred response address for the message" +msgstr "" diff --git a/addons/mail/mail_mail.py b/addons/mail/mail_mail.py index d9e00353d49..d45ae04ddd1 100644 --- a/addons/mail/mail_mail.py +++ b/addons/mail/mail_mail.py @@ -176,7 +176,7 @@ class mail_mail(osv.Model): if context is None: context = {} if not ids: - filters = ['&', ('state', '=', 'outgoing'), ('type', '=', 'email')] + filters = [('state', '=', 'outgoing')] if 'filters' in context: filters.extend(context['filters']) ids = self.search(cr, uid, filters, context=context) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 1b5d520cd42..2744e6df231 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -312,7 +312,12 @@ class mail_thread(osv.AbstractModel): # subscribe uid unless asked not to if not context.get('mail_create_nosubscribe'): self.message_subscribe_users(cr, uid, [thread_id], [uid], context=context) - self.message_auto_subscribe(cr, uid, [thread_id], values.keys(), context=context) + # auto_subscribe: take values and defaults into account + create_values = set(values.keys()) + for key, val in context.iteritems(): + if key.startswith('default_'): + create_values.add(key[8:]) + self.message_auto_subscribe(cr, uid, [thread_id], list(create_values), context=context) # track values tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=context) @@ -1436,7 +1441,7 @@ class mail_thread(osv.AbstractModel): ], context=context) mail_followers_obj.write(cr, SUPERUSER_ID, fol_ids, {'subtype_ids': [(6, 0, subtype_ids)]}, context=context) # subtype_ids not specified: do not update already subscribed partner, fetch default subtypes for new partners - else: + elif subtype_ids is None: subtype_ids = subtype_obj.search(cr, uid, [ ('default', '=', True), '|', diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 370aa2e55ff..126b4b40a07 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -975,11 +975,11 @@ class pos_order(osv.osv): }) if data_type == 'product': - key = ('product', values['partner_id'], values['product_id']) + key = ('product', values['partner_id'], values['product_id'], values['debit'] > 0) elif data_type == 'tax': - key = ('tax', values['partner_id'], values['tax_code_id'],) + key = ('tax', values['partner_id'], values['tax_code_id'], values['debit'] > 0) elif data_type == 'counter_part': - key = ('counter_part', values['partner_id'], values['account_id']) + key = ('counter_part', values['partner_id'], values['account_id'], values['debit'] > 0) else: return diff --git a/addons/point_of_sale/wizard/pos_session_opening.py b/addons/point_of_sale/wizard/pos_session_opening.py index 39e7c564831..3d6e314d033 100644 --- a/addons/point_of_sale/wizard/pos_session_opening.py +++ b/addons/point_of_sale/wizard/pos_session_opening.py @@ -85,6 +85,7 @@ class pos_session_opening(osv.osv_memory): session_ids = proxy.search(cr, uid, [ ('state', '!=', 'closed'), ('config_id', '=', config_id), + ('user_id', '=', uid), ], context=context) if session_ids: session = proxy.browse(cr, uid, session_ids[0], context=context) diff --git a/addons/portal_anonymous/i18n/zh_CN.po b/addons/portal_anonymous/i18n/zh_CN.po new file mode 100644 index 00000000000..53ca3f03a6a --- /dev/null +++ b/addons/portal_anonymous/i18n/zh_CN.po @@ -0,0 +1,25 @@ +# Chinese (Simplified) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-07-03 15:17+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-07-04 05:12+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: portal_anonymous +#. openerp-web +#: code:addons/portal_anonymous/static/src/xml/portal_anonymous.xml:8 +#, python-format +msgid "Login" +msgstr "用户名" diff --git a/addons/procurement/procurement_data.xml b/addons/procurement/procurement_data.xml index 6a83d525c68..52503e76c44 100644 --- a/addons/procurement/procurement_data.xml +++ b/addons/procurement/procurement_data.xml @@ -12,7 +12,7 @@ <field eval="False" name="doall"/> <field eval="'procurement.order'" name="model"/> <field eval="'run_scheduler'" name="function"/> - <field eval="'(False,)'" name="args"/> + <field eval="'(False,True)'" name="args"/> </record> <record id="sequence_mrp_op_type" model="ir.sequence.type"> diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 7c9d5ec3290..6f326ccf1c5 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -36,6 +36,8 @@ class procurement_order(osv.osv): ''' Runs through scheduler. @param use_new_cursor: False or the dbname ''' + if use_new_cursor: + use_new_cursor = cr.dbname self._procure_confirm(cr, uid, use_new_cursor=use_new_cursor, context=context) self._procure_orderpoint_confirm(cr, uid, automatic=automatic,\ use_new_cursor=use_new_cursor, context=context) diff --git a/addons/project/i18n/zh_CN.po b/addons/project/i18n/zh_CN.po index 885dbd1266c..a34ee77a749 100644 --- a/addons/project/i18n/zh_CN.po +++ b/addons/project/i18n/zh_CN.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-06-27 03:25+0000\n" +"PO-Revision-Date: 2013-07-08 14:09+0000\n" "Last-Translator: Alan <shuchuan.wu@gmail.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: 2013-06-28 05:42+0000\n" -"X-Generator: Launchpad (build 16681)\n" +"X-Launchpad-Export-Date: 2013-07-09 05:16+0000\n" +"X-Generator: Launchpad (build 16696)\n" #. module: project #: view:project.project:0 @@ -38,7 +38,7 @@ msgstr "进度" #. module: project #: model:process.node,name:project.process_node_taskbydelegate0 msgid "Task by delegate" -msgstr "委派任务" +msgstr "委派的任务" #. module: project #: view:project.project:0 @@ -58,18 +58,18 @@ msgstr "阶段名称" #. module: project #: model:process.transition.action,name:project.process_transition_action_openpendingtask0 msgid "Set pending" -msgstr "设为未决" +msgstr "设置为等待状态" #. module: project #: view:project.project:0 msgid "New Project Based on Template" -msgstr "新的基于模板的项目" +msgstr "基于该模板新建项目" #. module: project #: view:report.project.task.user:0 #: field:report.project.task.user,day:0 msgid "Day" -msgstr "天数" +msgstr "天" #. module: project #: model:project.task.type,name:project.project_tt_merge @@ -91,7 +91,7 @@ msgstr "警告!" #: help:project.project,message_unread:0 #: help:project.task,message_unread:0 msgid "If checked new messages require your attention." -msgstr "如果要求你关注新消息,勾选此项" +msgstr "如果选中此项,你需要注意新的消息。" #. module: project #: model:process.node,name:project.process_node_donetask0 @@ -101,12 +101,12 @@ msgstr "完成任务" #. module: project #: model:process.node,note:project.process_node_donetask0 msgid "Task is Completed" -msgstr "任务完成" +msgstr "任务已经完成" #. module: project #: view:res.partner:0 msgid "False" -msgstr "否" +msgstr "错误的" #. module: project #: model:project.task.type,name:project.project_tt_testing @@ -121,7 +121,7 @@ msgstr "辅助核算科目" #. module: project #: field:project.config.settings,group_time_work_estimation_tasks:0 msgid "Manage time estimation on tasks" -msgstr "估计管理任务的时间" +msgstr "管理任务的估计时间" #. module: project #: help:project.project,message_summary:0 @@ -129,7 +129,7 @@ msgstr "估计管理任务的时间" msgid "" "Holds the Chatter summary (number of messages, ...). This summary is " "directly in html format in order to be inserted in kanban views." -msgstr "保存复杂的摘要(消息数量,……等)。为了插入到看板视图,这一摘要直接是是HTML格式。" +msgstr "保存对话概要信息,这些概要信息将为直接以HTML格式插入到看板视图。" #. module: project #: code:addons/project/project.py:444 @@ -163,12 +163,12 @@ msgstr "重设项目" #. module: project #: view:report.project.task.user:0 msgid "In progress tasks" -msgstr "进行中任务" +msgstr "进行中的任务" #. module: project #: help:project.project,progress_rate:0 msgid "Percent of tasks closed according to the total of tasks todo." -msgstr "结束任务和全部要做任务的百分比" +msgstr "已结束任务和未结束任务的百分比。" #. module: project #: model:ir.actions.client,name:project.action_client_project_menu @@ -224,7 +224,7 @@ msgstr "分配给" #: model:mail.message.subtype,name:project.mt_project_task_closed #: model:mail.message.subtype,name:project.mt_task_closed msgid "Task Done" -msgstr "" +msgstr "已完成的任务" #. module: project #: view:project.project:0 @@ -265,7 +265,7 @@ msgstr "任务分派" #: model:mail.message.subtype,name:project.mt_project_task_started #: model:mail.message.subtype,name:project.mt_task_started msgid "Task Started" -msgstr "" +msgstr "已开始的任务" #. module: project #: view:project.task:0 diff --git a/addons/project/project.py b/addons/project/project.py index 587d60ff86f..6bd17f98e92 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -586,6 +586,15 @@ class task(base_stage, osv.osv): }, } + def _get_default_partner(self, cr, uid, context=None): + """ Override of base_stage to add project specific behavior """ + project_id = self._get_default_project_id(cr, uid, context) + if project_id: + project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) + if project and project.partner_id: + return project.partner_id.id + return super(task, self)._get_default_partner(cr, uid, context=context) + def _get_default_project_id(self, cr, uid, context=None): """ Gives default section by checking if present in the context """ return (self._resolve_project_id_from_context(cr, uid, context=context) or False) @@ -600,7 +609,8 @@ class task(base_stage, osv.osv): context key, or None if it cannot be resolved to a single project. """ - if context is None: context = {} + if context is None: + context = {} if type(context.get('default_project_id')) in (int, long): return context['default_project_id'] if isinstance(context.get('default_project_id'), basestring): @@ -681,13 +691,11 @@ class task(base_stage, osv.osv): def onchange_planned(self, cr, uid, ids, planned=0.0, effective=0.0): return {'value':{'remaining_hours': planned - effective}} - def onchange_project(self, cr, uid, id, project_id): - if not project_id: - return {} - data = self.pool.get('project.project').browse(cr, uid, [project_id]) - partner_id=data and data[0].partner_id - if partner_id: - return {'value':{'partner_id':partner_id.id}} + def onchange_project(self, cr, uid, id, project_id, context=None): + if project_id: + project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) + if project and project.partner_id: + return {'value': {'partner_id': project.partner_id.id}} return {} def duplicate_task(self, cr, uid, map_ids, context=None): @@ -810,8 +818,9 @@ class task(base_stage, osv.osv): 'progress': 0, 'sequence': 10, 'active': True, - 'user_id': lambda obj, cr, uid, context: uid, - 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'project.task', context=c), + 'user_id': lambda obj, cr, uid, ctx=None: uid, + 'company_id': lambda self, cr, uid, ctx=None: self.pool.get('res.company')._company_default_get(cr, uid, 'project.task', context=ctx), + 'partner_id': lambda self, cr, uid, ctx=None: self._get_default_partner(cr, uid, context=ctx), } _order = "priority, sequence, date_start, name, id" @@ -1111,11 +1120,9 @@ class task(base_stage, osv.osv): def create(self, cr, uid, vals, context=None): if context is None: context = {} - if not vals.get('stage_id'): - ctx = context.copy() - if vals.get('project_id'): - ctx['default_project_id'] = vals['project_id'] - vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx) + if vals.get('project_id') and not context.get('default_project_id'): + context['default_project_id'] = vals.get('project_id') + # context: no_log, because subtype already handle this create_context = dict(context, mail_create_nolog=True) task_id = super(task, self).create(cr, uid, vals, context=create_context) @@ -1127,11 +1134,6 @@ class task(base_stage, osv.osv): def write(self, cr, uid, ids, vals, context=None): if isinstance(ids, (int, long)): ids = [ids] - if vals.get('project_id'): - project_id = self.pool.get('project.project').browse(cr, uid, vals.get('project_id'), context=context) - if project_id: - vals.setdefault('message_follower_ids', []) - vals['message_follower_ids'] += [(6, 0,[follower.id]) for follower in project_id.message_follower_ids] if vals and not 'kanban_state' in vals and 'stage_id' in vals: new_stage = vals.get('stage_id') vals_reset_kstate = dict(vals, kanban_state='normal') diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index a69d9356002..91b5633f6d6 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -65,15 +65,22 @@ class project_issue(base_stage, osv.osv): def create(self, cr, uid, vals, context=None): if context is None: context = {} - if not vals.get('stage_id'): - ctx = context.copy() - if vals.get('project_id'): - ctx['default_project_id'] = vals['project_id'] - vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx) + if vals.get('project_id') and not context.get('default_project_id'): + context['default_project_id'] = vals.get('project_id') + # context: no_log, because subtype already handle this create_context = dict(context, mail_create_nolog=True) return super(project_issue, self).create(cr, uid, vals, context=create_context) + def _get_default_partner(self, cr, uid, context=None): + """ Override of base_stage to add project specific behavior """ + project_id = self._get_default_project_id(cr, uid, context) + if project_id: + project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) + if project and project.partner_id: + return project.partner_id.id + return super(project_issue, self)._get_default_partner(cr, uid, context=context) + def _get_default_project_id(self, cr, uid, context=None): """ Gives default project by checking if present in the context """ return self._resolve_project_id_from_context(cr, uid, context=context) @@ -215,6 +222,10 @@ class project_issue(base_stage, osv.osv): return res def on_change_project(self, cr, uid, ids, project_id, context=None): + if project_id: + project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) + if project and project.partner_id: + return {'value': {'partner_id': project.partner_id.id}} return {} def _get_issue_task(self, cr, uid, ids, context=None): @@ -309,6 +320,7 @@ class project_issue(base_stage, osv.osv): 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c), 'priority': crm.AVAILABLE_PRIORITIES[2][0], 'kanban_state': 'normal', + 'user_id': lambda obj, cr, uid, context: uid, } _group_by_full = { diff --git a/addons/project_long_term/i18n/zh_CN.po b/addons/project_long_term/i18n/zh_CN.po index 4b5ad3f0e44..33cddc0123b 100644 --- a/addons/project_long_term/i18n/zh_CN.po +++ b/addons/project_long_term/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-11-27 14:57+0000\n" -"Last-Translator: 盈通 ccdos <ccdos@163.com>\n" +"PO-Revision-Date: 2013-07-07 04:44+0000\n" +"Last-Translator: Alan <shuchuan.wu@gmail.com>\n" "Language-Team: Chinese (Simplified) <zh_CN@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:47+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-07-08 05:25+0000\n" +"X-Generator: Launchpad (build 16696)\n" #. module: project_long_term #: help:project.phase,constraint_date_end:0 @@ -46,7 +46,7 @@ msgstr "" #. module: project_long_term #: field:project.phase,user_ids:0 msgid "Assigned Users" -msgstr "指定的用户" +msgstr "已分配的用户" #. module: project_long_term #: view:project.phase:0 diff --git a/addons/project_mrp/project_mrp_view.xml b/addons/project_mrp/project_mrp_view.xml index 881ed9b6b29..499a0259214 100644 --- a/addons/project_mrp/project_mrp_view.xml +++ b/addons/project_mrp/project_mrp_view.xml @@ -26,9 +26,9 @@ <field name="model">project.task</field> <field name="inherit_id" ref="project.view_task_form2"/> <field name="arch" type="xml"> - <field name="state" position="after"> + <xpath expr="//page[@string='Extra Info']//field[@name='state']" position="after"> <field name="sale_line_id" string="Order Line"/> - </field> + </xpath> </field> </record> <record id="product_product_normal_form_supply_view" model="ir.ui.view"> diff --git a/addons/report_webkit/webkit_report.py b/addons/report_webkit/webkit_report.py index b66c7ce6f3b..1a642463df9 100644 --- a/addons/report_webkit/webkit_report.py +++ b/addons/report_webkit/webkit_report.py @@ -173,7 +173,7 @@ class WebKitParser(report_sxw): ), 'w' ) - head_file.write(header) + head_file.write(header.encode('utf-8')) head_file.close() file_to_del.append(head_file.name) command.extend(['--header-html', head_file.name]) @@ -184,7 +184,7 @@ class WebKitParser(report_sxw): ), 'w' ) - foot_file.write(footer) + foot_file.write(footer.encode('utf-8')) foot_file.close() file_to_del.append(foot_file.name) command.extend(['--footer-html', foot_file.name]) @@ -205,7 +205,7 @@ class WebKitParser(report_sxw): for html in html_list : html_file = file(os.path.join(tmp_dir, str(time.time()) + str(count) +'.body.html'), 'w') count += 1 - html_file.write(html) + html_file.write(html.encode('utf-8')) html_file.close() file_to_del.append(html_file.name) command.append(html_file.name) diff --git a/addons/sale/i18n/hu.po b/addons/sale/i18n/hu.po index 0e90d3aae1d..912ef4fe2d1 100644 --- a/addons/sale/i18n/hu.po +++ b/addons/sale/i18n/hu.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-01-11 08:34+0000\n" +"PO-Revision-Date: 2013-07-09 07:56+0000\n" "Last-Translator: krnkris <Unknown>\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: 2013-03-16 05:22+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-07-10 05:26+0000\n" +"X-Generator: Launchpad (build 16696)\n" #. module: sale #: model:res.groups,name:sale.group_analytic_accounting @@ -129,7 +129,7 @@ msgid "March" msgstr "Március" #. module: sale -#: code:addons/sale/sale.py:567 +#: code:addons/sale/sale.py:565 #, python-format msgid "First cancel all invoices attached to this sales order." msgstr "Először vonja vissza a megrendelés összes számla mellékletét." @@ -173,7 +173,7 @@ msgstr "Árajánlat megerősítve" #: selection:sale.order,state:0 #: selection:sale.report,state:0 msgid "Invoice Exception" -msgstr "Számlázási hiba" +msgstr "Számlázási kivétel" #. module: sale #: view:sale.order:0 @@ -183,7 +183,7 @@ msgstr "Árajánlat " #. module: sale #: selection:sale.order,state:0 msgid "Draft Quotation" -msgstr "Árajánlat sablon" +msgstr "Árajánlat tervezet" #. module: sale #: field:sale.order,partner_shipping_id:0 @@ -205,7 +205,7 @@ msgstr "Engedélyezi a köteg számlázást a megrendeléseken a naplók alapjá #. module: sale #: field:sale.order.line,price_subtotal:0 msgid "Subtotal" -msgstr "Részösszeg" +msgstr "Nettó érték" #. module: sale #: view:sale.report:0 @@ -259,12 +259,12 @@ msgstr "Lehetővé teszi a megrendelés soraihoz árengedmény alkalmazását" #. module: sale #: view:sale.order.line:0 msgid "Sales Order Lines that are in 'done' state" -msgstr "Megrendelés sorai melyek 'elvégezve' állapotúak" +msgstr "'Elvégzett' állapotú megrendelési sorok" #. module: sale #: selection:sale.order.line,type:0 msgid "on order" -msgstr "Megendelésre" +msgstr "megrendelésre" #. module: sale #: field:sale.order,message_ids:0 @@ -285,7 +285,7 @@ msgstr "Adók" #. module: sale #: field:sale.order,amount_untaxed:0 msgid "Untaxed Amount" -msgstr "Nettó érték" +msgstr "Nettó összeg" #. module: sale #: field:sale.config.settings,module_project:0 @@ -294,9 +294,9 @@ msgstr "Projekt" #. module: sale #: code:addons/sale/sale.py:185 -#: code:addons/sale/sale.py:368 -#: code:addons/sale/sale.py:509 -#: code:addons/sale/sale.py:600 +#: code:addons/sale/sale.py:363 +#: code:addons/sale/sale.py:504 +#: code:addons/sale/sale.py:598 #: code:addons/sale/sale.py:763 #: code:addons/sale/sale.py:780 #, python-format @@ -306,7 +306,7 @@ msgstr "Hiba!" #. module: sale #: report:sale.order:0 msgid "Net Total :" -msgstr "Nettó ár:" +msgstr "Nettó érték :" #. module: sale #: help:sale.order.line,type:0 @@ -315,9 +315,9 @@ msgid "" "replenishment.\n" "On order: When needed, the product is purchased or produced." msgstr "" -"Raktárról: Ha kell, a terméket a raktárról vesszük vagy várunk az alkatrész " -"feltöltésre.\n" -"Megrendelve: Ha kell, a terméket megvásároljuk vagy legyártjuk." +"Raktárról: Ha szükség van rá, a terméket a raktárról vesszük vagy várunk az " +"alkatrész feltöltésre.\n" +"Megrendelve: Ha szükség van rá, a terméket megvásároljuk vagy legyártjuk." #. module: sale #: help:sale.config.settings,module_analytic_user_function:0 @@ -344,7 +344,7 @@ msgstr "" #: selection:sale.order.line,state:0 #: selection:sale.report,state:0 msgid "Cancelled" -msgstr "Visszavonva" +msgstr "Érvénytelenített" #. module: sale #: view:sale.order.line:0 @@ -416,11 +416,11 @@ msgid "" msgstr "" "Használja mindet a végszámla elkészítéséhez.\n" " Használjon százalékot a teljes mennyiség bizonyos " -"százalékának szálázásához.\n" +"százalékának számlázásához.\n" " Használjon fix árat egy bizonyos mennyiség díjbekérőjéhez / " "előlegéhez.\n" " Használjon egyes megrendelés sorokat a kiválasztott " -"megrendelés sorainak számlázásáahoz." +"megrendelés sorainak számlázásához." #. module: sale #: view:sale.make.invoice:0 @@ -431,10 +431,10 @@ msgstr "Számlák létrehozása" #. module: sale #: report:sale.order:0 msgid "Tax" -msgstr "ÁFA" +msgstr "Adó" #. module: sale -#: code:addons/sale/sale.py:278 +#: code:addons/sale/sale.py:277 #: code:addons/sale/sale.py:820 #: code:addons/sale/sale.py:983 #, python-format @@ -456,7 +456,7 @@ msgstr "" "elvégzésekkor egy számla érvényesítésekor (Számla kizárás) " "vagy a kiválogatási lista műveletekben (Szállítási kizárás).\n" "A 'Ütemezésre várakozás' állapot lesz beállítva, ha a számla megerősített " -" de vár egy, a megrendelés dátumára futó ütemezésre." +" de vár egy, a megrendelés dátumán futó ütemezésre." #. module: sale #: field:sale.report,date_confirm:0 @@ -467,7 +467,7 @@ msgstr "Megerősítés dátuma" #: view:sale.report:0 #: field:sale.report,nbr:0 msgid "# of Lines" -msgstr "Sorok száma" +msgstr "# sorok száma" #. module: sale #: help:sale.order,message_summary:0 @@ -482,7 +482,7 @@ msgstr "" #: help:sale.order.line,sequence:0 msgid "Gives the sequence order when displaying a list of sales order lines." msgstr "" -"A megrendelés sorrendet adja ha a megrendelési sorok listáját jelzi ki." +"A megrendelés sorrendet adja a megrendelési sorok listájának kijelzésekor." #. module: sale #: view:sale.report:0 @@ -496,7 +496,7 @@ msgid "Fax :" msgstr "Fax:" #. module: sale -#: code:addons/sale/sale.py:278 +#: code:addons/sale/sale.py:277 #, python-format msgid "" "In order to delete a confirmed sales order, you must cancel it before !" @@ -507,7 +507,7 @@ msgstr "" #. module: sale #: view:sale.order:0 msgid "(update)" -msgstr "(Frissítés)" +msgstr "(frissítés)" #. module: sale #: model:ir.model,name:sale.model_res_partner @@ -522,8 +522,8 @@ msgid "Contract Features" msgstr "Szerződés tulajdonságai" #. module: sale -#: code:addons/sale/sale.py:288 -#: code:addons/sale/sale.py:586 +#: code:addons/sale/sale.py:287 +#: code:addons/sale/sale.py:584 #: model:ir.model,name:sale.model_sale_order #: model:process.node,name:sale.process_node_order0 #: model:process.node,name:sale.process_node_saleorder0 @@ -533,7 +533,7 @@ msgstr "Szerződés tulajdonságai" #: selection:sale.order,state:0 #, python-format msgid "Sales Order" -msgstr "Értékesítési megbízás" +msgstr "Vevői megrendelés" #. module: sale #: model:res.groups,name:sale.group_invoice_so_lines @@ -543,7 +543,7 @@ msgstr "Megrendelés sorai számlázásának engedélyezése" #. module: sale #: model:ir.model,name:sale.model_sale_order_line msgid "Sales Order Line" -msgstr "Értékesítési megbízási sor" +msgstr "Vevői megrendelés sor" #. module: sale #: field:sale.advance.payment.inv,amount:0 @@ -553,7 +553,7 @@ msgstr "Előleg összege" #. module: sale #: help:sale.order,invoice_exists:0 msgid "It indicates that sales order has at least one invoice." -msgstr "Ez mutatja, hogy a megrendelének legalább egy számlája van." +msgstr "Ez mutatja, hogy a megrendelésnek legalább egy számlája van." #. module: sale #: help:sale.config.settings,group_sale_pricelist:0 @@ -568,7 +568,7 @@ msgstr "" #. module: sale #: field:sale.config.settings,module_analytic_user_function:0 msgid "One employee can have different roles per contract" -msgstr "Egy munkavállalónak különböző funkciója lehet egy szerződésen belül" +msgstr "Egy alkalmazottnak különböző funkciója lehet egy szerződésen belül" #. module: sale #: selection:sale.advance.payment.inv,advance_payment_method:0 @@ -583,19 +583,19 @@ msgstr "Alapértelmezett fizetési feltétel" #. module: sale #: model:process.transition.action,name:sale.process_transition_action_confirm0 msgid "Confirm" -msgstr "Megerősítés" +msgstr "Jóváhagyás" #. module: sale #: field:sale.config.settings,timesheet:0 msgid "Prepare invoices based on timesheets" -msgstr "Az időkimutatások alapján készítsen elő számlát" +msgstr "Az időkimutatások alapján készítsen elő, számlát" #. module: sale #: code:addons/sale/sale.py:820 #, python-format msgid "You cannot cancel a sales order line that has already been invoiced." msgstr "" -"Nem tud olyan megrendelési sort visszavonni amelyik már számlázva volt." +"Nem tud olyan vevői megrendelési sort visszavonni amelyik már számlázva volt." #. module: sale #: view:account.invoice.report:0 @@ -644,7 +644,7 @@ msgstr "Megrendelés száma" #: view:sale.order:0 #: field:sale.order,order_line:0 msgid "Order Lines" -msgstr "Megrendelési tételek" +msgstr "Megrendelés sorok" #. module: sale #: report:sale.order:0 @@ -673,7 +673,7 @@ msgstr "Összérték" #: help:account.config.settings,group_analytic_account_for_sales:0 msgid "Allows you to specify an analytic account on sales orders." msgstr "" -"Lehetővé teszi az analitikus/elemző könyvelés meghatározását a " +"Lehetővé teszi az analitikus/elemző könyvelés gyűjtőkód meghatározását a " "megrendeléseken." #. module: sale @@ -711,7 +711,7 @@ msgstr "Óra" #. module: sale #: field:res.partner,sale_order_count:0 msgid "# of Sales Order" -msgstr "# megrendelésből" +msgstr "# megrendelésszámból" #. module: sale #: help:sale.config.settings,timesheet:0 @@ -742,7 +742,7 @@ msgstr "Számlázandó" #. module: sale #: help:sale.order,partner_invoice_id:0 msgid "Invoice address for current sales order." -msgstr "Az aktuális értékesítési megbízás számlázási címe." +msgstr "Az aktuális megrendelés számlázási címe." #. module: sale #: selection:sale.order,invoice_quantity:0 @@ -769,7 +769,7 @@ msgstr "Mennyiség" #. module: sale #: report:sale.order:0 msgid "Total :" -msgstr "Bruttó ár:" +msgstr "Összesen :" #. module: sale #: view:sale.order.line:0 @@ -837,7 +837,7 @@ msgstr "Beállítási hiba!" #. module: sale #: field:account.config.settings,group_analytic_account_for_sales:0 msgid "Analytic accounting for sales" -msgstr "Analitikus/elemző könyvelés az értékesítésekhez" +msgstr "Analitikus/elemző könyvelési gyűjtőkód az értékesítésekhez" #. module: sale #: view:sale.order:0 @@ -889,7 +889,7 @@ msgid "Sales Order done" msgstr "Megrendelés elvégezve" #. module: sale -#: code:addons/sale/sale.py:369 +#: code:addons/sale/sale.py:364 #, python-format msgid "Please define sales journal for this company: \"%s\" (id:%d)." msgstr "" @@ -945,7 +945,7 @@ msgid "Sales Make Invoice" msgstr "Számla generálása értékesítésből" #. module: sale -#: code:addons/sale/sale.py:308 +#: code:addons/sale/sale.py:307 #, python-format msgid "Pricelist Warning!" msgstr "Árlista figyelmeztés!" @@ -956,7 +956,7 @@ msgid "Discount (%)" msgstr "Árengedmény (%)" #. module: sale -#: code:addons/sale/wizard/sale_line_invoice.py:110 +#: code:addons/sale/wizard/sale_line_invoice.py:107 #, python-format msgid "" "Invoice cannot be created for this Sales Order Line due to one of the " @@ -1009,7 +1009,7 @@ msgstr "Hónap" #. module: sale #: field:sale.order,currency_id:0 msgid "Currency" -msgstr "Valuta" +msgstr "Pénznem" #. module: sale #: view:sale.order.line:0 @@ -1023,7 +1023,7 @@ msgid "Category of Product" msgstr "Termékkaterógia" #. module: sale -#: code:addons/sale/sale.py:566 +#: code:addons/sale/sale.py:564 #, python-format msgid "Cannot cancel this sales order!" msgstr "Nem lehet megszakítani ezt a megrendelést!" @@ -1080,7 +1080,7 @@ msgid "Open Sale Menu" msgstr "Értékesítési menü megnyitása" #. module: sale -#: code:addons/sale/sale.py:600 +#: code:addons/sale/sale.py:598 #, python-format msgid "You cannot confirm a sales order which has no line." msgstr "Nem tud megerősíteni sor nélküli megrendelést" @@ -1520,7 +1520,7 @@ msgid "TVA :" msgstr "ÁFA:" #. module: sale -#: code:addons/sale/sale.py:449 +#: code:addons/sale/sale.py:444 #, python-format msgid "Customer Invoices" msgstr "Kimenő számlák" @@ -1546,7 +1546,7 @@ msgid "Sales" msgstr "Értékesítés" #. module: sale -#: code:addons/sale/sale.py:309 +#: code:addons/sale/sale.py:308 #, python-format msgid "" "If you change the pricelist of this order (and eventually the currency), " @@ -1591,7 +1591,8 @@ msgid "Invoice address :" msgstr "Számlázási cím:" #. module: sale -#: code:addons/sale/wizard/sale_line_invoice.py:124 +#: code:addons/sale/wizard/sale_line_invoice.py:121 +#: model:ir.model,name:sale.model_account_invoice #: model:process.node,name:sale.process_node_invoice0 #: view:sale.order:0 #, python-format @@ -1678,7 +1679,7 @@ msgid "Shipping address :" msgstr "Szállítási cím:" #. module: sale -#: code:addons/sale/sale.py:510 +#: code:addons/sale/sale.py:505 #, python-format msgid "" "You cannot group sales having different currencies for the same partner." @@ -2196,8 +2197,9 @@ msgid "Manual In Progress" msgstr "Manuális vezérléssel folyamatban" #. module: sale -#: code:addons/sale/wizard/sale_line_invoice.py:110 -#: code:addons/sale/wizard/sale_make_invoice.py:43 +#: code:addons/sale/wizard/sale_line_invoice.py:107 +#: code:addons/sale/wizard/sale_make_invoice.py:42 +#: code:addons/sale/wizard/sale_make_invoice.py:55 #, python-format msgid "Warning!" msgstr "Figyelem!" @@ -2466,9 +2468,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Compute" #~ msgstr "Számítás" -#~ msgid "Partial Delivery" -#~ msgstr "Részleges kiszállítás" - #~ msgid "UoM" #~ msgstr "ME" @@ -2779,9 +2778,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Open Advance Invoice" #~ msgstr "Előzetes számla megnyitása" -#~ msgid "Sales Management" -#~ msgstr "Értékesítési menedzsment" - #~ msgid "Deliver" #~ msgstr "Szállítás" @@ -2792,9 +2788,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Sale Order Line" #~ msgstr "Rendelési tétel" -#~ msgid "Cancel Assignation" -#~ msgstr "Számla sztornó" - #~ msgid "Invoice from the Packing" #~ msgstr "Számla a csomagolási listából" @@ -2850,9 +2843,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Related invoices" #~ msgstr "Kapcsolódó számlák" -#~ msgid "Payment Before Delivery" -#~ msgstr "Fizetés szállítás előtt" - #~ msgid "" #~ "This is the list of invoices that have been generated for this sale order. " #~ "The same sale order may have been invoiced in several times (by line for " @@ -2877,6 +2867,9 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Sale Order line" #~ msgstr "Rendelési sor" +#~ msgid "Payment Before Delivery" +#~ msgstr "Szállítás előtti fizetés" + #~ msgid "All at Once" #~ msgstr "Egyszerre" @@ -2892,9 +2885,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Notes" #~ msgstr "Megjegyzések" -#~ msgid "Lines to Invoice" -#~ msgstr "Számla sorai" - #~ msgid "All Quotations" #~ msgstr "Összes árajánlat" @@ -2922,9 +2912,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Picking List" #~ msgstr "Kiszedési lista" -#~ msgid "Picking List & Delivery Order" -#~ msgstr "Kiszedési lista és Szállítás megrendelése" - #~ msgid "Invoicing" #~ msgstr "Számlázás" @@ -2950,18 +2937,21 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Shipped Qty" #~ msgstr "Szállított mennyiség" -#~ msgid "Shipping Default Policy" -#~ msgstr "Alapértelmezett szállítási politika" - #~ msgid "Close" #~ msgstr "Zárás" +#~ msgid "Cancel Assignation" +#~ msgstr "Hozzárendelés megszüntetése" + #~ msgid "State" #~ msgstr "Állapot" #~ msgid "Configure" #~ msgstr "Beállítás" +#~ msgid "Lines to Invoice" +#~ msgstr "Kiszámlázandó sorok" + #~ msgid "Order State" #~ msgstr "Megrendelés állapota" @@ -3675,3 +3665,15 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Invoice Policy" #~ msgstr "Számlázási szabály" + +#~ msgid "Partial Delivery" +#~ msgstr "Rész-szállítmány" + +#~ msgid "Shipping Default Policy" +#~ msgstr "Alapértelmezett számlázási szabály" + +#~ msgid "Sales Management" +#~ msgstr "Értékesítés kezelés" + +#~ msgid "Picking List & Delivery Order" +#~ msgstr "Kiválogatási lista & Kézbesítési bizonylat/szállító levél" diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml index b1a1fa048be..14b3ba04eb5 100644 --- a/addons/stock/stock_view.xml +++ b/addons/stock/stock_view.xml @@ -918,7 +918,7 @@ <field name="state" nolabel="1" readonly="1" widget="statusbar" statusbar_visible="draft,confirmed,assigned,done" statusbar_colors='{"auto":"blue", "confirmed":"blue"}'/> </xpath> <xpath expr="//field[@name='partner_id']" position="replace"> - <field name="partner_id" on_change="onchange_partner_in(partner_id)" string="Customer"/> + <field name="partner_id" on_change="onchange_partner_in(partner_id)" string="Customer" domain="[('customer','=',True)]" /> </xpath> <xpath expr="//field[@name='move_lines']" position="replace"> <field name="move_lines" context="{'address_out_id': partner_id, 'picking_type': 'out', 'form_view_ref':'view_move_picking_form', 'tree_view_ref':'view_move_picking_tree'}"/> @@ -1045,7 +1045,7 @@ <button name="action_process" states="assigned" string="Receive" type="object" class="oe_highlight"/> </xpath> <xpath expr="//field[@name='partner_id']" position="replace"> - <field name="partner_id" on_change="onchange_partner_in(partner_id)" string="Supplier"/> + <field name="partner_id" on_change="onchange_partner_in(partner_id)" string="Supplier" domain="[('supplier','=',True)]" /> </xpath> <xpath expr="//field[@name='move_lines']" position="replace"> <field name="move_lines" context="{'address_in_id': partner_id, 'picking_type': 'in', 'form_view_ref':'view_move_picking_form', 'tree_view_ref':'view_move_picking_tree'}"/> diff --git a/addons/warning/i18n/nl_BE.po b/addons/warning/i18n/nl_BE.po index 2498851a128..e5983fc966b 100644 --- a/addons/warning/i18n/nl_BE.po +++ b/addons/warning/i18n/nl_BE.po @@ -7,51 +7,51 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-04-24 15:40+0000\n" -"Last-Translator: <>\n" +"PO-Revision-Date: 2013-06-28 15:37+0000\n" +"Last-Translator: Els Van Vossel (Agaplan) <Unknown>\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: 2013-03-16 05:35+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: warning #: model:ir.model,name:warning.model_purchase_order_line #: field:product.product,purchase_line_warn:0 msgid "Purchase Order Line" -msgstr "" +msgstr "Aankooporderlijn" #. module: warning #: model:ir.model,name:warning.model_stock_picking_in msgid "Incoming Shipments" -msgstr "" +msgstr "Binnenkomende leveringen" #. module: warning #: field:product.product,purchase_line_warn_msg:0 msgid "Message for Purchase Order Line" -msgstr "" +msgstr "Bericht voor aankooporderlijn" #. module: warning #: model:ir.model,name:warning.model_stock_picking msgid "Picking List" -msgstr "" +msgstr "Pickinglijst" #. module: warning #: view:product.product:0 msgid "Warning when Purchasing this Product" -msgstr "" +msgstr "Waarschuwing bij aankoop van artikel" #. module: warning #: model:ir.model,name:warning.model_product_product msgid "Product" -msgstr "" +msgstr "Product" #. module: warning #: view:product.product:0 #: view:res.partner:0 msgid "Warnings" -msgstr "" +msgstr "Waarschuwingen" #. module: warning #: selection:product.product,purchase_line_warn:0 @@ -61,12 +61,12 @@ msgstr "" #: selection:res.partner,purchase_warn:0 #: selection:res.partner,sale_warn:0 msgid "Blocking Message" -msgstr "" +msgstr "Blokkerend bericht" #. module: warning #: view:res.partner:0 msgid "Warning on the Invoice" -msgstr "" +msgstr "Waarschuwing op de factuur" #. module: warning #: selection:product.product,purchase_line_warn:0 @@ -76,34 +76,34 @@ msgstr "" #: selection:res.partner,purchase_warn:0 #: selection:res.partner,sale_warn:0 msgid "No Message" -msgstr "" +msgstr "Geen bericht" #. module: warning #: model:ir.model,name:warning.model_account_invoice #: field:res.partner,invoice_warn:0 msgid "Invoice" -msgstr "" +msgstr "Factuur" #. module: warning #: view:product.product:0 msgid "Warning when Selling this Product" -msgstr "" +msgstr "Waarschuwing bij verkoop van artikel" #. module: warning #: field:res.partner,picking_warn:0 msgid "Stock Picking" -msgstr "" +msgstr "Ontvangst" #. module: warning #: model:ir.model,name:warning.model_purchase_order #: field:res.partner,purchase_warn:0 msgid "Purchase Order" -msgstr "" +msgstr "Aankooporder" #. module: warning #: field:res.partner,purchase_warn_msg:0 msgid "Message for Purchase Order" -msgstr "" +msgstr "Bericht voor aankooporder" #. module: warning #: code:addons/warning/warning.py:32 @@ -119,6 +119,10 @@ msgid "" "Selecting \"Blocking Message\" will throw an exception with the message and " "block the flow. The Message has to be written in the next field." msgstr "" +"Als u 'Waarschuwing' selecteert, wordt het bericht naar de gebruiker " +"gestuurd. Als u 'Blokkerend bericht' kiest, wordt een fout gegenereerd met " +"de boodschap en het proces wordt geblokkeerd. Het bericht moet in het " +"volgende veld worden ingevoerd." #. module: warning #: code:addons/warning/warning.py:67 @@ -131,32 +135,32 @@ msgstr "" #: code:addons/warning/warning.py:299 #, python-format msgid "Alert for %s !" -msgstr "" +msgstr "Waarschuwing voor %s!" #. module: warning #: view:res.partner:0 msgid "Warning on the Sales Order" -msgstr "" +msgstr "Waarschuwing op verkooporder" #. module: warning #: field:res.partner,invoice_warn_msg:0 msgid "Message for Invoice" -msgstr "" +msgstr "Bericht voor factuur" #. module: warning #: field:res.partner,sale_warn_msg:0 msgid "Message for Sales Order" -msgstr "" +msgstr "Bericht voor verkooporder" #. module: warning #: view:res.partner:0 msgid "Warning on the Picking" -msgstr "" +msgstr "Waarschuwing op ontvangst" #. module: warning #: view:res.partner:0 msgid "Warning on the Purchase Order" -msgstr "" +msgstr "Waarschuwing op aankooporder" #. module: warning #: code:addons/warning/warning.py:68 @@ -169,12 +173,12 @@ msgstr "" #: code:addons/warning/warning.py:300 #, python-format msgid "Warning for %s" -msgstr "" +msgstr "Waarschuwing voor %s" #. module: warning #: field:product.product,sale_line_warn_msg:0 msgid "Message for Sales Order Line" -msgstr "" +msgstr "Bericht voor verkooporderlijn" #. module: warning #: selection:product.product,purchase_line_warn:0 @@ -184,31 +188,31 @@ msgstr "" #: selection:res.partner,purchase_warn:0 #: selection:res.partner,sale_warn:0 msgid "Warning" -msgstr "" +msgstr "Waarschuwing" #. module: warning #: field:res.partner,picking_warn_msg:0 msgid "Message for Stock Picking" -msgstr "" +msgstr "Bericht voor ontvangst" #. module: warning #: model:ir.model,name:warning.model_res_partner msgid "Partner" -msgstr "" +msgstr "Relatie" #. module: warning #: model:ir.model,name:warning.model_sale_order #: field:res.partner,sale_warn:0 msgid "Sales Order" -msgstr "" +msgstr "Verkooporder" #. module: warning #: model:ir.model,name:warning.model_stock_picking_out msgid "Delivery Orders" -msgstr "" +msgstr "Uitgaande leveringen" #. module: warning #: model:ir.model,name:warning.model_sale_order_line #: field:product.product,sale_line_warn:0 msgid "Sales Order Line" -msgstr "" +msgstr "Verkooporderlijn" |
