diff options
| author | Sbh (Openerp) <sbh@tinyerp.com> | 2012-06-06 10:31:01 +0530 |
|---|---|---|
| committer | Sbh (Openerp) <sbh@tinyerp.com> | 2012-06-06 10:31:01 +0530 |
| commit | bb091669a4ef51f85db4df6934ee8e7dab28aec8 (patch) | |
| tree | f5b80f28c5feeea583883235b1b2fa24f53bf6a5 | |
| parent | c53646bd6ba4b27cd9ef1c9f12bb1340860631be (diff) | |
| parent | 5086a1e3023fceb4a803c2b824d25f47f9dea162 (diff) | |
[MERGE] Merge ara branch
bzr revid: sbh@tinyerp.com-20120606050101-8070jf7z5gab0urg
185 files changed, 20236 insertions, 3239 deletions
diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py index 51e3d2dbe85..1f47a6be9bd 100644 --- a/addons/account/account_bank_statement.py +++ b/addons/account/account_bank_statement.py @@ -127,6 +127,7 @@ class account_bank_statement(osv.osv): _order = "date desc, id desc" _name = "account.bank.statement" _description = "Bank Statement" + _inherit = ['mail.thread'] _columns = { 'name': fields.char('Name', size=64, required=True, states={'draft': [('readonly', False)]}, readonly=True, help='if you give the Name other then /, its created Accounting Entries Move will be with same name as statement name. This allows the statement entries to have the same references than the statement itself'), # readonly for account_cash_statement 'date': fields.date('Date', required=True, states={'confirm': [('readonly', True)]}, select=True), @@ -364,7 +365,7 @@ class account_bank_statement(osv.osv): 'name': st_number, 'balance_end_real': st.balance_end }, context=context) - self.log(cr, uid, st.id, _('Statement %s is confirmed, journal items are created.') % (st_number,)) + self.message_append_note(cr, uid, [st.id], body=_('Statement %s is confirmed, journal items are created.') % (st_number,), context=context) return self.write(cr, uid, ids, {'state':'confirm'}, context=context) def button_cancel(self, cr, uid, ids, context=None): diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index decf9c2aaa6..c6011979f8d 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -982,7 +982,6 @@ class account_invoice(osv.osv): def invoice_validate(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state':'open'}, context=context) - self.invoice_validate_send_note(cr, uid, ids, context=context) return True def line_get_convert(self, cr, uid, x, part, date, context=None): @@ -1046,7 +1045,7 @@ class account_invoice(osv.osv): if obj_inv.type in ('out_invoice', 'out_refund'): ctx = self.get_log_context(cr, uid, context=ctx) message = _("Invoice '%s' is validated.") % name - self.log(cr, uid, inv_id, message, context=ctx) + self.message_append_note(cr, uid, [inv_id], body=message, context=context) return True def action_cancel(self, cr, uid, ids, *args): @@ -1276,7 +1275,7 @@ class account_invoice(osv.osv): # TODO: use currency's formatting function msg = _("Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)") % \ (name, pay_amount, code, invoice.amount_total, code, total, code) - self.log(cr, uid, inv_id, msg) + self.message_append_note(cr, uid, [inv_id], body=msg, context=context) self.pool.get('account.move.line').reconcile_partial(cr, uid, line_ids, 'manual', context) # Update the stored value (fields.function), so we write to trigger recompute @@ -1300,10 +1299,6 @@ class account_invoice(osv.osv): for obj in self.browse(cr, uid, ids, context=context): self.message_append_note(cr, uid, [obj.id],body=_("%s <b>created</b>.") % (self._get_document_type(obj.type)), context=context) - def invoice_validate_send_note(self, cr, uid, ids, context=None): - for obj in self.browse(cr, uid, ids, context=context): - self.message_append_note(cr, uid, [obj.id], body=_("%s <b>validated</b>.") % (self._get_document_type(obj.type)), context=context) - def confirm_paid_send_note(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context): self.message_append_note(cr, uid, [obj.id], body=_("%s <b>paid</b>.") % (self._get_document_type(obj.type)), context=context) diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 6f982b17480..d1b6e21d61a 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -132,8 +132,6 @@ <field name="amount_untaxed" sum="Untaxed Amount"/> <field name="amount_total" sum="Total Amount"/> <field name="state"/> - - <button name="invoice_open" states="draft,proforma2" string="Approve" icon="terp-camera_test"/> </tree> </field> </record> @@ -145,21 +143,18 @@ <field name="priority">2</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="invoice_open" states="draft,proforma2" string="Validate"/> <button name="%(action_account_invoice_refund)d" type='action' string='Ask Refund' states='open,paid'/> <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" groups="base.group_no_one"/> <button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object"/> <button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','<>','paid'), ('reconciled', '=', True)]}" help="This button only appears when the state of the invoice is 'paid' (showing that it has been fully reconciled) and auto-computed boolean 'reconciled' is False (depicting that it's not the case anymore). In other words, the invoice has been dereconciled and it does not fit anymore the 'paid' state. You should press this button to re-open it and let it continue its normal process after having resolved the eventual exceptions it may have created."/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,paid" statusbar_colors='{"proforma":"blue","proforma2":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,paid" statusbar_colors='{"proforma":"blue","proforma2":"blue"}'/> + </header> <sheet string="Supplier Invoice" layout="auto"> <group col="8" colspan="4" class="oe_form_header"> <field name="journal_id" on_change="onchange_journal_id(journal_id)" widget="selection"/> - <field name="number" readonly="1"/> + <field name="number" readonly="1" placeholder="PO0025"/> <field name="type" invisible="1"/> <field name="currency_id" width="50"/> <button name="%(action_account_change_currency)d" type="action" icon="terp-stock_effects-object-colorize" string="Change" attrs="{'invisible':[('state','!=','draft')]}" groups="account.group_account_user"/> @@ -177,7 +172,7 @@ <page string="Invoice"> <field domain="[('company_id', '=', company_id), ('type', '=', 'payable')]" name="account_id" groups="account.group_account_user"/> <field name="reference_type" nolabel="1" size="0"/> - <field name="reference" nolabel="1"/> + <field name="reference" nolabel="1" placeholder="Payment Reference"/> <field name="date_due"/> <field colspan="4" context="{'partner_id': partner_id, 'price_type': 'price_type' in dir() and price_type or False, 'type': type}" name="invoice_line" nolabel="1"> <tree string="Invoice lines"> @@ -225,7 +220,7 @@ <field name="payment_term" widget="selection"/> <field name="name"/> <newline/> - <field name="origin"/> + <field name="origin" placeholder="PO0025"/> <field name="user_id"/> <field name="move_id" groups="account.group_account_user"/> <separator colspan="4" string="Additional Information"/> @@ -249,7 +244,7 @@ </notebook> </sheet> <div class="oe_form_sheet_width"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> @@ -261,7 +256,7 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="action_invoice_sent" type="object" string="Send by Email" states="open" attrs="{'invisible':['|',('sent','=',True), ('state', '=', 'draft')]}"/> <button name="invoice_print" string="Print Invoice" type="object" states="open" attrs="{'invisible':['|',('sent','=',True), ('state', '=', 'draft')]}"/> <button name="invoice_open" states="draft,proforma2" string="Validate"/> @@ -271,11 +266,8 @@ <button name="action_cancel_draft" states="cancel" string="Reset to Draft" type="object"/> <button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','<>','paid'), ('reconciled', '=', True)]}" help="This button only appears when the state of the invoice is 'paid' (showing that it has been fully reconciled) and auto-computed boolean 'reconciled' is False (depicting that it's not the case anymore). In other words, the invoice has been dereconciled and it does not fit anymore the 'paid' state. You should press this button to re-open it and let it continue its normal process after having resolved the eventual exceptions it may have created."/> <!--button name="%(account_invoices)d" string="Print Invoice" type="action" states="open,paid,proforma,sale,proforma2"/--> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,paid" statusbar_colors='{"proforma":"blue","proforma2":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,paid" statusbar_colors='{"proforma":"blue","proforma2":"blue"}'/> + </header> <sheet string="Invoice" layout="auto"> <group colspan="4" col="8" class="oe_form_header"> <field name="journal_id" groups="base.group_user" on_change="onchange_journal_id(journal_id, context)" widget="selection"/> @@ -292,7 +284,7 @@ <field name="payment_term" widget="selection"/> <newline/> <field domain="[('company_id', '=', company_id),('type','=', 'receivable')]" name="account_id" groups="account.group_account_user"/> - <field name="name"/> + <field name="name" placeholder="Project XYZ"/> <field name="sent"/> </group> <notebook colspan="4"> @@ -331,7 +323,7 @@ <field name="user_id"/> <newline/> <field domain="[('partner_id.ref_companies', 'in', [company_id])]" name="partner_bank_id"/> - <field name="origin"/> + <field name="origin" placeholder="SO0032"/> <field name="move_id" groups="account.group_account_user"/> <separator colspan="4" string="Additional Information"/> <field colspan="4" name="comment" nolabel="1"/> @@ -354,7 +346,7 @@ </notebook> </sheet> <div class="oe_form_sheet_width"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index c1367e60498..6eec7156d25 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -12,14 +12,11 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="create_period" states="draft" string="Create Monthly Periods" type="object"/> <button name="create_period3" states="draft" string="Create 3 Months Periods" type="object"/> - <div class="oe_right"> - <field name="state" select="1" widget="statusbar" nolabel="1" /> - </div> - <div class="oe_clear"/> - </div> + <field name="state" select="1" widget="statusbar" nolabel="1" /> + </header> <sheet string="Fiscalyear" layout="auto"> <group class="oe_form_header"> <field name="name"/> @@ -97,13 +94,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="action_draft" states="done" string="Set to Draft" type="object" groups="account.group_account_manager"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1"/> + </header> <sheet string="Period" layout="auto"> <group class="oe_form_header"> <field name="name"/> @@ -131,8 +125,6 @@ <field name="special"/> <field name="company_id" groups="base.group_multi_company"/> <field name="state"/> - <button name="action_draft" states="done" string="Set to Draft" type="object" icon="terp-document-new" groups="account.group_account_manager"/> - <button name="%(action_account_period_close)d" states="draft" string="Close Period" type="action" icon="terp-camera_test"/> </tree> </field> </record> @@ -569,8 +561,6 @@ <field name="balance_end_real"/> <field name="balance_end" invisible="1"/> <field name="state"/> - <button type="object" string="Cancel" name="button_cancel" states="confirm" icon="gtk-cancel"/> - <button type="object" string="Confirm" name="button_confirm_bank" states="draft" icon="terp-camera_test"/> </tree> </field> </record> @@ -605,15 +595,12 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="button_confirm_bank" states="draft" string="Confirm" type="object" /> <button name="button_dummy" states="draft" string="Compute" type="object"/> <button name="button_cancel" states="confirm" string="Cancel" type="object"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm"/> + </header> <sheet string="Bank Statement" layout="auto"> <group col="7" colspan="4" class="oe_form_header"> <field name="name" select="1"/> @@ -670,15 +657,12 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="button_confirm_bank" states="draft" string="Confirm" type="object" /> <button name="button_dummy" states="draft" string="Compute" type="object"/> <button name="button_cancel" states="confirm" string="Cancel" type="object"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm"/> + </header> <sheet string="Bank Statement" layout="auto"> <group col="7" colspan="4" class="oe_form_header"> <field name="name" select="1"/> @@ -1356,7 +1340,6 @@ <field name="amount" sum="Total Amount"/> <field name="to_check"/> <field name="state"/> - <button name="button_validate" states="draft" string="Approve" type="object" icon="terp-camera_test"/> </tree> </field> </record> @@ -1366,14 +1349,11 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="button_validate" states="draft" string="Post" type="object"/> <button name="button_cancel" states="posted" string="Cancel" type="object"/> - <div class="oe_right"> - <field name="state" select="1" widget="statusbar" nolabel="1" /> - </div> - <div class="oe_clear"/> - </div> + <field name="state" select="1" widget="statusbar" nolabel="1" /> + </header> <sheet string="Journal Entries" layout="auto"> <group colspan="4" col="6" class="oe_form_header"> <field name="name" readonly="True"/> @@ -2627,9 +2607,6 @@ action = pool.get('res.config').next(cr, uid, [], context) <field name="balance_end_real"/> <field name="balance_end"/> <field name="state"/> - <button type="object" string="Cancel" name="button_cancel" states="confirm" icon="gtk-cancel"/> - <button type="object" string="Open" name="button_open" states="draft" icon="terp-camera_test"/> - <button type="object" string="Confirm" name="button_confirm_bank" states="open" icon="terp-gtk-go-back-rtl"/> </tree> </field> </record> @@ -2640,15 +2617,12 @@ action = pool.get('res.config').next(cr, uid, [], context) <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="button_confirm_cash" states="open" string="Close CashBox" type="object"/> <button name="button_open" states="draft" string="Open CashBox" type="object"/> <button name="button_cancel" states="confirm,open" string="Cancel" type="object" groups="base.group_extended"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm"/> + </header> <sheet string="Statement" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="name" select="1"/> diff --git a/addons/account/company_view.xml b/addons/account/company_view.xml index 0cc67f23cfe..b8c595f3ca0 100644 --- a/addons/account/company_view.xml +++ b/addons/account/company_view.xml @@ -24,7 +24,7 @@ <field name="arch" type="xml"> <field name="currency_id" position="after"> <field name="property_reserve_and_surplus_account" colspan="2"/> - <field name="paypal_account" /> + <field name="paypal_account" placeholder="sales@openerp.com"/> </field> </field> </record> diff --git a/addons/account/i18n/ja.po b/addons/account/i18n/ja.po index b710dc3e5a6..754305865a8 100644 --- a/addons/account/i18n/ja.po +++ b/addons/account/i18n/ja.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-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-05-29 21:49+0000\n" +"PO-Revision-Date: 2012-06-01 01:29+0000\n" "Last-Translator: Akira Hiyama <Unknown>\n" "Language-Team: Japanese <ja@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-05-30 05:21+0000\n" -"X-Generator: Launchpad (build 15316)\n" +"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: account #: view:account.invoice.report:0 @@ -1662,7 +1662,7 @@ msgstr "切り離された仕訳帳順序" #. module: account #: view:account.invoice:0 msgid "Responsible" -msgstr "責任担当" +msgstr "担当" #. module: account #: model:ir.actions.act_window,name:account.action_report_account_type_sales_tree_all @@ -1679,7 +1679,7 @@ msgstr "請求書のキャンセル:現在の請求書をキャンセルする #. module: account #: model:ir.ui.menu,name:account.periodical_processing_invoicing msgid "Invoicing" -msgstr "請求" +msgstr "請求中" #. module: account #: code:addons/account/report/account_partner_balance.py:115 @@ -2615,7 +2615,7 @@ msgstr "銀行消し込み" #. module: account #: report:account.invoice:0 msgid "Disc.(%)" -msgstr "ディスク(%)" +msgstr "割引(%)" #. module: account #: report:account.general.ledger:0 @@ -4445,7 +4445,7 @@ msgstr "" #: view:account.tax:0 #: view:account.tax.template:0 msgid "Keep empty to use the income account" -msgstr "損益勘定を使うためは空のままとして下さい。" +msgstr "収益勘定を使うためは空のままとして下さい。" #. module: account #: code:addons/account/account.py:3299 @@ -5300,7 +5300,7 @@ msgstr "年度エントリー仕訳帳の末尾" #: code:addons/account/wizard/account_move_journal.py:63 #, python-format msgid "Configuration Error !" -msgstr "設定エラー。" +msgstr "設定エラーです。" #. module: account #: field:account.payment.term.line,value_amount:0 @@ -5592,7 +5592,7 @@ msgstr "買掛金合計" #: model:account.account.type,name:account.data_account_type_income #: model:account.financial.report,name:account.account_financial_report_income0 msgid "Income" -msgstr "収益" +msgstr "収入" #. module: account #: selection:account.bank.statement.line,type:0 @@ -5888,7 +5888,7 @@ msgstr "サブスクリプション期間中" #. module: account #: report:account.invoice:0 msgid "Fiscal Position Remark :" -msgstr "会計ポジション注釈:" +msgstr "会計ポジションの注釈:" #. module: account #: view:analytic.entries.report:0 @@ -8156,7 +8156,7 @@ msgstr "一部が支払済の請求書のキャンセルはできません。ま #. module: account #: field:account.chart.template,property_account_income_categ:0 msgid "Income Category Account" -msgstr "収益分類のアカウント" +msgstr "収入分類のアカウント" #. module: account #: field:account.account,adjusted_balance:0 @@ -9454,7 +9454,7 @@ msgstr "" #. module: account #: view:account.analytic.account:0 msgid "Pending" -msgstr "保留" +msgstr "保留中" #. module: account #: model:process.transition,name:account.process_transition_analyticinvoice0 diff --git a/addons/account/i18n/pt.po b/addons/account/i18n/pt.po index 256f903bbd0..ce81967607a 100644 --- a/addons/account/i18n/pt.po +++ b/addons/account/i18n/pt.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-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-05-10 17:57+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" +"PO-Revision-Date: 2012-05-31 15:04+0000\n" +"Last-Translator: ThinkOpen Solutions <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: 2012-05-11 04:51+0000\n" -"X-Generator: Launchpad (build 15225)\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: account #: view:account.invoice.report:0 @@ -93,7 +93,7 @@ msgstr "Antiguidade de saldos de clientes até hoje." #. module: account #: model:process.transition,name:account.process_transition_invoiceimport0 msgid "Import from invoice or payment" -msgstr "Importar da fatura ou do pagamento" +msgstr "Importar da fatura ou pagamento" #. module: account #: model:ir.model,name:account.model_wizard_multi_charts_accounts @@ -274,7 +274,7 @@ msgstr "" #. module: account #: report:account.overdue:0 msgid "Sub-Total :" -msgstr "Sub-total :" +msgstr "Sub-Total :" #. module: account #: model:ir.actions.act_window,name:account.action_account_use_model_create_entry @@ -404,12 +404,12 @@ msgstr "account.bank.accounts.wizard" #: field:account.move.line,date_created:0 #: field:account.move.reconcile,create_date:0 msgid "Creation date" -msgstr "Data de criação" +msgstr "Data da Criação" #. module: account #: selection:account.journal,type:0 msgid "Purchase Refund" -msgstr "Nota de Crédito de Compras" +msgstr "Reembolso da Compra" #. module: account #: selection:account.journal,type:0 @@ -686,7 +686,7 @@ msgstr "Fechar periodo" #. module: account #: model:ir.model,name:account.model_account_common_partner_report msgid "Account Common Partner Report" -msgstr "Relatório Comum de Conta de Paceiros" +msgstr "Relatório Comum de Conta de Parceiros" #. module: account #: field:account.fiscalyear.close,period_id:0 @@ -715,7 +715,7 @@ msgstr "Todos os movimentos a conciliar devem ser da mesma empresa." #: model:ir.actions.act_window,name:account.action_aged_receivable #, python-format msgid "Receivable Accounts" -msgstr "Contas a receber" +msgstr "Contas a Receber" #. module: account #: constraint:account.move.line:0 @@ -873,6 +873,10 @@ msgid "" "or Loss you'd realized if those transactions were ended today. Only for " "accounts having a secondary currency set." msgstr "" +"Ao fazer transações multi-moeda, pode perder ou ganhar alguma quantia devida " +"a alterações da taxa de câmbio. Este menu dá uma previsão do ganho ou perda " +"que percebeu se essas transações foram terminadas hoje. Somente para contas " +"com um conjunto moeda secundária." #. module: account #: selection:account.entries.report,month:0 @@ -881,7 +885,7 @@ msgstr "" #: selection:report.account.sales,month:0 #: selection:report.account_type.sales,month:0 msgid "September" -msgstr "setembro" +msgstr "Setembro" #. module: account #: selection:account.subscription,period_type:0 @@ -1000,7 +1004,7 @@ msgstr "Responsabilidade" #. module: account #: view:account.entries.report:0 msgid "Extended Filters..." -msgstr "Filtros Extendidos..." +msgstr "Filtros Avançados..." #. module: account #: model:ir.ui.menu,name:account.menu_account_central_journal @@ -1157,7 +1161,7 @@ msgstr "Em disputa" #: model:ir.actions.act_window,name:account.action_view_bank_statement_tree #: model:ir.ui.menu,name:account.journal_cash_move_lines msgid "Cash Registers" -msgstr "Registos de Caixa" +msgstr "Caixa Registadora" #. module: account #: report:account.analytic.account.journal:0 @@ -1289,7 +1293,7 @@ msgid "" "You can not use this general account in this journal, check the tab 'Entry " "Controls' on the related journal !" msgstr "" -"Não pode usar esta conta geral nesta diário, verificar 'Controles de " +"Não pode usar esta conta geral neste diário, verificar 'Controles de " "Entrada' do guia do diário relacionado!" #. module: account @@ -1434,7 +1438,7 @@ msgstr "Saldo de abertura" #. module: account #: view:account.invoice:0 msgid "Reset to Draft" -msgstr "Voltar a rascunho" +msgstr "Redefinir para rascunho" #. module: account #: view:wizard.multi.charts.accounts:0 @@ -1518,7 +1522,7 @@ msgstr "Calcular impostos" #: field:account.chart.template,code_digits:0 #: field:wizard.multi.charts.accounts,code_digits:0 msgid "# of Digits" -msgstr "Nº de dígitos" +msgstr "# de Dígitos" #. module: account #: field:account.journal,entry_posted:0 @@ -1529,7 +1533,7 @@ msgstr "Saltar o estado \"Rascunho\" para lançamentos manuais" #: view:account.invoice.report:0 #: field:account.invoice.report,price_total:0 msgid "Total Without Tax" -msgstr "Total, com taxas" +msgstr "Total sem Impostos" #. module: account #: model:ir.actions.act_window,help:account.action_move_journal_line @@ -1547,7 +1551,7 @@ msgstr "" #. module: account #: view:account.entries.report:0 msgid "# of Entries " -msgstr "Nº. de movimentos " +msgstr "# de Entradas " #. module: account #: help:account.fiscal.position,active:0 @@ -1652,7 +1656,7 @@ msgstr "Conta de imposto para notas de crédito" #: view:account.bank.statement:0 #: field:account.bank.statement,line_ids:0 msgid "Statement lines" -msgstr "Linhas de extrato" +msgstr "Linhas do extrato" #. module: account #: model:ir.actions.act_window,help:account.action_bank_statement_tree @@ -1681,7 +1685,7 @@ msgstr "Data/Código" #: view:analytic.entries.report:0 #: field:analytic.entries.report,general_account_id:0 msgid "General Account" -msgstr "Contas gerais" +msgstr "Conta Geral" #. module: account #: field:res.partner,debit_limit:0 @@ -1730,8 +1734,8 @@ msgid "" "Cancel Invoice: Creates the refund invoice, validate and reconcile it to " "cancel the current invoice." msgstr "" -"Anular fatura: Cria uma nota de crédito, valida-a e aloca-a à fatura atual, " -"Ficando as duas no estado pago." +"Cancelar fatura: Cria uma nota de crédito, valida-a e aloca-a à fatura " +"atual, Ficando as duas no estado pago." #. module: account #: model:ir.ui.menu,name:account.periodical_processing_invoicing @@ -1865,7 +1869,7 @@ msgstr "Erro!" #. module: account #: sql_constraint:account.move.line:0 msgid "Wrong credit or debit value in accounting entry !" -msgstr "Valor de crédito ou débito errado no movimento contabilístico !" +msgstr "Valor de Crédito ou débito errado na entrada de contabilidade!" #. module: account #: view:account.invoice.report:0 @@ -1898,7 +1902,7 @@ msgstr "Baseado em" #: field:account.invoice,move_id:0 #: field:account.invoice,move_name:0 msgid "Journal Entry" -msgstr "Lançamento de diário" +msgstr "Entradas no diário" #. module: account #: view:account.tax:0 @@ -1932,7 +1936,7 @@ msgstr "Venda / Compra Diário" #. module: account #: view:account.analytic.account:0 msgid "Analytic account" -msgstr "Conta analítica" +msgstr "Conta Analítica" #. module: account #: code:addons/account/account_bank_statement.py:339 @@ -2045,7 +2049,7 @@ msgstr "" #: view:account.invoice:0 #: view:report.invoice.created:0 msgid "Untaxed Amount" -msgstr "Valor sem Impostos" +msgstr "Montante sem Impostos" #. module: account #: help:account.tax,active:0 @@ -2053,7 +2057,7 @@ msgid "" "If the active field is set to False, it will allow you to hide the tax " "without removing it." msgstr "" -"Se o campo activo for definido como 'Falso', ele permitirá que oculte o " +"Se o campo ativo for definido como 'Falso', ele permitirá que oculte o " "imposto sem o remover." #. module: account @@ -2123,7 +2127,7 @@ msgstr "Importar da fatura" #: selection:report.account.sales,month:0 #: selection:report.account_type.sales,month:0 msgid "January" -msgstr "janeiro" +msgstr "Janeiro" #. module: account #: view:account.journal:0 @@ -2261,7 +2265,7 @@ msgstr "ECNJ" #: view:account.subscription:0 #: selection:account.subscription,state:0 msgid "Running" -msgstr "Em execução" +msgstr "Em Funcionamento" #. module: account #: view:account.chart.template:0 @@ -2307,7 +2311,7 @@ msgstr "# de Qt. de Artigos " #. module: account #: model:ir.model,name:account.model_product_template msgid "Product Template" -msgstr "Template Artigo" +msgstr "Template do Artigo" #. module: account #: report:account.account.balance:0 @@ -2505,7 +2509,7 @@ msgstr "Progresso de 30% ao fim de 30 dias" #. module: account #: view:account.entries.report:0 msgid "Unreconciled entries" -msgstr "Movimentos Dereconciliado" +msgstr "Movimentos Desreconciliados" #. module: account #: field:account.invoice.tax,base_code_id:0 @@ -2606,7 +2610,7 @@ msgstr "" #. module: account #: view:account.analytic.cost.ledger.journal.report:0 msgid "Select period" -msgstr "Seleccione o período" +msgstr "Selecione o período" #. module: account #: model:ir.ui.menu,name:account.menu_account_pp_statements @@ -2679,7 +2683,7 @@ msgstr "Erro de Configuração!" #. module: account #: field:account.invoice.report,price_average:0 msgid "Average Price" -msgstr "Preço médio" +msgstr "Preço Médio" #. module: account #: report:account.overdue:0 @@ -2824,8 +2828,8 @@ msgid "" "always skipping that state." msgstr "" "Marque esta caixa se não pretende que os novos movimentos do diário passem " -"através do estado \"rascunho\" e vão directamente para o estado " -"\"Publicado\" sem qualquer validação manual.\n" +"através do estado 'rascunho' e vão diretamente para o estado 'Publicado' sem " +"qualquer validação manual.\n" "Note que os movimentos do diário que são automaticamente criados pelo " "sistema também ignoram este estado." @@ -2949,7 +2953,7 @@ msgstr "Obrigatório" #: field:product.category,property_account_expense_categ:0 #: field:product.template,property_account_expense:0 msgid "Expense Account" -msgstr "Conta de gastos" +msgstr "Conta de Despesas" #. module: account #: help:account.invoice,period_id:0 @@ -2999,7 +3003,7 @@ msgid "" msgstr "" "A data de maturidade dos movimentos gerados por este modelo. Pode escolher " "entre a data de criação ou a data de criação dos movimentos mais os termos " -"de pagamento dos Paceiros." +"de pagamento dos Parceiros." #. module: account #: model:ir.ui.menu,name:account.menu_finance_accounting @@ -3023,7 +3027,7 @@ msgstr "Lucro e prejuízo" #: model:ir.model,name:account.model_account_fiscal_position #: field:res.partner,property_account_position:0 msgid "Fiscal Position" -msgstr "Posição fiscal" +msgstr "Posição Fiscal" #. module: account #: code:addons/account/account_invoice.py:735 @@ -3044,7 +3048,7 @@ msgstr "Um parceiro por página" #: field:account.account,child_parent_ids:0 #: field:account.account.template,child_parent_ids:0 msgid "Children" -msgstr "Contas-filho" +msgstr "Descendentes" #. module: account #: selection:account.invoice,type:0 @@ -3097,7 +3101,7 @@ msgstr "Transação a dinheiro" #. module: account #: view:res.partner:0 msgid "Bank account" -msgstr "Conta bancária" +msgstr "Conta Bancária" #. module: account #: field:account.chart.template,tax_template_ids:0 @@ -3190,7 +3194,7 @@ msgstr "BNK" #. module: account #: field:account.move.line,analytic_lines:0 msgid "Analytic lines" -msgstr "Linhas da analítica" +msgstr "Linhas analíticas" #. module: account #: view:account.invoice:0 @@ -3220,7 +3224,7 @@ msgstr "Começa em" #. module: account #: model:ir.model,name:account.model_account_partner_ledger msgid "Account Partner Ledger" -msgstr "Balancete de Contas de Terceiro" +msgstr "Balancete de Contas do Parceiro" #. module: account #: help:account.journal.column,sequence:0 @@ -8774,7 +8778,7 @@ msgstr "Diário de Compra" #: view:account.invoice.refund:0 msgid "Refund Invoice: Creates the refund invoice, ready for editing." msgstr "" -"Nota de crédito: Emite uma nota de crédito, para ser editada / confirmada à " +"Estornar fatura: Emite uma nota de crédito, para ser editada / confirmada à " "mão." #. module: account @@ -10690,7 +10694,7 @@ msgstr "" #. module: account #: view:account.payment.term:0 msgid "Description on Invoices" -msgstr "" +msgstr "Descrição de Faturas" #. module: account #: model:ir.model,name:account.model_account_analytic_chart diff --git a/addons/account/i18n/zh_TW.po b/addons/account/i18n/zh_TW.po index f5aa3781e50..bcbea9aec5d 100644 --- a/addons/account/i18n/zh_TW.po +++ b/addons/account/i18n/zh_TW.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-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-05-23 07:32+0000\n" -"Last-Translator: VTTW <victso@gmail.com>\n" +"PO-Revision-Date: 2012-06-05 02:38+0000\n" +"Last-Translator: Boyce Huang <boyce.huang@cenoq.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-05-24 11:09+0000\n" -"X-Generator: Launchpad (build 15288)\n" +"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n" +"X-Generator: Launchpad (build 15353)\n" #. module: account #: view:account.invoice.report:0 @@ -419,7 +419,7 @@ msgstr "貸方合計" #. module: account #: view:account.move.line.unreconcile.select:0 msgid "Open for Unreconciliation" -msgstr "" +msgstr "開啟反核銷" #. module: account #: field:account.account.template,chart_template_id:0 @@ -2737,7 +2737,7 @@ msgstr "要設置期初餘額需在憑證簿設置中勾選合併選項" #: model:ir.actions.act_window,name:account.action_tax_code_list #: model:ir.ui.menu,name:account.menu_action_tax_code_list msgid "Tax Codes" -msgstr "" +msgstr "稅碼" #. module: account #: view:account.account:0 @@ -4593,7 +4593,7 @@ msgstr "已付" #. module: account #: view:account.period.close:0 msgid "Are you sure?" -msgstr "" +msgstr "您確定嗎?" #. module: account #: help:account.move.line,statement_id:0 @@ -5930,7 +5930,7 @@ msgstr "銷售稅(%)" #. module: account #: view:account.addtmpl.wizard:0 msgid "Create an Account Based on this Template" -msgstr "" +msgstr "根據這個範本建立使用者" #. module: account #: view:account.account.type:0 @@ -7868,7 +7868,7 @@ msgstr "反向輔助核算餘額 -" #. module: account #: view:account.move.bank.reconcile:0 msgid "Open for Bank Reconciliation" -msgstr "" +msgstr "開啟銀行核銷" #. module: account #: view:account.analytic.line:0 @@ -9126,7 +9126,7 @@ msgstr "為了對賬,您必須在賬簿中定義一個銀行帳號。" #. module: account #: view:account.move.line.reconcile:0 msgid "Reconciliation Transactions" -msgstr "" +msgstr "核銷交易" #. module: account #: model:ir.actions.act_window,name:account.action_account_common_menu diff --git a/addons/account/res_config_view.xml b/addons/account/res_config_view.xml index 1cf1e40f02b..41a0b121735 100644 --- a/addons/account/res_config_view.xml +++ b/addons/account/res_config_view.xml @@ -16,10 +16,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Configure Accounting" layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Apply" type="object" name="execute"/> <button string="Cancel" special="cancel"/> - </div> + </header> <sheet layout="auto"> <field name="has_default_company" invisible="1" /> <field name="has_chart_of_accounts" invisible="1"/> diff --git a/addons/account_analytic_analysis/i18n/pt.po b/addons/account_analytic_analysis/i18n/pt.po index afdf9c25f17..20c8677e066 100644 --- a/addons/account_analytic_analysis/i18n/pt.po +++ b/addons/account_analytic_analysis/i18n/pt.po @@ -7,25 +7,25 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-12-09 09:33+0000\n" -"Last-Translator: OpenERP Administrators <Unknown>\n" +"PO-Revision-Date: 2012-05-31 15:05+0000\n" +"Last-Translator: Marcelo Almeida <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: 2012-02-09 06:32+0000\n" -"X-Generator: Launchpad (build 14763)\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: account_analytic_analysis #: field:account.analytic.account,revenue_per_hour:0 msgid "Revenue per Time (real)" -msgstr "" +msgstr "Receita por hora (real)" #. module: account_analytic_analysis #: help:account.analytic.account,remaining_ca:0 msgid "Computed using the formula: Max Invoice Price - Invoiced Amount." msgstr "" -"Processado com a fórmula: Preço Máximo da Factura - Montante Facturado." +"Calculado utilizando a fórmula: Valor Máximo da Fatura - Valor da Fatura" #. module: account_analytic_analysis #: help:account.analytic.account,last_worked_date:0 @@ -38,11 +38,13 @@ msgid "" "The contracts to be renewed because the deadline is passed or the working " "hours are higher than the allocated hours" msgstr "" +"Os contratos a serem renovados, porque o prazo é passado ou as horas de " +"trabalho são maiores do que as horas atribuídas" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Pending contracts to renew with your customer" -msgstr "" +msgstr "Contratos pendentes de renovação com o seu cliente" #. module: account_analytic_analysis #: help:account.analytic.account,hours_qtt_non_invoiced:0 @@ -50,31 +52,33 @@ msgid "" "Number of time (hours/days) (from journal of type 'general') that can be " "invoiced if you invoice based on analytic account." msgstr "" +"Número de tempo (horas ou dias) (de Diário do tipo 'geral') que podem ser " +"faturados, se fatura com base na conta analítica" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Analytic Accounts with a past deadline in one month." -msgstr "" +msgstr "Contas Analíticas com um prazo limite ultrapassando um mês." #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Group By..." -msgstr "" +msgstr "Grupo por..." #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "End Date" -msgstr "" +msgstr "Data final" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Create Invoice" -msgstr "" +msgstr "Criar Fatura" #. module: account_analytic_analysis #: field:account.analytic.account,last_invoice_date:0 msgid "Last Invoice Date" -msgstr "Data da última factura" +msgstr "Data da última fatura" #. module: account_analytic_analysis #: help:account.analytic.account,theorical_margin:0 @@ -87,16 +91,18 @@ msgid "" "Number of time you spent on the analytic account (from timesheet). It " "computes quantities on all journal of type 'general'." msgstr "" +"Número de tempo que gastou na conta analítica (da folha de horas). Ele " +"calcula quantidades em todos os Diários do tipo 'geral'." #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Contracts in progress" -msgstr "" +msgstr "Contractos em progresso" #. module: account_analytic_analysis #: field:account.analytic.account,is_overdue_quantity:0 msgid "Overdue Quantity" -msgstr "" +msgstr "Quantidade em atraso" #. module: account_analytic_analysis #: model:ir.actions.act_window,help:account_analytic_analysis.action_account_analytic_overdue @@ -108,6 +114,12 @@ msgid "" "pending accounts and reopen or close the according to the negotiation with " "the customer." msgstr "" +"Vai encontrar aqui os contratos a serem renovados, porque o prazo é passado " +"ou as horas de trabalho são maiores do que as horas atribuídas. OpenERP " +"define automaticamente essas contas analíticas para o estado pendente, a fim " +"de emitir um aviso durante a gravação da folha de horas. Vendedores devem " +"rever todas as contas pendentes e reabrir ou fechar o acordo com a " +"negociação com o cliente." #. module: account_analytic_analysis #: field:account.analytic.account,ca_theorical:0 @@ -117,7 +129,7 @@ msgstr "Retorno Teórico" #. module: account_analytic_analysis #: field:account.analytic.account,hours_qtt_non_invoiced:0 msgid "Uninvoiced Time" -msgstr "" +msgstr "Tempo não faturado" #. module: account_analytic_analysis #: help:account.analytic.account,last_worked_invoiced_date:0 @@ -125,13 +137,13 @@ msgid "" "If invoice from the costs, this is the date of the latest work or cost that " "have been invoiced." msgstr "" -"Se facturado dos custos, esta é a data do último trabalho ou dos custos que " -"foram facturados." +"Se faturado dos custos, esta é a data do último trabalho ou dos custos que " +"foram faturados." #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "To Renew" -msgstr "" +msgstr "Para renovar" #. module: account_analytic_analysis #: field:account.analytic.account,last_worked_date:0 @@ -141,24 +153,26 @@ msgstr "Data do Último Custo/Trabalho" #. module: account_analytic_analysis #: field:account.analytic.account,hours_qtt_invoiced:0 msgid "Invoiced Time" -msgstr "" +msgstr "Tempo faturado" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "" "A contract in OpenERP is an analytic account having a partner set on it." msgstr "" +"Um contrato em OpenERP é um relato analítico a ter num conjunto parceiro " +"sobre ele." #. module: account_analytic_analysis #: field:account.analytic.account,remaining_hours:0 msgid "Remaining Time" -msgstr "" +msgstr "Tempo Restante" #. module: account_analytic_analysis #: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_overdue #: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_overdue msgid "Contracts to Renew" -msgstr "" +msgstr "Contratos para renovar" #. module: account_analytic_analysis #: field:account.analytic.account,theorical_margin:0 @@ -168,7 +182,7 @@ msgstr "Margem Teórica" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid " +1 Month" -msgstr "" +msgstr " +1 mês" #. module: account_analytic_analysis #: help:account.analytic.account,ca_theorical:0 @@ -177,29 +191,29 @@ msgid "" "if all these costs have been invoiced at the normal sale price provided by " "the pricelist." msgstr "" -"Baseado nos custos que teve no projecto, qual é que seria o rendimento se " -"todos estes custos fossem facturados ao preço normal da venda fornecidos " -"pela tabela de preço." +"Baseado nos custos que teve no projeto, qual é que seria o rendimento se " +"todos estes custos fossem faturados ao preço normal da venda fornecidos pela " +"tabela de preço." #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Pending" -msgstr "" +msgstr "Pendente" #. module: account_analytic_analysis #: field:account.analytic.account,ca_to_invoice:0 msgid "Uninvoiced Amount" -msgstr "Montante não Facturado" +msgstr "Montante não Faturado" #. module: account_analytic_analysis #: help:account.analytic.account,real_margin:0 msgid "Computed using the formula: Invoiced Amount - Total Costs." -msgstr "Processado ao utilizar a fórmula: Montante Facturado - Custo Total." +msgstr "Processado ao utilizar a fórmula: Montante Faturado - Custo Total." #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Parent" -msgstr "" +msgstr "Ascendente" #. module: account_analytic_analysis #: field:account.analytic.account,user_ids:0 @@ -221,17 +235,17 @@ msgstr "Resumo de horas por utilizador" #. module: account_analytic_analysis #: field:account.analytic.account,ca_invoiced:0 msgid "Invoiced Amount" -msgstr "Montante Facturado" +msgstr "Montante Faturado" #. module: account_analytic_analysis #: field:account.analytic.account,last_worked_invoiced_date:0 msgid "Date of Last Invoiced Cost" -msgstr "Data do Último Custo Facturado" +msgstr "Data do Último Custo Faturado" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Contract" -msgstr "" +msgstr "Contrato" #. module: account_analytic_analysis #: field:account.analytic.account,real_margin_rate:0 @@ -246,7 +260,7 @@ msgstr "Margem Real" #. module: account_analytic_analysis #: help:account.analytic.account,ca_invoiced:0 msgid "Total customer invoiced amount for this account." -msgstr "Montante da facturação total do cliente para esta conta" +msgstr "Montante da faturação total do cliente para esta conta" #. module: account_analytic_analysis #: model:ir.model,name:account_analytic_analysis.model_account_analytic_analysis_summary_month @@ -266,7 +280,7 @@ msgstr "Receita Restante" #. module: account_analytic_analysis #: help:account.analytic.account,remaining_hours:0 msgid "Computed using the formula: Maximum Time - Total Time" -msgstr "" +msgstr "Cálculo utilizando a fórmula: Tempo máximo - Tempo Total" #. module: account_analytic_analysis #: help:account.analytic.account,hours_qtt_invoiced:0 @@ -274,6 +288,8 @@ msgid "" "Number of time (hours/days) that can be invoiced plus those that already " "have been invoiced." msgstr "" +"Número de tempo (horas ou dias) que pode ser faturado mais aqueles que já " +"tenham sido faturados." #. module: account_analytic_analysis #: help:account.analytic.account,ca_to_invoice:0 @@ -281,13 +297,13 @@ msgid "" "If invoice from analytic account, the remaining amount you can invoice to " "the customer based on the total costs." msgstr "" -"Se facturado a partir da conta analítica, o montante restante que pode " -"facturar ao cliente baseado nos custos totais." +"Se faturado a partir da conta analítica, o montante restante que pode " +"faturar ao cliente baseado nos custos totais." #. module: account_analytic_analysis #: help:account.analytic.account,revenue_per_hour:0 msgid "Computed using the formula: Invoiced Amount / Total Time" -msgstr "" +msgstr "Calculado através da fórmula: Valor faturado / Tempo Total" #. module: account_analytic_analysis #: field:account.analytic.account,total_cost:0 @@ -312,38 +328,38 @@ msgstr "Conta Analítica" #: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_overdue_all #: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_overdue_all msgid "Contracts" -msgstr "" +msgstr "Contractos" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Manager" -msgstr "" +msgstr "Gestor" #. module: account_analytic_analysis #: model:ir.actions.act_window,name:account_analytic_analysis.action_hr_tree_invoiced_all #: model:ir.ui.menu,name:account_analytic_analysis.menu_action_hr_tree_invoiced_all msgid "All Uninvoiced Entries" -msgstr "Todas os Movimentos não Facturados" +msgstr "Todos os Movimentos não Faturados" #. module: account_analytic_analysis #: help:account.analytic.account,last_invoice_date:0 msgid "If invoice from the costs, this is the date of the latest invoiced." -msgstr "" +msgstr "Se for fatura dos custos, esta é a data da última faturada." #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Associated Partner" -msgstr "" +msgstr "Parceiro associado" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Open" -msgstr "" +msgstr "Abrir" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Contracts that are not assigned to an account manager." -msgstr "" +msgstr "Contratos que não são atribuídos a um gestor de conta." #. module: account_analytic_analysis #: field:account.analytic.account,hours_quantity:0 @@ -358,18 +374,12 @@ msgid "" "Total of costs for this account. It includes real costs (from invoices) and " "indirect costs, like time spent on timesheets." msgstr "" -"Total de custos para esta conta. Que inclui custos reais (das facturas) e " +"Total de custos para esta conta. Que inclui custos reais (das faturas) e " "custos indirectos, como o tempo gasto em folha de horas." #~ msgid "Invoicing" #~ msgstr "Facturação" -#~ msgid "" -#~ "Number of hours that can be invoiced plus those that already have been " -#~ "invoiced." -#~ msgstr "" -#~ "Número de horas que podem ser facturadas mais as que já foram facturadas." - #~ msgid "Hours summary by user" #~ msgstr "Resumo de horas por utilizador" @@ -506,6 +516,14 @@ msgstr "" #~ "por utilizador bem como por mês.\n" #~ msgid "" +#~ "Number of hours that can be invoiced plus those that already have been " +#~ "invoiced." +#~ msgstr "" +#~ "Número de horas que podem ser facturadas mais aquelas que já tenham sido " +#~ "facturadas." + +#~ msgid "" #~ "Error! The currency has to be the same as the currency of the selected " #~ "company" -#~ msgstr "Erro! A divisa tem que ser a mesma que a da empresa seleccionada" +#~ msgstr "" +#~ "Erro! A divisa tem que ser a mesma que a divisa da empresa seleccionada" diff --git a/addons/account_anglo_saxon/i18n/ja.po b/addons/account_anglo_saxon/i18n/ja.po index 5ab1b013742..a2d2eb88dc6 100644 --- a/addons/account_anglo_saxon/i18n/ja.po +++ b/addons/account_anglo_saxon/i18n/ja.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-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-05-29 06:22+0000\n" +"PO-Revision-Date: 2012-05-31 06:16+0000\n" "Last-Translator: Akira Hiyama <Unknown>\n" "Language-Team: Japanese <ja@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-05-30 05:21+0000\n" -"X-Generator: Launchpad (build 15316)\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: account_anglo_saxon #: sql_constraint:purchase.order:0 @@ -35,7 +35,7 @@ msgstr "製品分類" #. module: account_anglo_saxon #: sql_constraint:stock.picking:0 msgid "Reference must be unique per Company!" -msgstr "参照は会社内で固有でなければいけません" +msgstr "参照は会社ごとにユニークでなければいけません。" #. module: account_anglo_saxon #: constraint:product.category:0 diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml index 1affcf7a85c..5e1a5f68d95 100644 --- a/addons/account_asset/account_asset_view.xml +++ b/addons/account_asset/account_asset_view.xml @@ -83,10 +83,7 @@ <button name="validate" states="draft" string="Confirm Asset" type="object"/> <button name="set_to_close" states="open" string="Set to Close" type="object"/> <button name="set_to_draft" states="open" string="Set to Draft" type="object"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open"/> - </div> - <div class="oe_clear"/> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open"/> </div> <sheet string="Asset" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> diff --git a/addons/account_asset/i18n/pt.po b/addons/account_asset/i18n/pt.po index aa94b06991b..80869fa03da 100755 --- a/addons/account_asset/i18n/pt.po +++ b/addons/account_asset/i18n/pt.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-02-08 01:37+0100\n" -"PO-Revision-Date: 2011-12-10 11:58+0000\n" -"Last-Translator: Paulino Ascenção <Unknown>\n" +"PO-Revision-Date: 2012-05-31 15:07+0000\n" +"Last-Translator: ThinkOpen Solutions <Unknown>\n" "Language-Team: Portuguese <pt@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-05-11 05:15+0000\n" -"X-Generator: Launchpad (build 15225)\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: account_asset #: view:account.asset.asset:0 @@ -439,7 +439,7 @@ msgstr "Método tempo" #. module: account_asset #: view:account.asset.category:0 msgid "Analytic Information" -msgstr "" +msgstr "Informação Analitica" #. module: account_asset #: view:asset.modify:0 @@ -620,7 +620,7 @@ msgstr "Prorata Temporis" #. module: account_asset #: view:account.asset.category:0 msgid "Accounting Information" -msgstr "" +msgstr "Informação contabilística" #. module: account_asset #: model:ir.model,name:account_asset.model_account_invoice diff --git a/addons/account_bank_statement_extensions/i18n/gu.po b/addons/account_bank_statement_extensions/i18n/gu.po index 3e77a3b8a26..a1677df4845 100644 --- a/addons/account_bank_statement_extensions/i18n/gu.po +++ b/addons/account_bank_statement_extensions/i18n/gu.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-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-04-17 09:03+0000\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"PO-Revision-Date: 2012-06-01 04:42+0000\n" +"Last-Translator: Jalpesh Patel(OpenERP) <pja@tinyerp.com>\n" "Language-Team: Gujarati <gu@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-04-18 04:42+0000\n" -"X-Generator: Launchpad (build 15108)\n" +"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 @@ -42,7 +42,7 @@ msgstr "" #. module: account_bank_statement_extensions #: field:account.bank.statement.line.global,parent_id:0 msgid "Parent Code" -msgstr "પેરેંટ કોડ" +msgstr "પિતૃ સંકેત" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 @@ -64,7 +64,7 @@ msgstr "" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Group By..." -msgstr "ગ્રુપ દ્વારા..." +msgstr "સમૂહ દ્વારા" #. module: account_bank_statement_extensions #: field:account.bank.statement.line,state:0 @@ -80,25 +80,25 @@ msgstr "કાચું" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Statement" -msgstr "વિધાન" +msgstr "નિવેદન" #. module: account_bank_statement_extensions #: view:confirm.statement.line:0 #: model:ir.actions.act_window,name:account_bank_statement_extensions.action_confirm_statement_line #: model:ir.model,name:account_bank_statement_extensions.model_confirm_statement_line msgid "Confirm selected statement lines" -msgstr "" +msgstr "પસંદ કરેલ નિવેદન લીટીઓ ખાતરી કરો" #. module: account_bank_statement_extensions #: report:bank.statement.balance.report:0 #: model:ir.actions.report.xml,name:account_bank_statement_extensions.bank_statement_balance_report msgid "Bank Statement Balances Report" -msgstr "" +msgstr "બેન્ક નિવેદન સિલક અહેવાલ" #. module: account_bank_statement_extensions #: view:cancel.statement.line:0 msgid "Cancel Lines" -msgstr "" +msgstr "લીટીઓ રદ કરો" #. module: account_bank_statement_extensions #: view:account.bank.statement.line.global:0 @@ -109,7 +109,7 @@ msgstr "" #. module: account_bank_statement_extensions #: view:confirm.statement.line:0 msgid "Confirm Lines" -msgstr "" +msgstr "લીટીઓ પુષ્ટિ કરો" #. module: account_bank_statement_extensions #: code:addons/account_bank_statement_extensions/account_bank_statement.py:130 @@ -134,33 +134,33 @@ msgstr "રોજનામું" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Confirmed Statement Lines." -msgstr "" +msgstr "પુષ્ટિ નિવેદન આવેલ લીટીઓ." #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Credit Transactions." -msgstr "" +msgstr "ધિરાણ વ્યવહારો." #. module: account_bank_statement_extensions #: model:ir.actions.act_window,help:account_bank_statement_extensions.action_cancel_statement_line msgid "cancel selected statement lines." -msgstr "" +msgstr "પસંદ કરેલ લીટીઓની નિવેદન રદ કરો." #. module: account_bank_statement_extensions #: field:account.bank.statement.line,counterparty_number:0 msgid "Counterparty Number" -msgstr "" +msgstr "પ્રતિકૂળ સંખ્યા" #. module: account_bank_statement_extensions #: view:account.bank.statement.line.global:0 msgid "Transactions" -msgstr "" +msgstr "વ્યવહારો" #. module: account_bank_statement_extensions #: code:addons/account_bank_statement_extensions/account_bank_statement.py:130 #, python-format msgid "Warning" -msgstr "" +msgstr "ચેતવણી" #. module: account_bank_statement_extensions #: report:bank.statement.balance.report:0 @@ -170,7 +170,7 @@ msgstr "" #. module: account_bank_statement_extensions #: report:bank.statement.balance.report:0 msgid "Date" -msgstr "" +msgstr "તારીખ" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 @@ -181,17 +181,17 @@ msgstr "" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Debit Transactions." -msgstr "" +msgstr "ઉધાર વ્યવહારો." #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Extended Filters..." -msgstr "" +msgstr "વિસ્તૃત ગાળકો ..." #. module: account_bank_statement_extensions #: view:confirm.statement.line:0 msgid "Confirmed lines cannot be changed anymore." -msgstr "" +msgstr "પુષ્ટિ લીટીઓ હવે બદલી શકાતી નથી" #. module: account_bank_statement_extensions #: constraint:res.partner.bank:0 @@ -204,47 +204,47 @@ msgstr "" #. module: account_bank_statement_extensions #: field:account.bank.statement.line,val_date:0 msgid "Valuta Date" -msgstr "" +msgstr "ચલણ તારીખો" #. module: account_bank_statement_extensions #: model:ir.actions.act_window,help:account_bank_statement_extensions.action_confirm_statement_line msgid "Confirm selected statement lines." -msgstr "" +msgstr "પસંદ નિવેદન લીટીઓ ખાતરી કરો." #. module: account_bank_statement_extensions #: view:cancel.statement.line:0 msgid "Are you sure you want to cancel the selected Bank Statement lines ?" -msgstr "" +msgstr "શું તમે ખરેખર પસંદિત બેન્ક નિવેદન લાઇન્સ રદ કરવા માંગો છો?" #. module: account_bank_statement_extensions #: report:bank.statement.balance.report:0 msgid "Name" -msgstr "" +msgstr "નામ" #. module: account_bank_statement_extensions #: selection:account.bank.statement.line.global,type:0 msgid "ISO 20022" -msgstr "" +msgstr "ISO 20022" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Notes" -msgstr "" +msgstr "નોંધ" #. module: account_bank_statement_extensions #: selection:account.bank.statement.line.global,type:0 msgid "Manual" -msgstr "" +msgstr "માર્ગદર્શિકા" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Credit" -msgstr "" +msgstr "જમા" #. module: account_bank_statement_extensions #: field:account.bank.statement.line.global,amount:0 msgid "Amount" -msgstr "" +msgstr "કિંમત" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 @@ -254,7 +254,7 @@ msgstr "" #. module: account_bank_statement_extensions #: field:account.bank.statement.line,counterparty_currency:0 msgid "Counterparty Currency" -msgstr "" +msgstr "પ્રતિકૂળ ચલણ" #. module: account_bank_statement_extensions #: field:account.bank.statement.line,counterparty_bic:0 @@ -269,7 +269,7 @@ msgstr "" #. module: account_bank_statement_extensions #: view:confirm.statement.line:0 msgid "Are you sure you want to confirm the selected Bank Statement lines ?" -msgstr "" +msgstr "શું તમે ખરેખર પસંદિત બેન્ક નિવેદન લાઇન્સ ખાતરી કરવા માંગો છો?" #. module: account_bank_statement_extensions #: constraint:account.bank.statement.line:0 @@ -288,7 +288,7 @@ msgstr "" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Draft Statement Lines." -msgstr "" +msgstr "કાચું નિવેદન લીટીઓ." #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 @@ -298,27 +298,27 @@ msgstr "" #. module: account_bank_statement_extensions #: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement_line msgid "Bank Statement Line" -msgstr "" +msgstr "બેન્ક વિધાન લીટી" #. module: account_bank_statement_extensions #: field:account.bank.statement.line.global,code:0 msgid "Code" -msgstr "" +msgstr "સંકેત" #. module: account_bank_statement_extensions #: field:account.bank.statement.line,counterparty_name:0 msgid "Counterparty Name" -msgstr "" +msgstr "પ્રતિકૂળ નામ" #. module: account_bank_statement_extensions #: field:account.bank.statement.line.global,name:0 msgid "Communication" -msgstr "" +msgstr "સંચાર" #. module: account_bank_statement_extensions #: model:ir.model,name:account_bank_statement_extensions.model_res_partner_bank msgid "Bank Accounts" -msgstr "" +msgstr "બેંક હિસાબી" #. module: account_bank_statement_extensions #: constraint:account.bank.statement:0 @@ -328,24 +328,24 @@ msgstr "" #. module: account_bank_statement_extensions #: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement msgid "Bank Statement" -msgstr "" +msgstr "બેન્ક સ્ટેટમેન્ટ" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Statement Line" -msgstr "" +msgstr "વિધાન લીટી" #. module: account_bank_statement_extensions #: sql_constraint:account.bank.statement.line.global:0 msgid "The code must be unique !" -msgstr "" +msgstr "કોડ અજોડ હોવું જ જોઈએ!" #. module: account_bank_statement_extensions #: field:account.bank.statement.line.global,bank_statement_line_ids:0 #: model:ir.actions.act_window,name:account_bank_statement_extensions.action_bank_statement_line #: model:ir.ui.menu,name:account_bank_statement_extensions.bank_statement_line msgid "Bank Statement Lines" -msgstr "" +msgstr "બેંક વિધાન લીટીઓ" #. module: account_bank_statement_extensions #: view:account.bank.statement.line.global:0 @@ -356,17 +356,17 @@ msgstr "" #: view:cancel.statement.line:0 #: view:confirm.statement.line:0 msgid "Cancel" -msgstr "" +msgstr "રદ કરો" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Statement Lines" -msgstr "" +msgstr "વિધાન લીટીઓ" #. module: account_bank_statement_extensions #: view:account.bank.statement.line:0 msgid "Total Amount" -msgstr "" +msgstr "કુલ રકમ" #. module: account_bank_statement_extensions #: field:account.bank.statement.line,globalisation_id:0 diff --git a/addons/account_budget/account_budget_view.xml b/addons/account_budget/account_budget_view.xml index 13c97ca32d6..667d35a9d6d 100644 --- a/addons/account_budget/account_budget_view.xml +++ b/addons/account_budget/account_budget_view.xml @@ -105,17 +105,14 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Confirm" name="confirm" states="draft" type="workflow" /> <button string="Approve" name="validate" states="confirm" type="workflow"/> <button string="Done" name="done" states="validate" type="workflow" /> <button name="draft" states="cancel" string="Reset to Draft" type="workflow"/> <button string="Cancel" name="cancel" states="confirm,validate" type="workflow"/> - <div class="oe_right"> - <field name="state" select="1" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" select="1" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm"/> + </header> <sheet string="Budget" layout="auto"> <group class="oe_form_header"> <field name="name" colspan="1" select="1" attrs="{'readonly':[('state','!=','draft')]}"/> diff --git a/addons/account_check_writing/i18n/ja.po b/addons/account_check_writing/i18n/ja.po index a9ce55b0cd8..6f65f35354d 100644 --- a/addons/account_check_writing/i18n/ja.po +++ b/addons/account_check_writing/i18n/ja.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-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-05-10 18:14+0000\n" -"Last-Translator: Raphael Collet (OpenERP) <Unknown>\n" +"PO-Revision-Date: 2012-06-01 06:41+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" "Language-Team: Japanese <ja@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-05-11 05:15+0000\n" -"X-Generator: Launchpad (build 15225)\n" +"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: account_check_writing #: selection:res.company,check_layout:0 @@ -100,7 +100,7 @@ msgstr "小切手の振出" #: report:account.print.check.middle:0 #: report:account.print.check.top:0 msgid "Discount" -msgstr "割引き" +msgstr "割引" #. module: account_check_writing #: report:account.print.check.bottom:0 diff --git a/addons/account_coda/i18n/pt.po b/addons/account_coda/i18n/pt.po index 0d99a5515a6..42facc9739f 100644 --- a/addons/account_coda/i18n/pt.po +++ b/addons/account_coda/i18n/pt.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-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-12-20 19:21+0000\n" -"Last-Translator: Rui Franco (multibase.pt) <Unknown>\n" +"PO-Revision-Date: 2012-05-31 15:12+0000\n" +"Last-Translator: ThinkOpen Solutions <Unknown>\n" "Language-Team: Portuguese <pt@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-05-11 05:09+0000\n" -"X-Generator: Launchpad (build 15225)\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_09_21 @@ -1780,6 +1780,8 @@ msgstr "Pagamentos de salários coletivos" #: model:account.coda.trans.code,comment:account_coda.actcc_80_17 msgid "Collected for unsealed deposit of securities, and other parcels" msgstr "" +"Recolhidos para o depósito de valores mobiliários sem lacre, e outras " +"parcelas" #. module: account_coda #: model:account.coda.comm.type,description:account_coda.acct_004 @@ -1853,7 +1855,7 @@ msgstr "Documentário de taxas gerais de crédito" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_80_25 msgid "Renting of direct debit box" -msgstr "" +msgstr "Locação de caixa de débito direto" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_11_52 @@ -1871,6 +1873,9 @@ msgid "" "globalisation of which this record is the first.\n" "The same code will be repeated at the end of the globalisation." msgstr "" +"O valor que é mencionado (1 a 9), especifica o nível de hierarquia da " +"globalização do que este disco é o primeiro.\n" +"O mesmo código será repetido no final da globalização." #. module: account_coda #: field:coda.bank.account,description2:0 @@ -1880,7 +1885,7 @@ msgstr "Descrição da Conta Secundária" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_211 msgid "Credit arrangement fee | Additional credit arrangement fee" -msgstr "" +msgstr "Taxa de arranjo de Crédito | taxa de arranjo de crédito adicional" #. module: account_coda #: view:coda.bank.statement:0 @@ -1925,7 +1930,7 @@ msgstr "" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_035 msgid "Charges foreign documentary bill" -msgstr "" +msgstr "Encargos conta documentário estrangeiro" #. module: account_coda #: model:account.coda.trans.code,comment:account_coda.actcc_80_39 @@ -2191,6 +2196,8 @@ msgid "" "Credit transfer or cash payment with reconstituted structured format " "communication" msgstr "" +"Transferência de crédito ou pagamento em dinheiro com a comunicação " +"reconstituída do formato estruturado" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_07_86 @@ -2279,7 +2286,7 @@ msgstr "Pesquisar Extratos Bancários CODA" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_410 msgid "Reclamation charges" -msgstr "" +msgstr "Taxas de Contestação" #. module: account_coda #: model:ir.actions.act_window,help:account_coda.action_coda_bank_statements @@ -2347,7 +2354,7 @@ msgstr "Assistente em estado incorreto. Por favor, clique no botão Cancelar!" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_418 msgid "Endorsement commission" -msgstr "" +msgstr "Comissão de Averbamento" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_005 @@ -2381,6 +2388,10 @@ msgid "" "credit transfers with a structured communication As a matter of principle, " "this type will also be used when no detailed data (type 6 or 7) is following." msgstr "" +"Montante foi totalizado pelo banco; por exemplo, : O montante total de uma " +"série de transferências de crédito com uma comunicação estruturada como uma " +"questão de princípio, este tipo também será usado quando nenhum dado " +"detalhado (tipo 6 ou 7) está a seguir." #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_03_37 @@ -2400,7 +2411,7 @@ msgstr "Levantamento de dinheiro pela sua filial ou agentes" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_049 msgid "Fiscal stamps/stamp duty" -msgstr "" +msgstr "Selos fiscais / imposto de selo" #. module: account_coda #: model:account.coda.trans.code,comment:account_coda.actcc_03_58 @@ -2414,7 +2425,7 @@ msgstr "" #. module: account_coda #: view:account.coda.import:0 msgid "Select Your File :" -msgstr "" +msgstr "Selecione o seu ficheiro:" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_80_06 @@ -2485,7 +2496,7 @@ msgstr "Pesquisar ficheiros CODA" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_07_52 msgid "Remittance of commercial paper - credit under usual reserve" -msgstr "" +msgstr "Remessa de papel comercial - crédito sob reserva habitual" #. module: account_coda #: help:coda.bank.account,active:0 @@ -2499,7 +2510,7 @@ msgstr "" #. module: account_coda #: model:account.coda.trans.code,comment:account_coda.actcc_07_54 msgid "Among other things advances or promissory notes" -msgstr "" +msgstr "Entre outras coisas avanços ou notas promissórias" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_80_10 @@ -2543,7 +2554,7 @@ msgstr "Para os profissionais, tais como seguros e corretores" #: model:account.coda.trans.code,comment:account_coda.actcc_80_19 msgid "" "Collected for securities, gold, pass-books, etc. placed in safe custody" -msgstr "" +msgstr "Títulos Coletados, ouro, passa-livros, etc. colocados sob custódia" #. module: account_coda #: model:account.coda.trans.code,comment:account_coda.actcc_09_19 @@ -2551,6 +2562,8 @@ msgid "" "Used in case of payments accepted under reserve of count, result of " "overcrediting" msgstr "" +"Usado no caso de pagamentos aceites com reserva de contagem, resultado sobre " +"crédito" #. module: account_coda #: code:addons/account_coda/wizard/account_coda_import.py:630 @@ -2597,7 +2610,7 @@ msgstr "Comissão para as despesas de manutenção" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_11_03 msgid "Subscription to securities" -msgstr "" +msgstr "Subscrição de valores" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_425 @@ -2659,6 +2672,7 @@ msgstr "Bonificação de juros" #: model:account.coda.trans.code,description:account_coda.actcf_41 msgid "International credit transfers - non-SEPA credit transfers" msgstr "" +"Transferências internacionais de crédito - transferências de crédito não SEPA" #. module: account_coda #: model:account.coda.trans.code,comment:account_coda.actcc_03_87 @@ -2856,6 +2870,7 @@ msgstr "" #: model:account.coda.trans.code,description:account_coda.actcf_35 msgid "Closing (periodical settlements for interest, costs,…)" msgstr "" +"Encerramento (estabelecimentos periódicos relativos aos juros, custos, ...)" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_04_51 @@ -3057,6 +3072,8 @@ msgid "" "Costs charged for calculating the amount of the tax to be paid (e.g. " "Fiscomat)." msgstr "" +"Custos cobrados para o cálculo do montante do imposto a ser pago (Fiscomat " +"por exemplo)." #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_014 @@ -3181,7 +3198,7 @@ msgstr "Subsídio" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_04_06 msgid "Payment with tank card" -msgstr "" +msgstr "Pagamento com cartão de depósito" #. module: account_coda #: model:account.coda.comm.type,description:account_coda.acct_107 @@ -3496,13 +3513,14 @@ msgstr "Licitações" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_43_07 msgid "Unpaid foreign cheque" -msgstr "" +msgstr "Cheque estrangeiro Não remunerado" #. module: account_coda #: model:account.coda.trans.code,comment:account_coda.actcc_11_03 msgid "" "Bonds, shares, tap issues of CDs, with or without payment of interest, etc." msgstr "" +"Obrigações, ações, questões de CDs, com ou sem pagamento de juros, etc" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_09_66 @@ -3512,7 +3530,7 @@ msgstr "Resgate de cupões de gasolina" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_058 msgid "Capital premium" -msgstr "" +msgstr "Prémio Capital" #. module: account_coda #: model:account.coda.trans.code,description:account_coda.actcc_11_15 @@ -3528,7 +3546,7 @@ msgstr "Moeda da contraparte" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_202 msgid "Advising commission | Additional advising commission" -msgstr "" +msgstr "Comissões da Assessoria | comissão adicional aconselhada" #. module: account_coda #: field:coda.bank.account,find_partner:0 @@ -3736,6 +3754,8 @@ msgstr "Pagamento do cheque" #: model:account.coda.trans.code,comment:account_coda.actcc_43_07 msgid "Foreign cheque remitted for collection that returns unpaid" msgstr "" +"Cheques estrangeiros remetidos para a recolha que retorna como não " +"remunerados" #. module: account_coda #: model:account.coda.trans.code,comment:account_coda.actcc_80_07 @@ -3982,7 +4002,7 @@ msgstr "Custos de ATM no estrangeiro" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_018 msgid "Tental guarantee charges" -msgstr "" +msgstr "Tental taxas de garantia" #. module: account_coda #: model:account.coda.trans.category,description:account_coda.actrca_430 diff --git a/addons/account_followup/report/account_followup_report.xml b/addons/account_followup/report/account_followup_report.xml index 6568af1c441..5ba0e147bf8 100644 --- a/addons/account_followup/report/account_followup_report.xml +++ b/addons/account_followup/report/account_followup_report.xml @@ -18,8 +18,7 @@ <field name="balance" sum="Balance"/> <field name="company_id" groups="base.group_multi_company"/> <field name="blocked" invisible="1" /> - <field name="period_id" invisible="1" /> - + <field name="period_id" invisible="1" /> </tree> </field> </record> diff --git a/addons/account_payment/account_payment_view.xml b/addons/account_payment/account_payment_view.xml index 032ef38411a..892c8636caf 100644 --- a/addons/account_payment/account_payment_view.xml +++ b/addons/account_payment/account_payment_view.xml @@ -101,16 +101,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="open" states="draft" string="Confirm Payments" /> <button name="set_done" states="open" string="Make Payments" type="object"/> <button name="set_to_draft" states="cancel" string="Set to draft" type="object"/> <button name="cancel" states="draft,open" string="Cancel"/> - <div class="oe_right"> - <field name="state" select="1" widget="statusbar" nolabel="1" statusbar_visible="draft,open"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" select="1" widget="statusbar" nolabel="1" statusbar_visible="draft,open"/> + </header> <sheet string="Payment order" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="reference"/> @@ -193,9 +190,6 @@ <field name="date_done"/> <field name="total"/> <field name="state"/> - <button name="cancel" states="draft,open" string="Cancel" icon="gtk-cancel"/> - <button name="open" states="draft" string="Confirm Payments" icon="gtk-apply"/> - <button name="set_done" states="open" string="Make Payments" type ="object" icon="gtk-execute"/> </tree> </field> </record> diff --git a/addons/account_sequence/i18n/sv.po b/addons/account_sequence/i18n/sv.po new file mode 100644 index 00000000000..cc0491fca54 --- /dev/null +++ b/addons/account_sequence/i18n/sv.po @@ -0,0 +1,220 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:35+0000\n" +"PO-Revision-Date: 2012-06-04 17:24+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n" +"X-Generator: Launchpad (build 15353)\n" + +#. module: account_sequence +#: view:account.sequence.installer:0 +#: model:ir.actions.act_window,name:account_sequence.action_account_seq_installer +msgid "Account Sequence Application Configuration" +msgstr "" + +#. module: account_sequence +#: constraint:account.move:0 +msgid "" +"You can not create more than one move per period on centralized journal" +msgstr "" + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "Company must be the same for its related account and period." +msgstr "Bolaget måste överenstämma för alla konton och perioder." + +#. module: account_sequence +#: help:account.move,internal_sequence_number:0 +#: help:account.move.line,internal_sequence_number:0 +msgid "Internal Sequence Number" +msgstr "" + +#. module: account_sequence +#: help:account.sequence.installer,number_next:0 +msgid "Next number of this sequence" +msgstr "Nästa nummer i sekvensen" + +#. module: account_sequence +#: field:account.sequence.installer,number_next:0 +msgid "Next Number" +msgstr "Nästa nummer" + +#. module: account_sequence +#: field:account.sequence.installer,number_increment:0 +msgid "Increment Number" +msgstr "Räkna upp nummer" + +#. module: account_sequence +#: help:account.sequence.installer,number_increment:0 +msgid "The next number of the sequence will be incremented by this number" +msgstr "Nästa nummer i sekvensen kommer att beräknas utgående från detta" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "Configure Your Account Sequence Application" +msgstr "" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "Configure" +msgstr "Inställningar" + +#. module: account_sequence +#: help:account.sequence.installer,suffix:0 +msgid "Suffix value of the record for the sequence" +msgstr "Suffixvärde för löpnumret" + +#. module: account_sequence +#: field:account.sequence.installer,company_id:0 +msgid "Company" +msgstr "Bolag" + +#. module: account_sequence +#: help:account.journal,internal_sequence_id:0 +msgid "" +"This sequence will be used to maintain the internal number for the journal " +"entries related to this journal." +msgstr "" + +#. module: account_sequence +#: field:account.sequence.installer,padding:0 +msgid "Number padding" +msgstr "Numerisk utfyllnad" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_move_line +msgid "Journal Items" +msgstr "Transaktioner" + +#. module: account_sequence +#: field:account.move,internal_sequence_number:0 +#: field:account.move.line,internal_sequence_number:0 +msgid "Internal Number" +msgstr "" + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "You can not create journal items on an account of type view." +msgstr "Du kan inte skapa transaktioner på rubrikkonton." + +#. module: account_sequence +#: help:account.sequence.installer,padding:0 +msgid "" +"OpenERP will automatically adds some '0' on the left of the 'Next Number' to " +"get the required padding size." +msgstr "" +"OpenERP lägger automatiskt till några '0' till vänster på 'Nästa nummer' för " +"att få rätt storlek." + +#. module: account_sequence +#: field:account.sequence.installer,name:0 +msgid "Name" +msgstr "Namn" + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "You can not create journal items on closed account." +msgstr "Du kan inte skapa transaktioner på ett stängt konto." + +#. module: account_sequence +#: constraint:account.journal:0 +msgid "" +"Configuration error! The currency chosen should be shared by the default " +"accounts too." +msgstr "" +"Konfigurationsfel! Vald valuta bör delas mellan standard-konton också." + +#. module: account_sequence +#: sql_constraint:account.move.line:0 +msgid "Wrong credit or debit value in accounting entry !" +msgstr "Fel kredit- eller debetvärde i bokföringstransaktionerna." + +#. module: account_sequence +#: field:account.journal,internal_sequence_id:0 +msgid "Internal Sequence" +msgstr "" + +#. module: account_sequence +#: help:account.sequence.installer,prefix:0 +msgid "Prefix value of the record for the sequence" +msgstr "Prefix för löpnumret" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_move +msgid "Account Entry" +msgstr "Kontotransaktion" + +#. module: account_sequence +#: field:account.sequence.installer,suffix:0 +msgid "Suffix" +msgstr "Suffix" + +#. module: account_sequence +#: field:account.sequence.installer,config_logo:0 +msgid "Image" +msgstr "Bild" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "title" +msgstr "titel" + +#. module: account_sequence +#: sql_constraint:account.journal:0 +msgid "The name of the journal must be unique per company !" +msgstr "Journalnamnet måste vara unikt per företag!" + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "" +"The selected account of your Journal Entry forces to provide a secondary " +"currency. You should remove the secondary currency on the account or select " +"a multi-currency view on the journal." +msgstr "" +"Valt konto på verifikatet tvingar fram en sekundär valuta. Du kan ta bort " +"den sekundära valutan på kontot eller välja en flervalutavy för journalen." + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "" +"The date of your Journal Entry is not in the defined period! You should " +"change the date or remove this constraint from the journal." +msgstr "" +"Verifikatsdatumet är inte inom den definierade perioden! Du bör ändra datum " +"eller ta bort denna begränsning från journalen." + +#. module: account_sequence +#: field:account.sequence.installer,prefix:0 +msgid "Prefix" +msgstr "Prefix" + +#. module: account_sequence +#: sql_constraint:account.journal:0 +msgid "The code of the journal must be unique per company !" +msgstr "Journalkoden måste vara unik per företag!" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_sequence_installer +msgid "account.sequence.installer" +msgstr "" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_journal +msgid "Journal" +msgstr "Journal" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "You can enhance the Account Sequence Application by installing ." +msgstr "" diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml index 3b33143648b..fe282138a72 100644 --- a/addons/account_voucher/account_voucher_view.xml +++ b/addons/account_voucher/account_voucher_view.xml @@ -17,7 +17,6 @@ <field name="amount" sum="Total Amount"/> <field name="audit"/> <field name="state"/> - <button name="proforma_voucher" string="Post" states="draft" icon="terp-document-new"/> </tree> </field> </record> @@ -41,16 +40,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="proforma_voucher" string="Post" states="draft"/> <button name="cancel_voucher" string="Cancel" type="object" states="posted" confirm="Are you sure to unreconcile this record?"/> <button name="cancel_voucher" string="Cancel" states="draft,proforma" /> <button name="action_cancel_draft" type="object" states="cancel" string="Set to Draft"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/> + </header> <sheet string="Accounting Voucher" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="partner_id" required="1" on_change="onchange_journal_voucher(line_ids, tax_id, amount, partner_id, journal_id, type)"/> diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index 5ceee46b2cd..6b2af93bc62 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -144,16 +144,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="proforma_voucher" string="Validate" states="draft" invisible="context.get('line_type', False)"/> <button name="cancel_voucher" string="Cancel" states="draft,proforma" invisible="context.get('line_type', False)"/> <button name="cancel_voucher" string="Unreconcile" type="object" states="posted" invisible="context.get('line_type', False)" confirm="Are you sure to unreconcile and cancel this record ?"/> <button name="action_cancel_draft" type="object" states="cancel" string="Set to Draft" invisible="context.get('line_type', False)"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/> + </header> <sheet string="Bill Payment" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="partner_id" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" context="{'invoice_currency':currency_id, 'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}" string="Supplier"/> @@ -165,8 +162,8 @@ on_change="onchange_journal(journal_id, line_dr_ids, False, partner_id, date, amount, type, company_id, context)" string="Payment Method"/> <field name="date" select="1" invisible="context.get('line_type', False)" on_change="onchange_date(date, currency_id, payment_rate_currency_id, amount, company_id, context)"/> - <field name="reference" select="1" invisible="context.get('line_type', False)" string="Payment Ref"/> - <field name="name" colspan="2" invisible="context.get('line_type', False)"/> + <field name="reference" select="1" invisible="context.get('line_type', False)" string="Payment Ref" placeholder="003/10"/> + <field name="name" colspan="2" invisible="context.get('line_type', False)" placeholder="Invoice SAJ/0042"/> <field name="company_id" widget="selection" groups="base.group_multi_company"/> <field name="account_id" widget="selection" @@ -298,16 +295,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="proforma_voucher" string="Validate" states="draft" invisible="context.get('line_type', False)"/> <button name="cancel_voucher" string="Cancel" states="draft,proforma" invisible="context.get('line_type', False)"/> <button name="cancel_voucher" string="Unreconcile" type="object" states="posted" invisible="context.get('line_type', False)" confirm="Are you sure to unreconcile and cancel this record ?"/> <button name="action_cancel_draft" type="object" states="cancel" string="Set to Draft" invisible="context.get('line_type', False)"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/> + </header> <sheet string="Customer Payment" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="partner_id" domain="[('customer','=',True)]" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/> @@ -323,8 +317,8 @@ on_change="onchange_journal(journal_id, line_cr_ids, False, partner_id, date, amount, type, company_id, context)" string="Payment Method"/> <field name="date" select="1" invisible="context.get('line_type', False)" on_change="onchange_date(date, currency_id, payment_rate_currency_id, amount, company_id, context)"/> - <field name="reference" select="1" invisible="context.get('line_type', False)" string="Payment Ref"/> - <field name="name" colspan="2" invisible="context.get('line_type', False)"/> + <field name="reference" select="1" invisible="context.get('line_type', False)" string="Payment Ref" placeholder="003/10"/> + <field name="name" colspan="2" invisible="context.get('line_type', False)" placeholder="Invoice SAJ/0042"/> <field name="company_id" widget="selection" groups="base.group_multi_company"/> <field name="account_id" widget="selection" diff --git a/addons/account_voucher/voucher_sales_purchase_view.xml b/addons/account_voucher/voucher_sales_purchase_view.xml index b3ba7c99cab..5134c55c2a8 100644 --- a/addons/account_voucher/voucher_sales_purchase_view.xml +++ b/addons/account_voucher/voucher_sales_purchase_view.xml @@ -81,17 +81,14 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="proforma_voucher" string="Validate" states="draft"/> <button name="%(act_pay_voucher)d" context="{'narration':narration, 'title':'Customer Payment', 'type':'receipt', 'partner_id':partner_id, 'reference':reference, 'amount':amount}" type="action" string="Pay" attrs="{'invisible':['|',('pay_now','=','pay_now'),'|',('state','=','draft'), ('paid','=',True)]}"/> <button name="cancel_voucher" string="Cancel" states="draft,proforma" /> <button name="cancel_voucher" string="Cancel" type="object" states="posted" confirm="Are you sure to confirm this record ?"/> <button name="action_cancel_draft" type="object" states="cancel" string="Set to Draft"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/> + </header> <sheet string="Sales Receipt" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="partner_id" domain="[('customer','=',True)]" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/> @@ -210,17 +207,14 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="proforma_voucher" string="Validate" states="draft"/> <button name="%(act_pay_bills)d" context="{'narration':narration, 'title':'Bill Payment', 'type':'payment', 'partner_id': partner_id, 'reference':reference}" type="action" string="Pay Bill" attrs="{'invisible':['|',('pay_now','=','pay_now'),'|',('state','=','draft'), ('paid','=',True)]}"/> <button name="cancel_voucher" string="Cancel" states="draft,proforma" /> <button name="cancel_voucher" string="Cancel" type="object" states="posted" confirm="Are you sure to confirm this record ?"/> <button name="action_cancel_draft" type="object" states="cancel" string="Set to Draft"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/> + </header> <sheet string="Supplier Voucher" layout="auto"> <field name="pay_now" invisible="1"/> <group col="6" colspan="4" class="oe_form_header"> diff --git a/addons/auction/i18n/pt.po b/addons/auction/i18n/pt.po new file mode 100644 index 00000000000..8ecba7f56b6 --- /dev/null +++ b/addons/auction/i18n/pt.po @@ -0,0 +1,2946 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * auction +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.0dev\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-05-31 15:15+0000\n" +"Last-Translator: ThinkOpen Solutions <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: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: auction +#: model:ir.ui.menu,name:auction.auction_report_menu +msgid "Reporting" +msgstr "Relatório" + +#. module: auction +#: model:ir.model,name:auction.model_auction_taken +msgid "Auction taken" +msgstr "Ação tomada" + +#. module: auction +#: view:auction.lots:0 +msgid "Set to draft" +msgstr "Definir como Rascunho" + +#. module: auction +#: view:auction.deposit:0 +#: field:auction.deposit,partner_id:0 +#: field:auction.lots,seller_id:0 +#: view:report.auction:0 +#: field:report.auction,seller:0 +msgid "Seller" +msgstr "Vendedor" + +#. module: auction +#: field:auction.lots,name:0 +msgid "Title" +msgstr "Título" + +#. module: auction +#: field:auction.lots.sms.send,text:0 +msgid "SMS Message" +msgstr "Mensagem SMS" + +#. module: auction +#: view:auction.catalog.flagey:0 +#: view:auction.lots.auction.move:0 +#: view:auction.lots.make.invoice.buyer:0 +msgid " " +msgstr " " + +#. module: auction +#: view:auction.lots.auction.move:0 +msgid "Warning, Erase The Object Adjudication Price and Its Buyer!" +msgstr "Atenção, apague o Preço de Adjudicação do objeto e o seu comprador!" + +#. module: auction +#: help:auction.pay.buy,statement_id1:0 +msgid "First Bank Statement For Buyer" +msgstr "Primeiro estrato bancário para o comprador" + +#. module: auction +#: field:auction.bid_line,lot_id:0 +#: field:auction.lot.history,lot_id:0 +msgid "Object" +msgstr "Objeto" + +#. module: auction +#: field:report.auction.object.date,obj_num:0 +msgid "# of Objects" +msgstr "Número de objetos" + +#. module: auction +#: view:auction.lots:0 +msgid "Authors" +msgstr "Autores" + +#. module: auction +#: view:auction.bid:0 +#: report:auction.bids:0 +#: view:auction.lots:0 +#: field:auction.lots,ach_uid:0 +#: field:auction.lots.buyer_map,ach_uid:0 +#: field:auction.lots.make.invoice.buyer,buyer_id:0 +#: field:auction.pay.buy,buyer_id:0 +#: report:buyer.list:0 +#: view:report.auction:0 +#: field:report.auction,buyer:0 +#: report:report.auction.buyer.result:0 +msgid "Buyer" +msgstr "Comprador" + +#. module: auction +#: field:report.auction,object:0 +msgid "No of objects" +msgstr "Número de objetos" + +#. module: auction +#: help:auction.lots,paid_vnd:0 +msgid "" +"When state of Seller Invoice is 'Paid', this field is selected as True." +msgstr "" +"Quando o estado da fatura da Loja é 'pago', este campo é selecionado como " +"True." + +#. module: auction +#: report:auction.total.rml:0 +msgid "# of paid items (based on invoices):" +msgstr "Número de items pagos (com base nas faturas)" + +#. module: auction +#: view:auction.deposit:0 +msgid "Deposit Border" +msgstr "Limite do Depósito" + +#. module: auction +#: field:auction.lots.make.invoice,amount:0 +#: field:auction.lots.make.invoice.buyer,amount:0 +msgid "Invoiced Amount" +msgstr "Montante Faturado" + +#. module: auction +#: help:auction.lots,name:0 +msgid "Auction object name" +msgstr "Nome do objeto leilão" + +#. module: auction +#: model:ir.model,name:auction.model_aie_category +msgid "aie.category" +msgstr "aie.category" + +#. module: auction +#: field:auction.deposit.cost,amount:0 +#: field:auction.pay.buy,amount:0 +#: field:auction.pay.buy,amount2:0 +#: field:auction.pay.buy,amount3:0 +msgid "Amount" +msgstr "Montante" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_deposit_border +#: model:ir.ui.menu,name:auction.menu_auction_deposit_border +msgid "Deposit border" +msgstr "Limite do Depósito" + +#. module: auction +#: view:auction.deposit:0 +msgid "Reference" +msgstr "Referência" + +#. module: auction +#: help:auction.dates,state:0 +msgid "" +"When auction starts the state is 'Draft'.\n" +" At the end of auction, the state becomes 'Closed'." +msgstr "" +"Quando um leilão começa, o seu estado é 'Rascunho'\n" +" No fim do leilão, o estado passa a 'Fechado'" + +#. module: auction +#: field:auction.dates,account_analytic_id:0 +msgid "Analytic Account" +msgstr "Conta Analítica" + +#. module: auction +#: help:auction.pay.buy,amount3:0 +msgid "Amount For Third Bank Statement" +msgstr "Montante para o terceiro extrato bancário" + +#. module: auction +#: view:auction.lots:0 +msgid "Buy object" +msgstr "Comprar Objeto" + +#. module: auction +#: field:auction.lots,lot_num:0 +msgid "List Number" +msgstr "Número da Lista" + +#. module: auction +#: report:buyer.list:0 +msgid "Date:" +msgstr "Data:" + +#. module: auction +#: field:auction.deposit.cost,name:0 +msgid "Cost Name" +msgstr "Nome do Custo" + +#. module: auction +#: view:auction.dates:0 +#: field:auction.dates,state:0 +#: view:auction.lots:0 +#: field:auction.lots,state:0 +#: view:report.auction:0 +#: field:report.auction,state:0 +msgid "State" +msgstr "Estado" + +#. module: auction +#: view:auction.dates:0 +msgid "First Auction Date" +msgstr "Primeira Data do Leilão" + +#. module: auction +#: selection:report.auction,month:0 +msgid "January" +msgstr "Janeiro" + +#. module: auction +#: help:auction.lot.category,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the auction " +"lot category without removing it." +msgstr "" +"Se o campo ativo é definido como Falso, ele permitirá que oculte o lote da " +"categoria leilão sem o remover." + +#. module: auction +#: view:auction.lots:0 +msgid "Ref" +msgstr "Ref" + +#. module: auction +#: field:report.auction,total_price:0 +msgid "Total Price" +msgstr "Preço Total" + +#. module: auction +#: view:auction.lots:0 +msgid "Total Adj." +msgstr "Total Adj." + +#. module: auction +#: view:auction.lots.sms.send:0 +msgid "SMS - Gateway: clickatell','Bulk SMS Send" +msgstr "" + +#. module: auction +#: help:auction.lots,costs:0 +msgid "Deposit cost" +msgstr "Custo de depósito" + +#. module: auction +#: selection:auction.lots,state:0 +#: selection:report.auction,state:0 +#: selection:report.object.encoded,state:0 +msgid "Unsold" +msgstr "Não vendido" + +#. module: auction +#: view:auction.deposit:0 +msgid "Search Auction deposit" +msgstr "Pesquisar depósito do leilão" + +#. module: auction +#: help:auction.lots,lot_num:0 +msgid "List number in depositer inventory" +msgstr "Número da lista no inventário do depósito" + +#. module: auction +#: report:auction.total.rml:0 +msgid "Items" +msgstr "Items" + +#. module: auction +#: model:account.tax,name:auction.auction_tax5 +#: field:auction.dates,seller_costs:0 +msgid "Seller Costs" +msgstr "Custos do Vendedor" + +#. module: auction +#: view:auction.bid:0 +#: view:auction.bid_line:0 +#: view:auction.lots:0 +#: field:auction.lots,bid_lines:0 +#: model:ir.actions.report.xml,name:auction.bid_auction +#: model:ir.ui.menu,name:auction.menu_action_bid_open +msgid "Bids" +msgstr "Licitações" + +#. module: auction +#: field:report.auction,gross_revenue:0 +msgid "Gross Revenue" +msgstr "Receita Bruta" + +#. module: auction +#: view:auction.lots.buyer_map:0 +msgid "Buyer Map" +msgstr "Mapa do Comprador" + +#. module: auction +#: field:report.object.encoded,obj_ret:0 +msgid "# obj ret" +msgstr "# obj ret" + +#. module: auction +#: model:ir.model,name:auction.model_auction_bid +msgid "Bid Auctions" +msgstr "Licitações" + +#. module: auction +#: help:auction.lots,image:0 +msgid "Object Image" +msgstr "Imagem do Objeto" + +#. module: auction +#: code:addons/auction/wizard/auction_lots_buyer_map.py:70 +#, python-format +msgid "No buyer is set for this lot." +msgstr "Nenhum comprador está definido para este lote." + +#. module: auction +#: code:addons/auction/auction.py:578 +#, python-format +msgid "The Buyer \"%s\" has no Invoice Address." +msgstr "O comprador \"%s\" não tem um endereço de faturação" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_auction_object_categories +msgid "Auction object Categories" +msgstr "Categorias do objeto do leilão" + +#. module: auction +#: model:ir.model,name:auction.model_auction_deposit_cost +msgid "Auction Deposit Cost" +msgstr "Custo Depósito Leilão" + +#. module: auction +#: view:auction.deposit:0 +msgid "Deposit Border Form" +msgstr "Formulário do Limite do Depósito" + +#. module: auction +#: help:auction.lots,statement_id:0 +msgid "Bank statement line for given buyer" +msgstr "Linha do Extrato Bancário para um Determinado Comprador" + +#. module: auction +#: field:auction.lot.category,aie_categ:0 +msgid "Category" +msgstr "Categoria" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_view_auction_buyer_map +msgid "Map buyer username to Partners" +msgstr "Mapa do comprador nome de utilizador para Parceiros" + +#. module: auction +#: view:auction.lots:0 +msgid "Search Auction Lots" +msgstr "Pesquisar lotes do leilão" + +#. module: auction +#: field:report.auction,net_revenue:0 +msgid "Net Revenue" +msgstr "Receita líquida" + +#. module: auction +#: field:report.auction.adjudication,state:0 +#: field:report.object.encoded,state:0 +msgid "Status" +msgstr "Estado" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_auction_lots_sms_send +msgid "SMS Send" +msgstr "Enviar SMS" + +#. module: auction +#: selection:report.auction,month:0 +msgid "August" +msgstr "Agosto" + +#. module: auction +#: view:auction.lots:0 +#: selection:auction.lots,state:0 +#: view:report.auction:0 +#: selection:report.auction,state:0 +msgid "Sold" +msgstr "Vendido" + +#. module: auction +#: selection:report.auction,month:0 +msgid "June" +msgstr "Junho" + +#. module: auction +#: code:addons/auction/wizard/auction_catalog_flagey_report.py:63 +#, python-format +msgid "No Lots belong to this Auction Date" +msgstr "Sem Lotes pertencentes a esta Data do Leilão" + +#. module: auction +#: view:auction.lots:0 +msgid "New Object" +msgstr "Novo Objeto" + +#. module: auction +#: selection:report.auction,month:0 +msgid "October" +msgstr "Outubro" + +#. module: auction +#: field:auction.bid_line,name:0 +msgid "Bid date" +msgstr "Data da Licitação" + +#. module: auction +#: field:auction.dates,acc_expense:0 +msgid "Expense Account" +msgstr "Conta de Despesas" + +#. module: auction +#: model:ir.ui.menu,name:auction.menu_wizard_emporte +msgid "Deliveries Management" +msgstr "Gestão de Entregas" + +#. module: auction +#: field:auction.lots,obj_desc:0 +msgid "Object Description" +msgstr "Descrição do Objeto" + +#. module: auction +#: field:auction.lots,artist2_id:0 +msgid "Artist/Author2" +msgstr "Artista / Autor2" + +#. module: auction +#: view:auction.pay.buy:0 +msgid "Line1" +msgstr "Linha1" + +#. module: auction +#: model:ir.model,name:auction.model_auction_lots_make_invoice_buyer +msgid "Make Invoice for Buyer" +msgstr "Criar Fatura para o Comprador" + +#. module: auction +#: field:auction.lots,gross_revenue:0 +#: field:report.object.encoded,gross_revenue:0 +msgid "Gross revenue" +msgstr "Receita Bruta" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_auction_pay_buy +msgid "Pay objects of the buyer" +msgstr "Objetos pagos pelo comprador" + +#. module: auction +#: help:auction.dates,auction2:0 +msgid "End date of auction" +msgstr "Data de fim do leilão" + +#. module: auction +#: view:auction.lots.sms.send:0 +msgid "Send SMS" +msgstr "Enviar SMS" + +#. module: auction +#: field:auction.lots,name2:0 +msgid "Short Description (2)" +msgstr "Pequena descrição (2)" + +#. module: auction +#: report:auction.total.rml:0 +#: model:ir.ui.menu,name:auction.auction_buyers_menu +msgid "Buyers" +msgstr "Compradores" + +#. module: auction +#: view:auction.lots:0 +#: view:report.auction:0 +msgid "Object Category" +msgstr "Categoria do Objeto" + +#. module: auction +#: model:account.tax.code,name:auction.account_tax_code_id4 +msgid "VAT 12%" +msgstr "IVA 12%" + +#. module: auction +#: view:auction.dates:0 +msgid "Buyer Invoices" +msgstr "Faturas de Compradores" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.res_w_buyer +msgid "Results with buyer" +msgstr "Resultados com o comprador" + +#. module: auction +#: field:auction.bid_line,price:0 +msgid "Maximum Price" +msgstr "Preço máximo" + +#. module: auction +#: help:auction.dates,auction1:0 +msgid "Start date of auction" +msgstr "Data de início do leilão" + +#. module: auction +#: model:ir.model,name:auction.model_auction_lots_auction_move +msgid "Auction Move" +msgstr "Movimento Leilão" + +#. module: auction +#: help:auction.dates,buyer_costs:0 +msgid "Account tax for buyer" +msgstr "Imposto Conta para Comprador" + +#. module: auction +#: view:auction.dates:0 +msgid "Next Auction" +msgstr "Próximo Leilão" + +#. module: auction +#: view:auction.taken:0 +msgid "Select lots which are Sold" +msgstr "Selecionar os lotes que são vendidos" + +#. module: auction +#: field:auction.lots,statement_id:0 +msgid "Payment" +msgstr "Pagamento" + +#. module: auction +#: code:addons/auction/auction.py:571 +#: code:addons/auction/auction.py:686 +#, python-format +msgid "The object \"%s\" has no buyer assigned." +msgstr "O objeto \"%s\" não tem comprador atribuído" + +#. module: auction +#: selection:auction.deposit,method:0 +msgid "Keep until sold" +msgstr "Manter até ser vendido" + +#. module: auction +#: view:auction.dates:0 +msgid "Last Auction Date" +msgstr "Data do último leilão" + +#. module: auction +#: field:report.object.encoded,obj_num:0 +msgid "# of Encoded obj." +msgstr "Número de objetos codificados" + +#. module: auction +#: field:auction.lots,paid_vnd:0 +msgid "Seller Paid" +msgstr "Vendedor Pago" + +#. module: auction +#: view:board.board:0 +#: view:report.object.encoded:0 +msgid "Objects statistics" +msgstr "Estatísticas dos Objetos" + +#. module: auction +#: report:auction.total.rml:0 +msgid "# of sellers:" +msgstr "# de vendedores" + +#. module: auction +#: field:report.auction,date:0 +#: field:report.object.encoded,date:0 +msgid "Create Date" +msgstr "Data de Criação" + +#. module: auction +#: view:auction.dates:0 +#: selection:report.object.encoded,state:0 +msgid "Invoiced" +msgstr "Faturado" + +#. module: auction +#: report:auction.total.rml:0 +msgid "# of items taken away:" +msgstr "Número de items retirados:" + +#. module: auction +#: model:ir.model,name:auction.model_report_auction +#: view:report.auction:0 +msgid "Auction's Summary" +msgstr "Resumos de Leilões" + +#. module: auction +#: report:buyer.list:0 +msgid "%)" +msgstr "%)" + +#. module: auction +#: view:auction.lots:0 +msgid "Buyer Information" +msgstr "Informação sobre o comprador" + +#. module: auction +#: help:auction.lots,gross_revenue:0 +msgid "Buyer Price - Seller Price" +msgstr "Preço Comprador - Preço Vendedor" + +#. module: auction +#: field:auction.lots.make.invoice,objects:0 +#: field:auction.lots.make.invoice.buyer,objects:0 +msgid "# of objects" +msgstr "# de objetos" + +#. module: auction +#: field:auction.lots,lot_est2:0 +msgid "Maximum Estimation" +msgstr "Estimativa máxima" + +#. module: auction +#: field:auction.lots,buyer_price:0 +msgid "Buyer price" +msgstr "Preço do Comprador" + +#. module: auction +#: view:auction.lots:0 +msgid "Bids Details" +msgstr "Pormenores das licitações" + +#. module: auction +#: field:auction.lots,is_ok:0 +msgid "Buyer's payment" +msgstr "Pagamento do Comprador" + +#. module: auction +#: view:auction.dates:0 +msgid "End of auction" +msgstr "Fim do Leilão" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_auction_catalog_flagey_wizard +#: model:ir.model,name:auction.model_auction_catalog_flagey +msgid "Auction Catalog Flagey" +msgstr "Catálogo de leilão flagey" + +#. module: auction +#: selection:report.auction,month:0 +msgid "March" +msgstr "Março" + +#. module: auction +#: model:account.tax,name:auction.auction_tax4 +msgid "Seller Costs1" +msgstr "Custos do vendedor 1" + +#. module: auction +#: field:auction.deposit,create_uid:0 +#: field:auction.lots,create_uid:0 +msgid "Created by" +msgstr "Criado por" + +#. module: auction +#: report:auction.total.rml:0 +msgid "# of buyers:" +msgstr "Número de compradores:" + +#. module: auction +#: field:auction.lots,costs:0 +msgid "Indirect costs" +msgstr "Custos indiretos" + +#. module: auction +#: help:auction.dates,seller_costs:0 +msgid "Account tax for seller" +msgstr "Imposto Conta para Vendedor" + +#. module: auction +#: code:addons/auction/wizard/auction_lots_invoice.py:67 +#: code:addons/auction/wizard/auction_lots_numerotate.py:103 +#: code:addons/auction/wizard/auction_lots_numerotate.py:129 +#, python-format +msgid "UserError" +msgstr "Erro do Utilizador" + +#. module: auction +#: field:auction.dates,journal_seller_id:0 +msgid "Seller Journal" +msgstr "Diário do Vendedor" + +#. module: auction +#: view:auction.dates:0 +#: selection:auction.dates,state:0 +#: view:auction.lots:0 +#: selection:auction.lots,state:0 +#: view:report.auction:0 +#: selection:report.auction,state:0 +#: selection:report.auction.adjudication,state:0 +#: selection:report.object.encoded,state:0 +msgid "Draft" +msgstr "Rascunho" + +#. module: auction +#: view:auction.dates:0 +msgid "Invoiced Auction" +msgstr "Leilão faturado" + +#. module: auction +#: view:auction.catalog.flagey:0 +msgid "Print" +msgstr "Imprimir" + +#. module: auction +#: view:auction.lots:0 +#: view:report.auction:0 +msgid "Type" +msgstr "Tipo" + +#. module: auction +#: help:aie.category,child_ids:0 +msgid "children aie category" +msgstr "" + +#. module: auction +#: help:auction.lots,ach_emp:0 +msgid "When state is Taken Away, this field is marked as True" +msgstr "" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_auction_taken +msgid "Gestion emporte" +msgstr "Substituição de Gestão" + +#. module: auction +#: view:auction.bid:0 +#: report:auction.bids:0 +#: view:auction.dates:0 +#: view:auction.lots:0 +#: field:auction.lots,auction_id:0 +#: report:auction.total.rml:0 +#: model:ir.module.category,name:auction.module_category_auction +#: model:ir.ui.menu,name:auction.auction_menu_root +#: view:report.auction:0 +msgid "Auction" +msgstr "Leilão" + +#. module: auction +#: view:auction.lot.category:0 +#: model:ir.ui.menu,name:auction.menu_auction_object_cat +msgid "Object Categories" +msgstr "Categoria de objetos" + +#. module: auction +#: field:auction.lots.sms.send,app_id:0 +msgid "API ID" +msgstr "ID da API" + +#. module: auction +#: field:auction.bid,name:0 +#: field:auction.bid_line,bid_id:0 +msgid "Bid ID" +msgstr "ID da licitação" + +#. module: auction +#: report:auction.total.rml:0 +msgid "Min Estimate:" +msgstr "Estimativa mínima:" + +#. module: auction +#: selection:report.auction,month:0 +msgid "September" +msgstr "Setembro" + +#. module: auction +#: field:report.auction,net_margin:0 +msgid "Net Margin" +msgstr "Margem líquida" + +#. module: auction +#: field:auction.lots,vnd_lim_net:0 +msgid "Net limit ?" +msgstr "Net Limite?" + +#. module: auction +#: field:aie.category,child_ids:0 +msgid "unknown" +msgstr "desconhecido" + +#. module: auction +#: report:auction.total.rml:0 +msgid "# of commissions:" +msgstr "Número de comissões" + +#. module: auction +#: field:auction.bid_line,auction:0 +#: field:auction.dates,name:0 +msgid "Auction Name" +msgstr "Nome do Leilão" + +#. module: auction +#: model:account.tax,name:auction.tax_seller +msgid "Seller Costs (12%)" +msgstr "Custos Vendedor (12%)" + +#. module: auction +#: field:aie.category,parent_id:0 +msgid "Parent aie Category" +msgstr "" + +#. module: auction +#: view:report.auction:0 +msgid "Auction Summary" +msgstr "Resumo do leilão" + +#. module: auction +#: view:auction.lots.make.invoice:0 +#: view:auction.lots.make.invoice.buyer:0 +msgid "(Keep empty for automatic number)" +msgstr "(Manter vazio para numerar automaticamente)" + +#. module: auction +#: code:addons/auction/auction.py:578 +#, python-format +msgid "No Invoice Address" +msgstr "Sem endereço de faturação" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.v_huissier +msgid "Bailiffs Listing" +msgstr "Listagem de oficiais de justiça" + +#. module: auction +#: code:addons/auction/wizard/auction_lots_numerotate.py:103 +#: code:addons/auction/wizard/auction_lots_numerotate.py:129 +#, python-format +msgid "This record does not exist !" +msgstr "Este registo não existe!" + +#. module: auction +#: field:auction.pay.buy,total:0 +msgid "Total Amount" +msgstr "Montante total" + +#. module: auction +#: help:auction.pay.buy,amount:0 +msgid "Amount For First Bank Statement" +msgstr "Montante para primeiro extrato bancário" + +#. module: auction +#: model:ir.model,name:auction.model_report_auction_object_date +#: view:report.auction.object.date:0 +msgid "Objects per day" +msgstr "Objetos, por dia" + +#. module: auction +#: help:auction.lots,author_right:0 +msgid "Account tax for author commission" +msgstr "" + +#. module: auction +#: model:product.template,name:auction.monproduit_product_template +msgid "Oeuvres a 21%" +msgstr "Obras a 21%" + +#. module: auction +#: field:report.object.encoded,adj:0 +msgid "Adj." +msgstr "Adj." + +#. module: auction +#: field:auction.lot.history,name:0 +#: field:report.auction.adjudication,date:0 +msgid "Date" +msgstr "Data" + +#. module: auction +#: field:auction.lots,obj_ret:0 +msgid "Price retired" +msgstr "Preço retirado" + +#. module: auction +#: view:auction.deposit:0 +msgid "Extra Costs" +msgstr "Custos extras" + +#. module: auction +#: view:auction.lots.buyer_map:0 +msgid "Map " +msgstr "Mapa " + +#. module: auction +#: field:auction.lots,paid_ach:0 +msgid "Buyer Invoice Reconciled" +msgstr "Fatura de comprador reconciliada" + +#. module: auction +#: field:auction.deposit,date_dep:0 +msgid "Deposit date" +msgstr "Data de depósito" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.id_deposit +msgid "Deposits" +msgstr "Depósitos" + +#. module: auction +#: field:auction.deposit,specific_cost_ids:0 +msgid "Specific Costs" +msgstr "Custos específicos" + +#. module: auction +#: report:buyer.list:0 +msgid "To pay (" +msgstr "Para pagar (" + +#. module: auction +#: model:account.tax,name:auction.tax_buyer +msgid "Buyer Costs (20%)" +msgstr "Custos Comprador (20%)" + +#. module: auction +#: model:ir.ui.menu,name:auction.menu_board_auction +msgid "Dashboard" +msgstr "Painel de Controlo" + +#. module: auction +#: view:auction.dates:0 +#: model:ir.actions.act_window,name:auction.action_auction_dates_next +#: model:ir.ui.menu,name:auction.auction_date_menu +#: model:ir.ui.menu,name:auction.menu_auction_dates_next1 +msgid "Auctions" +msgstr "Leilões" + +#. module: auction +#: view:board.board:0 +msgid "Total Adjudications" +msgstr "Adjudicação Total" + +#. module: auction +#: model:ir.model,name:auction.model_auction_lots_make_invoice +msgid "Make invoice" +msgstr "Criar Fatura" + +#. module: auction +#: selection:report.auction,month:0 +msgid "November" +msgstr "Novembro" + +#. module: auction +#: view:auction.dates:0 +#: view:auction.lots:0 +msgid "History" +msgstr "Histórico" + +#. module: auction +#: field:aie.category,code:0 +msgid "Code" +msgstr "Código" + +#. module: auction +#: report:auction.code_bar_lot:0 +msgid "Nr." +msgstr "Nº" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.v_report_barcode_lot +msgid "Barcode batch" +msgstr "Código de Barras do Lote" + +#. module: auction +#: report:report.auction.buyer.result:0 +msgid "Num" +msgstr "Nº" + +#. module: auction +#: view:auction.catalog.flagey:0 +#: view:auction.taken:0 +msgid "Cancel" +msgstr "Cancelar" + +#. module: auction +#: view:auction.lots:0 +msgid "Buyer's Payment History" +msgstr "Histórico de Pagamento do Comprador" + +#. module: auction +#: view:auction.artists:0 +#: field:auction.artists,biography:0 +msgid "Biography" +msgstr "Biografia" + +#. module: auction +#: view:auction.lots:0 +msgid "Inventory" +msgstr "Inventário" + +#. module: auction +#: view:auction.pay.buy:0 +msgid "Pay" +msgstr "Pagar" + +#. module: auction +#: view:auction.lots.make.invoice:0 +msgid "Create Invoices for Seller" +msgstr "Criar faturas para o vendedor" + +#. module: auction +#: field:report.object.encoded,obj_margin:0 +msgid "Net margin" +msgstr "Margem líquida" + +#. module: auction +#: help:auction.lots,lot_local:0 +msgid "Auction Location" +msgstr "Local do leilão" + +#. module: auction +#: view:auction.dates:0 +msgid "Analytic" +msgstr "Analítica" + +#. module: auction +#: help:auction.lots,paid_ach:0 +msgid "" +"When state of Buyer Invoice is 'Paid', this field is selected as True." +msgstr "" +"Quando o estado da fatura do Comprador está 'Pago', este campo é selecionado " +"como True." + +#. module: auction +#: report:bids.lots:0 +#: report:bids.phones.details:0 +msgid "Cat.N" +msgstr "Cat.N" + +#. module: auction +#: selection:auction.deposit,method:0 +msgid "Decrease limit of 10%" +msgstr "Diminuição limite de 10%" + +#. module: auction +#: field:auction.dates,adj_total:0 +#: field:report.auction.adjudication,adj_total:0 +msgid "Total Adjudication" +msgstr "Adjudicação total" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_auction_lots_make_invoice_buyer +msgid "Invoice Buyer objects" +msgstr "Fatura de objetos comprados" + +#. module: auction +#: view:report.auction:0 +msgid "My Auction" +msgstr "O meu leilão" + +#. module: auction +#: help:auction.lots,gross_margin:0 +msgid "(Gross Revenue*100.0)/ Object Price" +msgstr "" + +#. module: auction +#: field:auction.bid,contact_tel:0 +msgid "Contact Number" +msgstr "Número para contato" + +#. module: auction +#: view:auction.lots:0 +msgid "Price" +msgstr "Preço" + +#. module: auction +#: report:bids.phones.details:0 +msgid "-" +msgstr "-" + +#. module: auction +#: view:auction.deposit:0 +msgid "Photos" +msgstr "Fotos" + +#. module: auction +#: field:auction.lots.make.invoice,number:0 +#: field:auction.lots.make.invoice.buyer,number:0 +msgid "Invoice Number" +msgstr "Número de Fatura" + +#. module: auction +#: code:addons/auction/wizard/auction_lots_buyer_map.py:87 +#: code:addons/auction/wizard/auction_lots_numerotate.py:77 +#: code:addons/auction/wizard/auction_lots_numerotate.py:95 +#: code:addons/auction/wizard/auction_lots_numerotate.py:122 +#: code:addons/auction/wizard/auction_lots_numerotate.py:137 +#: code:addons/auction/wizard/auction_lots_numerotate.py:173 +#, python-format +msgid "Active IDs not Found" +msgstr "IDs ativos não encontrados" + +#. module: auction +#: code:addons/auction/wizard/auction_aie_send.py:166 +#: code:addons/auction/wizard/auction_aie_send_result.py:117 +#, python-format +msgid "Connection to WWW.Auction-in-Europe.com failed !" +msgstr "A ligação a www.action-in-europe.com falhou!" + +#. module: auction +#: model:ir.actions.act_window,name:auction.act_auction_lot_open_bid +#: model:ir.actions.act_window,name:auction.action_bid_open +msgid "Open Bids" +msgstr "Licitações abertas" + +#. module: auction +#: model:ir.actions.act_window,name:auction.open_board_auction +msgid "Auction board" +msgstr "" + +#. module: auction +#: field:aie.category,name:0 +#: view:auction.artists:0 +#: report:bids.lots:0 +msgid "Name" +msgstr "Nome" + +#. module: auction +#: field:auction.deposit,name:0 +#: view:auction.lots:0 +#: field:auction.lots,bord_vnd_id:0 +msgid "Depositer Inventory" +msgstr "Inventório do Depósito" + +#. module: auction +#: code:addons/auction/auction.py:692 +#, python-format +msgid "The Buyer has no Invoice Address." +msgstr "O comprador não tem endereço de faturação." + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_report_auction_adjudication_tree +msgid "Auction Adjudication Report" +msgstr "" + +#. module: auction +#: field:auction.lots.sms.send,user:0 +msgid "Login" +msgstr "Iniciar sessão" + +#. module: auction +#: model:ir.model,name:auction.model_report_auction_adjudication +msgid "report_auction_adjudication" +msgstr "report_auction_adjudication" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.seller_lots_3 +msgid "Seller Form" +msgstr "Formulário do Vendedor" + +#. module: auction +#: field:auction.lots,lot_type:0 +#: field:report.auction,lot_type:0 +msgid "Object category" +msgstr "Categoria do objeto" + +#. module: auction +#: view:auction.taken:0 +msgid "Mark Lots" +msgstr "Marca de Lotes" + +#. module: auction +#: model:ir.model,name:auction.model_auction_lots +msgid "Auction Object" +msgstr "Ação Objeto" + +#. module: auction +#: field:auction.lots,obj_num:0 +#: field:auction.lots.enable,confirm_en:0 +msgid "Catalog Number" +msgstr "Número de catálogo" + +#. module: auction +#: view:auction.dates:0 +msgid "Accounting" +msgstr "Contabilidade" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.bid_phone +msgid "Bids phones" +msgstr "Oferta de telefones" + +#. module: auction +#: field:report.auction,avg_estimation:0 +msgid "Avg estimation" +msgstr "Estimativa média" + +#. module: auction +#: report:auction.total.rml:0 +msgid "Debit:" +msgstr "Débito:" + +#. module: auction +#: code:addons/auction/wizard/auction_aie_send.py:166 +#: code:addons/auction/wizard/auction_aie_send_result.py:116 +#: code:addons/auction/wizard/auction_lots_buyer_map.py:70 +#: code:addons/auction/wizard/auction_lots_numerotate.py:145 +#, python-format +msgid "Error" +msgstr "Erro" + +#. module: auction +#: field:auction.lots,author_right:0 +msgid "Author rights" +msgstr "Direitos de autor" + +#. module: auction +#: view:auction.bid:0 +#: view:auction.dates:0 +#: view:auction.deposit:0 +#: view:auction.lots:0 +#: view:report.auction:0 +msgid "Group By..." +msgstr "Agrupar por..." + +#. module: auction +#: view:report.auction:0 +msgid "Auction during last month." +msgstr "Leilão durante o último mês." + +#. module: auction +#: help:auction.dates,journal_id:0 +msgid "Account journal for buyer" +msgstr "Diário da conta para o comprador" + +#. module: auction +#: field:auction.bid,bid_lines:0 +#: report:auction.bids:0 +#: report:bids.lots:0 +#: model:ir.model,name:auction.model_auction_bid_line +msgid "Bid" +msgstr "Licitação" + +#. module: auction +#: view:report.object.encoded:0 +msgid "Total net rev." +msgstr "Receita líquida total" + +#. module: auction +#: view:auction.lots.buyer_map:0 +msgid "Update" +msgstr "Atualizar" + +#. module: auction +#: report:auction.total.rml:0 +#: model:ir.ui.menu,name:auction.auction_seller_menu +msgid "Sellers" +msgstr "Vendedores" + +#. module: auction +#: view:auction.dates:0 +msgid "Draft Auction" +msgstr "Rascunho Leilão" + +#. module: auction +#: help:auction.lots,lot_est2:0 +msgid "Maximum Estimate Price" +msgstr "Preço máximo estimado" + +#. module: auction +#: view:auction.lots:0 +msgid "Notes" +msgstr "Notas" + +#. module: auction +#: view:auction.lots.auction.move:0 +msgid "Move to Auction date" +msgstr "Mudar para data de Leilão" + +#. module: auction +#: report:auction.total.rml:0 +msgid "# of unsold items:" +msgstr "Número de items por vender" + +#. module: auction +#: view:auction.dates:0 +msgid "Create Invoices" +msgstr "Criar Faturas" + +#. module: auction +#: field:auction.bid,auction_id:0 +#: view:auction.dates:0 +#: field:auction.lots.auction.move,auction_id:0 +msgid "Auction Date" +msgstr "Data de leilão" + +#. module: auction +#: report:auction.code_bar_lot:0 +msgid ", ID" +msgstr ", ID" + +#. module: auction +#: report:buyer.list:0 +msgid "Adj.(" +msgstr "" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.lot_list_inv +msgid "Lots List - Landscape" +msgstr "Lista de Lotes (na horizontal)" + +#. module: auction +#: view:auction.artists:0 +msgid "Author/Artist" +msgstr "Autor / Artista" + +#. module: auction +#: field:auction.lots,ach_login:0 +#: field:auction.lots.buyer_map,ach_login:0 +msgid "Buyer Username" +msgstr "Nome de utilizador do comprador" + +#. module: auction +#: field:auction.lot.category,priority:0 +msgid "Priority" +msgstr "Prioridade" + +#. module: auction +#: view:board.board:0 +#: model:ir.actions.act_window,name:auction.action_report_latest_objects_tree +msgid "Latest objects" +msgstr "Objetos mais recentes" + +#. module: auction +#: field:auction.lots,lot_local:0 +msgid "Location" +msgstr "Localização" + +#. module: auction +#: view:report.auction:0 +msgid "Month -1" +msgstr "Mês -1" + +#. module: auction +#: help:auction.lots,is_ok:0 +msgid "When buyer pay for bank statement', this field is marked" +msgstr "" +"Quando o comprador pagar por extrato bancário', este campo está marcado" + +#. module: auction +#: field:auction.lots,ach_emp:0 +msgid "Taken Away" +msgstr "Retirados" + +#. module: auction +#: view:report.object.encoded:0 +msgid "Total gross rev." +msgstr "Receita bruta total" + +#. module: auction +#: help:auction.lots,lot_est1:0 +msgid "Minimum Estimate Price" +msgstr "Preço mínimo estimado" + +#. module: auction +#: view:auction.deposit:0 +msgid "Deposit Date" +msgstr "Data do Depósito" + +#. module: auction +#: code:addons/auction/wizard/auction_lots_numerotate.py:145 +#, python-format +msgid "This lot does not exist !" +msgstr "Este lote não existe !" + +#. module: auction +#: selection:report.auction,month:0 +msgid "July" +msgstr "Julho" + +#. module: auction +#: field:auction.bid_line,call:0 +msgid "To be Called" +msgstr "Para ser Cancelado" + +#. module: auction +#: view:auction.lots:0 +#: model:ir.actions.act_window,name:auction.action_report_auction_lots_estimation_adj_category_tree +msgid "Min est/Adj/Max est" +msgstr "Estimativa mínima/Preço de adjudicação/Estimativa máxima" + +#. module: auction +#: field:auction.lots,lot_est1:0 +msgid "Minimum Estimation" +msgstr "Estimativa mínima" + +#. module: auction +#: model:ir.model,name:auction.model_auction_lots_sms_send +msgid "Sms send " +msgstr "Enviar SMS " + +#. module: auction +#: view:auction.lots.auction.move:0 +#: model:ir.actions.act_window,name:auction.action_auction_lots_auction_move +msgid "Change Auction Date" +msgstr "Mudar data de leilão" + +#. module: auction +#: field:auction.artists,birth_death_dates:0 +msgid "Lifespan" +msgstr "Período de validade" + +#. module: auction +#: view:auction.deposit:0 +#: field:auction.deposit,method:0 +msgid "Withdrawned method" +msgstr "Método de Arrebatamento" + +#. module: auction +#: view:auction.dates:0 +msgid "Buyer Commissions" +msgstr "Comissões Comprador" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_report_auction +#: model:ir.ui.menu,name:auction.menu_report_auction +msgid "Auction Analysis" +msgstr "Análise Leilão" + +#. module: auction +#: code:addons/auction/wizard/auction_pay_buy.py:80 +#, python-format +msgid "Payment aborted !" +msgstr "Pagamento Cancelado !" + +#. module: auction +#: field:auction.lot.history,price:0 +msgid "Withdrawn price" +msgstr "Preço Final" + +#. module: auction +#: view:auction.dates:0 +msgid "Beginning of the auction" +msgstr "Inicio do leilão" + +#. module: auction +#: help:auction.pay.buy,statement_id3:0 +msgid "Third Bank Statement For Buyer" +msgstr "" + +#. module: auction +#: view:report.auction:0 +#: field:report.auction,month:0 +#: field:report.auction.object.date,month:0 +msgid "Month" +msgstr "Mês" + +#. module: auction +#: report:auction.total.rml:0 +msgid "Max Estimate:" +msgstr "Estimativa máxima" + +#. module: auction +#: view:auction.lots:0 +msgid "Statistical" +msgstr "Estatística" + +#. module: auction +#: model:ir.model,name:auction.model_auction_deposit +msgid "Auction Deposit Border" +msgstr "" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_report_object_encoded_tree +msgid "Object statistics" +msgstr "Estatísticas do Objeto" + +#. module: auction +#: help:auction.lots,net_margin:0 +msgid "(Net Revenue * 100)/ Object Price" +msgstr "(Receita líquida * 100) / Preço do objeto" + +#. module: auction +#: model:ir.model,name:auction.model_auction_lot_history +msgid "Lot History" +msgstr "Histórico do Lote" + +#. module: auction +#: view:auction.lots.make.invoice:0 +#: view:auction.lots.make.invoice.buyer:0 +msgid "Create invoices" +msgstr "Criar Faturas" + +#. module: auction +#: model:account.tax.code,name:auction.account_tax_code_id5 +msgid "VAT 5%" +msgstr "IVA 5%" + +#. module: auction +#: model:ir.model,name:auction.model_auction_lots_buyer_map +msgid "Map Buyer" +msgstr "" + +#. module: auction +#: report:buyer.list:0 +msgid "Lot" +msgstr "Lote" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_report_auction_object_date_tree +msgid "Auction Object Date" +msgstr "Data da ação do objeto" + +#. module: auction +#: model:ir.model,name:auction.model_auction_artists +msgid "auction.artists" +msgstr "auction.artists" + +#. module: auction +#: field:report.auction,avg_price:0 +msgid "Avg Price." +msgstr "Preço médio" + +#. module: auction +#: help:auction.pay.buy,statement_id2:0 +msgid "Second Bank Statement For Buyer" +msgstr "" + +#. module: auction +#: field:auction.dates,journal_id:0 +msgid "Buyer Journal" +msgstr "Diário do Comprador" + +#. module: auction +#: selection:auction.lots,state:0 +#: selection:report.object.encoded,state:0 +msgid "Paid" +msgstr "Pago" + +#. module: auction +#: report:bids.lots:0 +#: report:bids.phones.details:0 +msgid "Phone" +msgstr "Telefone" + +#. module: auction +#: field:auction.lot.category,active:0 +msgid "Active" +msgstr "Ativo" + +#. module: auction +#: view:auction.dates:0 +msgid "Exposition Dates" +msgstr "" + +#. module: auction +#: model:account.tax,name:auction.auction_tax1 +msgid "TVA" +msgstr "IVA" + +#. module: auction +#: field:auction.lots,important:0 +msgid "To be Emphatized" +msgstr "Para realçar" + +#. module: auction +#: report:buyer.list:0 +msgid "Total:" +msgstr "Total:" + +#. module: auction +#: model:account.tax,name:auction.auction_tax2 +msgid "TVA1" +msgstr "IVA 1" + +#. module: auction +#: view:report.auction.object.date:0 +msgid "Objects per Day" +msgstr "Objetos por Dia" + +#. module: auction +#: field:auction.dates,seller_invoice_history:0 +#: field:auction.lots,sel_inv_id:0 +#: view:auction.lots.make.invoice:0 +msgid "Seller Invoice" +msgstr "Fatura do comprador" + +#. module: auction +#: view:board.board:0 +msgid "Objects by day" +msgstr "Objetos por dia" + +#. module: auction +#: help:auction.dates,expo2:0 +msgid "Last exposition date for auction" +msgstr "" + +#. module: auction +#: code:addons/auction/auction.py:571 +#: code:addons/auction/auction.py:686 +#, python-format +msgid "Missed buyer !" +msgstr "Perdeu Comprador !" + +#. module: auction +#: report:auction.code_bar_lot:0 +msgid "Flagey" +msgstr "Flagey" + +#. module: auction +#: view:board.board:0 +msgid "Auction manager " +msgstr "Gestor de leilão " + +#. module: auction +#: code:addons/auction/wizard/auction_lots_invoice.py:67 +#, python-format +msgid "" +"Two different buyers for the same invoice !\n" +"Please correct this problem before invoicing" +msgstr "" +"Dois compradores diferentes para a mesma fatura!\n" +"Por favor, corrija este problema antes da faturação" + +#. module: auction +#: view:auction.dates:0 +msgid "Invoice" +msgstr "Fatura" + +#. module: auction +#: view:auction.dates:0 +msgid "Commissions" +msgstr "Comissões" + +#. module: auction +#: field:auction.lots,vnd_lim:0 +msgid "Seller limit" +msgstr "Limite de Vendedores" + +#. module: auction +#: field:auction.deposit,transfer:0 +msgid "Transfer" +msgstr "Transferência" + +#. module: auction +#: view:auction.pay.buy:0 +msgid "Line3" +msgstr "Linha3" + +#. module: auction +#: view:auction.pay.buy:0 +msgid "Line2" +msgstr "Linha2" + +#. module: auction +#: help:auction.lots,obj_ret:0 +msgid "Object Ret" +msgstr "" + +#. module: auction +#: view:report.auction.adjudication:0 +msgid "Total adjudication" +msgstr "Adjudicação Total" + +#. module: auction +#: selection:auction.deposit,method:0 +msgid "Contact the Seller" +msgstr "Contate o Vendedor" + +#. module: auction +#: field:auction.taken,lot_ids:0 +msgid "Lots Emportes" +msgstr "Importação de Lotes" + +#. module: auction +#: field:auction.lots,net_margin:0 +msgid "Net Margin (%)" +msgstr "Margem líquida (%)" + +#. module: auction +#: field:auction.lots,product_id:0 +msgid "Product" +msgstr "Artigo" + +#. module: auction +#: report:buyer.list:0 +msgid ")" +msgstr ")" + +#. module: auction +#: view:auction.lots:0 +msgid "Seller Information" +msgstr "Informação sobre o vendedor" + +#. module: auction +#: view:auction.deposit:0 +#: field:auction.deposit,lot_id:0 +#: view:auction.lots:0 +#: model:ir.actions.act_window,name:auction.action_all_objects +#: model:ir.ui.menu,name:auction.auction_all_objects_menu +msgid "Objects" +msgstr "Objetos" + +#. module: auction +#: view:auction.dates:0 +msgid "Seller Invoices" +msgstr "Faturas de vendedor" + +#. module: auction +#: report:auction.total.rml:0 +msgid "Paid:" +msgstr "Pago:" + +#. module: auction +#: field:auction.deposit,total_neg:0 +msgid "Allow Negative Amount" +msgstr "Permitir um montante negativo" + +#. module: auction +#: help:auction.pay.buy,amount2:0 +msgid "Amount For Second Bank Statement" +msgstr "" + +#. module: auction +#: field:auction.lot.history,auction_id:0 +#: field:report.auction,auction:0 +#: field:report.auction.adjudication,name:0 +msgid "Auction date" +msgstr "Data de leilão" + +#. module: auction +#: view:auction.lots.sms.send:0 +msgid "SMS Text" +msgstr "Texto do SMS" + +#. module: auction +#: field:auction.dates,auction1:0 +msgid "First Auction Day" +msgstr "Primeiro Dia de Leilão" + +#. module: auction +#: view:auction.lots.make.invoice.buyer:0 +msgid "Create Invoices for Buyer" +msgstr "Criar faturas para o comprador" + +#. module: auction +#: model:res.groups,name:auction.group_auction_manager +msgid "Manager" +msgstr "Gestor" + +#. module: auction +#: view:auction.dates:0 +msgid "Names" +msgstr "Nomes" + +#. module: auction +#: view:auction.artists:0 +#: model:ir.ui.menu,name:auction.menu_auction_artist +msgid "Artists" +msgstr "Artistas" + +#. module: auction +#: view:auction.pay.buy:0 +msgid "Pay Objects" +msgstr "Pagar objetos" + +#. module: auction +#: help:auction.dates,expo1:0 +msgid "Beginning exposition date for auction" +msgstr "A partir da data de exposição para leilão" + +#. module: auction +#: model:ir.actions.act_window,name:auction.act_auction_lot_line_open +msgid "Open lots" +msgstr "Lotes Abertos" + +#. module: auction +#: model:ir.actions.act_window,name:auction.act_auction_lot_open_deposit +msgid "Deposit slip" +msgstr "" + +#. module: auction +#: model:ir.model,name:auction.model_auction_lots_enable +msgid "Lots Enable" +msgstr "" + +#. module: auction +#: view:auction.lots:0 +msgid "Lots" +msgstr "Lotes" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_auction_artist +msgid "Auction Artists" +msgstr "" + +#. module: auction +#: field:auction.lots,seller_price:0 +msgid "Seller price" +msgstr "Preço do Vendedor" + +#. module: auction +#: model:account.tax,name:auction.auction_tax20 +msgid "Frais de vente0" +msgstr "" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.buy_id_list +msgid "Buyer List" +msgstr "Lista de Comprador" + +#. module: auction +#: report:buyer.list:0 +msgid "Buyer costs(" +msgstr "Custos do Comprador(" + +#. module: auction +#: field:auction.pay.buy,statement_id1:0 +#: field:auction.pay.buy,statement_id2:0 +#: field:auction.pay.buy,statement_id3:0 +msgid "Statement" +msgstr "Extrato" + +#. module: auction +#: help:auction.lots,seller_price:0 +#: help:auction.lots.make.invoice,amount:0 +msgid "Seller Price" +msgstr "Preço Vendedor" + +#. module: auction +#: model:account.tax,name:auction.auction_tax6 +msgid "Frais de vente" +msgstr "Taxas de Vendas" + +#. module: auction +#: model:account.tax.code,name:auction.account_tax_code_id1 +msgid "VAT 1%" +msgstr "IVA 1%" + +#. module: auction +#: model:account.tax,name:auction.auction_tax +msgid "Droit d'auteur" +msgstr "Direitos de autor" + +#. module: auction +#: field:auction.dates,expo1:0 +msgid "First Exposition Day" +msgstr "Primeiro Dia de Exposição" + +#. module: auction +#: field:report.auction.object.date,name:0 +msgid "Created date" +msgstr "Data Criada" + +#. module: auction +#: help:auction.lots,bord_vnd_id:0 +msgid "" +"Provide deposit information: seller, Withdrawned Method, Object, Deposit " +"Costs" +msgstr "" + +#. module: auction +#: field:auction.lots,net_revenue:0 +#: field:report.object.encoded,net_revenue:0 +msgid "Net revenue" +msgstr "Receitas líquidas" + +#. module: auction +#: code:addons/auction/wizard/auction_catalog_flagey_report.py:63 +#: code:addons/auction/wizard/auction_pay_buy.py:89 +#, python-format +msgid "Error!" +msgstr "Erro !" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_report_latest_doposit_tree +msgid "Latest Deposits" +msgstr "Últimos Depósitos" + +#. module: auction +#: report:auction.total.rml:0 +msgid "# of items:" +msgstr "Número de items" + +#. module: auction +#: model:account.tax,name:auction.tax_buyer_author +msgid "Author rights (4%)" +msgstr "Direitos de autor (4%)" + +#. module: auction +#: field:report.object.encoded,estimation:0 +msgid "Estimation" +msgstr "Estimativa" + +#. module: auction +#: view:auction.taken:0 +msgid "OK" +msgstr "OK" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.buyer_form_id +msgid "Buyer Form" +msgstr "Formulário do Comprador" + +#. module: auction +#: field:auction.bid,partner_id:0 +msgid "Buyer Name" +msgstr "Nome do comprador" + +#. module: auction +#: view:report.auction:0 +#: field:report.auction,day:0 +msgid "Day" +msgstr "Dia" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_auction_lots_make_invoice +msgid "Invoice Seller objects" +msgstr "Faturas de Objetos Vendidos" + +#. module: auction +#: field:auction.lots,gross_margin:0 +msgid "Gross Margin (%)" +msgstr "Margem bruta (%)" + +#. module: auction +#: selection:auction.dates,state:0 +#: selection:report.auction.adjudication,state:0 +msgid "Closed" +msgstr "Encerrado" + +#. module: auction +#: view:auction.dates:0 +msgid "Search Next Auction Dates" +msgstr "Procurar próximas datas de leilões" + +#. module: auction +#: view:auction.catalog.flagey:0 +msgid "Print Auction Catalog Flagey Report..." +msgstr "" + +#. module: auction +#: field:auction.lots,ach_avance:0 +msgid "Buyer Advance" +msgstr "Adiantamento do Comprador" + +#. module: auction +#: field:auction.lots,obj_comm:0 +msgid "Commission" +msgstr "Comissão" + +#. module: auction +#: view:board.board:0 +msgid "Min/Adj/Max" +msgstr "Min/adj/Max" + +#. module: auction +#: view:auction.catalog.flagey:0 +msgid "Catalog Flagey Report" +msgstr "" + +#. module: auction +#: help:auction.lots,obj_price:0 +msgid "Object Price" +msgstr "Preço do objeto" + +#. module: auction +#: view:auction.bid:0 +msgid "Bids Lines" +msgstr "" + +#. module: auction +#: view:auction.lots:0 +msgid "Catalog" +msgstr "Catálogo" + +#. module: auction +#: help:auction.lots,auction_id:0 +msgid "Auction for object" +msgstr "Leilão por objeto" + +#. module: auction +#: field:auction.deposit.cost,account:0 +msgid "Destination Account" +msgstr "Conta de destino" + +#. module: auction +#: model:ir.ui.menu,name:auction.auction_config_menu +msgid "Configuration" +msgstr "Configuração" + +#. module: auction +#: model:ir.actions.act_window,name:auction.action_report_auction_object_date_tree_my +msgid "My Auction Object Date" +msgstr "" + +#. module: auction +#: code:addons/auction/wizard/auction_pay_buy.py:80 +#, python-format +msgid "" +"You should pay all the total: \"%.2f\" are missing to accomplish the payment." +msgstr "" +"Deve pagar a totalidade: \"%.2f\" estão em falta para realizar o pagamento." + +#. module: auction +#: model:ir.model,name:auction.model_auction_pay_buy +msgid "Pay buy" +msgstr "Pagar Compra" + +#. module: auction +#: model:ir.ui.menu,name:auction.auction_outils_menu +msgid "Tools Bar Codes" +msgstr "Ferramenta do Código de Barras" + +#. module: auction +#: field:auction.deposit.cost,deposit_id:0 +msgid "Deposit" +msgstr "Depósito" + +#. module: auction +#: field:auction.dates,expo2:0 +msgid "Last Exposition Day" +msgstr "Último Dia de Exposição" + +#. module: auction +#: model:ir.model,name:auction.model_auction_lots_able +msgid "Lots able" +msgstr "" + +#. module: auction +#: model:account.tax.code,name:auction.account_tax_code_id3 +msgid "VAT 10%" +msgstr "IVA 10%" + +#. module: auction +#: field:auction.artists,name:0 +msgid "Artist/Author Name" +msgstr "Artista/Nome do Autor" + +#. module: auction +#: selection:report.auction,month:0 +msgid "December" +msgstr "Dezembro" + +#. module: auction +#: view:auction.deposit:0 +#: field:auction.lots,image:0 +msgid "Image" +msgstr "Imagem" + +#. module: auction +#: help:auction.lots,buyer_price:0 +#: help:auction.lots.make.invoice.buyer,amount:0 +msgid "Buyer Price" +msgstr "Preço Comprador" + +#. module: auction +#: model:ir.model,name:auction.model_auction_lot_category +msgid "Auction Lots Category" +msgstr "" + +#. module: auction +#: model:account.tax.code,name:auction.account_tax_code_id2 +msgid "VAT 20%" +msgstr "IVA 20%" + +#. module: auction +#: model:ir.model,name:auction.model_auction_payer_sel +msgid "Auction payment for seller" +msgstr "" + +#. module: auction +#: view:auction.lots:0 +#: selection:auction.lots,state:0 +msgid "Taken away" +msgstr "Retirado" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.seller_form_id +msgid "Seller List" +msgstr "Lista de vendedores" + +#. module: auction +#: view:report.object.encoded:0 +msgid "Total adj." +msgstr "Total adj." + +#. module: auction +#: view:auction.deposit:0 +msgid "Deposit Costs" +msgstr "Custos de Depósito" + +#. module: auction +#: field:auction.lot.category,name:0 +msgid "Category Name" +msgstr "Nome da categoria" + +#. module: auction +#: report:buyer.list:0 +msgid "........." +msgstr "........." + +#. module: auction +#: view:report.auction:0 +msgid "Auction Summary tree view" +msgstr "" + +#. module: auction +#: report:report.auction.buyer.result:0 +msgid "Adj" +msgstr "Adj" + +#. module: auction +#: view:auction.dates:0 +#: model:ir.model,name:auction.model_auction_dates +msgid "Auction Dates" +msgstr "Datas de leilão" + +#. module: auction +#: model:ir.ui.menu,name:auction.menu_board_auction_open +msgid "Auction DashBoard" +msgstr "Painel Controlo do Leilão" + +#. module: auction +#: view:report.auction:0 +#: field:report.auction,user_id:0 +#: field:report.auction.adjudication,user_id:0 +#: field:report.auction.object.date,user_id:0 +#: field:report.object.encoded,user_id:0 +#: model:res.groups,name:auction.group_auction_user +msgid "User" +msgstr "Utilizador" + +#. module: auction +#: view:auction.pay.buy:0 +msgid "Payment Lines" +msgstr "Linhas de Pagamento" + +#. module: auction +#: code:addons/auction/auction.py:692 +#, python-format +msgid "Missed Address !" +msgstr "Endereço Errado !" + +#. module: auction +#: help:auction.lots,net_revenue:0 +msgid "Buyer Price - Seller Price - Indirect Cost" +msgstr "" + +#. module: auction +#: help:auction.lots,state:0 +msgid "" +" * The 'Draft' state is used when a object is encoding as a new object. " +" \n" +"* The 'Unsold' state is used when object does not sold for long time, user " +"can also set it as draft state after unsold. \n" +"* The 'Paid' state is used when user pay for the object \n" +"* The 'Sold' state is used when user buy the object." +msgstr "" + +#. module: auction +#: field:auction.artists,pseudo:0 +msgid "Pseudo" +msgstr "Pseudónimo" + +#. module: auction +#: view:auction.lots:0 +msgid "Not sold" +msgstr "Por vender" + +#. module: auction +#: model:account.tax,name:auction.auction_tax3 +#: field:auction.dates,buyer_costs:0 +msgid "Buyer Costs" +msgstr "Custos do Comprador" + +#. module: auction +#: report:auction.total.rml:0 +msgid "Auction Date:" +msgstr "Data de Leilão" + +#. module: auction +#: view:auction.deposit:0 +msgid "Objects Description" +msgstr "Descrição Objetos" + +#. module: auction +#: field:auction.dates,buyer_invoice_history:0 +#: field:auction.lots,ach_inv_id:0 +#: view:auction.lots.make.invoice.buyer:0 +msgid "Buyer Invoice" +msgstr "Fatura do comprador" + +#. module: auction +#: report:auction.bids:0 +msgid "Tel" +msgstr "Tel" + +#. module: auction +#: field:auction.lots,artist_id:0 +msgid "Artist/Author" +msgstr "Artista/Autor" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.total_result1 +msgid "Auction Totals with lists" +msgstr "Totais Leilão com listas" + +#. module: auction +#: view:auction.deposit:0 +msgid "General Information" +msgstr "Informação Geral" + +#. module: auction +#: view:auction.lots.auction.move:0 +#: view:auction.lots.buyer_map:0 +#: view:auction.lots.make.invoice:0 +#: view:auction.lots.make.invoice.buyer:0 +#: view:auction.lots.sms.send:0 +#: view:auction.pay.buy:0 +msgid "Close" +msgstr "Fechar" + +#. module: auction +#: model:ir.model,name:auction.model_report_object_encoded +msgid "Object encoded" +msgstr "Objeto codificado" + +#. module: auction +#: view:auction.bid:0 +msgid "Search Auction Bid" +msgstr "" + +#. module: auction +#: report:bids.phones.details:0 +msgid "Est" +msgstr "Est" + +#. module: auction +#: view:auction.dates:0 +msgid "Seller Commissions" +msgstr "Comissões Vendedor" + +#. module: auction +#: view:report.object.encoded:0 +msgid "Object statistic" +msgstr "Estatística do objeto" + +#. module: auction +#: help:auction.dates,journal_seller_id:0 +msgid "Account journal for seller" +msgstr "Diário da Conta para o vendedor" + +#. module: auction +#: field:auction.dates,auction2:0 +msgid "Last Auction Day" +msgstr "Último dia de leilão" + +#. module: auction +#: code:addons/auction/wizard/auction_pay_buy.py:89 +#, python-format +msgid "No auction date for \"%s\": Please set one." +msgstr "" + +#. module: auction +#: view:auction.deposit:0 +#: field:auction.deposit,info:0 +#: report:bids.phones.details:0 +msgid "Description" +msgstr "Descrição" + +#. module: auction +#: selection:report.auction,month:0 +msgid "May" +msgstr "Maio" + +#. module: auction +#: field:auction.lots,obj_price:0 +msgid "Adjudication price" +msgstr "Preço de adjudicação" + +#. module: auction +#: field:auction.dates,acc_income:0 +msgid "Income Account" +msgstr "Conta de receitas" + +#. module: auction +#: field:auction.lots.sms.send,password:0 +msgid "Password" +msgstr "Password" + +#. module: auction +#: selection:report.auction,month:0 +msgid "February" +msgstr "Fevereiro" + +#. module: auction +#: selection:report.auction,month:0 +msgid "April" +msgstr "Abril" + +#. module: auction +#: view:auction.pay.buy:0 +msgid "Pay objects" +msgstr "Objetos Pagos" + +#. module: auction +#: view:report.object.encoded:0 +msgid "# objects" +msgstr "Número de objetos" + +#. module: auction +#: report:auction.total.rml:0 +msgid "Adjudication:" +msgstr "Adjudicação:" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.details_bids_phones +msgid "Bids per lot (phone)" +msgstr "Oferta por Lote (telefone)" + +#. module: auction +#: field:report.auction,buyer_login:0 +msgid "Buyer Login" +msgstr "Login do Comprador" + +#. module: auction +#: field:auction.deposit,tax_id:0 +msgid "Expenses" +msgstr "Despesas" + +#. module: auction +#: view:report.auction:0 +msgid "Auction during current month." +msgstr "" + +#. module: auction +#: model:ir.model,name:auction.model_auction_payer +msgid "Auction payer" +msgstr "" + +#. module: auction +#: view:report.auction:0 +msgid "Auction during current year." +msgstr "Leilão durante este ano." + +#. module: auction +#: report:auction.total.rml:0 +msgid "Auction name:" +msgstr "Nome do Leilão:" + +#. module: auction +#: view:board.board:0 +msgid "Latest deposits" +msgstr "Depósitos mais recentes" + +#. module: auction +#: model:ir.actions.report.xml,name:auction.art2 +msgid "Artists Biography" +msgstr "Biografia do Artista" + +#. module: auction +#: view:report.auction:0 +#: field:report.auction,year:0 +msgid "Year" +msgstr "Ano" + +#. module: auction +#: field:auction.lots,history_ids:0 +msgid "Auction history" +msgstr "Histórico do Leilão" + +#~ msgid "SMS - Gateway: clickatell" +#~ msgstr "SMS - Gateway: clickatell" + +#~ msgid "Provisoire" +#~ msgstr "Provisório" + +#~ msgid "Adjudication by Auction" +#~ msgstr "Adjudicação por Leilão" + +#~ msgid "Numerotation (per lot)" +#~ msgstr "Numeração (por lote)" + +#~ msgid "Antique/Books, manuscripts, eso." +#~ msgstr "Antiguidades/livros, manuscritos, etc." + +#~ msgid "Buyer invoice reconciled" +#~ msgstr "Factura do comprador reconciliada" + +#~ msgid "Objects by Auction" +#~ msgstr "Objetos por Leilão" + +#~ msgid "Antiques" +#~ msgstr "Antiguidades" + +#~ msgid "Dates" +#~ msgstr "Datas" + +#~ msgid "All objects" +#~ msgstr "Todos os objectos" + +#~ msgid "Contact" +#~ msgstr "Contacto" + +#~ msgid "Back" +#~ msgstr "Anterior" + +#~ msgid "Langage" +#~ msgstr "Linguagem" + +#~ msgid "Exit" +#~ msgstr "Sair" + +#~ msgid "Amount paid" +#~ msgstr "Montante pago" + +#~ msgid "Continue" +#~ msgstr "Continuar" + +#~ msgid "Retry" +#~ msgstr "Repetir" + +#~ msgid "The VAT doesn't seem to be correct." +#~ msgstr "O IVA não parece estar correcto." + +#~ msgid "Error ! You can not create recursive associated members." +#~ msgstr "Erro! Não pode criar membros associados recursivamente." + +#~ msgid "Total margin" +#~ msgstr "Margem Total" + +#~ msgid "Definitive (ordre catalogue)" +#~ msgstr "Definitivo (Catálogo de Ordem)" + +#~ msgid "My Encoded Objects Per Day" +#~ msgstr "Meus Objectos Codificacdos Por Dia" + +#~ msgid "Lot history" +#~ msgstr "Histórico de Lote" + +#~ msgid "Bids line" +#~ msgstr "Linha de Ofertas" + +#~ msgid "Antique/Tin / Copper wares" +#~ msgstr "Antiguidade/Lata/Mercadorias de cobre" + +#~ msgid "Mark as taken away" +#~ msgstr "Marcar como retirado" + +#~ msgid "Statements" +#~ msgstr "Extratos" + +#~ msgid "Unclassifieds" +#~ msgstr "Desclassificados" + +#~ msgid "Object Type" +#~ msgstr "Tipo de Objecto" + +#~ msgid "Contemporary Art" +#~ msgstr "Arte Contemporânea" + +#~ msgid "No of sellers" +#~ msgstr "Nº de vendedores" + +#~ msgid "ned" +#~ msgstr "ned" + +#~ msgid "Net margin (%)" +#~ msgstr "Margem de Net (%)" + +#~ msgid "Buyer's auction for all months" +#~ msgstr "Leilão do Comprador por todos os meses" + +#~ msgid "Cont. Art/Painting" +#~ msgstr "Cont. Arte/Pintura" + +#~ msgid "Unsold objects" +#~ msgstr "Objectos não Bendidos" + +#~ msgid "Sold Objects" +#~ msgstr "Objectos Vendidos" + +#~ msgid "Sum net margin" +#~ msgstr "Somar margem de net" + +#~ msgid "Inventory Number" +#~ msgstr "Número do Inventário" + +#~ msgid "Antique/Cartoons" +#~ msgstr "Antiguidade/Cartoons" + +#~ msgid "Error ! You cannot create recursive Hierarchy of Employees." +#~ msgstr "Erro ! Não pode criar Hierarquias de Funcionários recursivamente." + +#~ msgid "Artist/Author 2" +#~ msgstr "Artista/Autor 2" + +#~ msgid "Auction Objects" +#~ msgstr "Objectos do Leilão" + +#~ msgid "Depositer's statistics" +#~ msgstr "Estatisticas do Depositante" + +#~ msgid "Buyer information" +#~ msgstr "Informação do Comprador" + +#~ msgid "auction.dates" +#~ msgstr "auction.dates" + +#~ msgid "My Latest Deposits" +#~ msgstr "Meus Últimos Depósitos" + +#~ msgid "Buyer's Revenues" +#~ msgstr "Lucros do Comprador" + +#~ msgid "eng" +#~ msgstr "eng" + +#~ msgid "Bulk SMS send" +#~ msgstr "Enviar um Volume de SMS" + +#~ msgid "fr" +#~ msgstr "FR" + +#~ msgid "Antique/Old weapons and militaria" +#~ msgstr "Antiguidade/Velhas armas e militaria" + +#~ msgid "Antique/Oriental Arts/Chineese furnitures" +#~ msgstr "Antigo/Arte Oriental/Móveis Chineses" + +#~ msgid "Avg. Est" +#~ msgstr "Avg.Est" + +#~ msgid "" +#~ "This module provides functionality to \n" +#~ " manage artists, articles, sellers, buyers and auction.\n" +#~ " Manage bids, track of sold, paid and unpaid objects.\n" +#~ " Delivery Management. \n" +#~ " " +#~ msgstr "" +#~ "Este módulo provê funcionalidade para\n" +#~ " gestão artistica, artigos, vendedores, compradores e leilão.\n" +#~ " Gestão de oferta, faixa de vendas, pagos e objecto não pagos.\n" +#~ " Gestão de Entrega. \n" +#~ " " + +#~ msgid "Confirmation set taken away" +#~ msgstr "Confirmação do conjunto retirado" + +#~ msgid "Mark as paid for seller" +#~ msgstr "Marcar como pago para o vendedor" + +#~ msgid "Close + Create all invoices" +#~ msgstr "Fechar + Criar todas as Facturas" + +#~ msgid "Antique/Verreries" +#~ msgstr "Antiguidade/Artigos de Vidro" + +#~ msgid "Antique/Toys" +#~ msgstr "Antigo/Brinquedos" + +#~ msgid "Auction Management" +#~ msgstr "Gestão de Leilão" + +#~ msgid "Define Artists" +#~ msgstr "Definir Artistas" + +#~ msgid "Comparison of estimations" +#~ msgstr "Comparação das estimativas" + +#~ msgid "Code barres du lot" +#~ msgstr "Código de barras do lote" + +#~ msgid "Birth / Death dates" +#~ msgstr "Datas de Nascimento/Morte" + +#~ msgid "Antique/Jewelry" +#~ msgstr "Antiguidade/Jóias" + +#~ msgid "Unclassified objects " +#~ msgstr "Objectos não Classificados " + +#~ msgid "Numerotation" +#~ msgstr "Numeração" + +#~ msgid "Bordereau de dépôt" +#~ msgstr "Comprovante de Depósito" + +#~ msgid "Cont. Art/Arts" +#~ msgstr "Cont. Arte/Artes" + +#~ msgid "comparaison estimate/adjudication " +#~ msgstr "comparação estimar/adjudicação " + +#~ msgid "Adj(EUR)" +#~ msgstr "Adj(EUR)" + +#~ msgid "Cont. Art/Other Media" +#~ msgstr "Cont. Arte/Outros Mídia" + +#~ msgid "Send Image also ?" +#~ msgstr "Enviar Imagem também?" + +#~ msgid "General Informations" +#~ msgstr "Informações Gerais" + +#~ msgid "Auctions results" +#~ msgstr "Resultados de Leilões" + +#~ msgid "Unclassified objects" +#~ msgstr "Objectos não Classificados" + +#~ msgid "Antique/Carpet and textilles" +#~ msgstr "Antiguidade/Carpete e têxteis" + +#~ msgid "New Auction Dates" +#~ msgstr "Nova Data de Leilão" + +#~ msgid "Sum adj" +#~ msgstr "Soma adj" + +#~ msgid "No of Objects" +#~ msgstr "Nº de Objectos" + +#~ msgid "Antique/Painting" +#~ msgstr "Antiguidade/Pintura" + +#~ msgid "Aie Category" +#~ msgstr "Categoria AIE" + +#~ msgid "Check payment for seller" +#~ msgstr "Verificar o pagamento para o vendedor" + +#~ msgid "Send results to Auction-in-europe.com" +#~ msgstr "Enviar resultados para Auction-in-europe.com" + +#~ msgid "Seller's auction" +#~ msgstr "Leilão do Vendedor" + +#~ msgid "Seller's Revenues" +#~ msgstr "Receitas do Vendedor" + +#~ msgid "Buyer's Summary" +#~ msgstr "Resumo de Comprador" + +#~ msgid "Depositer's Statistics" +#~ msgstr "Estatísticas do Depósito" + +#~ msgid "To pay" +#~ msgstr "Para pagar" + +#~ msgid "Enable Taken away" +#~ msgstr "Permitir Retirada" + +#~ msgid "Antique/Others" +#~ msgstr "Antiguidade/Outros" + +#~ msgid "Auction dates" +#~ msgstr "Data dos Leilões" + +#~ msgid "Encoded Objects Per Day" +#~ msgstr "Codificar Objectos por Dia" + +#~ msgid "Auction Reporting on buyer view" +#~ msgstr "Relatório do Leilão na vista do comprador" + +#~ msgid "Payment's history" +#~ msgstr "Histórico de Pagamentos" + +#~ msgid "Auction results" +#~ msgstr "Resultados dos Leilões" + +#~ msgid "Auction's Revenues" +#~ msgstr "Rendimentos dos Leilões" + +#~ msgid "Antique/Metal Ware" +#~ msgstr "Antiguidade/Peças de Metal" + +#~ msgid "de" +#~ msgstr "de" + +#~ msgid "Old Auctions" +#~ msgstr "Leilões Antigos" + +#~ msgid "Cont. Art/Curiosa" +#~ msgstr "Cont. Arte/Curiosa" + +#~ msgid "Auction module" +#~ msgstr "Módulo Leilão" + +#~ msgid "Attendance" +#~ msgstr "Atendimento" + +#~ msgid "Seller information" +#~ msgstr "Informação do Vendedor" + +#~ msgid "Cont. Art/Jewelry" +#~ msgstr "Cont. Arte/Jóias" + +#~ msgid "Next Auctions" +#~ msgstr "Próximos Leilões" + +#~ msgid "#" +#~ msgstr "#" + +#~ msgid "Antique/Miniatures / Collections" +#~ msgstr "Antiguidade/Miniaturas/Colecções" + +#~ msgid "Cont. Art/Photo" +#~ msgstr "Cont. Arte/Fotografia" + +#~ msgid "Bid auctions" +#~ msgstr "Oferta de Leilão" + +#~ msgid "Avg margin" +#~ msgstr "Margem Avg" + +#~ msgid "Antique/Art from the Ivory Coast" +#~ msgstr "Antiguidade/ Arte para a Costa do Marfim" + +#~ msgid "Antique/Religiosa" +#~ msgstr "Antiguidade/Religiosa" + +#~ msgid "" +#~ "Error: The default UOM and the purchase UOM must be in the same category." +#~ msgstr "" +#~ "Erro: O UOM padrão e o UOM de compra devem estar na mesma categoria." + +#~ msgid "Unplanned objects" +#~ msgstr "Objectos não Pagos" + +#~ msgid "Cont. Art/Sculpture" +#~ msgstr "Cont. Arte/Escultura" + +#~ msgid "Antique/Argenterie" +#~ msgstr "Antiguidade/Talheres" + +#~ msgid "Detailed lots" +#~ msgstr "Lotes Detalhados" + +#~ msgid "Antique/Lightings" +#~ msgstr "Antiguidade/Iluminação" + +#~ msgid "Antique/Sculpture, bronze, eso." +#~ msgstr "Antiguidade/Escultura, bronze, etc." + +#~ msgid "Numerotate" +#~ msgstr "Numeração" + +#~ msgid "Listing Huissiers" +#~ msgstr "Listagem de Oficiais de Justiça" + +#~ msgid "All objects are assigned to buyers !" +#~ msgstr "Todos os objectos são atribuidos para os compradores !" + +#~ msgid "Able Taken away" +#~ msgstr "Permissão de Retirada" + +#~ msgid "Seller's Summary" +#~ msgstr "Resumo de Vendedores" + +#~ msgid "Send on your website" +#~ msgstr "Enviar para o seu Website" + +#~ msgid "Simplified lots for adjudication" +#~ msgstr "Lotes Simplificados para adjudicação" + +#~ msgid "Sum Adjustication" +#~ msgstr "Soma da Adjudicação" + +#~ msgid "Antique/Porcelain, Ceramics, Glassmaking, ..." +#~ msgstr "Antiguidade/Porcelanas/Cerâmicas/Vidreiros" + +#~ msgid "Object Reference" +#~ msgstr "Referência do Objecto" + +#~ msgid "Cont. Art/Shows" +#~ msgstr "Cont. Arte/Shows" + +#~ msgid "Unsold Objects" +#~ msgstr "Objectos não Vendidos" + +#~ msgid "Avg Adj." +#~ msgstr "Avg Adj." + +#~ msgid "auction.deposit.cost" +#~ msgstr "auction.deposit.cost" + +#~ msgid "Object Inventory" +#~ msgstr "Inventário do Objecto" + +#~ msgid "Antique/Art from the Ivory Coast/African Arts" +#~ msgstr "Antiguidade/Arte a partir da Costa de Marfim/Artes Africanas" + +#~ msgid "Lot Category" +#~ msgstr "Categoria de Lote" + +#~ msgid "Total" +#~ msgstr "Total" + +#~ msgid "Send to website" +#~ msgstr "Enviar para o Website" + +#~ msgid "Old Auction Dates" +#~ msgstr "Datas Antigas de Leilões" + +#~ msgid "Antique/Engravings" +#~ msgstr "Antiguidade/Gravuras" + +#~ msgid "First Number" +#~ msgstr "Primeiro Número" + +#~ msgid "" +#~ "Warning, this will erase the object adjudication price and its buyer !" +#~ msgstr "" +#~ "Aviso, isto vai apagar o preço de adjudicção do objecto e do seu comprador !" + +#~ msgid "Bid information" +#~ msgstr "Informação da Oferta" + +#~ msgid "Antique/Musical Instruments" +#~ msgstr "Antiguidade/Instrumentos Musicais" + +#~ msgid "Antique/Graphic Arts" +#~ msgstr "Antiguidade/Artes Gráficas" + +#~ msgid "Antique/Oriental Arts" +#~ msgstr "Antiguidade/Artes Orientais" + +#~ msgid "Sum of adjudication" +#~ msgstr "Soma de Adjudicação" + +#~ msgid "Unmark as taken away" +#~ msgstr "Desmarcar como retirados" + +#~ msgid "Lot Number" +#~ msgstr "Número de Lote" + +#~ msgid "Employee" +#~ msgstr "Funcionário" + +#~ msgid "Report deposit border" +#~ msgstr "Relatório de deposito limite" + +#~ msgid "Auction report" +#~ msgstr "Relatório do Leilão" + +#~ msgid "auction.lot.category" +#~ msgstr "auction.lot.category" + +#~ msgid "Antique/Collectible & art objects" +#~ msgstr "Antiguidade/Coleção&objectos de arte" + +#~ msgid "Buyer's auction" +#~ msgstr "Leilão de Compradores" + +#~ msgid "Antique/Furnitures" +#~ msgstr "Antiguidade/Móveis" + +#~ msgid "Unplanned Objects" +#~ msgstr "Objectos não Planeados" + +#~ msgid "Numerotation (automatic)" +#~ msgstr "Numeração (automatica)" + +#~ msgid "Amount to paid" +#~ msgstr "Montante para pagar" + +#~ msgid "No of buyers" +#~ msgstr "Nº de compradores" + +#~ msgid "Avg adjudication" +#~ msgstr "Avg de Adjudicação" + +#~ msgid "Next Auction Dates" +#~ msgstr "Próximas Datas de Leilão" + +#~ msgid "Report Sign In/Out" +#~ msgstr "Relatória de Entrada/Saída" + +#~ msgid "Objects to sell" +#~ msgstr "Objectos para vender" + +#~ msgid "Short Description" +#~ msgstr "Pequena Descrição" + +#~ msgid "Employees" +#~ msgstr "Funcionários" + +#~ msgid "Antique/Clocks and watches" +#~ msgstr "Antiguidade/Relógio e relógios" + +#~ msgid "Antique/Scientific Instruments" +#~ msgstr "Antiguidade/ Instrumentos Ciêntificos" + +#~ msgid "Confirmation enable taken away" +#~ msgstr "Confirmar a permissão de retirada" + +#~ msgid "Sum of adjustication" +#~ msgstr "Soma de adjudicação" + +#~ msgid "Antique/Wine" +#~ msgstr "Antiguidade/Vinhos" + +#~ msgid "Antique/African Arts" +#~ msgstr "Antiguidade/Artes Africanas" + +#~ msgid "Antique/Posters" +#~ msgstr "Antiguidade/Cartazes" + +#~ msgid "Create Invoices For Seller" +#~ msgstr "Criar faturas para o vendedor" + +#~ msgid "Invalid model name in the action definition." +#~ msgstr "Nome de modelo inválido na definição da ação" + +#~ msgid "Error: Sign in (resp. Sign out) must follow Sign out (resp. Sign in)" +#~ msgstr "Erro: Entrada (Saída) deve ser seguida de Saída (Entrada)" + +#~ msgid "Error ! You can not create recursive accounts." +#~ msgstr "Erro! Não pode criar contas recursivamente." + +#~ msgid "Invalid XML for View Architecture!" +#~ msgstr "XML inválido para a arquitetura da vista" + +#~ msgid "Error: Invalid ean code" +#~ msgstr "Erro: Código EAN inválido" + +#~ msgid "" +#~ "The Object name must start with x_ and not contain any special character !" +#~ msgstr "" +#~ "O nome do Objeto deve começar com x_ e não pode conter nenhum caracter " +#~ "especial !" + +#~ msgid "Create Invoices For Buyer" +#~ msgstr "Criar faturas para o comprador" + +#~ msgid "Auction Reporting on seller view" +#~ msgstr "Relatório do Leilão na vista do vendedor" + +#~ msgid "Error: UOS must be in a different category than the UOM" +#~ msgstr "Erro: UdV deve estar numa categoria diferente da UdM" + +#~ msgid "Auction buyer reporting form view" +#~ msgstr "Formulário do comprador do Leilão" + +#~ msgid "Auction reporting2 form view" +#~ msgstr "Formulário de relatorios do Leilão" diff --git a/addons/auth_openid/i18n/gu.po b/addons/auth_openid/i18n/gu.po new file mode 100644 index 00000000000..20022b1dfa6 --- /dev/null +++ b/addons/auth_openid/i18n/gu.po @@ -0,0 +1,112 @@ +# Gujarati translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 01:37+0100\n" +"PO-Revision-Date: 2012-05-31 11:08+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Gujarati <gu@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: auth_openid +#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: view:res.users:0 +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:12 +msgid "OpenID" +msgstr "" + +#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: auth_openid +#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: field:res.users,openid_url:0 +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:47 +msgid "OpenID URL" +msgstr "" + +#. module: auth_openid +#: help:res.users,openid_email:0 +msgid "Used for disambiguation in case of a shared OpenID URL" +msgstr "" + +#. module: auth_openid +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "તમે બે વપરાશકર્તાઓને એક જ લોગીન ન કરી શકો!" + +#. module: auth_openid +#: field:res.users,openid_email:0 +msgid "OpenID Email" +msgstr "" + +#. module: auth_openid +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "પસંદ કરેલ કંપની માન્ય કંપનીઓમાં આ વપરાશકર્તા માટે નથી" + +#. module: auth_openid +#: field:res.users,openid_key:0 +msgid "OpenID Key" +msgstr "" + +#. module: auth_openid +#: model:ir.model,name:auth_openid.model_res_users +msgid "res.users" +msgstr "" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:8 +msgid "Password" +msgstr "પાસવર્ડ" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:9 +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10 +msgid "Google" +msgstr "ગુગલ" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10 +msgid "Google Apps" +msgstr "" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:11 +msgid "Launchpad" +msgstr "" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:20 +msgid "Google Apps Domain:" +msgstr "" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:24 +msgid "Username:" +msgstr "વપરાશકર્તાનું નામ:" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:28 +msgid "OpenID URL:" +msgstr "" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:35 +msgid "Google Apps Domain" +msgstr "" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:41 +msgid "Username" +msgstr "વપરાશકર્તા નામ" diff --git a/addons/auth_openid/i18n/sv.po b/addons/auth_openid/i18n/sv.po new file mode 100644 index 00000000000..c89dcfe9d9e --- /dev/null +++ b/addons/auth_openid/i18n/sv.po @@ -0,0 +1,114 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 01:37+0100\n" +"PO-Revision-Date: 2012-06-04 10:13+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n" +"X-Generator: Launchpad (build 15353)\n" + +#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: auth_openid +#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: view:res.users:0 +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:12 +msgid "OpenID" +msgstr "OpenID" + +#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: auth_openid +#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: field:res.users,openid_url:0 +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:47 +msgid "OpenID URL" +msgstr "OpenID URL" + +#. module: auth_openid +#: help:res.users,openid_email:0 +msgid "Used for disambiguation in case of a shared OpenID URL" +msgstr "" +"Används för att skilja mellan olika användare i fallet med en delad OpenID-" +"URL" + +#. module: auth_openid +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "Du kan inte ha två användare med samma användarid !" + +#. module: auth_openid +#: field:res.users,openid_email:0 +msgid "OpenID Email" +msgstr "OpenID-epost" + +#. module: auth_openid +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "Detta bolag är inte tillåtet för den här användaren" + +#. module: auth_openid +#: field:res.users,openid_key:0 +msgid "OpenID Key" +msgstr "OpenID Nyckel" + +#. module: auth_openid +#: model:ir.model,name:auth_openid.model_res_users +msgid "res.users" +msgstr "res.users" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:8 +msgid "Password" +msgstr "Lösenord" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:9 +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10 +msgid "Google" +msgstr "Google" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10 +msgid "Google Apps" +msgstr "Google Apps" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:11 +msgid "Launchpad" +msgstr "Launchpad" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:20 +msgid "Google Apps Domain:" +msgstr "Google Apps Domän:" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:24 +msgid "Username:" +msgstr "Användarnamn:" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:28 +msgid "OpenID URL:" +msgstr "OpenID URL:" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:35 +msgid "Google Apps Domain" +msgstr "Google Apps Domän" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:41 +msgid "Username" +msgstr "Användarnamn" diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index d7d6501926f..bbededc8eaf 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -814,7 +814,6 @@ class calendar_alarm(osv.osv): context = {} mail_message = self.pool.get('mail.message') current_datetime = datetime.now() - request_obj = self.pool.get('res.request') alarm_ids = self.search(cr, uid, [('state', '!=', 'done')], context=context) mail_to = [] @@ -854,26 +853,28 @@ class calendar_alarm(osv.osv): ref = alarm.model_id.model + ',' + str(alarm.res_id) # search for alreay sent requests - if request_obj.search(cr, uid, [('trigger_date', '=', r_date), ('ref_doc1', '=', ref)], context=context): - continue - - if alarm.action == 'display': - value = { - 'name': alarm.name, - 'act_from': alarm.user_id.id, - 'act_to': alarm.user_id.id, - 'body': alarm.description, - 'trigger_date': r_date, - 'ref_doc1': ref - } - request_id = request_obj.create(cr, uid, value) - request_ids = [request_id] - for attendee in res_obj.attendee_ids: - if attendee.user_id: - value['act_to'] = attendee.user_id.id - request_id = request_obj.create(cr, uid, value) - request_ids.append(request_id) - request_obj.request_send(cr, uid, request_ids) + #if request_obj.search(cr, uid, [('trigger_date', '=', r_date), ('ref_doc1', '=', ref)], context=context): + #continue + + # Deactivated because of the removing of res.request + # TODO: when cleaning calendar module, re-add this in a new mechanism + #if alarm.action == 'display': + #value = { + #'name': alarm.name, + #'act_from': alarm.user_id.id, + #'act_to': alarm.user_id.id, + #'body': alarm.description, + #'trigger_date': r_date, + #'ref_doc1': ref + #} + #request_id = request_obj.create(cr, uid, value) + #request_ids = [request_id] + #for attendee in res_obj.attendee_ids: + #if attendee.user_id: + #value['act_to'] = attendee.user_id.id + #request_id = request_obj.create(cr, uid, value) + #request_ids.append(request_id) + #request_obj.request_send(cr, uid, request_ids) if alarm.action == 'email': sub = '[Openobject Reminder] %s' % (alarm.name) diff --git a/addons/base_calendar/base_calendar_view.xml b/addons/base_calendar/base_calendar_view.xml index 6d98e936821..e5e45c07d61 100644 --- a/addons/base_calendar/base_calendar_view.xml +++ b/addons/base_calendar/base_calendar_view.xml @@ -9,7 +9,7 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="do_tentative" states="needs-action,declined,accepted" string="Uncertain" type="object" @@ -26,11 +26,8 @@ <button name="do_decline" string="Decline" states="needs-action,tentative,accepted" type="object" /> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="tentative,needs-action,accepted" statusbar_colors='{"proforma":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="tentative,needs-action,accepted" statusbar_colors='{"proforma":"blue"}'/> + </header> <sheet string="Invitation details" layout="auto"> <group col="6" colspan="4"> <field name="email" string="Invitation To"/> @@ -85,21 +82,6 @@ <field name="cutype" string="Invitation Type"/> <field name="state" /> <field name="rsvp" string="Required to Join"/> - <button name="do_tentative" states="needs-action,declined,accepted" - string="Uncertain" type="object" - icon="terp-crm" /> - <button name="do_accept" string="Accept" - states="needs-action,tentative,declined" - type="object" icon="gtk-apply" /> - <button name="do_decline" string="Decline" - states="needs-action,tentative,accepted" - type="object" icon="gtk-cancel" /> - <button - name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d" - string="Delegate" type="action" - icon="gtk-sort-descending" - states="needs-action,tentative,declined,accepted" - context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}" /> </tree> </field> </record> @@ -229,7 +211,7 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="do_confirm" string="Confirm" states="tentative,cancelled" @@ -245,11 +227,8 @@ states="tentative,confirmed" type="object" /> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="tentative,confirmed" statusbar_colors='{"proforma":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="tentative,confirmed" statusbar_colors='{"proforma":"blue"}'/> + </header> <sheet string="Events" layout="auto"> <group col="6" colspan="4"> <field name="name" select="1" string="Summary" diff --git a/addons/base_setup/base_setup_views.xml b/addons/base_setup/base_setup_views.xml index b0b533d78e1..0692b4f651c 100644 --- a/addons/base_setup/base_setup_views.xml +++ b/addons/base_setup/base_setup_views.xml @@ -46,10 +46,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Configure Sales" layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Apply" type="object" name="execute"/> <button string="Cancel" special="cancel"/> - </div> + </header> <sheet layout="auto"> <group> <group name="config_sale" colspan="4"/> diff --git a/addons/base_setup/i18n/gu.po b/addons/base_setup/i18n/gu.po new file mode 100644 index 00000000000..3563c7da2ff --- /dev/null +++ b/addons/base_setup/i18n/gu.po @@ -0,0 +1,282 @@ +# Gujarati translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-05-31 11:08+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Gujarati <gu@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-01 05:32+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: base_setup +#: field:user.preferences.config,menu_tips:0 +msgid "Display Tips" +msgstr "" + +#. module: base_setup +#: selection:base.setup.terminology,partner:0 +msgid "Guest" +msgstr "અતિથિ" + +#. module: base_setup +#: model:ir.model,name:base_setup.model_product_installer +msgid "product.installer" +msgstr "" + +#. module: base_setup +#: selection:product.installer,customers:0 +msgid "Create" +msgstr "બનાવો" + +#. module: base_setup +#: selection:base.setup.terminology,partner:0 +msgid "Member" +msgstr "સભ્ય" + +#. module: base_setup +#: field:migrade.application.installer.modules,sync_google_contact:0 +msgid "Sync Google Contact" +msgstr "" + +#. module: base_setup +#: help:user.preferences.config,context_tz:0 +msgid "" +"Set default for new user's timezone, used to perform timezone conversions " +"between the server and the client." +msgstr "" + +#. module: base_setup +#: selection:product.installer,customers:0 +msgid "Import" +msgstr "આયાત કરો" + +#. module: base_setup +#: selection:base.setup.terminology,partner:0 +msgid "Donor" +msgstr "" + +#. module: base_setup +#: model:ir.actions.act_window,name:base_setup.action_base_setup_company +msgid "Set Company Header and Footer" +msgstr "" + +#. module: base_setup +#: model:ir.actions.act_window,help:base_setup.action_base_setup_company +msgid "" +"Fill in your company data (address, logo, bank accounts) so that it's " +"printed on your reports. You can click on the button 'Preview Header' in " +"order to check the header/footer of PDF documents." +msgstr "" + +#. module: base_setup +#: field:product.installer,customers:0 +msgid "Customers" +msgstr "ગ્રાહકો" + +#. module: base_setup +#: selection:user.preferences.config,view:0 +msgid "Extended" +msgstr "વિસ્તૃત" + +#. module: base_setup +#: selection:base.setup.terminology,partner:0 +msgid "Patient" +msgstr "" + +#. module: base_setup +#: model:ir.actions.act_window,help:base_setup.action_import_create_installer +msgid "" +"Create or Import Customers and their contacts manually from this form or " +"you can import your existing partners by CSV spreadsheet from \"Import " +"Data\" wizard" +msgstr "" + +#. module: base_setup +#: view:user.preferences.config:0 +msgid "Define Users's Preferences" +msgstr "" + +#. module: base_setup +#: model:ir.actions.act_window,name:base_setup.action_user_preferences_config_form +msgid "Define default users preferences" +msgstr "" + +#. module: base_setup +#: help:migrade.application.installer.modules,import_saleforce:0 +msgid "For Import Saleforce" +msgstr "" + +#. module: base_setup +#: help:migrade.application.installer.modules,quickbooks_ippids:0 +msgid "For Quickbooks Ippids" +msgstr "" + +#. module: base_setup +#: help:user.preferences.config,view:0 +msgid "" +"If you use OpenERP for the first time we strongly advise you to select the " +"simplified interface, which has less features but is easier. You can always " +"switch later from the user preferences." +msgstr "" + +#. module: base_setup +#: view:base.setup.terminology:0 +#: view:user.preferences.config:0 +msgid "res_config_contents" +msgstr "" + +#. module: base_setup +#: field:user.preferences.config,view:0 +msgid "Interface" +msgstr "ઇન્ટરફેસ" + +#. module: base_setup +#: model:ir.model,name:base_setup.model_migrade_application_installer_modules +msgid "migrade.application.installer.modules" +msgstr "" + +#. module: base_setup +#: view:base.setup.terminology:0 +msgid "" +"You can use this wizard to change the terminologies for customers in the " +"whole application." +msgstr "" + +#. module: base_setup +#: selection:base.setup.terminology,partner:0 +msgid "Tenant" +msgstr "" + +#. module: base_setup +#: selection:base.setup.terminology,partner:0 +msgid "Customer" +msgstr "" + +#. module: base_setup +#: field:user.preferences.config,context_lang:0 +msgid "Language" +msgstr "ભાષા" + +#. module: base_setup +#: help:user.preferences.config,context_lang:0 +msgid "" +"Sets default language for the all user interface, when UI translations are " +"available. If you want to Add new Language, you can add it from 'Load an " +"Official Translation' wizard from 'Administration' menu." +msgstr "" + +#. module: base_setup +#: view:user.preferences.config:0 +msgid "" +"This will set the default preferences for new users and update all existing " +"ones. Afterwards, users are free to change those values on their own user " +"preference form." +msgstr "" + +#. module: base_setup +#: field:base.setup.terminology,partner:0 +msgid "How do you call a Customer" +msgstr "" + +#. module: base_setup +#: field:migrade.application.installer.modules,quickbooks_ippids:0 +msgid "Quickbooks Ippids" +msgstr "" + +#. module: base_setup +#: selection:base.setup.terminology,partner:0 +msgid "Client" +msgstr "" + +#. module: base_setup +#: field:migrade.application.installer.modules,import_saleforce:0 +msgid "Import Saleforce" +msgstr "" + +#. module: base_setup +#: field:user.preferences.config,context_tz:0 +msgid "Timezone" +msgstr "ટાઈમઝોન" + +#. module: base_setup +#: model:ir.actions.act_window,name:base_setup.action_partner_terminology_config_form +msgid "Use another word to say \"Customer\"" +msgstr "" + +#. module: base_setup +#: model:ir.model,name:base_setup.model_base_setup_terminology +msgid "base.setup.terminology" +msgstr "" + +#. module: base_setup +#: help:user.preferences.config,menu_tips:0 +msgid "" +"Check out this box if you want to always display tips on each menu action" +msgstr "" + +#. module: base_setup +#: field:base.setup.terminology,config_logo:0 +#: field:migrade.application.installer.modules,config_logo:0 +#: field:product.installer,config_logo:0 +#: field:user.preferences.config,config_logo:0 +msgid "Image" +msgstr "ચિત્ર" + +#. module: base_setup +#: model:ir.model,name:base_setup.model_user_preferences_config +msgid "user.preferences.config" +msgstr "" + +#. module: base_setup +#: model:ir.actions.act_window,name:base_setup.action_config_access_other_user +msgid "Create Additional Users" +msgstr "" + +#. module: base_setup +#: model:ir.actions.act_window,name:base_setup.action_import_create_installer +msgid "Create or Import Customers" +msgstr "" + +#. module: base_setup +#: field:migrade.application.installer.modules,import_sugarcrm:0 +msgid "Import Sugarcrm" +msgstr "" + +#. module: base_setup +#: help:product.installer,customers:0 +msgid "Import or create customers" +msgstr "" + +#. module: base_setup +#: selection:user.preferences.config,view:0 +msgid "Simplified" +msgstr "સરળ" + +#. module: base_setup +#: help:migrade.application.installer.modules,import_sugarcrm:0 +msgid "For Import Sugarcrm" +msgstr "" + +#. module: base_setup +#: selection:base.setup.terminology,partner:0 +msgid "Partner" +msgstr "ભાગીદાર" + +#. module: base_setup +#: view:base.setup.terminology:0 +msgid "Specify Your Terminology" +msgstr "" + +#. module: base_setup +#: help:migrade.application.installer.modules,sync_google_contact:0 +msgid "For Sync Google Contact" +msgstr "" diff --git a/addons/base_setup/res_config_view.xml b/addons/base_setup/res_config_view.xml index 0281263397a..ccf231924fe 100644 --- a/addons/base_setup/res_config_view.xml +++ b/addons/base_setup/res_config_view.xml @@ -7,10 +7,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="General Settings" layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Apply" type="object" name="execute"/> <button string="Cancel" special="cancel"/> - </div> + </header> <sheet layout="auto"> <separator string="Company Settings" colspan="4"/> <field name="module_multi_company"/> diff --git a/addons/base_status/__init__.py b/addons/base_status/__init__.py new file mode 100644 index 00000000000..e4107f90a37 --- /dev/null +++ b/addons/base_status/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2012-today OpenERP SA (<http://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 +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import base_state +import base_stage + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_status/__openerp__.py b/addons/base_status/__openerp__.py new file mode 100644 index 00000000000..fcb8f54a7ee --- /dev/null +++ b/addons/base_status/__openerp__.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2012-today OpenERP SA (<http://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 +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +{ + 'name': 'State/Stage Management', + 'version': '1.0', + 'category': 'Hidden', + 'description': """ +This module handles state and stage. It is derived from the crm_base and +crm_case classes from crm. + + * ``base_state``: state management + * ``base_stage``: stage management + """, + 'author': 'OpenERP SA', + 'website': 'http://www.openerp.com', + 'depends': ['base'], + 'init_xml': [], + 'update_xml': [], + 'demo_xml': [], + 'installable': True, + 'auto_install': False, +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_status/base_stage.py b/addons/base_status/base_stage.py new file mode 100644 index 00000000000..cc6dda19cdf --- /dev/null +++ b/addons/base_status/base_stage.py @@ -0,0 +1,432 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-today OpenERP SA (<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 +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from osv import fields +from tools.translate import _ + +class base_stage(object): + """ Base utility mixin class for objects willing to manage their stages. + Object that inherit from this class should inherit from mailgate.thread + to have access to the mail gateway, as well as Chatter. Objects + subclassing this class should define the following colums: + - ``date_open`` (datetime field) + - ``date_closed`` (datetime field) + - ``user_id`` (many2one to res.users) + - ``partner_id`` (many2one to res.partner) + - ``stage_id`` (many2one to a stage definition model) + - ``state`` (selection field, related to the stage_id.state) + """ + + def _get_default_partner(self, cr, uid, context=None): + """ Gives id of partner for current user + :param context: if portal not in context returns False + """ + if context is None: + context = {} + if not context or not context.get('portal'): + return False + user = self.pool.get('res.users').browse(cr, uid, uid, context=context) + if hasattr(user, 'partner_address_id') and user.partner_address_id: + return user.partner_address_id + return user.company_id.partner_id.id + + def _get_default_email(self, cr, uid, context=None): + """ Gives default email address for current user + :param context: if portal not in context returns False + """ + if context is None: + context = {} + if not context or not context.get('portal'): + return False + user = self.pool.get('res.users').browse(cr, uid, uid, context=context) + return user.user_email + + def _get_default_user(self, cr, uid, context=None): + """ Gives current user id + :param context: if portal not in context returns False + """ + if context is None: + context = {} + if not context or not context.get('portal'): + return False + return uid + + def onchange_partner_address_id(self, cr, uid, ids, add, email=False): + """ This function returns value of partner email based on Partner Address + :param add: Id of Partner's address + :param email: Partner's email ID + """ + data = {'value': {'email_from': False, 'phone':False}} + if add: + address = self.pool.get('res.partner').browse(cr, uid, add) + data['value'] = {'email_from': address and address.email or False , + 'phone': address and address.phone or False} + if 'phone' not in self._columns: + del data['value']['phone'] + return data + + def onchange_partner_id(self, cr, uid, ids, part, email=False): + """ This function returns value of partner address based on partner + :param part: Partner's id + :param email: Partner's email ID + """ + data={} + if part: + addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact']) + data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value']) + return {'value': data} + + def _get_default_section_id(self, cr, uid, context=None): + """ Gives default section """ + return False + + def _get_default_stage_id(self, cr, uid, context=None): + """ Gives default stage_id """ + return self.stage_find(cr, uid, [], None, [('state', '=', 'draft')], context=context) + + def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None): + """ Find stage, with a given (optional) domain on the search, + ordered by the order parameter. If several stages match the + search criterions, the first one will be returned, according + to the requested search order. + This method is meant to be overriden by subclasses. That way + specific behaviors can be achieved for every class inheriting + from base_stage. + + :param cases: browse_record of cases + :param section_id: section limitating the search, given for + a generic search (for example default search). + A section models concepts such as Sales team + (for CRM), ou departments (for HR). + :param domain: a domain on the search of stages + :param order: order of the search + """ + return False + + def stage_set_with_state_name(self, cr, uid, cases, state_name, context=None): + """ Set a new stage, with a state_name instead of a stage_id + :param cases: browse_record of cases + """ + if isinstance(cases, (int, long)): + cases = self.browse(cr, uid, cases, context=context) + for case in cases: + stage_id = self.stage_find(cr, uid, [case], None, [('state', '=', state_name)], context=context) + if stage_id: + self.stage_set(cr, uid, [case.id], stage_id, context=context) + return True + + def stage_set(self, cr, uid, ids, stage_id, context=None): + """ Set the new stage. This methods is the right method to call + when changing states. It also checks whether an onchange is + defined, and execute it. + """ + value = {} + if hasattr(self, 'onchange_stage_id'): + value = self.onchange_stage_id(cr, uid, ids, stage_id, context=context)['value'] + value['stage_id'] = stage_id + self.stage_set_send_note(cr, uid, ids, stage_id, context=context) + return self.write(cr, uid, ids, value, context=context) + + def stage_change(self, cr, uid, ids, op, order, context=None): + """ Change the stage and take the next one, based on a condition + writen for the 'sequence' field and an operator. This methods + checks whether the case has a current stage, and takes its + sequence. Otherwise, a default 0 sequence is chosen and this + method will therefore choose the first available stage. + For example if op is '>' and current stage has a sequence of + 10, this will call stage_find, with [('sequence', '>', '10')]. + """ + for case in self.browse(cr, uid, ids, context=context): + seq = 0 + if case.stage_id: + seq = case.stage_id.sequence or 0 + section_id = None + next_stage_id = self.stage_find(cr, uid, [case], None, [('sequence', op, seq)],order, context=context) + if next_stage_id: + return self.stage_set(cr, uid, [case.id], next_stage_id, context=context) + return False + + def stage_next(self, cr, uid, ids, context=None): + """ This function computes next stage for case from its current stage + using available stage for that case type + """ + return self.stage_change(cr, uid, ids, '>','sequence', context) + + def stage_previous(self, cr, uid, ids, context=None): + """ This function computes previous stage for case from its current + stage using available stage for that case type + """ + return self.stage_change(cr, uid, ids, '<', 'sequence desc', context) + + def copy(self, cr, uid, id, default=None, context=None): + """ Overrides orm copy method to avoid copying messages, + as well as date_closed and date_open columns if they + exist.""" + if default is None: + default = {} + + if hasattr(self, '_columns'): + if self._columns.get('date_closed'): + default.update({ 'date_closed': False, }) + if self._columns.get('date_open'): + default.update({ 'date_open': False }) + return super(base_stage, self).copy(cr, uid, id, default, context=context) + + def case_escalate(self, cr, uid, ids, context=None): + """ Escalates case to parent level """ + cases = self.browse(cr, uid, ids, context=context) + cases[0].state # fill browse record cache, for _action having old and new values + for case in cases: + 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 can not escalate, you are already at the top level regarding your sales-team category.')) + self.write(cr, uid, [case.id], data, context=context) + case.case_escalate_send_note(case.section_id.parent_id, context=context) + cases = self.browse(cr, uid, ids, context=context) + self._action(cr, uid, cases, 'escalate', context=context) + return True + + def case_open(self, cr, uid, ids, context=None): + """ Opens case """ + cases = self.browse(cr, uid, ids, context=context) + for case in cases: + data = {'active': True} + if case.stage_id and case.stage_id.state == 'draft': + data['date_open'] = fields.datetime.now() + if not case.user_id: + data['user_id'] = uid + self.case_set(cr, uid, [case.id], 'open', data, context=context) + self.case_open_send_note(cr, uid, [case.id], context=context) + return True + + def case_close(self, cr, uid, ids, context=None): + """ Closes case """ + self.case_set(cr, uid, ids, 'done', {'active': True, 'date_closed': fields.datetime.now()}, context=context) + self.case_close_send_note(cr, uid, ids, context=context) + return True + + def case_cancel(self, cr, uid, ids, context=None): + """ Cancels case """ + self.case_set(cr, uid, ids, 'cancel', {'active': True}, context=context) + self.case_cancel_send_note(cr, uid, ids, context=context) + return True + + def case_pending(self, cr, uid, ids, context=None): + """ Set case as pending """ + self.case_set(cr, uid, ids, 'pending', {'active': True}, context=context) + self.case_pending_send_note(cr, uid, ids, context=context) + return True + + def case_reset(self, cr, uid, ids, context=None): + """ Resets case as draft """ + self.case_set(cr, uid, ids, 'draft', {'active': True}, context=context) + self.case_reset_send_note(cr, uid, ids, context=context) + return True + + def case_set(self, cr, uid, ids, new_state_name=None, values_to_update=None, new_stage_id=None, context=None): + """ Generic method for setting case. This methods wraps the update + of the record, as well as call to _action and browse_record + case setting to fill the cache. + + :params new_state_name: the new state of the record; this method + will call ``stage_set_with_state_name`` + that will find the stage matching the + new state, using the ``stage_find`` method. + :params new_stage_id: alternatively, you may directly give the + new stage of the record + :params state_name: the new value of the state, such as + 'draft' or 'close'. + :params update_values: values that will be added with the state + update when writing values to the record. + """ + cases = self.browse(cr, uid, ids, context=context) + cases[0].state # fill browse record cache, for _action having old and new values + # 1. update the stage + if new_state_name: + self.stage_set_with_state_name(cr, uid, cases, new_state_name, context=context) + elif not (new_stage_id is None): + self.stage_set(cr, uid, ids, new_stage_id, context=context) + # 2. update values + if values_to_update: + self.write(cr, uid, ids, values_to_update, context=context) + # 3. call _action for base action rule + if new_state_name: + self._action(cr, uid, cases, new_state_name, context=context) + elif not (new_stage_id is None): + new_state_name = self.read(cr, uid, ids, ['state'], context=context)[0]['state'] + self._action(cr, uid, cases, new_state_name, context=context) + return True + + def _action(self, cr, uid, cases, state_to, scrit=None, context=None): + if context is None: + context = {} + context['state_to'] = state_to + rule_obj = self.pool.get('base.action.rule') + if not rule_obj: + return True + model_obj = self.pool.get('ir.model') + model_ids = model_obj.search(cr, uid, [('model','=',self._name)], context=context) + rule_ids = rule_obj.search(cr, uid, [('model_id','=',model_ids[0])], context=context) + return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context) + + def remind_partner(self, cr, uid, ids, context=None, attach=False): + return self.remind_user(cr, uid, ids, context, attach, + destination=False) + + def remind_user(self, cr, uid, ids, context=None, attach=False, destination=True): + mail_message = self.pool.get('mail.message') + for case in self.browse(cr, uid, ids, context=context): + if not destination and not case.email_from: + return False + if not case.user_id.user_email: + return False + if destination and case.section_id.user_id: + case_email = case.section_id.user_id.user_email + else: + case_email = case.user_id.user_email + + src = case_email + dest = case.user_id.user_email or "" + body = case.description or "" + for message in case.message_ids: + if message.email_from and message.body_text: + body = message.body_text + break + + if not destination: + src, dest = dest, case.email_from + if body and case.user_id.signature: + if body: + body += '\n\n%s' % (case.user_id.signature) + else: + body = '\n\n%s' % (case.user_id.signature) + + body = self.format_body(body) + + attach_to_send = {} + + if attach: + attach_ids = self.pool.get('ir.attachment').search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', case.id)]) + attach_to_send = self.pool.get('ir.attachment').read(cr, uid, attach_ids, ['datas_fname', 'datas']) + attach_to_send = dict(map(lambda x: (x['datas_fname'], base64.decodestring(x['datas'])), attach_to_send)) + + # Send an email + subject = "Reminder: [%s] %s" % (str(case.id), case.name, ) + mail_message.schedule_with_attach(cr, uid, + src, + [dest], + subject, + body, + model=self._name, + reply_to=case.section_id.reply_to, + res_id=case.id, + attachments=attach_to_send, + context=context + ) + return True + + def _check(self, cr, uid, ids=False, context=None): + """ Function called by the scheduler to process cases for date actions. + Must be overriden by inheriting classes. + """ + return True + + def format_body(self, body): + return self.pool.get('base.action.rule').format_body(body) + + def format_mail(self, obj, body): + return self.pool.get('base.action.rule').format_mail(obj, body) + + def message_thread_followers(self, cr, uid, ids, context=None): + res = {} + for case in self.browse(cr, uid, ids, context=context): + l=[] + if case.email_cc: + l.append(case.email_cc) + if case.user_id and case.user_id.user_email: + l.append(case.user_id.user_email) + res[case.id] = l + return res + + # ****************************** + # Notifications + # ****************************** + + def case_get_note_msg_prefix(self, cr, uid, id, context=None): + """ Default prefix for notifications. For example: "%s has been + <b>closed</b>.". As several models will inherit from base_stage, + this method returns a void string. Class using base_stage + will have to override this method to define the prefix they + want to display. + """ + return '' + + def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): + """ Send a notification when the stage changes. This method has + to be overriden, because each document will have its particular + behavior and/or stage model (such as project.task.type or + crm.case.stage). + """ + return True + + def case_open_send_note(self, cr, uid, ids, context=None): + for id in ids: + msg = _('%s has been <b>opened</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) + self.message_append_note(cr, uid, [id], body=msg, context=context) + return True + + def case_close_send_note(self, cr, uid, ids, context=None): + for id in ids: + msg = _('%s has been <b>closed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) + self.message_append_note(cr, uid, [id], body=msg, context=context) + return True + + def case_cancel_send_note(self, cr, uid, ids, context=None): + for id in ids: + msg = _('%s has been <b>canceled</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) + self.message_append_note(cr, uid, [id], body=msg, context=context) + return True + + def case_pending_send_note(self, cr, uid, ids, context=None): + for id in ids: + msg = _('%s is now <b>pending</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) + self.message_append_note(cr, uid, [id], body=msg, context=context) + return True + + def case_reset_send_note(self, cr, uid, ids, context=None): + for id in ids: + msg = _('%s has been <b>renewed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) + self.message_append_note(cr, uid, [id], body=msg, context=context) + return True + + def case_escalate_send_note(self, cr, uid, ids, new_section=None, context=None): + for id in ids: + if new_section: + msg = '%s has been <b>escalated</b> to <b>%s</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context), new_section.name) + else: + msg = '%s has been <b>escalated</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) + self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context) + return True diff --git a/addons/base_status/base_state.py b/addons/base_status/base_state.py new file mode 100644 index 00000000000..5baf71a01b6 --- /dev/null +++ b/addons/base_status/base_state.py @@ -0,0 +1,194 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-today OpenERP SA (<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 +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from osv import fields +from tools.translate import _ + +class base_state(object): + """ Base utility mixin class for objects willing to manage their state. + Object subclassing this class should define the following colums: + - ``date_open`` (datetime field) + - ``date_closed`` (datetime field) + - ``user_id`` (many2one to res.users) + - ``partner_id`` (many2one to res.partner) + - ``state`` (selection field) + """ + + def _get_default_partner(self, cr, uid, context=None): + """ Gives id of partner for current user + :param context: if portal not in context returns False + """ + if context is None: + context = {} + if not context or not context.get('portal'): + return False + user = self.pool.get('res.users').browse(cr, uid, uid, context=context) + if hasattr(user, 'partner_address_id') and user.partner_address_id: + return user.partner_address_id + return user.company_id.partner_id.id + + def _get_default_email(self, cr, uid, context=None): + """ Gives default email address for current user + :param context: if portal not in context returns False + """ + if context is None: + context = {} + if not context or not context.get('portal'): + return False + user = self.pool.get('res.users').browse(cr, uid, uid, context=context) + return user.user_email + + def _get_default_user(self, cr, uid, context=None): + """ Gives current user id + :param context: if portal not in context returns False + """ + if context is None: + context = {} + if not context or not context.get('portal'): + return False + return uid + + def onchange_partner_address_id(self, cr, uid, ids, add, email=False): + """ This function returns value of partner email based on Partner Address + :param add: Id of Partner's address + :param email: Partner's email ID + """ + data = {'value': {'email_from': False, 'phone':False}} + if add: + address = self.pool.get('res.partner').browse(cr, uid, add) + data['value'] = {'email_from': address and address.email or False , + 'phone': address and address.phone or False} + if 'phone' not in self._columns: + del data['value']['phone'] + return data + + def onchange_partner_id(self, cr, uid, ids, part, email=False): + """ This function returns value of partner address based on partner + :param part: Partner's id + :param email: Partner's email ID + """ + data={} + if part: + addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact']) + data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value']) + return {'value': data} + + def case_open(self, cr, uid, ids, context=None): + """ Opens case """ + cases = self.browse(cr, uid, ids, context=context) + for case in cases: + values = {'active': True} + if case.state == 'draft': + values['date_open'] = fields.datetime.now() + if not case.user_id: + values['user_id'] = uid + self.case_set(cr, uid, [case.id], 'open', values, context=context) + self.case_open_send_note(cr, uid, [case.id], context=context) + return True + + def case_close(self, cr, uid, ids, context=None): + """ Closes case """ + self.case_set(cr, uid, ids, 'done', {'date_closed': fields.datetime.now()}, context=context) + self.case_close_send_note(cr, uid, ids, context=context) + return True + + def case_cancel(self, cr, uid, ids, context=None): + """ Cancels case """ + self.case_set(cr, uid, ids, 'cancel', {'active': True}, context=context) + self.case_cancel_send_note(cr, uid, ids, context=context) + return True + + def case_pending(self, cr, uid, ids, context=None): + """ Sets case as pending """ + self.case_set(cr, uid, ids, 'pending', {'active': True}, context=context) + self.case_pending_send_note(cr, uid, ids, context=context) + return True + + def case_reset(self, cr, uid, ids, context=None): + """ Resets case as draft """ + self.case_set(cr, uid, ids, 'draft', {'active': True}, context=context) + self.case_reset_send_note(cr, uid, ids, context=context) + return True + + def case_set(self, cr, uid, ids, state_name, update_values=None, context=None): + """ Generic method for setting case. This methods wraps the update + of the record, as well as call to _action and browse_record + case setting to fill the cache. + + :params: state_name: the new value of the state, such as + 'draft' or 'close'. + :params: update_values: values that will be added with the state + update when writing values to the record. + """ + cases = self.browse(cr, uid, ids, context=context) + cases[0].state # fill browse record cache, for _action having old and new values + if update_values is None: + update_values = {} + update_values['state'] = state_name + self.write(cr, uid, ids, update_values, context=context) + self._action(cr, uid, cases, state_name, context=context) + + def _action(self, cr, uid, cases, state_to, scrit=None, context=None): + if context is None: + context = {} + context['state_to'] = state_to + rule_obj = self.pool.get('base.action.rule') + model_obj = self.pool.get('ir.model') + model_ids = model_obj.search(cr, uid, [('model','=',self._name)]) + rule_ids = rule_obj.search(cr, uid, [('model_id','=',model_ids[0])]) + return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context) + + # ****************************** + # Notifications + # ****************************** + + def case_get_note_msg_prefix(self, cr, uid, id, context=None): + return '' + + def case_open_send_note(self, cr, uid, ids, context=None): + for id in ids: + msg = _('%s has been <b>opened</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) + self.message_append_note(cr, uid, [id], body=msg, context=context) + return True + + def case_close_send_note(self, cr, uid, ids, context=None): + for id in ids: + msg = _('%s has been <b>closed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) + self.message_append_note(cr, uid, [id], body=msg, context=context) + return True + + def case_cancel_send_note(self, cr, uid, ids, context=None): + for id in ids: + msg = _('%s has been <b>canceled</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) + self.message_append_note(cr, uid, [id], body=msg, context=context) + return True + + def case_pending_send_note(self, cr, uid, ids, context=None): + for id in ids: + msg = _('%s is now <b>pending</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) + self.message_append_note(cr, uid, [id], body=msg, context=context) + return True + + def case_reset_send_note(self, cr, uid, ids, context=None): + for id in ids: + msg = _('%s has been <b>renewed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) + self.message_append_note(cr, uid, [id], body=msg, context=context) + return True diff --git a/addons/base_synchro/__openerp__.py b/addons/base_synchro/__openerp__.py index a7e0cff1144..73c8cf13258 100644 --- a/addons/base_synchro/__openerp__.py +++ b/addons/base_synchro/__openerp__.py @@ -30,7 +30,7 @@ Synchronization with all objects. Configure servers and trigger synchronization with its database objects. """, - "depends": ["base"], + "depends": ["base", "mail"], "demo_xml": [], "update_xml": [ "wizard/base_synchro_view.xml", diff --git a/addons/base_synchro/wizard/base_synchro.py b/addons/base_synchro/wizard/base_synchro.py index 1192c7768ff..28433b5caac 100644 --- a/addons/base_synchro/wizard/base_synchro.py +++ b/addons/base_synchro/wizard/base_synchro.py @@ -234,7 +234,6 @@ class base_synchro(osv.osv_memory): self.pool.get('base.synchro.obj').write(cr, uid, [object.id], {'synchronize_date': dt}) end_date = time.strftime('%Y-%m-%d, %Hh %Mm %Ss') if syn_obj.user_id: - request = pooler.get_pool(cr.dbname).get('res.request') if not self.report: self.report.append('No exception.') summary = '''Here is the synchronization report: @@ -249,12 +248,8 @@ Records created: %d Exceptions: '''% (start_date,end_date,self.report_total, self.report_write,self.report_create) summary += '\n'.join(self.report) - request.create(cr, uid, { - 'name' : "Synchronization report", - 'act_from' : uid, - 'act_to' : syn_obj.user_id.id, - 'body': summary, - }) + # Chatter: old res.request transformed into a message added to the destination user + self.pool.get('res.users').message_append_note(cr, uid, [syn_obj.user_id.id], body=summary, subject=_('Synchronization Report'), context=context) return True def upload_download_multi_thread(self, cr, uid, data, context=None): diff --git a/addons/base_vat/base_vat_view.xml b/addons/base_vat/base_vat_view.xml index 6be9d306546..fe43cc0770a 100644 --- a/addons/base_vat/base_vat_view.xml +++ b/addons/base_vat/base_vat_view.xml @@ -9,7 +9,7 @@ <field name="arch" type="xml"> <field name="property_account_payable" position="after"> <group colspan="2" col="6"> - <field name="vat" on_change="vat_change(vat)"/> + <field name="vat" on_change="vat_change(vat)" placeholder="BE0477472702"/> <button colspan="2" name="button_check_vat" string="Check VAT" type="object" icon="gtk-execute"/> <field name="vat_subjected" colspan="1"/> </group> diff --git a/addons/board/i18n/gu.po b/addons/board/i18n/gu.po new file mode 100644 index 00000000000..31d883053f7 --- /dev/null +++ b/addons/board/i18n/gu.po @@ -0,0 +1,348 @@ +# Gujarati translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-05-31 11:09+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Gujarati <gu@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: board +#: view:res.log.report:0 +msgid " Year " +msgstr "" + +#. module: board +#: model:ir.model,name:board.model_board_menu_create +msgid "Menu Create" +msgstr "" + +#. module: board +#: view:board.menu.create:0 +msgid "Menu Information" +msgstr "" + +#. module: board +#: view:res.users:0 +msgid "Latest Connections" +msgstr "" + +#. module: board +#: view:res.log.report:0 +msgid "Log created in last month" +msgstr "" + +#. module: board +#: view:board.board:0 +#: model:ir.actions.act_window,name:board.open_board_administration_form +msgid "Administration Dashboard" +msgstr "સંચાલન ડેશબોર્ડ" + +#. module: board +#: view:res.log.report:0 +msgid "Group By..." +msgstr "ગ્રુપ દ્વારા..." + +#. module: board +#: view:res.log.report:0 +msgid "Log created in current year" +msgstr "" + +#. module: board +#: model:ir.model,name:board.model_board_board +msgid "Board" +msgstr "બૉર્ડ" + +#. module: board +#: field:board.menu.create,menu_name:0 +msgid "Menu Name" +msgstr "" + +#. module: board +#: model:ir.actions.act_window,name:board.board_weekly_res_log_report_action +#: view:res.log.report:0 +msgid "Weekly Global Activity" +msgstr "" + +#. module: board +#: field:board.board.line,name:0 +msgid "Title" +msgstr "શીર્ષક" + +#. module: board +#: field:res.log.report,nbr:0 +msgid "# of Entries" +msgstr "" + +#. module: board +#: view:res.log.report:0 +#: field:res.log.report,month:0 +msgid "Month" +msgstr "મહિનો" + +#. module: board +#: view:res.log.report:0 +msgid "Log created in current month" +msgstr "" + +#. module: board +#: model:ir.actions.act_window,name:board.board_monthly_res_log_report_action +#: view:res.log.report:0 +msgid "Monthly Activity per Document" +msgstr "" + +#. module: board +#: view:board.board:0 +msgid "Configuration Overview" +msgstr "" + +#. module: board +#: model:ir.actions.act_window,name:board.action_view_board_list_form +#: model:ir.ui.menu,name:board.menu_view_board_form +msgid "Dashboard Definition" +msgstr "" + +#. module: board +#: selection:res.log.report,month:0 +msgid "March" +msgstr "માર્ચ" + +#. module: board +#: selection:res.log.report,month:0 +msgid "August" +msgstr "ઑગસ્ટ" + +#. module: board +#: model:ir.actions.act_window,name:board.action_user_connection_tree +msgid "User Connections" +msgstr "" + +#. module: board +#: field:res.log.report,creation_date:0 +msgid "Creation Date" +msgstr "સર્જન તારીખ" + +#. module: board +#: view:res.log.report:0 +msgid "Log Analysis" +msgstr "" + +#. module: board +#: field:res.log.report,res_model:0 +msgid "Object" +msgstr "વસ્તુ" + +#. module: board +#: selection:res.log.report,month:0 +msgid "June" +msgstr "જૂન" + +#. module: board +#: field:board.board,line_ids:0 +msgid "Action Views" +msgstr "" + +#. module: board +#: model:ir.model,name:board.model_res_log_report +msgid "Log Report" +msgstr "" + +#. module: board +#: code:addons/board/wizard/board_menu_create.py:46 +#, python-format +msgid "Please Insert Dashboard View(s) !" +msgstr "" + +#. module: board +#: selection:res.log.report,month:0 +msgid "July" +msgstr "જુલાઈ" + +#. module: board +#: view:res.log.report:0 +#: field:res.log.report,day:0 +msgid "Day" +msgstr "દિવસ" + +#. module: board +#: view:board.menu.create:0 +msgid "Create Menu For Dashboard" +msgstr "" + +#. module: board +#: selection:res.log.report,month:0 +msgid "February" +msgstr "" + +#. module: board +#: selection:res.log.report,month:0 +msgid "October" +msgstr "" + +#. module: board +#: model:ir.model,name:board.model_board_board_line +msgid "Board Line" +msgstr "" + +#. module: board +#: field:board.menu.create,menu_parent_id:0 +msgid "Parent Menu" +msgstr "" + +#. module: board +#: view:res.log.report:0 +msgid " Month-1 " +msgstr "" + +#. module: board +#: selection:res.log.report,month:0 +msgid "January" +msgstr "" + +#. module: board +#: view:board.board:0 +msgid "Users" +msgstr "" + +#. module: board +#: selection:res.log.report,month:0 +msgid "November" +msgstr "" + +#. module: board +#: help:board.board.line,sequence:0 +msgid "" +"Gives the sequence order when displaying a list of " +"board lines." +msgstr "" + +#. module: board +#: selection:res.log.report,month:0 +msgid "April" +msgstr "" + +#. module: board +#: view:board.board:0 +#: field:board.board,name:0 +#: field:board.board.line,board_id:0 +#: model:ir.ui.menu,name:board.menu_dasboard +msgid "Dashboard" +msgstr "" + +#. module: board +#: code:addons/board/wizard/board_menu_create.py:45 +#, python-format +msgid "User Error!" +msgstr "" + +#. module: board +#: field:board.board.line,action_id:0 +msgid "Action" +msgstr "" + +#. module: board +#: field:board.board.line,position:0 +msgid "Position" +msgstr "" + +#. module: board +#: view:res.log.report:0 +msgid "Model" +msgstr "" + +#. module: board +#: model:ir.actions.act_window,name:board.board_homepage_action +msgid "Home Page" +msgstr "" + +#. module: board +#: model:ir.actions.act_window,name:board.action_latest_activities_tree +msgid "Latest Activities" +msgstr "" + +#. module: board +#: selection:board.board.line,position:0 +msgid "Left" +msgstr "" + +#. module: board +#: field:board.board,view_id:0 +msgid "Board View" +msgstr "" + +#. module: board +#: selection:board.board.line,position:0 +msgid "Right" +msgstr "" + +#. module: board +#: field:board.board.line,width:0 +msgid "Width" +msgstr "" + +#. module: board +#: view:res.log.report:0 +msgid " Month " +msgstr "" + +#. module: board +#: field:board.board.line,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: board +#: selection:res.log.report,month:0 +msgid "September" +msgstr "" + +#. module: board +#: selection:res.log.report,month:0 +msgid "December" +msgstr "" + +#. module: board +#: view:board.board:0 +#: view:board.menu.create:0 +msgid "Create Menu" +msgstr "" + +#. module: board +#: field:board.board.line,height:0 +msgid "Height" +msgstr "" + +#. module: board +#: model:ir.actions.act_window,name:board.action_board_menu_create +msgid "Create Board Menu" +msgstr "" + +#. module: board +#: selection:res.log.report,month:0 +msgid "May" +msgstr "" + +#. module: board +#: view:res.log.report:0 +#: field:res.log.report,name:0 +msgid "Year" +msgstr "" + +#. module: board +#: view:board.menu.create:0 +msgid "Cancel" +msgstr "" + +#. module: board +#: view:board.board:0 +msgid "Dashboard View" +msgstr "" diff --git a/addons/caldav/i18n/pt.po b/addons/caldav/i18n/pt.po index 1a27f114f0c..2746ddd853a 100644 --- a/addons/caldav/i18n/pt.po +++ b/addons/caldav/i18n/pt.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-02-08 00:36+0000\n" -"PO-Revision-Date: 2012-05-10 17:59+0000\n" -"Last-Translator: Raphael Collet (OpenERP) <Unknown>\n" +"PO-Revision-Date: 2012-05-31 15:16+0000\n" +"Last-Translator: ThinkOpen Solutions <Unknown>\n" "Language-Team: Portuguese <pt@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-05-11 05:13+0000\n" -"X-Generator: Launchpad (build 15225)\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: caldav #: view:basic.calendar:0 @@ -672,7 +672,7 @@ msgstr "" #. module: caldav #: view:caldav.browse:0 msgid "Browse Caldav" -msgstr "" +msgstr "Pesquisa Caldav" #. module: caldav #: field:user.preference,host_name:0 diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index 2049b3a8cc9..0c9b75b4d41 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -57,6 +57,7 @@ Creates a dashboard for CRM that includes: 'depends': [ 'base_action_rule', 'base_setup', + 'base_status', 'process', 'mail', 'base_calendar', @@ -66,7 +67,6 @@ Creates a dashboard for CRM that includes: ], 'init_xml': [ 'crm_data.xml', - 'crm_meeting_data.xml', 'crm_lead_data.xml', 'crm_meeting_data.xml', 'crm_phonecall_data.xml', diff --git a/addons/crm/board_crm_view.xml b/addons/crm/board_crm_view.xml index b8e05b68cf5..fd6b95d81f9 100644 --- a/addons/crm/board_crm_view.xml +++ b/addons/crm/board_crm_view.xml @@ -11,27 +11,10 @@ <field name="name" string="Opportunity"/> <field name="partner_id" string="Customer"/> <field name="stage_id"/> - <button name="stage_previous" string="Previous Stage" - states="open,pending" type="object" icon="gtk-go-back" /> - <button name="stage_next" string="Next Stage" - states="open,pending" type="object" - icon="gtk-go-forward" /> <field name="planned_revenue" sum="Total of Planned Revenue"/> <field name="probability" widget="progressbar" avg="Avg. of Probability"/> <field name="date_deadline" invisible="1"/> - <field name="state"/> - <button name="case_open" string="Open" - states="draft,pending" type="object" - icon="gtk-go-forward" /> - <button name="case_pending" string="Pending" - states="open,draft" type="object" - icon="gtk-media-pause" /> - <button name="case_mark_lost" string="Lost" - states="open,pending" type="object" - icon="gtk-cancel" /> - <button name="case_close" string="Won" - states="open,draft,pending" type="object" - icon="gtk-apply" /> + <field name="state" groups="base.group_no_one"/> </tree> </field> </record> diff --git a/addons/crm/crm.py b/addons/crm/crm.py index eb6314c5103..65af3f9e530 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-today OpenERP SA (<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,12 +19,11 @@ # ############################################################################## -import time import base64 -import tools - +import time from osv import fields from osv import osv +import tools from tools.translate import _ MAX_LEVEL = 15 @@ -57,8 +56,11 @@ class crm_case_channel(osv.osv): } class crm_case_stage(osv.osv): - """ Stage of case """ - + """ Model for case stages. This models the main stages of a document + management flow. Main CRM objects (leads, opportunities, project + issues, ...) will now use only stages, instead of state and stages. + Stages are for example used to display the kanban view of records. + """ _name = "crm.case.stage" _description = "Stage of case" _rec_name = 'name' @@ -66,22 +68,34 @@ class crm_case_stage(osv.osv): _columns = { 'name': fields.char('Stage Name', size=64, required=True, translate=True), - 'sequence': fields.integer('Sequence', help="Used to order stages."), + 'sequence': fields.integer('Sequence', help="Used to order stages. Lower is better."), 'probability': fields.float('Probability (%)', required=True, help="This percentage depicts the default/average probability of the Case for this stage to be a success"), 'on_change': fields.boolean('Change Probability Automatically', help="Setting this stage will change the probability automatically on the opportunity."), 'requirements': fields.text('Requirements'), - 'section_ids':fields.many2many('crm.case.section', 'section_stage_rel', 'stage_id', 'section_id', 'Sections'), - '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."), + 'section_ids':fields.many2many('crm.case.section', 'section_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(AVAILABLE_STATES, 'State', required=True, help="The related state for the stage. The state of your document will automatically change regarding the selected stage. For example, if a stage is related to the state 'Close', when your document reaches this stage, it will be automatically have the 'closed' state."), + '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', + help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."), + 'type': fields.selection([ ('lead','Lead'), + ('opportunity', 'Opportunity'), + ('both', 'Both')], + string='Type', size=16, required=True, + help="This field is used to distinguish stages related to Leads from stages related to Opportunities, or to specify stages available for both types."), } _defaults = { 'sequence': lambda *args: 1, 'probability': lambda *args: 0.0, + 'state': 'draft', + 'fold': False, + 'type': 'both', } class crm_case_section(osv.osv): - """Sales Team""" - + """ Model for sales teams. """ _name = "crm.case.section" _description = "Sales Teams" _order = "complete_name" @@ -107,6 +121,7 @@ class crm_case_section(osv.osv): 'working_hours': fields.float('Working Hours', digits=(16,2 )), 'stage_ids': fields.many2many('crm.case.stage', 'section_stage_rel', 'section_id', 'stage_id', 'Stages'), } + def _get_stage_common(self, cr, uid, context): ids = self.pool.get('crm.case.stage').search(cr, uid, [('case_default','=',1)], context=context) return ids @@ -171,429 +186,6 @@ class crm_case_resource_type(osv.osv): 'section_id': fields.many2one('crm.case.section', 'Sales Team'), } -class crm_base(object): - """ Base utility mixin class for crm objects, - Object subclassing this should define colums: - date_open - date_closed - user_id - partner_id - """ - def _get_default_partner_address(self, cr, uid, context=None): - """Gives id of default address for current user - :param context: if portal in context is false return false anyway - """ - if context is None: - context = {} - if not context.get('portal'): - return False - # was user.address_id.id, but address_id has been removed - user = self.pool.get('res.users').browse(cr, uid, uid, context=context) - if hasattr(user, 'partner_address_id') and user.partner_address_id: - return user.partner_address_id - return False - - def _get_default_partner(self, cr, uid, context=None): - """Gives id of partner for current user - :param context: if portal in context is false return false anyway - """ - if context is None: - context = {} - if not context.get('portal', False): - return False - user = self.pool.get('res.users').browse(cr, uid, uid, context=context) - if hasattr(user, 'partner_address_id') and user.partner_address_id: - return user.partner_address_id - return user.company_id.partner_id.id - - def _get_default_email(self, cr, uid, context=None): - """Gives default email address for current user - :param context: if portal in context is false return false anyway - """ - if not context.get('portal', False): - return False - user = self.pool.get('res.users').browse(cr, uid, uid, context=context) - return user.user_email - - def _get_default_user(self, cr, uid, context=None): - """Gives current user id - :param context: if portal in context is false return false anyway - """ - if context and context.get('portal', False): - return False - return uid - - def _get_section(self, cr, uid, context=None): - return False - - def onchange_partner_address_id(self, cr, uid, ids, add, email=False): - """This function returns value of partner email based on Partner Address - :param ids: List of case IDs - :param add: Id of Partner's address - :param email: Partner's email ID - """ - data = {'value': {'email_from': False, 'phone':False}} - if add: - address = self.pool.get('res.partner').browse(cr, uid, add) - data['value'] = {'email_from': address and address.email or False , - 'phone': address and address.phone or False} - if 'phone' not in self._columns: - del data['value']['phone'] - return data - - def onchange_partner_id(self, cr, uid, ids, part, email=False): - """This function returns value of partner address based on partner - :param ids: List of case IDs - :param part: Partner's id - :param email: Partner's email ID - """ - data={} - if part: - addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact']) - data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value']) - return {'value': data} - - def case_get_note_msg_prefix(self, cr, uid, id, context=None): - return '' - - def case_open_send_note(self, cr, uid, ids, context=None): - for id in ids: - msg = '%s has been <b>opened</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) - self.message_append_note(cr, uid, [id], body=msg, context=context) - return True - - def case_close_send_note(self, cr, uid, ids, context=None): - for id in ids: - msg = '%s has been <b>closed</b>.'% (self.case_get_note_msg_prefix(cr, uid, id, context=context)) - self.message_append_note(cr, uid, [id], body=msg, context=context) - return True - - def case_cancel_send_note(self, cr, uid, ids, context=None): - for id in ids: - msg = '%s has been <b>canceled</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) - self.message_append_note(cr, uid, [id], body=msg, context=context) - return True - - def case_pending_send_note(self, cr, uid, ids, context=None): - for id in ids: - msg = '%s is now <b>pending</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) - self.message_append_note(cr, uid, [id], body=msg, context=context) - return True - - def case_reset_send_note(self, cr, uid, ids, context=None): - for id in ids: - msg = '%s has been <b>renewed</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) - self.message_append_note(cr, uid, [id], body=msg, context=context) - return True - - def case_open(self, cr, uid, ids, context=None): - """Opens Case - :param ids: List of case Ids - """ - cases = self.browse(cr, uid, ids) - for case in cases: - data = {'state': 'open', 'active': True} - if not case.user_id: - data['user_id'] = uid - self.write(cr, uid, [case.id], data) - self.case_open_send_note(cr, uid, ids, context=context) - self._action(cr, uid, cases, 'open') - - return True - - def case_close(self, cr, uid, ids, context=None): - """Closes Case - :param ids: List of case Ids - """ - cases = self.browse(cr, uid, ids) - cases[0].state # to fill the browse record cache - self.write(cr, uid, ids, {'state': 'done', 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'), }) - # We use the cache of cases to keep the old case state - self.case_close_send_note(cr, uid, ids, context=context) - self._action(cr, uid, cases, 'done') - return True - - def case_cancel(self, cr, uid, ids, context=None): - """Cancels Case - :param ids: List of case Ids - """ - cases = self.browse(cr, uid, ids) - cases[0].state # to fill the browse record cache - self.write(cr, uid, ids, {'state': 'cancel', 'active': True}) - # We use the cache of cases to keep the old case state - self.case_cancel_send_note(cr, uid, ids, context=context) - self._action(cr, uid, cases, 'cancel') - return True - - def case_pending(self, cr, uid, ids, context=None): - """Marks case as pending - :param ids: List of case Ids - """ - cases = self.browse(cr, uid, ids) - cases[0].state # to fill the browse record cache - self.write(cr, uid, ids, {'state': 'pending', 'active': True}) - self.case_pending_send_note(cr, uid, ids, context=context) - self._action(cr, uid, cases, 'pending') - return True - - def case_reset(self, cr, uid, ids, context=None): - """Resets case as draft - :param ids: List of case Ids - """ - cases = self.browse(cr, uid, ids) - cases[0].state # to fill the browse record cache - self.write(cr, uid, ids, {'state': 'draft', 'active': True}) - self.case_reset_send_note(cr, uid, ids, context=context) - self._action(cr, uid, cases, 'draft') - return True - - def _action(self, cr, uid, cases, state_to, scrit=None, context=None): - if context is None: - context = {} - context['state_to'] = state_to - rule_obj = self.pool.get('base.action.rule') - model_obj = self.pool.get('ir.model') - model_ids = model_obj.search(cr, uid, [('model','=',self._name)]) - rule_ids = rule_obj.search(cr, uid, [('model_id','=',model_ids[0])]) - return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context) - -class crm_case(crm_base): - """ A simple python class to be used for common functions - Object that inherit from this class should inherit from mailgate.thread - And need a stage_id field - And object that inherit (orm inheritance) from a class the overwrite copy - """ - - def stage_find(self, cr, uid, section_id, domain=[], order='sequence'): - domain = list(domain) - if section_id: - domain.append(('section_ids', '=', section_id)) - stage_ids = self.pool.get('crm.case.stage').search(cr, uid, domain, order=order) - if stage_ids: - return stage_ids[0] - return False - - def stage_set(self, cr, uid, ids, stage_id, context=None): - value = {} - if hasattr(self,'onchange_stage_id'): - value = self.onchange_stage_id(cr, uid, ids, stage_id)['value'] - value['stage_id'] = stage_id - return self.write(cr, uid, ids, value, context=context) - - def stage_change(self, cr, uid, ids, op, order, context=None): - if context is None: - context = {} - for case in self.browse(cr, uid, ids, context=context): - seq = 0 - if case.stage_id: - seq = case.stage_id.sequence - section_id = None - if case.section_id: - section_id = case.section_id.id - next_stage_id = self.stage_find(cr, uid, section_id, [('sequence',op,seq)],order) - if next_stage_id: - return self.stage_set(cr, uid, [case.id], next_stage_id, context=context) - return False - - def stage_next(self, cr, uid, ids, context=None): - """This function computes next stage for case from its current stage - using available stage for that case type - """ - return self.stage_change(cr, uid, ids, '>','sequence', context) - - def stage_previous(self, cr, uid, ids, context=None): - """This function computes previous stage for case from its current - stage using available stage for that case type - """ - return self.stage_change(cr, uid, ids, '<', 'sequence desc', context) - - def copy(self, cr, uid, id, default=None, context=None): - """Overrides orm copy method to avoid copying messages, - as well as date_closed and date_open columns if they - exist.""" - if default is None: - default = {} - - default.update({ 'message_ids': [], }) - if hasattr(self, '_columns'): - if self._columns.get('date_closed'): - default.update({ 'date_closed': False, }) - if self._columns.get('date_open'): - default.update({ 'date_open': False }) - return super(crm_case, self).copy(cr, uid, id, default, context=context) - - def case_escalate_send_note(self, cr, uid, ids, new_section=None, context=None): - for id in ids: - if new_section: - msg = '%s has been <b>escalated</b> to <b>%s</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context), new_section.name) - else: - msg = '%s has been <b>escalated</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context)) - self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context) - return True - - def case_get_note_msg_prefix(self, cr, uid, id, context=None): - return '' - - def case_open(self, cr, uid, ids, context=None): - """Opens Case""" - cases = self.browse(cr, uid, ids) - for case in cases: - data = {'state': 'open', 'active': True } - if not case.user_id: - data['user_id'] = uid - self.write(cr, uid, [case.id], data) - self.case_open_send_note(cr, uid, ids, context=context) - self._action(cr, uid, cases, 'open') - return True - - def case_close(self, cr, uid, ids, context=None): - """Closes Case""" - cases = self.browse(cr, uid, ids) - cases[0].state # to fill the browse record cache - self.write(cr, uid, ids, {'state': 'done', - 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'), - }) - # - # We use the cache of cases to keep the old case state - # - self.case_close_send_note(cr, uid, ids, context=context) - self._action(cr, uid, cases, 'done') - return True - - def case_escalate(self, cr, uid, ids, context=None): - """Escalates case to parent level""" - cases = self.browse(cr, uid, ids) - for case in cases: - 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 can not escalate, you are already at the top level regarding your sales-team category.')) - self.write(cr, uid, [case.id], data) - case.case_escalate_send_note(case.section_id.parent_id) - cases = self.browse(cr, uid, ids) - self._action(cr, uid, cases, 'escalate') - return True - - def case_cancel(self, cr, uid, ids, context=None): - """Cancels Case""" - cases = self.browse(cr, uid, ids) - cases[0].state # to fill the browse record cache - self.write(cr, uid, ids, {'state': 'cancel', - 'active': True}) - self.case_cancel_send_note(cr, uid, ids, context=context) - self._action(cr, uid, cases, 'cancel') - return True - - def case_pending(self, cr, uid, ids, context=None): - """Marks case as pending""" - cases = self.browse(cr, uid, ids) - cases[0].state # to fill the browse record cache - self.write(cr, uid, ids, {'state': 'pending', 'active': True}) - self.case_pending_send_note(cr, uid, ids, context=context) - self._action(cr, uid, cases, 'pending') - return True - - def case_reset(self, cr, uid, ids, context=None): - """Resets case as draft""" - state = 'draft' - cases = self.browse(cr, uid, ids) - cases[0].state # to fill the browse record cache - self.write(cr, uid, ids, {'state': state, 'active': True}) - self.case_reset_send_note(cr, uid, ids, context=context) - self._action(cr, uid, cases, state) - return True - - def remind_partner(self, cr, uid, ids, context=None, attach=False): - return self.remind_user(cr, uid, ids, context, attach, - destination=False) - - def remind_user(self, cr, uid, ids, context=None, attach=False, destination=True): - mail_message = self.pool.get('mail.message') - for case in self.browse(cr, uid, ids, context=context): - if not destination and not case.email_from: - return False - if not case.user_id.user_email: - return False - if destination and case.section_id.user_id: - case_email = case.section_id.user_id.user_email - else: - case_email = case.user_id.user_email - - src = case_email - dest = case.user_id.user_email or "" - body = case.description or "" - for message in case.message_ids: - if message.email_from and message.body_text: - body = message.body_text - break - - if not destination: - src, dest = dest, case.email_from - if body and case.user_id.signature: - if body: - body += '\n\n%s' % (case.user_id.signature) - else: - body = '\n\n%s' % (case.user_id.signature) - - body = self.format_body(body) - - attach_to_send = {} - - if attach: - attach_ids = self.pool.get('ir.attachment').search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', case.id)]) - attach_to_send = self.pool.get('ir.attachment').read(cr, uid, attach_ids, ['datas_fname', 'datas']) - attach_to_send = dict(map(lambda x: (x['datas_fname'], base64.decodestring(x['datas'])), attach_to_send)) - - # Send an email - subject = "Reminder: [%s] %s" % (str(case.id), case.name, ) - mail_message.schedule_with_attach(cr, uid, - src, - [dest], - subject, - body, - model=self._name, - reply_to=case.section_id.reply_to, - res_id=case.id, - attachments=attach_to_send, - context=context - ) - return True - - def _check(self, cr, uid, ids=False, context=None): - """Function called by the scheduler to process cases for date actions - Only works on not done and cancelled cases - """ - cr.execute('select * from crm_case \ - where (date_action_last<%s or date_action_last is null) \ - and (date_action_next<=%s or date_action_next is null) \ - and state not in (\'cancel\',\'done\')', - (time.strftime("%Y-%m-%d %H:%M:%S"), - time.strftime('%Y-%m-%d %H:%M:%S'))) - - ids2 = map(lambda x: x[0], cr.fetchall() or []) - cases = self.browse(cr, uid, ids2, context=context) - return self._action(cr, uid, cases, False, context=context) - - def format_body(self, body): - return self.pool.get('base.action.rule').format_body(body) - - def format_mail(self, obj, body): - return self.pool.get('base.action.rule').format_mail(obj, body) - - def message_thread_followers(self, cr, uid, ids, context=None): - res = {} - for case in self.browse(cr, uid, ids, context=context): - l=[] - if case.email_cc: - l.append(case.email_cc) - if case.user_id and case.user_id.user_email: - l.append(case.user_id.user_email) - res[case.id] = l - return res def _links_get(self, cr, uid, context=None): """Gets links value for reference field""" diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index bf20deb0ce5..82bc50eafea 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-today OpenERP SA (<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,15 +19,15 @@ # ############################################################################## -from osv import fields, osv -from datetime import datetime +import binascii +from base_status.base_stage import base_stage import crm +from datetime import datetime +from mail.mail_message import to_email +from osv import fields, osv import time -from tools.translate import _ -from crm import crm_case -import binascii import tools -from mail.mail_message import to_email +from tools.translate import _ CRM_LEAD_PENDING_STATES = ( crm.AVAILABLE_STATES[2][0], # Cancelled @@ -35,22 +35,68 @@ CRM_LEAD_PENDING_STATES = ( crm.AVAILABLE_STATES[4][0], # Pending ) -class crm_lead(crm_case, osv.osv): +class crm_lead(base_stage, osv.osv): """ CRM Lead Case """ _name = "crm.lead" _description = "Lead/Opportunity" _order = "priority,date_action,id desc" _inherit = ['ir.needaction_mixin', 'mail.thread','res.partner'] + 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) + + 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'), ('type', '=', 'both')], context=context) + + def _resolve_section_id_from_context(self, cr, uid, context=None): + """ Returns ID of section based on the value of 'section_id' + context key, or None if it cannot be resolved to a single + Sales Team. + """ + if context is None: + context = {} + 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) + if len(section_ids) == 1: + return int(section_ids[0][0]) + return None + + def _resolve_type_from_context(self, cr, uid, context=None): + """ Returns the type (lead or opportunity) from the type context + key. Returns None if it cannot be resolved. + """ + if context is None: + context = {} + return context.get('default_type') + def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): access_rights_uid = access_rights_uid or uid stage_obj = self.pool.get('crm.case.stage') order = stage_obj._order + # lame hack to allow reverting search, should just work in the trivial case if read_group_order == 'stage_id desc': - # lame hack to allow reverting search, should just work in the trivial case order = "%s desc" % order - stage_ids = stage_obj._search(cr, uid, ['|', ('id','in',ids),('case_default','=',1)], order=order, - access_rights_uid=access_rights_uid, context=context) + # retrieve section_id from the context and write the domain + # - ('id', 'in', 'ids'): add columns that should be present + # - OR ('case_default', '=', True), ('fold', '=', False): add default columns that are not folded + # - OR ('section_ids', '=', section_id), ('fold', '=', False) if section_id: add section columns that are not folded + search_domain = [] + section_id = self._resolve_section_id_from_context(cr, uid, context=context) + if section_id: + search_domain += ['|', '&', ('section_ids', '=', section_id), ('fold', '=', False)] + search_domain += ['|', ('id', 'in', ids), '&', ('case_default', '=', True), ('fold', '=', False)] + # retrieve type from the context (if set: choose 'type' or 'both') + type = self._resolve_type_from_context(cr, uid, context=context) + if type: + search_domain += ['|', ('type', '=', type), ('type', '=', 'both')] + # perform search + stage_ids = stage_obj._search(cr, uid, search_domain, order=order, access_rights_uid=access_rights_uid, context=context) result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context) # restore order of the search result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0]))) @@ -143,7 +189,7 @@ class crm_lead(crm_case, osv.osv): select=True, help="Optional linked partner, usually after conversion of the lead"), 'id': fields.integer('ID', readonly=True), - 'name': fields.char('Name', size=64, select=1), + 'name': fields.char('Subject', size=64, required=True, select=1), 'active': fields.boolean('Active', required=False), 'date_action_last': fields.datetime('Last Action', readonly=1), 'date_action_next': fields.datetime('Next Action', readonly=1), @@ -154,7 +200,6 @@ class crm_lead(crm_case, osv.osv): 'email_cc': fields.text('Global CC', size=252 , help="These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"), 'description': fields.text('Notes'), 'write_date': fields.datetime('Update Date' , readonly=True), - 'categ_id': fields.many2one('crm.case.categ', 'Category', \ domain="['|',('section_id','=',section_id),('section_id','=',False), ('object_id.model', '=', 'crm.lead')]"), 'type_id': fields.many2one('crm.case.resource.type', 'Campaign', \ @@ -167,7 +212,8 @@ class crm_lead(crm_case, osv.osv): 'type':fields.selection([ ('lead','Lead'), ('opportunity','Opportunity'), ],'Type', help="Type is used to separate Leads and Opportunities"), 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True), 'date_closed': fields.datetime('Closed', readonly=True), - 'stage_id': fields.many2one('crm.case.stage', 'Stage', domain="[('section_ids', '=', section_id)]"), + 'stage_id': fields.many2one('crm.case.stage', 'Stage', + domain="['&', '|', ('section_ids', '=', section_id), ('case_default', '=', True), '|', ('type', '=', type), ('type', '=', 'both')]"), 'user_id': fields.many2one('res.users', 'Salesperson'), 'referred': fields.char('Referred By', size=64), 'date_open': fields.datetime('Opened', readonly=True), @@ -175,12 +221,13 @@ class crm_lead(crm_case, osv.osv): multi='day_open', type="float", store=True), 'day_close': fields.function(_compute_day, string='Days to Close', \ multi='day_close', type="float", store=True), - 'state': fields.selection(crm.AVAILABLE_STATES, 'Status', size=16, readonly=True, - help='The state is set to \'Draft\', when a case is created.\ - \nIf the case is in progress the state is set to \'In progress\'.\ - \nWhen the case is over, the state is set to \'Done\'.\ - \nIf the case needs to be reviewed then the state is set to \'Pending\'.'), - 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]), + 'state': fields.related('stage_id', 'state', type="selection", store=True, + selection=crm.AVAILABLE_STATES, string="State", readonly=True, + help='The state is set to \'Draft\', when a case is created.\ + If the case is in progress the state is set to \'Open\'.\ + When the case is over, the state is set to \'Done\'.\ + If the case needs to be reviewed then the state is \ + set to \'Pending\'.'), 'subjects': fields.function(_get_email_subject, fnct_search=_history_search, string='Subject of Email', type='char', size=64), # Only used for type opportunity @@ -192,23 +239,21 @@ class crm_lead(crm_case, osv.osv): 'date_deadline': fields.date('Expected Closing'), 'date_action': fields.date('Next Action Date', select=True), 'title_action': fields.char('Next Action', size=64), - 'stage_id': fields.many2one('crm.case.stage', 'Stage', domain="[('section_ids', '=', section_id)]"), 'color': fields.integer('Color Index'), 'partner_address_name': fields.related('partner_id', 'name', type='char', string='Partner Contact Name', readonly=True), 'partner_address_email': fields.related('partner_id', 'email', type='char', string='Partner Contact Email', readonly=True), 'company_currency': fields.related('company_id', 'currency_id', 'symbol', type='char', string='Company Currency', readonly=True), 'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True), 'user_login': fields.related('user_id', 'login', type='char', string='User Login', readonly=True), - } _defaults = { - 'active': lambda *a: 1, - 'user_id': crm_case._get_default_user, - 'email_from': crm_case._get_default_email, - 'state': lambda *a: 'draft', - 'type': lambda *a: 'lead', - 'section_id': crm_case._get_section, + '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), + '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), 'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0], 'color': 0, @@ -241,95 +286,104 @@ class crm_lead(crm_case, osv.osv): return {'value':{}} return {'value':{'probability': stage.probability}} - def stage_find_percent(self, cr, uid, percent, section_id): - """ Return the first stage with a probability == percent + def _check(self, cr, uid, ids=False, context=None): + """ Override of the base.stage method. + Function called by the scheduler to process cases for date actions + Only works on not done and cancelled cases + """ + cr.execute('select * from crm_case \ + where (date_action_last<%s or date_action_last is null) \ + and (date_action_next<=%s or date_action_next is null) \ + and state not in (\'cancel\',\'done\')', + (time.strftime("%Y-%m-%d %H:%M:%S"), + time.strftime('%Y-%m-%d %H:%M:%S'))) + + ids2 = map(lambda x: x[0], cr.fetchall() or []) + cases = self.browse(cr, uid, ids2, context=context) + return self._action(cr, uid, cases, False, context=context) + + def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None): + """ Override of the base.stage method + Parameter of the stage search taken from the lead: + - type: stage type must be the same or 'both' + - section_id: if set, stages must belong to this section or + be a default stage; if not set, stages must be default + stages """ - stage_pool = self.pool.get('crm.case.stage') - if section_id : - ids = stage_pool.search(cr, uid, [("probability", '=', percent), ("section_ids", 'in', [section_id])]) - else : - ids = stage_pool.search(cr, uid, [("probability", '=', percent)]) - - if ids: - return ids[0] + if isinstance(cases, (int, long)): + cases = self.browse(cr, uid, cases, context=context) + # collect all section_ids + section_ids = [] + types = ['both'] + if section_id: + section_ids.append(section_id) + for lead in cases: + if lead.section_id: + section_ids.append(lead.section_id.id) + if lead.type not in types: + types.append(lead.type) + # OR all section_ids and OR with case_default + search_domain = [] + if section_ids: + search_domain += [('|')] * len(section_ids) + for section_id in section_ids: + search_domain.append(('section_ids', '=', section_id)) + search_domain.append(('case_default', '=', True)) + # AND with cases types + search_domain.append(('type', 'in', types)) + # AND with the domain in parameter + search_domain += list(domain) + # perform search, return the first found + stage_ids = self.pool.get('crm.case.stage').search(cr, uid, search_domain, order=order, context=context) + if stage_ids: + return stage_ids[0] return False - def stage_find_lost(self, cr, uid, section_id): - return self.stage_find_percent(cr, uid, 0.0, section_id) - - def stage_find_won(self, cr, uid, section_id): - return self.stage_find_percent(cr, uid, 100.0, section_id) - - def case_open(self, cr, uid, ids, context=None): - for lead in self.browse(cr, uid, ids, context=context): - if lead.state == 'draft': - value = {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')} - self.write(cr, uid, [lead.id], value) - if lead.type == 'opportunity' and not lead.stage_id: - stage_id = self.stage_find(cr, uid, lead.section_id.id or False, [('sequence','>',0)]) - if stage_id: - self.stage_set(cr, uid, [lead.id], stage_id) - res = super(crm_lead, self).case_open(cr, uid, ids, context) - return res - - def case_close(self, cr, uid, ids, context=None): - res = super(crm_lead, self).case_close(cr, uid, ids, context) - self.write(cr, uid, ids, {'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')}) - return res - def case_cancel(self, cr, uid, ids, context=None): - """Overrides cancel for crm_case for setting probability - """ - res = super(crm_lead, self).case_cancel(cr, uid, ids, context) - self.write(cr, uid, ids, {'probability' : 0.0}) + """ 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 reset as draft in order to set the stage field as empty - """ - res = super(crm_lead, self).case_reset(cr, uid, ids, context) - self.write(cr, uid, ids, {'stage_id': False, 'probability': 0.0}) + """ 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 case_mark_lost(self, cr, uid, ids, context=None): - """Mark the case as lost: state = done and probability = 0% - """ - res = super(crm_lead, self).case_close(cr, uid, ids, context) - self.write(cr, uid, ids, {'probability' : 0.0}) + """ Mark the case as lost: state=cancel and probability=0 """ for lead in self.browse(cr, uid, ids): - stage_id = self.stage_find_lost(cr, uid, lead.section_id.id or False) + stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 0.0)], context=context) if stage_id: - self.stage_set(cr, uid, [lead.id], stage_id) - return res + self.case_set(cr, uid, [lead.id], values_to_update={'probability': 0.0}, new_stage_id=stage_id, context=context) + self.case_mark_lost_send_note(cr, uid, ids, context=context) + return True def case_mark_won(self, cr, uid, ids, context=None): - """Mark the case as lost: state = done and probability = 0% - """ - res = super(crm_lead, self).case_close(cr, uid, ids, context=None) - self.write(cr, uid, ids, {'probability' : 100.0}) + """ Mark the case as lost: state=done and probability=100 """ for lead in self.browse(cr, uid, ids): - stage_id = self.stage_find_won(cr, uid, lead.section_id.id or False) + stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 100.0)], context=context) if stage_id: - self.stage_set(cr, uid, [lead.id], stage_id) - self.case_mark_won_send_note(cr, uid, [lead.id], context=context) - return res + self.case_set(cr, uid, [lead.id], values_to_update={'probability': 100.0}, new_stage_id=stage_id, context=context) + self.case_mark_won_send_note(cr, uid, ids, context=context) + return True def set_priority(self, cr, uid, ids, priority): - """Set lead priority + """ Set lead priority """ return self.write(cr, uid, ids, {'priority' : priority}) def set_high_priority(self, cr, uid, ids, context=None): - """Set lead priority to high + """ Set lead priority to high """ return self.set_priority(cr, uid, ids, '1') def set_normal_priority(self, cr, uid, ids, context=None): - """Set lead priority to normal + """ Set lead priority to normal """ return self.set_priority(cr, uid, ids, '3') - def _merge_data(self, cr, uid, ids, oldest, fields, context=None): # prepare opportunity data into dictionary for merging opportunities = self.browse(cr, uid, ids, context=context) @@ -807,22 +861,12 @@ class crm_lead(crm_case, osv.osv): "You should better cancel it, instead of deleting it.") % lead.name) return super(crm_lead, self).unlink(cr, uid, ids, context) - def write(self, cr, uid, ids, vals, context=None): - if not context: - context = {} - - if 'date_closed' in vals: - return super(crm_lead,self).write(cr, uid, ids, vals, context=context) - - if vals.get('stage_id'): - stage = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context) + if vals.get('stage_id') and not vals.get('probability'): # change probability of lead(s) if required by stage - if not vals.get('probability') and stage.on_change: + stage = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context) + if stage.on_change: vals['probability'] = stage.probability - for case in self.browse(cr, uid, ids, context=context): - message = _("Stage changed to <b>%s</b>.") % (stage.name) - case.message_append_note(body=message) return super(crm_lead,self).write(cr, uid, ids, vals, context) # ---------------------------------------- @@ -837,6 +881,11 @@ class crm_lead(crm_case, osv.osv): sub_ids.append(obj.user_id.id) return self.pool.get('res.users').read(cr, uid, sub_ids, context=context) + def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): + """ Override of the (void) default notification method. """ + stage_name = self.pool.get('crm.case.stage').name_get(cr, uid, [stage_id], context=context)[0][1] + return self.message_append_note(cr, uid, ids, body= _("Stage changed to <b>%s</b>.") % (stage_name), context=context) + def case_get_note_msg_prefix(self, cr, uid, lead, context=None): if isinstance(lead, (int, long)): lead = self.browse(cr, uid, [lead], context=context)[0] diff --git a/addons/crm/crm_lead_data.xml b/addons/crm/crm_lead_data.xml index aaa00307bfe..306a35924a9 100644 --- a/addons/crm/crm_lead_data.xml +++ b/addons/crm/crm_lead_data.xml @@ -3,47 +3,81 @@ <data noupdate="1"> <!-- Crm stages --> - <record model="crm.case.stage" id="stage_lead6"> - <field name="name">Lost</field> - <field eval="1" name="case_default"/> - <field eval="'0'" name="probability"/> - <field eval="'0'" name="sequence"/> - </record> <record model="crm.case.stage" id="stage_lead1"> <field name="name">New</field> <field eval="1" name="case_default"/> + <field name="state">draft</field> <field eval="'10'" name="probability"/> - <field eval="'11'" name="sequence"/> + <field eval="'10'" name="sequence"/> + <field name="type">both</field> </record> <record model="crm.case.stage" id="stage_lead2"> + <field name="name">Opportunity</field> + <field eval="1" name="case_default"/> + <field name="state">open</field> + <field eval="'20'" name="probability"/> + <field eval="'11'" name="sequence"/> + <field name="type">lead</field> + </record> + <record model="crm.case.stage" id="stage_lead3"> <field name="name">Qualification</field> <field eval="1" name="case_default"/> + <field name="state">open</field> <field eval="'20'" name="probability"/> <field eval="'12'" name="sequence"/> + <field name="type">opportunity</field> </record> - <record model="crm.case.stage" id="stage_lead3"> + <record model="crm.case.stage" id="stage_lead4"> <field name="name">Proposition</field> <field eval="1" name="case_default"/> + <field name="state">open</field> <field eval="'40'" name="probability"/> <field eval="'13'" name="sequence"/> + <field name="type">opportunity</field> </record> - <record model="crm.case.stage" id="stage_lead4"> + <record model="crm.case.stage" id="stage_lead5"> <field name="name">Negotiation</field> <field eval="1" name="case_default"/> + <field name="state">open</field> <field eval="'60'" name="probability"/> <field eval="'14'" name="sequence"/> + <field name="type">opportunity</field> </record> - <record model="crm.case.stage" id="stage_lead5"> + <record model="crm.case.stage" id="stage_lead6"> <field name="name">Won</field> <field eval="1" name="case_default"/> + <field name="state">done</field> <field eval="'100'" name="probability"/> <field eval="'15'" name="sequence"/> <field eval="1" name="on_change"/> + <field name="type">opportunity</field> + </record> + <record model="crm.case.stage" id="stage_lead7"> + <field name="name">Dead</field> + <field eval="1" name="case_default"/> + <field eval="True" name="fold"/> + <field name="state">cancel</field> + <field eval="'0'" name="probability"/> + <field eval="'16'" name="sequence"/> + <field name="type">lead</field> + </record> + <record model="crm.case.stage" id="stage_lead8"> + <field name="name">Lost</field> + <field eval="1" name="case_default"/> + <field eval="True" name="fold"/> + <field name="state">cancel</field> + <field eval="'0'" name="probability"/> + <field eval="'17'" name="sequence"/> + <field name="type">opportunity</field> </record> + <record model="crm.case.section" id="section_sales_department"> <field name="name">Sales Department</field> <field name="code">Sales</field> - <field name="stage_ids" eval="[(4, ref('stage_lead1')), (4, ref('stage_lead2')), (4, ref('stage_lead3')), (4, ref('stage_lead4')), (4, ref('stage_lead5')), (4, ref('stage_lead6'))]"/> + <field name="stage_ids" eval="[ (4, ref('stage_lead1')), (4, ref('stage_lead2')), + (4, ref('stage_lead3')), (4, ref('stage_lead4')), + (4, ref('stage_lead5')), (4, ref('stage_lead6')), + (4, ref('stage_lead7')), (4, ref('stage_lead8'))]"/> </record> <!-- Crm campain --> diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml index 19987f8f61a..21c7f9e31ab 100644 --- a/addons/crm/crm_lead_demo.xml +++ b/addons/crm/crm_lead_demo.xml @@ -8,14 +8,13 @@ <field name="type">lead</field> <field name="user_id" ref="base.user_root"/> <field eval="'The Oil Company'" name="partner_name"/> - <field eval="'draft'" name="state"/> <field name="section_id" ref="crm.section_sales_marketing_department"/> <field eval="'Luc Latour'" name="contact_name"/> <field name="title" ref="base.res_partner_title_sir"/> - <field eval="'Training Manager'" name="function"/> - <field eval="'Paris'" name="city"/> - <field name="country_id" ref="base.fr"/> - <field eval="'luc.latour@oilcompany.fr'" name="email_from"/> + <field eval="'Training Manager'" name="function"/> + <field eval="'Paris'" name="city"/> + <field name="country_id" ref="base.fr"/> + <field eval="'luc.latour@oilcompany.fr'" name="email_from"/> <field eval="'0033 621 782-0636'" name="mobile"/> <field eval="1" name="active"/> <field name="stage_id" ref="crm.stage_lead1"/> @@ -29,18 +28,17 @@ <field name="type">lead</field> <field name="user_id" ref="base.user_root"/> <field eval="'Le Club SARL'" name="partner_name"/> - <field eval="'Marc Dufour'" name="contact_name"/> + <field eval="'Marc Dufour'" name="contact_name"/> <field name="title" ref="base.res_partner_title_sir"/> - <field eval="'Purchase Manager'" name="function"/> - <field eval="'Bordeaux'" name="city"/> - <field name="country_id" ref="base.fr"/> - <field eval="'md@leclub.fr'" name="email_from"/> - <field eval="'draft'" name="state"/> + <field eval="'Purchase Manager'" name="function"/> + <field eval="'Bordeaux'" name="city"/> + <field name="country_id" ref="base.fr"/> + <field eval="'md@leclub.fr'" name="email_from"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="'(392) 895-7917'" name="mobile"/> <field eval="1" name="active"/> <field name="categ_id" ref="crm.categ_oppor2"/> - <field name="stage_id" ref="crm.stage_lead2"/> + <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Interest in Your New Product'" name="name"/> <field eval="'(956) 293-2595'" name="phone"/> </record> @@ -50,15 +48,14 @@ <field name="type">lead</field> <field name="user_id" ref="base.user_demo"/> <field eval="'The Kompany'" name="partner_name"/> - <field eval="'John Miller'" name="contact_name"/> - <field eval="'New-York'" name="city"/> - <field name="country_id" ref="base.us"/> - <field eval="'draft'" name="state"/> + <field eval="'John Miller'" name="contact_name"/> + <field eval="'New-York'" name="city"/> + <field name="country_id" ref="base.us"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="'(820) 167-3208'" name="mobile"/> <field eval="1" name="active"/> <field name="categ_id" ref="crm.categ_oppor4"/> - <field name="stage_id" ref="crm.stage_lead2"/> + <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Need Info about Web Design'" name="name"/> <field eval="'(079) 681-2139'" name="phone"/> <field eval="'contact@thkompany.com'" name="email_from"/> @@ -68,10 +65,9 @@ <field eval="'3'" name="priority"/> <field name="type">lead</field> <field eval="'The Gas Company'" name="partner_name"/> - <field eval="'Henry Mc Coy'" name="contact_name"/> - <field eval="'London'" name="city"/> - <field name="country_id" ref="base.uk"/> - <field eval="'draft'" name="state"/> + <field eval="'Henry Mc Coy'" name="contact_name"/> + <field eval="'London'" name="city"/> + <field name="country_id" ref="base.uk"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="'(077) 582-4035'" name="mobile"/> <field eval="1" name="active"/> @@ -87,16 +83,15 @@ <field name="type">lead</field> <field name="user_id" ref="base.user_root"/> <field eval="'Stonage IT'" name="partner_name"/> - <field eval="'Carrie Helle'" name="contact_name"/> - <field eval="'Purchase Manager'" name="function"/> - <field eval="'Bruxelles'" name="city"/> - <field name="country_id" ref="base.be"/> - <field eval="'draft'" name="state"/> + <field eval="'Carrie Helle'" name="contact_name"/> + <field eval="'Purchase Manager'" name="function"/> + <field eval="'Bruxelles'" name="city"/> + <field name="country_id" ref="base.be"/> <field name="section_id" ref="crm.section_sales_marketing_department"/> <field eval="'(333) 715-1450'" name="mobile"/> <field eval="1" name="active"/> <field name="categ_id" ref="crm.categ_oppor1"/> - <field name="stage_id" ref="crm.stage_lead2"/> + <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Need a Quotation for PC1'" name="name"/> <field eval="'(855) 924-4364'" name="phone"/> <field eval="'helle@stonageit.be'" name="email_from"/> @@ -110,15 +105,14 @@ <field name="type">lead</field> <field name="user_id" ref="base.user_root"/> <field eval="'Opensides'" name="partner_name"/> - <field eval="'Tina Pinero'" name="contact_name"/> - <field eval="'Consultant'" name="function"/> - <field eval="'Roma'" name="city"/> - <field name="country_id" ref="base.it"/> - <field eval="'draft'" name="state"/> + <field eval="'Tina Pinero'" name="contact_name"/> + <field eval="'Consultant'" name="function"/> + <field eval="'Roma'" name="city"/> + <field name="country_id" ref="base.it"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="'(468) 017-2684'" name="mobile"/> <field name="categ_id" ref="crm.categ_oppor8"/> - <field name="stage_id" ref="crm.stage_lead6"/> + <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Need Info about your Services'" name="name"/> <field eval="'(373) 907-1009'" name="phone"/> <field eval="'info@opensides.be'" name="email_from"/> @@ -130,15 +124,14 @@ <field name="type">lead</field> <field name="user_id" ref="base.user_demo"/> <field eval="'Gardner Group'" name="partner_name"/> - <field eval="'Wendi Baltz'" name="contact_name"/> - <field eval="'Journalist'" name="function"/> - <field eval="'Kiev'" name="city"/> - <field name="country_id" ref="base.ua"/> - <field eval="'draft'" name="state"/> + <field eval="'Wendi Baltz'" name="contact_name"/> + <field eval="'Journalist'" name="function"/> + <field eval="'Kiev'" name="city"/> + <field name="country_id" ref="base.ua"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="'(463) 014-1208'" name="mobile"/> <field name="categ_id" ref="crm.categ_oppor4"/> - <field name="stage_id" ref="crm.stage_lead2"/> + <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Info about Your Company ?'" name="name"/> <field eval="'(282) 603-7489'" name="phone"/> </record> @@ -149,17 +142,16 @@ <field name="type">lead</field> <field name="user_id" ref="base.user_demo"/> <field eval="'Survey'" name="name"/> - <field eval="'open'" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor6"/> <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Survey Expert'" name="partner_name"/> - <field eval="'John Smith'" name="contact_name"/> - <field eval="'Sales'" name="function"/> - <field eval="'Cambridge'" name="city"/> - <field name="country_id" ref="base.uk"/> + <field eval="'John Smith'" name="contact_name"/> + <field eval="'Sales'" name="function"/> + <field eval="'Cambridge'" name="city"/> + <field name="country_id" ref="base.uk"/> <field eval="'smith_john@gmail.com'" name="email_from"/> - <field eval="'(282) 596-8584'" name="phone"/> + <field eval="'(282) 596-8584'" name="phone"/> </record> <record id="crm_case_business_card0" model="crm.lead"> <field eval="1" name="active"/> @@ -168,17 +160,16 @@ <field name="type">lead</field> <field name="user_id" ref="base.user_root"/> <field eval="'Partnership'" name="name"/> - <field eval="'open'" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor5"/> <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Marketing Business'" name="partner_name"/> - <field eval="'Laure Smith'" name="contact_name"/> - <field eval="'Sales'" name="function"/> - <field eval="'Oxford'" name="city"/> - <field name="country_id" ref="base.uk"/> + <field eval="'Laure Smith'" name="contact_name"/> + <field eval="'Sales'" name="function"/> + <field eval="'Oxford'" name="city"/> + <field name="country_id" ref="base.uk"/> <field eval="'l.smith@marketing-business.com'" name="email_from"/> - <field eval="'(252) 578-7894'" name="phone"/> + <field eval="'(252) 578-7894'" name="phone"/> </record> <record id="crm_case_imported_contact0" model="crm.lead"> <field eval="1" name="active"/> @@ -186,9 +177,8 @@ <field eval="'2'" name="priority"/> <field name="type">lead</field> <field eval="'Info'" name="name"/> - <field eval="'cancel'" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> - <field name="stage_id" ref="crm.stage_lead2"/> + <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Business Group'" name="partner_name"/> </record> <record id="crm_case_employee0" model="crm.lead"> @@ -198,12 +188,11 @@ <field name="type">lead</field> <field name="user_id" ref="base.user_demo"/> <field eval="'Need Info about Onsite Intervention'" name="name"/> - <field eval="'draft'" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor3"/> - <field name="stage_id" ref="crm.stage_lead2"/> + <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Agrolait'" name="partner_name"/> - <field eval="'Sylvie Lelitre'" name="contact_name"/> + <field eval="'Sylvie Lelitre'" name="contact_name"/> </record> <record id="crm_case_company_partnership0" model="crm.lead"> <field eval="1" name="active"/> @@ -212,28 +201,15 @@ <field name="type">lead</field> <field name="user_id" ref="base.user_demo"/> <field eval="'Need Quotation for 100 PC and 100 Keyboards'" name="name"/> - <field eval="'done'" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor1"/> <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Centrale d\'achats 1'" name="partner_name"/> </record> - <!-- Call Function to Open the leads--> - <function model="crm.lead" name="case_open" - eval="[ref('crm_case_electonicgoodsdealer0'), ref('crm_case_company_partnership0'), ref('crm_case_webvisitor0'), ref('crm_case_business_card0'), ref('crm.crm_case_employee0')], {'install_mode': True}" - /> - <!-- Call Function to mark the lead as Pending--> - <function model="crm.lead" name="case_pending" - eval="[ref('crm_case_itdeveloper0')], {'install_mode': True}" - /> - <!-- Call Function to Close the leads--> - <function model="crm.lead" name="case_close" - eval="[ref('crm_case_vpoperations0'), ref('crm_case_developingwebapplications0'), ref('crm_case_webvisitor0')], {'install_mode': True}" - /> - <!-- Call Function to Cancel the leads--> + <!-- Call Function to Cancel the leads (set as Dead) --> <function model="crm.lead" name="case_cancel" - eval="[ref('crm_case_mgroperations0'), ref('crm_case_imported_contact0')], {'install_mode': True}" + eval="[ref('crm_case_company_partnership0'), ref('crm_case_vpoperations0'), ref('crm_case_developingwebapplications0'), ref('crm_case_webvisitor0')], {'install_mode': True}" /> <!-- Demo Opportunities --> @@ -245,11 +221,10 @@ <field name="partner_id" ref="base.res_partner_3"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval="'open'" name="state"/> <field eval="'150000'" name="planned_revenue"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor1"/> - <field name="stage_id" ref="crm.stage_lead3"/> + <field name="stage_id" ref="crm.stage_lead4"/> <field eval="'Plan to buy 200 PC2'" name="name"/> <field eval="'Conf call with purchase manager'" name="title_action"/> </record> @@ -260,12 +235,11 @@ <field name="partner_id" ref="base.res_partner_9"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_demo"/> - <field eval="'draft'" name="state"/> <field eval="45000.0" name="planned_revenue"/> <field eval="35" name="probability"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor3"/> - <field name="stage_id" ref="crm.stage_lead2"/> + <field name="stage_id" ref="crm.stage_lead3"/> <field eval="'Pricing Information of Onsite Intervention'" name="name"/> <field eval="'Send price list regarding our interventions'" name="title_action"/> <field eval="time.strftime('%Y-%m-03')" name="date_action"/> @@ -283,12 +257,11 @@ <field name="partner_id" ref="base.res_partner_lucievonck0"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_demo"/> - <field eval="'draft'" name="state"/> <field eval="30000.0" name="planned_revenue"/> <field eval="30" name="probability"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor3"/> - <field name="stage_id" ref="crm.stage_lead2"/> + <field name="stage_id" ref="crm.stage_lead3"/> <field eval="'Interest in your Kitchen Design Project'" name="name"/> <field eval="'Send Catalogue by E-Mail'" name="title_action"/> <field eval="time.strftime('%Y-01-10')" name="date_action"/> @@ -299,19 +272,18 @@ <field eval="1367" name="zip"/> <field name="country_id" ref="base.be"/> </record> - <record id="crm_case_unifliege" model="crm.lead"> + <record id="crm_case_unifliege" model="crm.lead"> <field eval="1" name="active"/> <field name="type">opportunity</field> <field name="type_id" ref="crm.type_lead2"/> <field name="partner_id" ref="base.res_partner_accent"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval="'open'" name="state"/> <field eval="2500.0" name="planned_revenue"/> <field eval="25" name="probability"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor6"/> - <field name="stage_id" ref="crm.stage_lead2"/> + <field name="stage_id" ref="crm.stage_lead3"/> <field eval="'Plan train our students on your product'" name="name"/> <field eval="'Call to define real needs about training'" name="title_action"/> <field eval="time.strftime('%Y-%m-04')" name="date_action"/> @@ -323,19 +295,18 @@ <field eval="75016" name="zip"/> <field name="country_id" ref="base.be"/> </record> - <record id="crm_case_bankwealthy2" model="crm.lead"> + <record id="crm_case_bankwealthy2" model="crm.lead"> <field eval="1" name="active"/> <field name="type">opportunity</field> <field name="type_id" ref="crm.type_lead2"/> <field name="partner_id" ref="base.res_partner_2"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval="'open'" name="state"/> <field eval="462.0" name="planned_revenue"/> <field eval="40" name="probability"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor2"/> - <field name="stage_id" ref="crm.stage_lead2"/> + <field name="stage_id" ref="crm.stage_lead3"/> <field eval="'Plan to buy 66 keyboards and 66 mouses'" name="name"/> <field eval="'Propose the kit keyboard+mouse'" name="title_action"/> <field eval="time.strftime('%Y-04-12')" name="date_action"/> @@ -354,12 +325,11 @@ <field name="partner_id" ref="base.res_partner_8"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval="'done'" name="state"/> <field eval="55000.0" name="planned_revenue"/> <field eval="90" name="probability"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor7"/> - <field name="stage_id" ref="crm.stage_lead5"/> + <field name="stage_id" ref="crm.stage_lead6"/> <field eval="'Need 20 Days of Consultancy'" name="name"/> <field eval="time.strftime('%Y-%m-%d')" name="date_deadline"/> <field eval="'info@mycompany.net'" name="email_from"/> @@ -372,11 +342,10 @@ <field name="partner_id" ref="base.res_partner_duboissprl0"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_demo"/> - <field eval="'open'" name="state"/> <field eval="45000.0" name="planned_revenue"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor5"/> - <field name="stage_id" ref="crm.stage_lead4"/> + <field name="stage_id" ref="crm.stage_lead5"/> <field eval="'Need new design for my website'" name="name"/> <field eval="time.strftime('%Y-05-01')" name="date_action"/> <field eval="time.strftime('%Y-06-30')" name="date_deadline"/> @@ -395,40 +364,37 @@ <field name="partner_id" ref="base.res_partner_maxtor"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_demo"/> - <field eval="'done'" name="state"/> <field eval="42000.0" name="planned_revenue"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor2"/> - <field name="stage_id" ref="crm.stage_lead6"/> + <field name="stage_id" ref="crm.stage_lead8"/> <field eval="'Want to subscribe to your online solution'" name="name"/> </record> - <record id="crm_case_dirtminingltdunits0" model="crm.lead"> + <record id="crm_case_dirtminingltdunits0" model="crm.lead"> <field eval="30" name="probability"/> <field eval="1" name="active"/> <field name="type">opportunity</field> <field name="partner_id" ref="base.res_partner_tinyatwork"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval="'done'" name="state"/> <field eval="25000.0" name="planned_revenue"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor6"/> - <field name="stage_id" ref="crm.stage_lead6"/> + <field name="stage_id" ref="crm.stage_lead8"/> <field eval="'Interest in your Partnership Contract'" name="name"/> </record> - <record id="crm_case_dirtminingltdunits10" model="crm.lead"> + <record id="crm_case_dirtminingltdunits10" model="crm.lead"> <field eval="30" name="probability"/> <field eval="1" name="active"/> <field name="type">opportunity</field> <field name="partner_id" ref="base.res_partner_desertic_hispafuentes"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval="'open'" name="state"/> <field eval="5000" name="planned_revenue"/> <field eval="30" name="probability"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor2"/> - <field name="stage_id" ref="crm.stage_lead2"/> + <field name="stage_id" ref="crm.stage_lead3"/> <field eval="'Plan to attend a training'" name="name"/> <field eval="time.strftime('%Y-04-10')" name="date_action"/> <field eval="time.strftime('%Y-06-12')" name="date_deadline"/> @@ -439,7 +405,7 @@ <field eval="77420" name="zip"/> <field name="country_id" ref="base.fr"/> </record> - <record id="crm_case_construstazunits0" model="crm.lead"> + <record id="crm_case_construstazunits0" model="crm.lead"> <field eval="60" name="probability"/> <field eval="1" name="active"/> <field name="type">opportunity</field> @@ -447,11 +413,10 @@ <field name="partner_id" ref="base.res_partner_thymbra"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval="'open'" name="state"/> <field eval="'150000'" name="planned_revenue"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor1"/> - <field name="stage_id" ref="crm.stage_lead3"/> + <field name="stage_id" ref="crm.stage_lead4"/> <field eval="'Need customize the solution'" name="name"/> <field eval="'Conf call with technical service'" name="title_action"/> <field name="partner_name">Thymbra</field> @@ -461,7 +426,7 @@ <field eval="1659" name="zip"/> <field name="country_id" ref="base.ar"/> </record> - <record id="crm_case_ericdubois4" model="crm.lead"> + <record id="crm_case_ericdubois4" model="crm.lead"> <field eval="65" name="probability"/> <field eval="1" name="active"/> <field name="type">opportunity</field> @@ -469,11 +434,10 @@ <field name="partner_id" ref="base.res_partner_ericdubois0"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval="'open'" name="state"/> <field eval="'1200'" name="planned_revenue"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm.categ_oppor1"/> - <field name="stage_id" ref="crm.stage_lead3"/> + <field name="stage_id" ref="crm.stage_lead4"/> <field eval="'Interest in your customizable PC'" name="name"/> <field eval="time.strftime('%Y-08-05')" name="date_action"/> <field eval="time.strftime('%Y-10-10')" name="date_deadline"/> @@ -484,26 +448,24 @@ <field eval="7000" name="zip"/> <field name="country_id" ref="base.be"/> </record> - <record id="crm_case_fabiendupont" model="crm.lead"> + <record id="crm_case_fabiendupont" model="crm.lead"> <field eval="1" name="active"/> <field name="type">opportunity</field> <field name="type_id" ref="crm.type_lead1"/> <field name="partner_id" ref="base.res_partner_fabiendupont0"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval="'draft'" name="state"/> <field name="categ_id" ref="crm.categ_oppor4"/> <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Need more info about the onsite intervention'" name="name"/> </record> - <record id="crm_case_shelvehouse" model="crm.lead"> + <record id="crm_case_shelvehouse" model="crm.lead"> <field eval="1" name="active"/> <field name="type">opportunity</field> <field name="type_id" ref="crm.type_lead1"/> <field name="partner_id" ref="base.res_partner_theshelvehouse0"/> <field eval="'3'" name="priority"/> <field name="user_id" ref="base.user_demo"/> - <field eval="'draft'" name="state"/> <field name="categ_id" ref="crm.categ_oppor4"/> <field name="stage_id" ref="crm.stage_lead1"/> <field eval="'Need more info about your pc2'" name="name"/> diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index 3c2b8f48eb6..4536e31621c 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -1,35 +1,41 @@ <?xml version="1.0"?> <openerp> -<data> - - <!-- Stage Search view --> - <record id="crm_lead_stage_search" model="ir.ui.view"> - <field name="name">Stage - Search</field> - <field name="model">crm.case.stage</field> - <field name="type">search</field> - <field name="arch" type="xml"> - <search string="Stage Search"> - <field name="name"/> - </search> - </field> - </record> - - <!--Lead Stage Form view --> - <record id="crm_lead_stage_act" model="ir.actions.act_window"> - <field name="name">Stages</field> - <field name="res_model">crm.case.stage</field> - <field name="view_type">form</field> - <field name="view_id" ref="crm.crm_case_stage_tree"/> - <field name="help">Add specific stages to leads and opportunities allowing your sales to better organise their sales pipeline. Stages will allow them to easily track how a specific lead or opportunity is positioned in the sales cycle.</field> - </record> + <data> + + <!-- + CRM CASE STAGE + --> + + <!-- Stage Search view --> + <record id="crm_lead_stage_search" model="ir.ui.view"> + <field name="name">Stage - Search</field> + <field name="model">crm.case.stage</field> + <field name="type">search</field> + <field name="arch" type="xml"> + <search string="Stage Search"> + <field name="name"/> + <field name="state"/> + <field name="type"/> + </search> + </field> + </record> - <menuitem action="crm_lead_stage_act" id="menu_crm_lead_stage_act" name="Stages" - groups="base.group_no_one" sequence="0" - parent="base.menu_crm_config_lead" /> + <!-- Stage Form view --> + <record id="crm_lead_stage_act" model="ir.actions.act_window"> + <field name="name">Stages</field> + <field name="res_model">crm.case.stage</field> + <field name="view_type">form</field> + <field name="view_id" ref="crm.crm_case_stage_tree"/> + <field name="help">Add specific stages to leads and opportunities allowing your sales to better organise their sales pipeline. Stages will allow them to easily track how a specific lead or opportunity is positioned in the sales cycle.</field> + </record> + <menuitem action="crm_lead_stage_act" id="menu_crm_lead_stage_act" name="Stages" sequence="0" parent="base.menu_crm_config_lead" /> - <!-- Lead/Opportunity Categories Action --> + <!-- + LEADS/OPPORTUNITIES CATEGORIES + --> + <!-- Categories Form View --> <record id="crm_lead_categ_action" model="ir.actions.act_window"> <field name="name">Categories</field> <field name="res_model">crm.case.categ</field> @@ -44,6 +50,9 @@ id="menu_crm_lead_categ" name="Categories" parent="base.menu_crm_config_lead" sequence="1" groups="base.group_no_one"/> + <!-- + LEADS + --> <!-- CRM Lead Form View --> <record model="ir.ui.view" id="crm_case_form_view_leads"> @@ -52,43 +61,28 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Leads Form" layout="manual"> - <div class="oe_form_topbar"> - <button name="case_open" string="Open" states="draft,pending" type="object" /> - <button name="case_mark_lost" string="Close" states="open,pending" type="object" /> - <button name="case_pending" string="Pending" states="open" type="object" /> - <button name="case_escalate" string="Escalate" states="open,pending" type="object" /> - <button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" /> - <button name="case_cancel" string="Cancel" states="draft,open,pending" type="object" /> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <header> + <button name="%(crm.action_crm_lead2opportunity_partner)d" string="Convert to Opportunity" type="action" + states="draft,open,pending" help="Convert to Opportunity"/> + <button name="case_escalate" string="Escalate" type="object" + states="draft,open,pending"/> + <button name="case_reset" string="Reset" type="object" + states="cancel"/> + <button name="case_cancel" string="Cancel" type="object" + states="draft,open,pending"/> + <field name="stage_id" widget="statusbar" + on_change="onchange_stage_id(stage_id)"/> + </header> <sheet layout="auto"> <group colspan="4" col="7"> - <field name="name" required="1" string="Subject"/> + <field name="name"/> <field name="priority"/> <field name="categ_id" widget="selection" domain="[('object_id.model','=','crm.lead')]"/> - <button - name="%(crm.action_crm_lead2opportunity_partner)d" - string="Convert to Opportunity" - help="Convert to Opportunity" icon="gtk-go-forward" - type="action" - /> <newline /> <field name="user_id" /> <field name="section_id" widget="selection" /> - <field name="stage_id" domain="section_id and [('section_ids', '=', section_id)] or []" /> - <group col="2" colspan="1"> - <button name="stage_previous" string="" - states="open,pending,draft" type="object" - icon="gtk-go-back" context="{'stage_type': 'lead'}" /> - <button name="stage_next" string="" - states="open,pending,draft" type="object" - icon="gtk-go-forward" context="{'stage_type': 'lead'}" /> - </group> <field name="type" invisible="1"/> </group> <notebook colspan="4"> @@ -142,6 +136,7 @@ <field name="type_id" select="1" widget="selection"/> <field name="channel_id" select="1" widget="selection"/> <field name="referred"/> + <field name="state" groups="base.group_no_one"/> </group> <group colspan="2" col="2"> <separator string="Mailings" colspan="2" col="2"/> @@ -157,76 +152,53 @@ </notebook> </sheet> <div class="oe_form_bottom"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> - </record> - - <!-- CRM Lead Tree View --> - - <record model="ir.ui.view" id="crm_case_tree_view_leads"> - <field name="name">Leads</field> - <field name="model">crm.lead</field> - <field name="type">tree</field> - <field name="arch" type="xml"> - <tree string="Leads" fonts="bold:needaction_pending==True" colors="blue:state=='pending';grey:state in ('cancel', 'done')"> - <field name="needaction_pending" invisible="1"/> - <field name="date_deadline" invisible="1"/> - <field name="create_date" groups="base.group_no_one"/> - <field name="name" string="Subject"/> - <field name="contact_name"/> - <field name="country_id" invisible="context.get('invisible_country', True)" /> - <field name="email_from"/> - <field name="phone"/> - - <field name="categ_id" invisible="1"/> - <field name="type_id" invisible="1"/> - <field name="referred" invisible="1"/> - <field name="channel_id" invisible="1"/> - <field name="subjects" invisible="1"/> - - <field name="stage_id"/> - <button name="stage_previous" string="Previous Stage" - states="open,pending" type="object" icon="gtk-go-back" /> - <button name="stage_next" string="Next Stage" - states="open,pending" type="object" - icon="gtk-go-forward" /> - <field name="section_id" invisible="context.get('invisible_section', True)" /> - <field name="user_id" /> - <field name="state" /> - <button name="case_open" string="Open" - states="draft,pending" type="object" - icon="gtk-go-forward" /> - <button name="case_close" string="Close" - states="open,draft,pending" type="object" - icon="gtk-close" /> - <button name="%(crm.action_crm_lead2opportunity_partner)d" - string="Convert to Opportunity" - states="draft,open,pending" icon="gtk-index" - type="action" /> - <button name="case_escalate" string="Escalate" - states="open,draft,pending" type="object" - icon="gtk-go-up" /> - </tree> - </field> - </record> + </record> - <!-- CRM Lead Calendar View --> + <!-- CRM Lead Tree View --> + <record model="ir.ui.view" id="crm_case_tree_view_leads"> + <field name="name">Leads</field> + <field name="model">crm.lead</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree string="Leads" fonts="bold:needaction_pending==True" colors="blue:state=='pending';grey:state in ('cancel', 'done')"> + <field name="needaction_pending" invisible="1"/> + <field name="date_deadline" invisible="1"/> + <field name="create_date" groups="base.group_no_one"/> + <field name="name"/> + <field name="contact_name"/> + <field name="country_id" invisible="context.get('invisible_country', True)" /> + <field name="email_from"/> + <field name="phone"/> + <field name="stage_id"/> + <field name="categ_id" invisible="1"/> + <field name="section_id" invisible="context.get('invisible_section', True)" /> + <field name="state" groups="base.group_no_one"/> + <field name="type_id" invisible="1"/> + <field name="referred" invisible="1"/> + <field name="channel_id" invisible="1"/> + <field name="subjects" invisible="1"/> + </tree> + </field> + </record> - <record model="ir.ui.view" id="crm_case_calendar_view_leads"> - <field name="name">CRM - Leads Calendar</field> - <field name="model">crm.lead</field> - <field name="type">calendar</field> - <field name="priority" eval="2"/> - <field name="arch" type="xml"> - <calendar string="Leads Generation" - date_start="date_action" color="user_id"> - <field name="name" /> - <field name="partner_name" /> - </calendar> - </field> - </record> + <!-- CRM Lead Calendar View --> + <record model="ir.ui.view" id="crm_case_calendar_view_leads"> + <field name="name">CRM - Leads Calendar</field> + <field name="model">crm.lead</field> + <field name="type">calendar</field> + <field name="priority" eval="2"/> + <field name="arch" type="xml"> + <calendar string="Leads Generation" + date_start="date_action" color="user_id"> + <field name="name" /> + <field name="partner_name" /> + </calendar> + </field> + </record> <!-- CRM Lead Kanban View --> <record model="ir.ui.view" id="crm_case_kanban_view_leads"> @@ -235,7 +207,7 @@ <field name="type">kanban</field> <field name="arch" type="xml"> <kanban default_group_by="stage_id"> - <field name="state"/> + <field name="state" groups="base.group_no_one"/> <field name="color"/> <field name="priority"/> <field name="planned_revenue" sum="Expected Revenues"/> @@ -264,18 +236,15 @@ <li><ul class="oe_kanban_colorpicker" data-field="color"/></li> </ul> <div class="oe_kanban_content"> - <h3> - <field name="partner_id"/> + <div> + <b><field name="name"/></b> <t t-if="record.planned_revenue.raw_value"> - - <t t-esc="Math.round(record.planned_revenue.value)"/> - <field name="company_currency"/> + - <b><t t-esc="Math.round(record.planned_revenue.value)"/> + <field name="company_currency"/></b> </t> - </h3> - <div> - <b> <field name="partner_address_name"/> </b> </div> <div> - <field name="name"/> + <field name="partner_id"/> </div> <div style="padding-left: 0.5em"> <i> @@ -316,7 +285,6 @@ </record> <!-- CRM Lead Search View --> - <record id="view_crm_case_leads_filter" model="ir.ui.view"> <field name="name">CRM - Leads Search</field> <field name="model">crm.lead</field> @@ -391,6 +359,10 @@ </record> + <!-- + OPPORTUNITY + --> + <!-- Opportunities Form View --> <record model="ir.ui.view" id="crm_case_form_view_oppor"> <field name="name">Opportunities</field> @@ -398,8 +370,8 @@ <field name="type">form</field> <field name="priority">20</field> <field name="arch" type="xml"> - <form string="Opportunities" layout="manual"> - <div class="oe_form_topbar oe_form_topbar_hifirst"> + <form string="Opportunities" validate="0"> + <header> <button name="case_mark_won" string="Mark Won" states="open,pending" type="object" /> <button name="case_open" string="Open" states="draft,pending" type="object" /> <button name="case_pending" string="Pending" states="draft,open" type="object" /> @@ -407,168 +379,152 @@ <button name="case_mark_lost" string="Mark Lost" states="open,pending" type="object" /> <button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" /> <button name="case_cancel" string="Cancel" states="draft" type="object" /> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> - <sheet layout="auto"> - <group colspan="4" col="2" width="auto"> - <field name="name" required="1" nolabel="1" class="oe_form_title"/> - <div class="oe_text_right"> + <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/> + </header> + <sheet> + <div class="oe_right oe_form_button_box"> <button string="Schedule/Log Call" - name="%(opportunity2phonecall_act)d" icon="terp-call-start" + name="%(opportunity2phonecall_act)d" type="action"/> - <button string="Schedule Meeting" icon="gtk-redo" + <button string="Schedule Meeting" name="action_makeMeeting" type="object"/> </div> - </group> - <group colspan="4" col="4" class="oe_form_group_label_border" style="margin-top: 20px;"> - <field name="user_id"/> - <field name="planned_revenue"/> - - <field name="date_action"/> - <field name="date_deadline"/> - - <field name="title_action"/> - <field name="probability"/> - - <field name="type" invisible="1"/> - </group> - <notebook colspan="4"> - <page string="Opportunity"> - <group col="4" colspan="2"> - <separator colspan="4" string="Contacts"/> - <group colspan="2" col="3" class="oe_form_group_label_border"> - <field width="80%%" name="partner_id" select="1" - on_change="onchange_partner_id(partner_id, email_from)" string="Customer"/> - <button name="%(action_crm_lead2partner)d" - icon="terp-partner" type="action" - string="Create" - attrs="{'invisible':[('partner_id','!=',False)]}"/> - <field name="phone" colspan="3"/> - <field width="80%%" name="email_from" string="Email"/> - <button string="Mail" - name="%(mail.action_email_compose_message_wizard)d" - context="{'mail':'new', 'model': 'crm.lead'}" - icon="terp-mail-message-new" type="action" /> + <div class="oe_form_title"> + <label for="name" class="oe_form_readonly_hidden"/> + <h1><field name="name"/></h1> + + <label for="planned_revenue" class="oe_form_readonly_hidden"/> + <h2> + <field name="planned_revenue" class="oe_form_inline"/> + <field name="company_currency" class="oe_form_readonly_hidden oe_form_inline"/> at + <field name="probability" class="oe_form_inline"/> %% success rate + </h2> + </div> + <group> + <group> + <field name="partner_id" + on_change="onchange_partner_id(partner_id, email_from)" + string="Customer" + context="{'default_name': partner_name, 'default_email': email_from, 'default_phone': phone}"/> + <field name="email_from" string="Email"/> + <field name="phone"/> </group> - </group> - <group col="2" colspan="2" class="oe_form_group_label_border"> - <separator colspan="2" string="Category"/> - <field name="section_id" colspan="1" widget="selection"/> - <field name="categ_id" select="1" - string="Category" widget="selection" - domain="[('object_id.model', '=', 'crm.lead')]" /> - <label string="Stage" for="stage_id" align="1.0"/> - <group colspan="1" col="3"> - <field name="stage_id" nolabel="1" - on_change="onchange_stage_id(stage_id)" - domain="section_id and [('section_ids', '=', section_id)] or []" width="60%%"/> - <button name="stage_previous" - states="draft,open,pending" type="object" - icon="gtk-go-back" string="" context="{'stage_type': 'opportunity'}"/> - <button name="stage_next" states="draft,open,pending" - type="object" icon="gtk-go-forward" string="" context="{'stage_type': 'opportunity'}"/> + <group> + <label for="title_action"/> + <div> + <field name="date_action" nolabel="1"/> - + <field name="title_action" class="oe_form_inline" nolabel="1" placeholder="Call for proposal"/> + </div> + <field name="date_deadline"/> + <field name="priority"/> </group> - <field name="priority" string="Priority"/> - </group> + <group> + <field name="user_id"/> + <field name="section_id" colspan="1" widget="selection"/> + </group> + <group> + <field name="categ_id" select="1" + string="Category" widget="selection" + domain="[('object_id.model', '=', 'crm.lead')]" /> - <separator colspan="4" string="Details"/> - <field name="description" nolabel="1" colspan="4"/> - </page> - <page string="Lead"> - <separator string="Contact" colspan="4"/> - <group colspan="4" col="4" class="oe_form_group_label_border"> - <field name="partner_name" string="Customer Name" colspan="4"/> - </group> - <group colspan="2" col="2" class="oe_form_group_label_border"> - <field domain="[('domain', '=', 'contact')]" name="title" widget="selection"/> - <field name="fax"/> - <field name="street"/> - <field name="zip"/> - <field name="country_id"/> - </group> - <group colspan="2" col="2" class="oe_form_group_label_border"> - <field name="function" /> - <field name="mobile"/> - <field name="street2"/> - <field name="city"/> - <field name="state_id"/> + </group> </group> - <group colspan="2" col="2" class="oe_form_group_label_border"> - <separator string="Categorization" colspan="2"/> - <field name="type_id" widget="selection"/> - <field name="channel_id" widget="selection"/> - </group> - <group colspan="2" col="2" class="oe_form_group_label_border"> - <separator string="Mailings" colspan="2"/> - <field name="opt_in" on_change="on_change_opt_in(opt_in)"/> - <field name="opt_out" on_change="on_change_opt_out(opt_out)"/> - </group> - </page> - <page string="Extra Info"> - <group col="2" colspan="2" class="oe_form_group_label_border"> - <separator string="Misc" colspan="2"/> - <field name="active"/> - <field name="day_open" groups="base.group_no_one"/> - <field name="day_close" groups="base.group_no_one"/> - <field name="referred"/> - </group> - <group col="2" colspan="2" class="oe_form_group_label_border"> - <separator colspan="4" string="References"/> - <field name="ref"/> - <field name="ref2"/> - </group> - </page> - </notebook> + <!--<button string="Mail" + name="%(mail.action_email_compose_message_wizard)d" + context="{'mail':'new', 'model': 'crm.lead'}" + icon="terp-mail-message-new" type="action" />--> + + <notebook colspan="4"> + <page string="Internal Notes"> + <field name="description"/> + </page> + <page string="Lead"> + <group> + <group> + <field name="partner_name"/> + <label for="street" string="Address"/> + <div> + <field name="street" placeholder="Street..."/> + <field name="street2"/> + <div> + <field name="zip" class="oe_form_inline" placeholder="ZIP"/> + <field name="city" class="oe_form_inline" placeholder="City"/> + </div> + <field name="state_id" placeholder="State"/> + <field name="country_id" placeholder="Country"/> + </div> + </group> + + <group> + <field name="contact_name" /> + <field name="function" /> + <field domain="[('domain', '=', 'contact')]" name="title"/> + <field name="mobile"/> + <field name="fax"/> + </group> + + <group string="Categorization"> + <field name="type_id" widget="selection"/> + <field name="channel_id" widget="selection"/> + </group> + <group string="Mailings"> + <field name="opt_in" on_change="on_change_opt_in(opt_in)"/> + <field name="opt_out" on_change="on_change_opt_out(opt_out)"/> + </group> + <group string="Misc"> + <field name="active"/> + <field name="day_open" groups="base.group_no_one"/> + <field name="day_close" groups="base.group_no_one"/> + <field name="referred"/> + </group> + <group string="References"> + <field name="ref"/> + <field name="ref2"/> + </group> + </group> + </page> + </notebook> </sheet> - <div class="oe_form_bottom"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> - </div> + <footer> + <field name="message_ids" widget="ThreadView"/> + </footer> </form> </field> </record> - <!-- Opportunities Tree View --> - <record model="ir.ui.view" id="crm_case_tree_view_oppor"> - <field name="name">Opportunities Tree</field> - <field name="model">crm.lead</field> - <field name="type">tree</field> - <field name="arch" type="xml"> - <tree string="Opportunities" fonts="bold:needaction_pending==True" colors="blue:state=='pending' and not(date_deadline and (date_deadline < current_date));gray:state in ('cancel', 'done');red:date_deadline and (date_deadline < current_date)"> - <field name="needaction_pending" invisible="1"/> - <field name="date_deadline" invisible="1"/> - <field name="create_date" groups="base.group_no_one"/> - <field name="name" string="Opportunity"/> - <field name="partner_id" string="Customer"/> - <field name="country_id" invisible="context.get('invisible_country', True)" /> - <field name="date_action"/> - <field name="title_action" /> - <field name="channel_id" invisible="1"/> - <field name="type_id" invisible="1"/> - <field name="subjects" invisible="1"/> - <field name="stage_id"/> - <button name="stage_previous" string="Previous Stage" states="open,pending" type="object" icon="gtk-go-back" /> - <button name="stage_next" string="Next Stage" states="open,pending" type="object" icon="gtk-go-forward" /> - <field name="planned_revenue" sum="Expected Revenues"/> - <field name="probability" widget="progressbar" avg="Avg. of Probability"/> - <field name="section_id" invisible="context.get('invisible_section', True)" /> - <field name="user_id"/> - <field name="priority" invisible="1"/> - <field name="categ_id" invisible="1"/> - <field name="state"/> - <button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward" /> - <button name="case_pending" string="Pending" states="open,draft" type="object" icon="gtk-media-pause" /> - <button name="case_mark_lost" string="Lost" states="open,pending" type="object" icon="gtk-cancel" /> - <button name="case_mark_won" string="Won" states="open,pending" type="object" icon="gtk-apply" /> - </tree> - </field> - </record> + <!-- Opportunities Tree View --> + <record model="ir.ui.view" id="crm_case_tree_view_oppor"> + <field name="name">Opportunities Tree</field> + <field name="model">crm.lead</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree string="Opportunities" fonts="bold:needaction_pending==True" colors="blue:state=='pending' and not(date_deadline and (date_deadline < current_date));gray:state in ('cancel', 'done');red:date_deadline and (date_deadline < current_date)"> + <field name="needaction_pending" invisible="1"/> + <field name="date_deadline" invisible="1"/> + <field name="create_date" groups="base.group_no_one"/> + <field name="name" string="Opportunity"/> + <field name="partner_id" string="Customer"/> + <field name="country_id" invisible="context.get('invisible_country', True)" /> + <field name="date_action"/> + <field name="title_action" /> + <field name="channel_id" invisible="1"/> + <field name="type_id" invisible="1"/> + <field name="subjects" invisible="1"/> + <field name="stage_id"/> + <field name="planned_revenue" sum="Expected Revenues"/> + <field name="probability" widget="progressbar" avg="Avg. of Probability"/> + <field name="section_id" invisible="context.get('invisible_section', True)" /> + <field name="user_id"/> + <field name="priority" invisible="1"/> + <field name="categ_id" invisible="1"/> + <field name="state" groups="base.group_no_one"/> + </tree> + </field> + </record> <!-- Opportunities Search View --> @@ -599,8 +555,7 @@ help="Unassigned Opportunities" /> </field> <field name="section_id" - context="{'invisible_section': False}" - widget="selection"> + context="{'invisible_section': False, 'default_section_id': self}"> <filter icon="terp-personal+" domain="['|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]" context="{'invisible_section': False}" @@ -630,19 +585,19 @@ </field> </record> - <!-- crm.lead Opportunities Graph View --> - <record model="ir.ui.view" id="crm_case_graph_view_opportunity"> - <field name="name">CRM - Opportunity Graph</field> - <field name="model">crm.lead</field> - <field name="type">graph</field> - <field name="arch" type="xml"> - <graph string="Opportunity by Categories" type="bar" orientation="horizontal"> - <field name="categ_id"/> - <field name="planned_revenue" operator="+"/> - <field name="state" group="True"/> - </graph> - </field> - </record> + <!-- crm.lead Opportunities Graph View --> + <record model="ir.ui.view" id="crm_case_graph_view_opportunity"> + <field name="name">CRM - Opportunity Graph</field> + <field name="model">crm.lead</field> + <field name="type">graph</field> + <field name="arch" type="xml"> + <graph string="Opportunity by Categories" type="bar" orientation="horizontal"> + <field name="categ_id"/> + <field name="planned_revenue" operator="+"/> + <field name="state" group="True"/> + </graph> + </field> + </record> -</data> + </data> </openerp> diff --git a/addons/crm/crm_meeting.py b/addons/crm/crm_meeting.py index a0e4803cde7..bc1ab42b3df 100644 --- a/addons/crm/crm_meeting.py +++ b/addons/crm/crm_meeting.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-today OpenERP SA (<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 @@ -20,43 +20,35 @@ ############################################################################## from base_calendar import base_calendar -from crm import crm_base, crm_case +from base_status.base_state import base_state +from base_status.base_stage import base_stage +import logging from osv import fields, osv import tools from tools.translate import _ -import logging - -class crm_lead(crm_case, osv.osv): - """ CRM Leads """ - _name = 'crm.lead' -crm_lead() - -class crm_phonecall(crm_case, osv.osv): - """ CRM Phonecall """ - _name = 'crm.phonecall' -crm_phonecall() +class crm_lead(base_stage, osv.osv): + """ CRM Leads """ + _name = 'crm.lead' -class crm_meeting(crm_base, osv.osv): - """ CRM Meeting Cases """ - +class crm_meeting(base_state, osv.Model): + """ Model for CRM meetings """ _name = 'crm.meeting' _description = "Meeting" _order = "id desc" _inherit = ["calendar.event", 'ir.needaction_mixin', "mail.thread"] _columns = { - # From crm.case - 'name': fields.char('Summary', size=124, required=True, states={'done': [('readonly', True)]}), + # base_state required fields 'partner_id': fields.many2one('res.partner', 'Partner', states={'done': [('readonly', True)]}), 'section_id': fields.many2one('crm.case.section', 'Sales Team', states={'done': [('readonly', True)]}, \ select=True, help='Sales team to which Case belongs to.'), 'email_from': fields.char('Email', size=128, states={'done': [('readonly', True)]}, help="These people will receive email."), - 'id': fields.integer('ID', readonly=True), 'create_date': fields.datetime('Creation Date' , readonly=True), 'write_date': fields.datetime('Write Date' , readonly=True), 'date_action_last': fields.datetime('Last Action', readonly=1), 'date_action_next': fields.datetime('Next Action', readonly=1), # Meeting fields + 'name': fields.char('Summary', size=124, required=True, states={'done': [('readonly', True)]}), 'categ_id': fields.many2one('crm.case.categ', 'Meeting Type', \ domain="[('object_id.model', '=', 'crm.meeting')]", \ ), @@ -66,12 +58,11 @@ class crm_meeting(crm_base, osv.osv): 'event_id', 'attendee_id', 'Attendees', states={'done': [('readonly', True)]}), 'date_closed': fields.datetime('Closed', readonly=True), 'date_deadline': fields.datetime('Deadline', states={'done': [('readonly', True)]}), - 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]), - 'state': fields.selection([('open', 'Confirmed'), - ('draft', 'Unconfirmed'), + 'state': fields.selection([ ('draft', 'Unconfirmed'), + ('open', 'Confirmed'), ('cancel', 'Cancelled'), - ('done', 'Done')], 'Status', \ - size=16, readonly=True), + ('done', 'Done')], + string='Status', size=16, readonly=True), } _defaults = { 'state': 'draft', @@ -91,6 +82,17 @@ class crm_meeting(crm_base, osv.osv): result[obj.id] = [obj.user_id.id] return result + def case_open(self, cr, uid, ids, context=None): + """ Confirms meeting """ + res = super(crm_meeting, self).case_open(cr, uid, ids, context) + for (id, name) in self.name_get(cr, uid, ids): + id=base_calendar.base_calendar_id2real_id(id) + return res + + # ---------------------------------------- + # OpenChatter + # ---------------------------------------- + def case_get_note_msg_prefix(self, cr, uid, id, context=None): return 'Meeting' @@ -119,32 +121,12 @@ class crm_meeting(crm_base, osv.osv): meeting.message_append_note(body=parent_message) return True - def case_close_send_note(self, cr, uid, ids, context=None): - message = _("Meeting has been <b>done</b>.") - return self.message_append_note(cr, uid, ids, body=message, context=context) - def case_open_send_note(self, cr, uid, ids, context=None): - for meeting in self.browse(cr, uid, ids, context=context): - if meeting.state != 'draft': - return False - message = _("Meeting has been <b>confirmed</b>.") - meeting.message_append_note(body=message) - return True + return self.message_append_note(cr, uid, ids, body=_("Meeting has been <b>confirmed</b>."), context=context) - def case_open(self, cr, uid, ids, context=None): - """Confirms meeting - @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 Meeting Ids - @param *args: Tuple Value for additional Params - """ - res = super(crm_meeting, self).case_open(cr, uid, ids, context) - for (id, name) in self.name_get(cr, uid, ids): - id=base_calendar.base_calendar_id2real_id(id) - return res + def case_close_send_note(self, cr, uid, ids, context=None): + return self.message_append_note(cr, uid, ids, body=_("Meeting has been <b>done</b>."), context=context) -crm_meeting() class calendar_attendee(osv.osv): """ Calendar Attendee """ diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml index 5b0a35a185e..ea6f0bf7e43 100644 --- a/addons/crm/crm_meeting_view.xml +++ b/addons/crm/crm_meeting_view.xml @@ -25,7 +25,19 @@ <field name="model">crm.meeting</field> <field name="type">form</field> <field name="arch" type="xml"> - <form string="Meetings"> + <form string="Meetings" layout="manual"> + <header> + <button name="case_open" string="Confirm" type="object" + states="draft"/> + <button name="case_close" string="Done" type="object" + states="open"/> + <button name="case_reset" string="Reset to Unconfirmed" type="object" + states="cancel,done"/> + <button name="case_cancel" string="Cancel" type="object" + states="draft,open"/> + <field name="state" widget="statusbar" statusbar_visible="draft,open,done"/> + </header> + <sheet layout="auto"> <group col="6" colspan="4"> <field name="name" select="1" string="Title" required="1" /> @@ -71,19 +83,6 @@ </group> <separator string="Description" colspan="4" /> <field name="description" nolabel="1" colspan="4" /> - <separator colspan="4"/> - <group col="8" colspan="4" groups="base.group_no_one"> - <field name="state" /> - <button name="case_close" string="Done" - states="open" type="object" - icon="gtk-jump-to" /> - <button name="case_reset" string="Reset to Unconfirmed" - states="open,done" type="object" - icon="gtk-convert" /> - <button name="case_open" string="Confirm" - states="draft" type="object" - icon="gtk-go-forward" /> - </group> </page> <page string="Invitation Detail"> <button string="Invite People" @@ -209,7 +208,10 @@ </page> </notebook> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + </sheet> + <div class="oe_form_bottom"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> + </div> </form> </field> </record> diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py index 309102ec366..9418b05b9ea 100644 --- a/addons/crm/crm_phonecall.py +++ b/addons/crm/crm_phonecall.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-today OpenERP SA (<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,26 +19,22 @@ # ############################################################################## -from crm import crm_base -from osv import fields, osv -from tools.translate import _ +from base_status.base_state import base_state import crm +from datetime import datetime +from osv import fields, osv import time from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP -from datetime import datetime - -class crm_phonecall(crm_base, osv.osv): - """ Phonecall Cases """ +from tools.translate import _ +class crm_phonecall(base_state, osv.osv): + """ Model for CRM phonecalls """ _name = "crm.phonecall" _description = "Phonecall" _order = "id desc" _inherit = ['ir.needaction_mixin', 'mail.thread'] _columns = { - # From crm.case - 'id': fields.integer('ID', readonly=True), - 'name': fields.char('Call Summary', size=64, required=True), - 'active': fields.boolean('Active', required=False), + # base_state required fields 'date_action_last': fields.datetime('Last Action', readonly=1), 'date_action_next': fields.datetime('Next Action', readonly=1), 'create_date': fields.datetime('Creation Date' , readonly=True), @@ -48,20 +44,21 @@ class crm_phonecall(crm_base, osv.osv): 'partner_id': fields.many2one('res.partner', 'Partner'), 'company_id': fields.many2one('res.company', 'Company'), 'description': fields.text('Description'), - 'state': fields.selection([ - ('draft', 'Draft'), - ('open', 'Todo'), + 'state': fields.selection([ ('draft', 'Draft'), + ('open', 'Confirmed'), ('pending', 'Not Held'), ('cancel', 'Cancelled'), - ('done', 'Held'), - ], 'Status', size=16, readonly=True, - help='The state is set to \'Todo\', when a case is created.\ - \nIf the case is in progress the state is set to \'Open\'.\ - \nWhen the call is over, the state is set to \'Held\'.\ - \nIf the call needs to be done then the state is set to \'Not Held\'.'), + ('done', 'Held'),], + string='Status', size=16, readonly=True, + help='The state is set to \'Todo\', when a case is created.\ + If the case is in progress the state is set to \'Open\'.\ + When the call is over, the state is set to \'Held\'.\ + If the call needs to be done then the state is set to \'Not Held\'.'), 'email_from': fields.char('Email', size=128, help="These people will receive email."), 'date_open': fields.datetime('Opened', readonly=True), # phonecall fields + 'name': fields.char('Call Summary', size=64, required=True), + 'active': fields.boolean('Active', required=False), 'duration': fields.float('Duration', help="Duration in Minutes"), 'categ_id': fields.many2one('crm.case.categ', 'Category', \ domain="['|',('section_id','=',section_id),('section_id','=',False),\ @@ -72,7 +69,6 @@ class crm_phonecall(crm_base, osv.osv): 'date_closed': fields.datetime('Closed', readonly=True), 'date': fields.datetime('Date'), 'opportunity_id': fields.many2one ('crm.lead', 'Lead/Opportunity'), - 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]), } def _get_default_state(self, cr, uid, context=None): @@ -81,11 +77,10 @@ class crm_phonecall(crm_base, osv.osv): return 'open' _defaults = { - 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), + 'date': fields.datetime.now, 'priority': crm.AVAILABLE_PRIORITIES[2][0], 'state': _get_default_state, 'user_id': lambda self,cr,uid,ctx: uid, - 'active': 1, } def create(self, cr, uid, vals, context=None): @@ -96,32 +91,23 @@ class crm_phonecall(crm_base, osv.osv): return obj_id def case_close(self, cr, uid, ids, context=None): - """Overrides close for crm_case for setting close date - """ + """ Overrides close for crm_case for setting duration """ res = True - for phone in self.browse(cr, uid, ids): + for phone in self.browse(cr, uid, ids, context=context): phone_id = phone.id - data = {'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')} + data = {} if phone.duration <=0: - duration = datetime.now() - datetime.strptime(phone.date, '%Y-%m-%d %H:%M:%S') - data.update({'duration': duration.seconds/float(60)}) - res = super(crm_phonecall, self).case_close(cr, uid, [phone_id], context) - self.write(cr, uid, [phone_id], data) + duration = datetime.now() - datetime.strptime(phone.date, DEFAULT_SERVER_DATETIME_FORMAT) + data['duration'] = duration.seconds/float(60) + res = super(crm_phonecall, self).case_close(cr, uid, [phone_id], context=context) + self.write(cr, uid, [phone_id], data, context=context) return res def case_reset(self, cr, uid, ids, context=None): """Resets case as Todo """ res = super(crm_phonecall, self).case_reset(cr, uid, ids, context) - self.write(cr, uid, ids, {'duration': 0.0, 'state':'open'}) - return res - - - def case_open(self, cr, uid, ids, context=None): - """Overrides cancel for crm_case for setting Open Date - """ - res = super(crm_phonecall, self).case_open(cr, uid, ids, context) - self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')}) + self.write(cr, uid, ids, {'duration': 0.0, 'state':'open'}, context=context) return res def schedule_another_phonecall(self, cr, uid, ids, schedule_time, call_summary, \ @@ -300,7 +286,7 @@ class crm_phonecall(crm_base, osv.osv): return value # ---------------------------------------- - # OpenChatter methods and notifications + # OpenChatter # ---------------------------------------- def get_needaction_user_ids(self, cr, uid, ids, context=None): @@ -336,9 +322,6 @@ class crm_phonecall(crm_base, osv.osv): def _call_set_partner_send_note(self, cr, uid, ids, context=None): return self.message_append_note(cr, uid, ids, body=_("Partner has been <b>created</b>"), context=context) - - -crm_phonecall() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/crm_phonecall_view.xml b/addons/crm/crm_phonecall_view.xml index 55d8d8c9a64..2e1c35e683a 100644 --- a/addons/crm/crm_phonecall_view.xml +++ b/addons/crm/crm_phonecall_view.xml @@ -43,10 +43,14 @@ states="open,pending" icon="gtk-redo" name="action_make_meeting" type="object" /> <field name="state"/> - <button name="case_cancel" string="Cancel" states="open,pending" type="object" icon="gtk-cancel"/> - <button name="case_open" string="Todo" states="pending" type="object" icon="gtk-go-forward"/> - <button name="case_close" string="Held" states="open,pending" type="object" icon="gtk-jump-to"/> - <button name="case_pending" string="Not Held" states="open" type="object" icon="gtk-media-pause"/> + <button name="case_open" string="Confirm" type="object" + states="draft,pending" icon="gtk-go-forward"/> + <button name="case_close" string="Held" type="object" + states="open,pending" icon="gtk-jump-to"/> + <button name="case_cancel" string="Cancel" type="object" + states="draft,open,pending" icon="gtk-cancel"/> + <button name="case_reset" string="Reset to Todo" type="object" + states="cancel" icon="gtk-convert"/> </tree> </field> </record> @@ -59,17 +63,17 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> - <button name="case_close" string="Held" states="open,pending" type="object" /> - <button name="case_open" string="Todo" states="pending" type="object" /> - <button name="case_pending" string="Not Held" states="open" type="object" /> - <button name="case_reset" string="Reset to Todo" states="cancel" type="object" /> - <button name="case_cancel" string="Cancel" states="open,pending" type="object" /> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="open,done" statusbar_colors='{"pending":"red"}' select="1"/> - </div> - <div class="oe_clear"/> - </div> + <header> + <button name="case_open" string="Confirm" type="object" + states="draft,pending" icon="gtk-go-forward"/> + <button name="case_close" string="Held" type="object" + states="open,pending" icon="gtk-jump-to"/> + <button name="case_reset" string="Reset to Todo" type="object" + states="cancel" icon="gtk-convert"/> + <button name="case_cancel" string="Cancel" type="object" + states="draft,open,pending" icon="gtk-cancel"/> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,done"/> + </header> <sheet string="Phone Call" layout="auto"> <group colspan="6" col="7"> <field name="name" required="1"/> @@ -117,7 +121,7 @@ <field name="description" nolabel="1" colspan="4" /> </sheet> <div class="oe_form_sheet_width"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml index dd24ef38911..c8f019e685b 100644 --- a/addons/crm/crm_view.xml +++ b/addons/crm/crm_view.xml @@ -143,6 +143,8 @@ <field name="sequence"/> <field name="name"/> <field name="probability"/> + <field name="state"/> + <field name="type"/> </tree> </field> </record> @@ -162,6 +164,9 @@ <field name="on_change"/> <field name="case_default"/> <field name="sequence"/> + <field name="state"/> + <field name="fold"/> + <field name="type"/> </group> <separator string="Requirements" colspan="4"/> <field name="requirements" nolabel="1" colspan="4"/> diff --git a/addons/crm/i18n/nl.po b/addons/crm/i18n/nl.po index 1baa8e962a6..a176db67234 100644 --- a/addons/crm/i18n/nl.po +++ b/addons/crm/i18n/nl.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-02-08 01:37+0100\n" -"PO-Revision-Date: 2012-02-16 14:00+0000\n" +"PO-Revision-Date: 2012-06-01 08:42+0000\n" "Last-Translator: Erwin <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: 2012-05-11 04:44+0000\n" -"X-Generator: Launchpad (build 15225)\n" +"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: crm #: view:crm.lead.report:0 @@ -172,7 +172,7 @@ msgstr "Verwachte besluit maand" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 msgid "Assigned Opportunities to" -msgstr "" +msgstr "Toegewezen porspects aan" #. module: crm #: view:crm.lead:0 field:crm.lead,partner_id:0 view:crm.lead.report:0 @@ -599,7 +599,7 @@ msgstr "Einddatum" #. module: crm #: view:crm.opportunity2phonecall:0 view:crm.phonecall2phonecall:0 msgid "Schedule/Log a Call" -msgstr "" +msgstr "Plan/Log een gesprek" #. module: crm #: constraint:base.action.rule:0 @@ -792,7 +792,7 @@ msgstr "Doorgaan" #. module: crm #: field:crm.segmentation,som_interval:0 msgid "Days per Period" -msgstr "" +msgstr "Dagen per periode" #. module: crm #: field:crm.meeting,byday:0 @@ -960,7 +960,7 @@ msgstr "Dagen voor openen" #. module: crm #: view:crm.meeting:0 msgid "Show Time as" -msgstr "" +msgstr "Tijd weergeven als" #. module: crm #: view:crm.phonecall2partner:0 @@ -1344,7 +1344,7 @@ msgstr "Schrijfdatum" #. module: crm #: view:crm.meeting:0 msgid "End of Recurrency" -msgstr "" +msgstr "Einde herhaling" #. module: crm #: view:crm.meeting:0 @@ -1907,7 +1907,7 @@ msgstr "Antwoord aan" #. module: crm #: view:crm.case.section:0 msgid "Select Stages for this Sales Team" -msgstr "" +msgstr "Selecteer de fases voor dit verkoopteam" #. module: crm #: view:board.board:0 @@ -2779,7 +2779,7 @@ msgstr "E-mail adres van de contactpersoon" #. module: crm #: field:crm.lead,referred:0 msgid "Referred by" -msgstr "" +msgstr "Gerefereerd door" #. module: crm #: view:crm.lead:0 model:ir.model,name:crm.model_crm_add_note diff --git a/addons/crm/i18n/pt.po b/addons/crm/i18n/pt.po index 10a2ca3571f..89f79d998b4 100644 --- a/addons/crm/i18n/pt.po +++ b/addons/crm/i18n/pt.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-02-08 01:37+0100\n" -"PO-Revision-Date: 2011-01-19 00:40+0000\n" -"Last-Translator: Tiago Baptista <Unknown>\n" +"PO-Revision-Date: 2012-05-31 15:17+0000\n" +"Last-Translator: ThinkOpen Solutions <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: 2012-05-11 04:45+0000\n" -"X-Generator: Launchpad (build 15225)\n" +"X-Launchpad-Export-Date: 2012-06-01 05:32+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: crm #: view:crm.lead.report:0 @@ -792,7 +792,7 @@ msgstr "Continuar" #. module: crm #: field:crm.segmentation,som_interval:0 msgid "Days per Period" -msgstr "" +msgstr "Dias por Periodo" #. module: crm #: field:crm.meeting,byday:0 @@ -959,7 +959,7 @@ msgstr "Dias para abrir" #. module: crm #: view:crm.meeting:0 msgid "Show Time as" -msgstr "" +msgstr "Mostrar horas como" #. module: crm #: view:crm.phonecall2partner:0 diff --git a/addons/crm/test/process/cancel_lead.yml b/addons/crm/test/process/cancel_lead.yml index ca5f7d0174a..34dd8310022 100644 --- a/addons/crm/test/process/cancel_lead.yml +++ b/addons/crm/test/process/cancel_lead.yml @@ -6,8 +6,11 @@ - I check cancelled lead. - - !assert {model: crm.lead, id: crm.crm_case_itisatelesalescampaign0, string: Lead is in cancel state}: - - state == "cancel" + !python {model: crm.lead}: | + lead = self.browse(cr, uid, ref('crm_case_itisatelesalescampaign0')) + 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 probability is wrong and should be 0.0.' - I reset cancelled lead into unqualified lead. - @@ -19,35 +22,24 @@ !assert {model: crm.lead, id: crm.crm_case_itisatelesalescampaign0, string: Lead is in draft state}: - state == "draft" - - I put unqualified lead into pending. + I re-open the lead - !python {model: crm.lead}: | - self.case_pending(cr, uid, [ref("crm_case_itisatelesalescampaign0")]) + self.case_open(cr, uid, [ref("crm_case_itisatelesalescampaign0")]) - - I check status of pending lead. + I check stage and state of the re-opened lead - - !assert {model: crm.lead, id: crm.crm_case_itisatelesalescampaign0, string: Lead is in pending state}: - - state == "pending" + !python {model: crm.lead}: | + lead = self.browse(cr, uid, ref('crm.crm_case_itisatelesalescampaign0')) + 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. - !python {model: crm.lead}: | self.case_escalate(cr, uid, [ref("crm_case_itisatelesalescampaign0")]) - - I check lead escalate to parent team. + I check the lead is correctly escalated to the parent team. - !assert {model: crm.lead, id: crm.crm_case_itisatelesalescampaign0, string: Escalate lead to parent team}: - section_id.name == "Sales Department" -- - I mark as lost the opportunity. -- - !python {model: crm.lead}: | - self.case_mark_lost(cr, uid, [ref("crm_case_itisatelesalescampaign0")]) -- - I check opportunity after lost. -- - !python {model: crm.lead}: | - lead = self.browse(cr, uid, ref('crm_case_itisatelesalescampaign0')) - assert lead.state == 'done', "lead is not done state" - assert lead.stage_id.id == ref('crm.stage_lead6'), 'Stage is not changed!' - assert lead.probability == 0.0, 'Probability is wrong!' diff --git a/addons/crm/test/process/lead2opportunity2win.yml b/addons/crm/test/process/lead2opportunity2win.yml index a5b6c421dbb..c1caf394c2e 100644 --- a/addons/crm/test/process/lead2opportunity2win.yml +++ b/addons/crm/test/process/lead2opportunity2win.yml @@ -51,7 +51,6 @@ - !python {model: crm.lead}: | self.action_makeMeeting(cr, uid, [ref('crm_case_qrecorp0')]) - - After communicated with customer, I put some notes with contract details. - @@ -60,18 +59,18 @@ note_id = self.create(cr, uid, {'body': "ces détails envoyés par le client sur le FAX pour la qualité"}) self.action_add(cr, uid, [note_id], context=context) - - Finally, I won this opportunity, so I close this opportunity. + I win this opportunity - !python {model: crm.lead}: | self.case_mark_won(cr, uid, [ref("crm_case_qrecorp0")]) - - I check details of the opportunity after won the opportunity. + I check details of the opportunity after having won the opportunity. - !python {model: crm.lead}: | lead = self.browse(cr, uid, ref('crm_case_qrecorp0')) - assert lead.state == 'done', 'Opportunity is not in done state!' - assert lead.stage_id.name == 'Won', ' Stage of Opportunity is not win!' - assert lead.probability == 100.0, 'probability revenue should not be 100.0!' + 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!" - I convert mass lead into opportunity customer. - @@ -97,6 +96,19 @@ assert opp.type == 'opportunity', 'Lead is not converted to opportunity!' assert opp.stage_id.id == ref("stage_lead1"), 'Stage of probability is incorrect!' - + I loose the second opportunity +- + !python {model: crm.lead}: | + self.case_mark_lost(cr, uid, [ref("crm_case_electonicgoodsdealer0")]) +- + I check details of the opportunity after the loose +- + !python {model: crm.lead}: | + lead = self.browse(cr, uid, ref('crm_case_electonicgoodsdealer0')) + assert lead.stage_id.id == ref('crm.stage_lead8'), "Opportunity stage should be 'Lost'." + assert lead.state == 'cancel', "Lost opportunity is not in 'cancel' state!" + assert lead.probability == 0.0, "Revenue probability should be 0.0!" +- I confirm review needs meeting. - !python {model: crm.meeting}: | diff --git a/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml b/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml index 9c4f1361e7c..d0499bbdf6c 100644 --- a/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml +++ b/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml @@ -2,40 +2,44 @@ <openerp> <data> - <!-- Opportunity to Phonecall view --> + <!-- Opportunity to Phonecall view --> <record model="ir.ui.view" id="opportunity2phonecall_view"> <field name="name">crm.opportunity2phonecall.form</field> <field name="model">crm.opportunity2phonecall</field> <field name="type">form</field> <field name="arch" type="xml"> - <form string="Schedule/Log a Call"> - <separator string="Schedule/Log a Call" colspan="4"/> - <field name="action"/> - <separator string="Call Details" colspan="4"/> - <field name="name"/> - <field name="date" string="Planned Date" attrs="{'invisible': [('action','=','log')]}"/> - <newline/> - <field name="partner_id" readonly="True"/> - <field name="categ_id" string="Type" widget="selection" domain="[('object_id.model', '=', 'crm.phonecall')]"/> - <field name="phone"/> - <field name="user_id" attrs="{'invisible': [('action','=','log')]}"/> - <field name="section_id" widget="selection" attrs="{'invisible': [('action','=','log')]}"/> - <separator string="Notes" colspan="4"/> - <field name="note" colspan="4" nolabel="1"/> - <separator string="" colspan="4"/> - <group colspan="4" col="3"> - <button name="action_cancel" string="_Cancel" icon="gtk-cancel" special="cancel" /> - <button name="action_schedule" type="object" string="Log call" icon="gtk-ok" attrs="{'invisible' : [('action', '!=', 'log')]}" /> - <button name="action_schedule" type="object" string="Schedule Call" icon="gtk-ok" attrs="{'invisible' : [('action', '!=', 'schedule')]}" /> - </group> + <form string="Schedule/Log a Call" layout="manual"> + <header> + <button name="action_schedule" type="object" string="Log call" icon="gtk-ok" attrs="{'invisible' : [('action', '!=', 'log')]}" /> + <button name="action_schedule" type="object" string="Schedule Call" icon="gtk-ok" attrs="{'invisible' : [('action', '!=', 'schedule')]}" /> + <button name="action_cancel" string="_Cancel" icon="gtk-cancel" special="cancel" /> + </header> + <group> + <group> + <field name="action"/> + <field name="name"/> + <field name="date" string="Planned Date" attrs="{'invisible': [('action','=','log')]}"/> + </group> + <group> + <field name="partner_id" readonly="True"/> + <field name="categ_id" string="Type" + widget="selection" + domain="[('object_id.model', '=', 'crm.phonecall')]" + groups="base.group_no_one"/> + <field name="phone"/> + <field name="user_id" attrs="{'invisible': [('action','=','log')]}"/> + <field name="section_id" widget="selection" attrs="{'invisible': [('action','=','log')]}"/> + </group> + </group> + <field name="note"/> </form> </field> </record> - <!-- Opportunity to Phonecall action --> + <!-- Opportunity to Phonecall action --> - <record model="ir.actions.act_window" id="opportunity2phonecall_act"> + <record model="ir.actions.act_window" id="opportunity2phonecall_act"> <field name="name">Schedule/Log Call</field> <field name="res_model">crm.opportunity2phonecall</field> <field name="view_type">form</field> diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py index 1b6d386b0cc..808ad2e2055 100644 --- a/addons/crm_claim/crm_claim.py +++ b/addons/crm_claim/crm_claim.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-today OpenERP SA (<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,25 +19,57 @@ # ############################################################################## -from osv import fields, osv +from base_status.base_stage import base_stage +import binascii from crm import crm -import time from crm import wizard -import binascii +from osv import fields, osv +import time import tools from tools.translate import _ wizard.mail_compose_message.SUPPORTED_MODELS.append('crm.claim') + 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(crm.crm_case, osv.osv): +class crm_claim_stage(osv.osv): + """ Model for claim stages. This models the main stages of a claim + management flow. Main CRM objects (leads, opportunities, project + issues, ...) will now use only stages, instead of state and stages. + Stages are for example used to display the kanban view of records. """ - Crm claim + _name = "crm.claim.stage" + _description = "Claim stages" + _rec_name = 'name' + _order = "sequence" + + _columns = { + 'name': fields.char('Stage Name', size=64, required=True, translate=True), + 'sequence': fields.integer('Sequence', help="Used to order stages. Lower is better."), + '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, 'State', required=True, help="The related state for the stage. The state of your document will automatically change regarding the selected stage. For example, if a stage is related to the state 'Close', when your document reaches this stage, it will be automatically have the 'closed' state."), + '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', + help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."), + } + + _defaults = { + 'sequence': lambda *args: 1, + 'state': 'draft', + 'fold': False, + 'case_refused': False, + } + +class crm_claim(base_stage, osv.osv): + """ Crm claim """ _name = "crm.claim" _description = "Claim" @@ -73,30 +105,71 @@ class crm_claim(crm.crm_case, osv.osv): 'email_cc': fields.text('Watchers Emails', size=252, help="These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"), 'email_from': fields.char('Email', size=128, help="These people will receive email."), 'partner_phone': fields.char('Phone', size=32), - 'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_ids','=',section_id)]"), + 'stage_id': fields.many2one ('crm.claim.stage', 'Stage', + domain="['|', ('section_ids', '=', section_id), ('case_default', '=', True)]"), 'cause': fields.text('Root Cause'), - 'state': fields.selection(crm.AVAILABLE_STATES, 'Status', size=16, readonly=True, - help='The state is set to \'Draft\', when a case is created.\ - \nIf the case is in progress the state is set to \'Open\'.\ - \nWhen the case is over, the state is set to \'Done\'.\ - \nIf the case needs to be reviewed then the state is set to \'Pending\'.'), - 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]), + 'state': fields.related('stage_id', 'state', type="selection", store=True, + selection=crm.AVAILABLE_STATES, string="State", readonly=True, + help='The state is set to \'Draft\', when a case is created.\ + If the case is in progress the state is set to \'Open\'.\ + When the case is over, the state is set to \'Done\'.\ + If the case needs to be reviewed then the state is \ + set to \'Pending\'.'), } _defaults = { - 'user_id': crm.crm_case._get_default_user, - 'partner_id': crm.crm_case._get_default_partner, - 'email_from':crm.crm_case. _get_default_email, - 'state': lambda *a: 'draft', - 'section_id':crm.crm_case. _get_section, - 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), + '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), + 'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c), + '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 } - def case_get_note_msg_prefix(self, cr, uid, id, context=None): - return 'Claim' + def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None): + """ Override of the base.stage method + Parameter of the stage search taken from the lead: + - section_id: if set, stages must belong to this section or + be a default case + """ + if isinstance(cases, (int, long)): + cases = self.browse(cr, uid, cases, context=context) + # collect all section_ids + section_ids = [] + if section_id: + section_ids.append(section_id) + for claim in cases: + if claim.section_id: + section_ids.append(claim.section_id.id) + # OR all section_ids and OR with case_default + search_domain = [] + if section_ids: + search_domain += [('|')] * len(section_ids) + for section_id in section_ids: + search_domain.append(('section_ids', '=', section_id)) + search_domain.append(('case_default', '=', True)) + # AND with the domain in parameter + search_domain += list(domain) + # perform search, return the first found + stage_ids = self.pool.get('crm.claim.stage').search(cr, uid, search_domain, order=order, context=context) + if stage_ids: + return stage_ids[0] + return False + + def create(self, cr, uid, vals, context=None): + obj_id = super(crm_claim, self).create(cr, uid, vals, context) + self.create_send_note(cr, uid, [obj_id], context=context) + return obj_id + + 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 self.case_refuse_send_note(cr, uid, ids, context=context) def onchange_partner_id(self, cr, uid, ids, part, email=False): """This function returns value of partner address based on partner @@ -110,19 +183,6 @@ class crm_claim(crm.crm_case, osv.osv): } address = self.pool.get('res.partner').browse(cr, uid, part) return {'value': {'email_from': address.email, 'partner_phone': address.phone}} - - def case_open(self, cr, uid, ids, *args): - """Opens Claim""" - for l in self.browse(cr, uid, ids): - # When coming from draft override date and stage otherwise just set state - if l.state == 'draft': - message = _("The claim '%s' has been opened.") % l.name - self.log(cr, uid, l.id, message) - stage_id = self.stage_find(cr, uid, l.section_id.id or False, [('sequence','>',0)]) - if stage_id: - self.stage_set(cr, uid, [l.id], stage_id) - res = super(crm_claim, self).case_open(cr, uid, ids, *args) - return res def message_new(self, cr, uid, msg, custom_values=None, context=None): """Automatically called when new email message arrives""" @@ -177,6 +237,28 @@ class crm_claim(crm.crm_case, osv.osv): res = self.write(cr, uid, [case.id], values, context=context) return res + # --------------------------------------------------- + # OpenChatter methods and notifications + # --------------------------------------------------- + + def case_get_note_msg_prefix(self, cr, uid, id, context=None): + """ Override of default prefix for notifications. """ + return 'Claim' + + def create_send_note(self, cr, uid, ids, context=None): + msg = _('Claim has been <b>created</b>.') + return self.message_append_note(cr, uid, ids, body=msg, context=context) + + def case_refuse_send_note(self, cr, uid, ids, context=None): + msg = _('Claim has been <b>refused</b>.') + return self.message_append_note(cr, uid, ids, body=msg, context=context) + + def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): + """ Override of the (void) default notification method. """ + stage_name = self.pool.get('crm.claim.stage').name_get(cr, uid, [stage_id], context=context)[0][1] + return self.message_append_note(cr, uid, ids, body= _("Stage changed to <b>%s</b>.") % (stage_name), context=context) + + class res_partner(osv.osv): _inherit = 'res.partner' _columns = { diff --git a/addons/crm_claim/crm_claim_data.xml b/addons/crm_claim/crm_claim_data.xml index 5b3a2b0ed2a..33bd280c364 100644 --- a/addons/crm_claim/crm_claim_data.xml +++ b/addons/crm_claim/crm_claim_data.xml @@ -42,27 +42,39 @@ Case Stage --> - <record model="crm.case.stage" id="stage_claim1"> - <field name="name">Accepted as Claim</field> + <record model="crm.claim.stage" id="stage_claim1"> + <field name="name">Draft claim</field> + <field name="state">draft</field> <field name="sequence">26</field> + <field name="case_default" eval="True"/> </record> - <record model="crm.case.stage" id="stage_claim5"> + <record model="crm.claim.stage" id="stage_claim5"> <field name="name">Actions Defined</field> + <field name="state">open</field> <field name="sequence">27</field> + <field name="case_default" eval="True"/> </record> - <record model="crm.case.stage" id="stage_claim2"> + <record model="crm.claim.stage" id="stage_claim2"> <field name="name">Actions Done</field> + <field name="state">done</field> <field name="sequence">28</field> + <field name="case_default" eval="True"/> </record> - <record model="crm.case.stage" id="stage_claim3"> - <field name="name">Won't fix</field> + <record model="crm.claim.stage" id="stage_claim3"> + <field name="name">Refused</field> + <field name="state">done</field> <field name="sequence">29</field> + <field name="case_default" eval="True"/> + <field name="case_refused" eval="True"/> + <field name="fold" eval="True"/> </record> - - <record model="crm.case.section" id="crm.section_sales_department"> - <field name="name">Sales Department</field> - <field name="code">Sales</field> - <field name="stage_ids" eval="[(4, ref('stage_claim1')), (4, ref('stage_claim2')), (4, ref('stage_claim3')), (4, ref('stage_claim5'))]"/> + <record model="crm.claim.stage" id="stage_claim3"> + <field name="name">Cancelled</field> + <field name="state">cancel</field> + <field name="sequence">30</field> + <field name="case_default" eval="True"/> + <field name="fold" eval="True"/> </record> + </data> </openerp> diff --git a/addons/crm_claim/crm_claim_demo.xml b/addons/crm_claim/crm_claim_demo.xml index 592e655b489..0e368bcdffa 100644 --- a/addons/crm_claim/crm_claim_demo.xml +++ b/addons/crm_claim/crm_claim_demo.xml @@ -12,7 +12,6 @@ <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field eval=""Problem with the delivery of goods"" name="name"/> - <field eval=""open"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm_claim.categ_claim1"/> <field name="stage_id" ref="crm_claim.stage_claim1"/> @@ -25,7 +24,6 @@ <field eval=""4"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field eval=""Damaged Products"" name="name"/> - <field eval=""open"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm_claim.categ_claim2"/> <field name="stage_id" ref="crm_claim.stage_claim5"/> @@ -38,7 +36,6 @@ <field eval=""2"" name="priority"/> <field name="user_id" ref="base.user_demo"/> <field eval=""Document related problems"" name="name"/> - <field eval=""done"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm_claim.categ_claim3"/> <field name="stage_id" ref="crm_claim.stage_claim2"/> @@ -52,7 +49,6 @@ <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field eval=""Product quality not maintained"" name="name"/> - <field eval=""draft"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm_claim.categ_claim1"/> <field name="stage_id" ref="crm_claim.stage_claim5"/> @@ -65,7 +61,6 @@ <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field eval=""Some products missing"" name="name"/> - <field eval=""pending"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field name="categ_id" ref="crm_claim.categ_claim3"/> <field name="stage_id" ref="crm_claim.stage_claim3"/> @@ -77,7 +72,6 @@ <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field eval=""Problem with the delivery of assignments"" name="name"/> - <field eval=""cancel"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="time.strftime('%Y-%m-28 14:15:30')" name="date"/> <field name="categ_id" ref="crm_claim.categ_claim1"/> @@ -91,7 +85,6 @@ <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field eval=""Documents unclear"" name="name"/> - <field eval=""done"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="time.strftime('%Y-%m-19 13:01:05')" name="date"/> <field name="categ_id" ref="crm_claim.categ_claim3"/> diff --git a/addons/crm_claim/crm_claim_menu.xml b/addons/crm_claim/crm_claim_menu.xml index 734302fa7f9..75bfd9ce211 100644 --- a/addons/crm_claim/crm_claim_menu.xml +++ b/addons/crm_claim/crm_claim_menu.xml @@ -50,5 +50,10 @@ <menuitem name="Claims" id="menu_crm_case_claims" parent="base.menu_aftersale" action="crm_case_categ_claim0" sequence="1"/> + <!-- Claim Stages --> + <menuitem id="menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/> + <menuitem id="menu_project_config_project" name="Stages" parent="menu_definitions" sequence="1"/> + <menuitem id="menu_claim_stage_view" name="Claim Stages" action="crm_claim_stage_act" parent="menu_project_config_project" sequence="20"/> + </data> </openerp> diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml index 57a8827d528..4e49a0d9db8 100644 --- a/addons/crm_claim/crm_claim_view.xml +++ b/addons/crm_claim/crm_claim_view.xml @@ -23,12 +23,40 @@ <!-- Claim Stages --> + <record id="crm_claim_stage_tree" model="ir.ui.view"> + <field name="name">crm.claim.stage.tree</field> + <field name="model">crm.claim.stage</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree string="Claim Stages"> + <field name="sequence"/> + <field name="name"/> + <field name="state"/> + </tree> + </field> + </record> + + <record id="crm_claim_stage_form" model="ir.ui.view"> + <field name="name">crm.claim.stage.form</field> + <field name="model">crm.claim.stage</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form string="Claim Stage"> + <field name="name"/> + <field name="case_default"/> + <field name="sequence"/> + <field name="state"/> + <field name="case_refused"/> + <field name="fold"/> + </form> + </field> + </record> + <record id="crm_claim_stage_act" model="ir.actions.act_window"> <field name="name">Claim Stages</field> - <field name="res_model">crm.case.stage</field> + <field name="res_model">crm.claim.stage</field> <field name="view_type">form</field> - <field name="view_id" ref="crm.crm_case_stage_tree"/> - <field name="context">{'search_default_claim':1}</field> + <field name="view_id" ref="crm_claim_stage_tree"/> <field name="help">You can create claim stages to categorize the status of every claim entered in the system. The stages define all the steps required for the resolution of a claim.</field> </record> @@ -44,19 +72,13 @@ <field name="partner_id"/> <field name="user_id" /> <field name="date"/> + <field name="stage_id"/> <field name="date_action_next"/> <field name="action_next"/> <field name="categ_id" string="Type" select="1"/> - <field name="stage_id" invisible="1"/> <field name="date_deadline" invisible="1"/> <field name="date_closed" invisible="1"/> - <field name="state"/> - <button name="case_open" string="Open" - states="draft,pending" type="object" - icon="gtk-go-forward" /> - <button name="case_close" string="Close" - states="open,draft,pending" type="object" - icon="gtk-close" /> + <field name="state" groups="base.group_no_one"/> </tree> </field> </record> @@ -67,17 +89,24 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> - <button name="case_close" string="Done" states="open,pending" type="object" /> - <button name="case_open" string="Open" states="draft,pending" type="object" /> - <button name="case_pending" string="Pending" states="draft,open" type="object" /> - <button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" /> - <button name="case_cancel" string="Cancel" states="draft,open,pending" type="object" /> - <div class="oe_right"> - <field name="state" select="1" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <header> + <button name="case_open" string="Open" type="object" + states="draft,pending"/> + <button name="case_close" string="Done" type="object" + states="open,pending"/> + <button name="case_refuse" string="Refuse" type="object" + states="draft,open,pending"/> + <button name="stage_previous" string="Previous Stage" type="object" + states="open,pending" icon="gtk-go-back" attrs="{'invisible': [('stage_id','=', False)]}"/> + <button name="stage_next" string="Next Stage" type="object" + states="open,pending" icon="gtk-go-forward" attrs="{'invisible': [('stage_id','=', False)]}"/> + <button name="case_reset" string="Reset to Draft" type="object" + states="cancel,done"/> + <button name="case_cancel" string="Cancel" type="object" + states="draft,open,pending"/> + <field name="stage_id" widget="statusbar" + on_change="onchange_stage_id(stage_id)"/> + </header> <sheet string="Claims" layout="auto"> <group> <field name="name" /> @@ -86,11 +115,7 @@ <group colspan="4" col="6"> <field name="user_id"/> <field name="section_id" widget="selection" /> - <group colspan="2" col="4"> - <field name="stage_id" domain="[('section_ids','=',section_id)]"/> - <button name="stage_previous" string="" type="object" icon="gtk-go-back" /> - <button name="stage_next" string="" type="object" icon="gtk-go-forward" /> - </group> + <field name="state" groups="base.group_no_one"/> <newline /> <field name="priority"/> <field name="date_deadline"/> @@ -138,32 +163,12 @@ <field name="resolution" colspan="2" nolabel="1"/> </group> </page> - <page string="Communication & History"> - <group colspan="4"> - <field colspan="4" name="email_cc" string="Global CC" widget="char"/> - </group> - <field name="message_ids" colspan="4" nolabel="1" mode="tree" readonly="1"> - <tree string="History"> - <field name="display_text" string="History Information"/> - <field name="email_from" invisible="1"/> - <button - string="Reply" attrs="{'invisible': [('email_from', '=', False)]}" - name="%(mail.action_email_compose_message_wizard)d" - context="{'mail.compose.message.mode':'reply'}" - icon="terp-mail-replied" type="action" /> - </tree> - </field> - <button string="Add Internal Note" - name="%(crm.action_crm_add_note)d" - context="{'model': 'crm.lead' }" - icon="terp-document-new" type="action" /> - <button string="Send New Email" - name="%(mail.action_email_compose_message_wizard)d" - icon="terp-mail-message-new" type="action"/> - </page> </notebook> </group> </sheet> + <div class="oe_form_sheet_width"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> + </div> </form> </field> </record> @@ -227,7 +232,7 @@ domain="[]" context="{'group_by':'categ_id'}" /> <filter string="Status" icon="terp-stock_effects-object-colorize" - domain="[]" context="{'group_by':'state'}" /> + domain="[]" context="{'group_by':'state'}" groups="base.group_no_one"/> <separator orientation="vertical"/> <filter string="Claim Date" icon="terp-go-month" domain="[]" help="Claim Date" diff --git a/addons/crm_claim/security/ir.model.access.csv b/addons/crm_claim/security/ir.model.access.csv index 5a05fbd4d87..303624288ce 100644 --- a/addons/crm_claim/security/ir.model.access.csv +++ b/addons/crm_claim/security/ir.model.access.csv @@ -1,5 +1,6 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_crm_claim_manager,crm.claim.manager,model_crm_claim,base.group_sale_manager,1,1,1,1
access_crm_claim_user,crm.claim.user,model_crm_claim,base.group_sale_salesman,1,1,1,0
+access_crm_claim_stage_user,crm.claim.stage.user,model_crm_claim_stage,base.group_sale_salesman,1,1,1,1
access_crm_claim_report_manager,crm.claim.report.manager,model_crm_claim_report,base.group_sale_manager,1,1,1,1
access_crm_claim_partner_manager,crm.claim.partner.manager,model_crm_claim,base.group_partner_manager,1,0,0,0
diff --git a/addons/crm_claim/test/process/claim.yml b/addons/crm_claim/test/process/claim.yml index e20436cd3c6..45ca7cf2962 100644 --- a/addons/crm_claim/test/process/claim.yml +++ b/addons/crm_claim/test/process/claim.yml @@ -30,7 +30,7 @@ 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_lead1"), "Claim is not in New stage" + 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. - diff --git a/addons/crm_fundraising/crm_fundraising.py b/addons/crm_fundraising/crm_fundraising.py index 90014188777..73f72979730 100644 --- a/addons/crm_fundraising/crm_fundraising.py +++ b/addons/crm_fundraising/crm_fundraising.py @@ -19,13 +19,15 @@ # ############################################################################## -from osv import fields, osv +from base_status.base_stage import base_stage from crm import crm from crm import wizard +from osv import fields, osv +from tools.translate import _ wizard.mail_compose_message.SUPPORTED_MODELS.append('crm.fundraising') -class crm_fundraising(crm.crm_case, osv.osv): +class crm_fundraising(base_stage, osv.osv): """ Fund Raising Cases """ _name = "crm.fundraising" @@ -68,14 +70,62 @@ class crm_fundraising(crm.crm_case, osv.osv): 'duration': fields.float('Duration'), 'ref': fields.reference('Reference', selection=crm._links_get, size=128), 'ref2': fields.reference('Reference 2', selection=crm._links_get, size=128), - 'state': fields.selection(crm.AVAILABLE_STATES, 'Status', size=16, readonly=True, - help='The state is set to \'Draft\', when a case is created.\ - \nIf the case is in progress the state is set to \'Open\'.\ - \nWhen the case is over, the state is set to \'Done\'.\ - \nIf the case needs to be reviewed then the state is set to \'Pending\'.'), - 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]), + 'state': fields.related('stage_id', 'state', type="selection", store=True, + selection=crm.AVAILABLE_STATES, string="State", readonly=True, + help='The state is set to \'Draft\', when a case is created.\ + If the case is in progress the state is set to \'Open\'.\ + When the case is over, the state is set to \'Done\'.\ + If the case needs to be reviewed then the state is \ + set to \'Pending\'.'), } + _defaults = { + 'active': 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), + '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.case', context=c), + 'priority': crm.AVAILABLE_PRIORITIES[2][0], + 'probability': 0.0, + 'planned_cost': 0.0, + 'planned_revenue': 0.0, + } + + def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None): + """ Override of the base.stage method + Parameter of the stage search taken from the lead: + - section_id: if set, stages must belong to this section or + be a default case + """ + if isinstance(cases, (int, long)): + cases = self.browse(cr, uid, cases, context=context) + # collect all section_ids + section_ids = [] + if section_id: + section_ids.append(section_id) + for case in cases: + if case.section_id: + section_ids.append(case.section_id.id) + # OR all section_ids and OR with case_default + search_domain = [] + if section_ids: + search_domain += [('|')] * len(section_ids) + for section_id in section_ids: + search_domain.append(('section_ids', '=', section_id)) + search_domain.append(('case_default', '=', True)) + # AND with the domain in parameter + search_domain += list(domain) + # perform search, return the first found + stage_ids = self.pool.get('crm.case.stage').search(cr, uid, search_domain, order=order, context=context) + if stage_ids: + return stage_ids[0] + return False + + def create(self, cr, uid, vals, context=None): + obj_id = super(crm_fundraising, self).create(cr, uid, vals, context) + self.create_send_note(cr, uid, [obj_id], context=context) + return obj_id def message_new(self, cr, uid, msg, custom_values=None, context=None): """Automatically called when new email message arrives""" @@ -93,21 +143,23 @@ class crm_fundraising(crm.crm_case, osv.osv): self.write(cr, uid, [res_id], vals, context=context) return res_id + # --------------------------------------------------- + # OpenChatter methods and notifications + # --------------------------------------------------- - _defaults = { - 'active': 1, - 'user_id': crm.crm_case._get_default_user, - 'partner_id': crm.crm_case._get_default_partner, - 'email_from': crm.crm_case. _get_default_email, - 'state': 'draft', - 'section_id': crm.crm_case. _get_section, - 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.case', context=c), - 'priority': crm.AVAILABLE_PRIORITIES[2][0], - 'probability': 0.0, - 'planned_cost': 0.0, - 'planned_revenue': 0.0, - } + def case_get_note_msg_prefix(self, cr, uid, id, context=None): + """ Override of default prefix for notifications. """ + return 'Fundraising' + + def create_send_note(self, cr, uid, ids, context=None): + msg = _('Fundraising has been <b>created</b>.') + self.message_append_note(cr, uid, ids, body=msg, context=context) + return True + def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): + """ Override of the (void) default notification method. """ + stage_name = self.pool.get('crm.case.stage').name_get(cr, uid, [stage_id], context=context)[0][1] + return self.message_append_note(cr, uid, ids, body= _("Stage changed to <b>%s</b>.") % (stage_name), context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_fundraising/crm_fundraising_demo.xml b/addons/crm_fundraising/crm_fundraising_demo.xml index 52b4094d126..70b32afabf3 100644 --- a/addons/crm_fundraising/crm_fundraising_demo.xml +++ b/addons/crm_fundraising/crm_fundraising_demo.xml @@ -9,7 +9,6 @@ <field name="partner_id" ref="base.res_partner_9"/> <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_demo"/> - <field eval=""open"" name="state"/> <field eval="250000.0" name="planned_cost"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="time.strftime('%Y-%m-01 10:35:50')" name="date"/> @@ -26,7 +25,6 @@ <field name="partner_id" ref="base.main_partner"/> <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval=""draft"" name="state"/> <field eval="2000000.0" name="planned_cost"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="time.strftime('%Y-%m-05 12:35:50')" name="date"/> @@ -43,7 +41,6 @@ <field name="partner_id" ref="base.res_partner_3"/> <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval=""open"" name="state"/> <field eval="500000.0" name="planned_cost"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="time.strftime('%Y-%m-07 13:50:50')" name="date"/> @@ -59,7 +56,6 @@ <field name="partner_id" ref="base.res_partner_4"/> <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_demo"/> - <field eval=""draft"" name="state"/> <field eval="1000000.0" name="planned_cost"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="time.strftime('%Y-%m-12 15:10:50')" name="date"/> @@ -75,7 +71,6 @@ <field name="partner_id" ref="base.res_partner_14"/> <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval=""open"" name="state"/> <field eval="5000000.0" name="planned_cost"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="time.strftime('%Y-%m-17 19:00:15')" name="date"/> @@ -91,7 +86,6 @@ <field name="partner_id" ref="base.res_partner_10"/> <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval=""done"" name="state"/> <field eval="10000000.0" name="planned_cost"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="time.strftime('%Y-%m-27 09:00:15')" name="date"/> @@ -109,7 +103,6 @@ <field name="partner_id" ref="base.res_partner_15"/> <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_demo"/> - <field eval=""draft"" name="state"/> <field eval="10000.0" name="planned_cost"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="time.strftime('%Y-%m-01 10:00:15')" name="date"/> @@ -126,7 +119,6 @@ <field name="partner_id" ref="base.res_partner_9"/> <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> - <field eval=""open"" name="state"/> <field eval="800000.0" name="planned_cost"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="time.strftime('%Y-%m-24 22:00:15')" name="date"/> diff --git a/addons/crm_fundraising/crm_fundraising_view.xml b/addons/crm_fundraising/crm_fundraising_view.xml index b960fe2bccb..02f85b1ad7f 100644 --- a/addons/crm_fundraising/crm_fundraising_view.xml +++ b/addons/crm_fundraising/crm_fundraising_view.xml @@ -50,22 +50,6 @@ <field name="user_id" /> <field name="state" /> <field name="partner_id" invisible="1"/> - <button name="case_cancel" string="Cancel" - states="draft,open,pending" type="object" - icon="gtk-cancel" /> - <button name="case_open" string="Open" - states="draft,pending" type="object" - icon="gtk-go-forward" /> - <button name="case_pending" string="Pending" - states="draft,open" type="object" icon="gtk-media-pause" /> - <button name="case_escalate" string="Escalate" - states="open,draft,pending" type="object" - icon="gtk-go-up" /> - <button name="case_close" string="Done" - states="open,draft,pending" type="object" - icon="gtk-close" /> - <button name="case_reset" string="Reset to Draft" - states="done,cancel" type="object" icon="gtk-convert" /> </tree> </field> </record> @@ -78,18 +62,15 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="case_close" string="Done" states="open,pending" type="object" /> <button name="case_open" string="Open" states="draft,pending" type="object" /> <button name="case_pending" string="Pending" states="draft,open" type="object" /> <button name="case_escalate" string="Escalate" states="open,draft,pending" type="object" groups="base.group_extended" /> <button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" /> <button name="case_cancel" string="Cancel" states="draft,open,pending" type="object" /> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/> + </header> <sheet string="Funds Form" layout="auto"> <group colspan="4" col="6" class="oe_form_header"> <field name="name" select="1" string="Name"/> @@ -117,29 +98,6 @@ <separator colspan="4" string="Notes"/> <field name="description" nolabel="1" colspan="4"/> </page> - <page string="Communication & History"> - <group colspan="4"> - <field colspan="4" name="email_cc" string="Global CC" widget="char"/> - </group> - <field name="message_ids" colspan="4" nolabel="1" mode="tree" readonly="1"> - <tree string="History"> - <field name="display_text" string="History Information"/> - <field name="email_from" invisible="1"/> - <button - string="Reply" attrs="{'invisible': [('email_from', '=', False)]}" - name="%(mail.action_email_compose_message_wizard)d" - context="{'mail.compose.message.mode':'reply', 'message_id':active_id}" - icon="terp-mail-replied" type="action" /> - </tree> - </field> - <button string="Add Internal Note" - name="%(crm.action_crm_add_note)d" - context="{'model': 'crm.lead' }" - icon="terp-document-new" type="action" /> - <button string="Send New Email" - name="%(mail.action_email_compose_message_wizard)d" - icon="terp-mail-message-new" type="action"/> - </page> <page string="Extra Info"> <group col="2" colspan="2"> <separator colspan="4" string="Misc"/> @@ -162,6 +120,9 @@ </page> </notebook> </sheet> + <div class="oe_form_sheet_width"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> + </div> </form> </field> </record> diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py index d5ee8efc17e..f0d98efebb3 100644 --- a/addons/crm_helpdesk/crm_helpdesk.py +++ b/addons/crm_helpdesk/crm_helpdesk.py @@ -19,10 +19,10 @@ # ############################################################################## +from base_status.base_state import base_state from crm import crm -from osv import fields, osv -import time from crm import wizard +from osv import fields, osv import tools from tools.translate import _ @@ -34,7 +34,7 @@ CRM_HELPDESK_STATES = ( wizard.mail_compose_message.SUPPORTED_MODELS.append('crm.helpdesk') -class crm_helpdesk(crm.crm_case, osv.osv): +class crm_helpdesk(base_state, osv.osv): """ Helpdesk Cases """ _name = "crm.helpdesk" @@ -77,21 +77,24 @@ class crm_helpdesk(crm.crm_case, osv.osv): \nIf the case is in progress the state is set to \'Open\'.\ \nWhen the case is over, the state is set to \'Done\'.\ \nIf the case needs to be reviewed then the state is set to \'Pending\'.'), - 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]), } _defaults = { 'active': lambda *a: 1, - 'user_id': crm.crm_case._get_default_user, - 'partner_id': crm.crm_case._get_default_partner, - 'email_from': crm.crm_case. _get_default_email, + '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), 'state': lambda *a: 'draft', - 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), - 'section_id': crm.crm_case. _get_section, + '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), 'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0], } + def create(self, cr, uid, vals, context=None): + obj_id = super(crm_helpdesk, self).create(cr, uid, vals, context) + self.create_send_note(cr, uid, [obj_id], context=context) + return obj_id + def message_new(self, cr, uid, msg_dict, custom_values=None, context=None): """Automatically called when new email message arrives""" res_id = super(crm_helpdesk,self).message_new(cr, uid, msg_dict, custom_values=custom_values, context=context) @@ -142,5 +145,18 @@ class crm_helpdesk(crm.crm_case, osv.osv): res = self.write(cr, uid, [case.id], values, context=context) return res -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + # ****************************** + # OpenChatter + # ****************************** + def case_get_note_msg_prefix(self, cr, uid, id, context=None): + """ override of default base_state method. """ + return 'Case' + + def create_send_note(self, cr, uid, ids, context=None): + msg = _('Case has been <b>created</b>.') + self.message_append_note(cr, uid, ids, body=msg, context=context) + return True + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_helpdesk/crm_helpdesk_view.xml b/addons/crm_helpdesk/crm_helpdesk_view.xml index b1d5a2b96f8..d6b21ab9191 100644 --- a/addons/crm_helpdesk/crm_helpdesk_view.xml +++ b/addons/crm_helpdesk/crm_helpdesk_view.xml @@ -29,18 +29,21 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> - <button name="case_close" states="open,pending" string="Close" type="object" /> - <button name="case_open" states="draft,pending" string="Open" type="object" /> - <button name="case_pending" states="draft,open" string="Pending" type="object" /> - <button name="case_reset" states="done,cancel" string="Reset to Draft" type="object" /> - <button name="case_escalate" states="open,draft,pending" string="Escalate" type="object" /> - <button name="case_cancel" states="draft,open,pending" string="Cancel" type="object" /> - <div class="oe_right"> - <field name="state" select="1" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <header> + <button name="case_open" string="Open" type="object" + states="draft,pending"/> + <button name="case_close" string="Close" type="object" + states="open,draft,pending"/> + <button name="case_pending" string="Pending" type="object" + states="draft,open"/> + <button name="case_reset" string="Reset to Draft" type="object" + states="cancel,done"/> + <button name="case_escalate" string="Escalate" type="object" + states="open,draft,pending"/> + <button name="case_cancel" string="Cancel" type="object" + states="draft,open,pending"/> + <field name="state" select="1" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/> + </header> <sheet string="Helpdesk Support" layout="auto"> <group colspan="4" col="7" class="oe_form_header"> <field name="name" select="1" string="Query"/> @@ -78,29 +81,6 @@ <separator colspan="4" string="Notes"/> <field name="description" colspan="4" nolabel="1" /> </page> - <page string="Communication & History"> - <group colspan="4"> - <field colspan="4" name="email_cc" string="Global CC" widget="char"/> - </group> - <field name="message_ids" colspan="4" nolabel="1" mode="tree" readonly="1"> - <tree string="History"> - <field name="display_text" string="History Information"/> - <field name="email_from" invisible="1"/> - <button - string="Reply" attrs="{'invisible': [('email_from', '=', False)]}" - name="%(mail.action_email_compose_message_wizard)d" - context="{'mail.compose.message.mode':'reply', 'message_id':active_id}" - icon="terp-mail-replied" type="action" /> - </tree> - </field> - <button string="Add Internal Note" - name="%(crm.action_crm_add_note)d" - context="{'model': 'crm.lead' }" - icon="terp-document-new" type="action" /> - <button string="Send New Email" - name="%(mail.action_email_compose_message_wizard)d" - icon="terp-mail-message-new" type="action"/> - </page> <page string="Extra Info"> <group colspan="2" col="2" groups="base.group_no_one"> <separator colspan="4" string="Dates"/> @@ -126,6 +106,9 @@ </page> </notebook> </sheet> + <div class="oe_form_bottom"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> + </div> </form> </field> </record> @@ -147,23 +130,6 @@ <field name="section_id"/> <field name="priority"/> <field name="state"/> - <button name="case_cancel" string="Cancel" - states="draft,open,pending" type="object" - icon="gtk-cancel" /> - <button name="case_open" string="Open" - states="draft,pending" type="object" - icon="gtk-go-forward" /> - <button name="case_pending" string="Pending" - states="draft,open" type="object" - icon="gtk-media-pause" /> - <button name="case_escalate" string="Escalate" - states="open,draft,pending" type="object" - icon="gtk-go-up" /> - <button name="case_close" string="Done" - states="open,draft,pending" type="object" - icon="gtk-close" /> - <button name="case_reset" string="Reset to Draft" - states="done,cancel" type="object" icon="gtk-convert" /> </tree> </field> </record> diff --git a/addons/crm_helpdesk/i18n/gu.po b/addons/crm_helpdesk/i18n/gu.po new file mode 100644 index 00000000000..e9a7479516a --- /dev/null +++ b/addons/crm_helpdesk/i18n/gu.po @@ -0,0 +1,738 @@ +# Gujarati translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-05-31 11:11+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Gujarati <gu@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: crm_helpdesk +#: field:crm.helpdesk.report,delay_close:0 +msgid "Delay to Close" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk.report,nbr:0 +msgid "# of Cases" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: view:crm.helpdesk.report:0 +msgid "Group By..." +msgstr "ગ્રુપ દ્વારા..." + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Today" +msgstr "આજે" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "March" +msgstr "માર્ચ" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "Helpdesk requests occurred in current year" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,company_id:0 +#: view:crm.helpdesk.report:0 +#: field:crm.helpdesk.report,company_id:0 +msgid "Company" +msgstr "કંપની" + +#. module: crm_helpdesk +#: field:crm.helpdesk,email_cc:0 +msgid "Watchers Emails" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk,priority:0 +#: selection:crm.helpdesk.report,priority:0 +msgid "Highest" +msgstr "ઉચ્ચતમ" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +#: field:crm.helpdesk.report,day:0 +msgid "Day" +msgstr "દિવસ" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Add Internal Note" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "Date of helpdesk requests" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Notes" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "My company" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk,state:0 +#: selection:crm.helpdesk.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: crm_helpdesk +#: model:ir.actions.act_window,name:crm_helpdesk.action_report_crm_helpdesk +#: model:ir.ui.menu,name:crm_helpdesk.menu_report_crm_helpdesks_tree +msgid "Helpdesk Analysis" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +#: field:crm.helpdesk.report,date_closed:0 +msgid "Close Date" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,ref:0 +msgid "Reference" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,date_action_next:0 +msgid "Next Action" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Helpdesk Supports" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Extra Info" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: field:crm.helpdesk,partner_id:0 +#: view:crm.helpdesk.report:0 +#: field:crm.helpdesk.report,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Estimates" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk.report,section_id:0 +msgid "Section" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "Helpdesk requests occurred in last month" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Send New Email" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Helpdesk requests during last 7 days" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: selection:crm.helpdesk,state:0 +#: view:crm.helpdesk.report:0 +msgid "New" +msgstr "" + +#. module: crm_helpdesk +#: model:ir.model,name:crm_helpdesk.model_crm_helpdesk_report +msgid "Helpdesk report after Sales Services" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,email_from:0 +msgid "Email" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,channel_id:0 +#: view:crm.helpdesk.report:0 +#: field:crm.helpdesk.report,channel_id:0 +msgid "Channel" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk,priority:0 +#: selection:crm.helpdesk.report,priority:0 +msgid "Lowest" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "# Mails" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: view:crm.helpdesk.report:0 +msgid "My Sales Team(s)" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,create_date:0 +#: field:crm.helpdesk.report,create_date:0 +msgid "Creation Date" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Reset to Draft" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: selection:crm.helpdesk,state:0 +#: selection:crm.helpdesk.report,state:0 +msgid "Pending" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: field:crm.helpdesk,date_deadline:0 +#: field:crm.helpdesk.report,date_deadline:0 +msgid "Deadline" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "July" +msgstr "" + +#. module: crm_helpdesk +#: model:ir.actions.act_window,name:crm_helpdesk.crm_helpdesk_categ_action +msgid "Helpdesk Categories" +msgstr "" + +#. module: crm_helpdesk +#: model:ir.ui.menu,name:crm_helpdesk.menu_crm_case_helpdesk-act +msgid "Categories" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "New Helpdesk Request" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "History Information" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Dates" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "Month of helpdesk requests" +msgstr "" + +#. module: crm_helpdesk +#: code:addons/crm_helpdesk/crm_helpdesk.py:101 +#, python-format +msgid "No Subject" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "#Helpdesk" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "All pending Helpdesk Request" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "Year of helpdesk requests" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "References" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "September" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Communication" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +#: field:crm.helpdesk.report,month:0 +msgid "Month" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Escalate" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,write_date:0 +msgid "Update Date" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "Helpdesk requests occurred in current month" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "Salesman" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,ref2:0 +msgid "Reference 2" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,categ_id:0 +#: field:crm.helpdesk.report,categ_id:0 +msgid "Category" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Responsible User" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Helpdesk Support" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,planned_cost:0 +#: field:crm.helpdesk.report,planned_cost:0 +msgid "Planned Costs" +msgstr "" + +#. module: crm_helpdesk +#: help:crm.helpdesk,channel_id:0 +msgid "Communication channel." +msgstr "" + +#. module: crm_helpdesk +#: help:crm.helpdesk,email_cc:0 +msgid "" +"These email addresses will be added to the CC field of all inbound and " +"outbound emails for this record before being sent. Separate multiple email " +"addresses with a comma" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Search Helpdesk" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,state:0 +msgid "Draft" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk,priority:0 +#: selection:crm.helpdesk.report,priority:0 +msgid "Low" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,date_closed:0 +#: selection:crm.helpdesk,state:0 +#: view:crm.helpdesk.report:0 +#: selection:crm.helpdesk.report,state:0 +msgid "Closed" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Reply" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "7 Days" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Communication & History" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "August" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk,priority:0 +#: selection:crm.helpdesk.report,priority:0 +msgid "Normal" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Global CC" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "June" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,planned_revenue:0 +msgid "Planned Revenue" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk.report,user_id:0 +msgid "User" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,active:0 +msgid "Active" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "November" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: crm_helpdesk +#: model:ir.actions.act_window,name:crm_helpdesk.crm_case_helpdesk_act111 +msgid "Helpdesk Requests" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "Search" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "October" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "January" +msgstr "" + +#. module: crm_helpdesk +#: help:crm.helpdesk,email_from:0 +msgid "These people will receive email." +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: field:crm.helpdesk,date:0 +msgid "Date" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "History" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: field:crm.helpdesk,priority:0 +#: view:crm.helpdesk.report:0 +#: field:crm.helpdesk.report,priority:0 +msgid "Priority" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,partner_address_id:0 +msgid "Partner Contact" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Misc" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: field:crm.helpdesk,state:0 +#: view:crm.helpdesk.report:0 +#: field:crm.helpdesk.report,state:0 +msgid "State" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "General" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Send Reminder" +msgstr "" + +#. module: crm_helpdesk +#: help:crm.helpdesk,section_id:0 +msgid "" +"Sales team to which Case belongs to. Define " +"Responsible user and Email account for mail gateway." +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Done" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "December" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Cancel" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Close" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: view:crm.helpdesk.report:0 +#: selection:crm.helpdesk.report,state:0 +msgid "Open" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Helpdesk Support Tree" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk,state:0 +msgid "In Progress" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Categorization" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +#: model:ir.model,name:crm_helpdesk.model_crm_helpdesk +#: model:ir.ui.menu,name:crm_helpdesk.menu_config_helpdesk +msgid "Helpdesk" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: field:crm.helpdesk,user_id:0 +msgid "Responsible" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk.report,delay_expected:0 +msgid "Overpassed Deadline" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,description:0 +msgid "Description" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "May" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,probability:0 +msgid "Probability (%)" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk.report,email:0 +msgid "# Emails" +msgstr "" + +#. module: crm_helpdesk +#: model:ir.actions.act_window,help:crm_helpdesk.action_report_crm_helpdesk +msgid "" +"Have a general overview of all support requests by sorting them with " +"specific criteria such as the processing time, number of requests answered, " +"emails sent and costs." +msgstr "" + +#. module: crm_helpdesk +#: help:crm.helpdesk,state:0 +msgid "" +"The state is set to 'Draft', when a case is created. " +" \n" +"If the case is in progress the state is set to 'Open'. " +" \n" +"When the case is over, the state is set to 'Done'. " +" \n" +"If the case needs to be reviewed then the state is set to 'Pending'." +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "February" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,name:0 +msgid "Name" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "Month-1" +msgstr "" + +#. module: crm_helpdesk +#: model:ir.ui.menu,name:crm_helpdesk.menu_help_support_main +msgid "Helpdesk and Support" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk.report,month:0 +msgid "April" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +msgid "My Case(s)" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Query" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,id:0 +msgid "ID" +msgstr "" + +#. module: crm_helpdesk +#: model:ir.actions.act_window,help:crm_helpdesk.crm_helpdesk_categ_action +msgid "" +"Create and manage helpdesk categories to better manage and classify your " +"support requests." +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Todays's Helpdesk Requests" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Request Date" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +msgid "Open Helpdesk Request" +msgstr "" + +#. module: crm_helpdesk +#: selection:crm.helpdesk,priority:0 +#: selection:crm.helpdesk.report,priority:0 +msgid "High" +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk:0 +#: field:crm.helpdesk,section_id:0 +#: view:crm.helpdesk.report:0 +msgid "Sales Team" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,date_action_last:0 +msgid "Last Action" +msgstr "" + +#. module: crm_helpdesk +#: model:ir.actions.act_window,help:crm_helpdesk.crm_case_helpdesk_act111 +msgid "" +"Helpdesk and Support allow you to track your interventions. Select a " +"customer, add notes and categorize interventions with partners if necessary. " +"You can also assign a priority level. Use the OpenERP Issues system to " +"manage your support activities. Issues can be connected to the email " +"gateway: new emails may create issues, each of them automatically gets the " +"history of the conversation with the customer." +msgstr "" + +#. module: crm_helpdesk +#: view:crm.helpdesk.report:0 +#: field:crm.helpdesk.report,name:0 +msgid "Year" +msgstr "" + +#. module: crm_helpdesk +#: field:crm.helpdesk,duration:0 +msgid "Duration" +msgstr "" diff --git a/addons/crm_partner_assign/crm_lead_view.xml b/addons/crm_partner_assign/crm_lead_view.xml index 8da4d623435..83f0e470c55 100644 --- a/addons/crm_partner_assign/crm_lead_view.xml +++ b/addons/crm_partner_assign/crm_lead_view.xml @@ -10,25 +10,28 @@ <data> <xpath expr="//notebook/page[@string='Lead']" position="after"> <page string="Assignation"> - <group name="partner_assign_group" col="5" colspan="4" class="oe_form_group_label_border"> - <separator string="Partner Assignation" colspan="5"/> - <field width="50%%" name="partner_assigned_id" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/> - <field width="40%%" name="date_assign"/> - <group width="10%%" colspan="1" col="1"> - <button string="Forward" - attrs="{'invisible':[('partner_assigned_id','=',False)]}" - name="%(crm_lead_forward_to_partner_act)d" - icon="terp-mail-forward" type="action" - context="{'default_name': 'partner', 'default_partner_id': partner_assigned_id}" - /> + <group name="partner_assign_group"> + <group string="Partner Assignation"> + <field name="partner_assigned_id" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/> + <label for="date_assign"/> + <div> + <field name="date_assign"/> + <button string="Forward" + attrs="{'invisible':[('partner_assigned_id','=',False)]}" + name="%(crm_lead_forward_to_partner_act)d" + icon="terp-mail-forward" type="action" + context="{'default_name': 'partner', 'default_partner_id': partner_assigned_id}" + /> + </div> + </group> + <group string="Geo Assignation"> + <field name="partner_latitude"/> + <field name="partner_longitude"/> + <span/> + <button string="Geo Assign" name="action_assign_partner" type="object" colspan="1" + icon="gtk-apply"/> + </group> </group> - - <separator string="Geo Assignation" colspan="5"/> - <field width="50%%" name="partner_latitude"/> - <field width="40%%" name="partner_longitude"/> - <button width="10%%" string="Geo Assign" name="action_assign_partner" type="object" colspan="1" - icon="gtk-apply"/> - </group> </page> </xpath> </data> diff --git a/addons/crm_todo/crm_todo_view.xml b/addons/crm_todo/crm_todo_view.xml index a587463fedb..c7617f317b0 100644 --- a/addons/crm_todo/crm_todo_view.xml +++ b/addons/crm_todo/crm_todo_view.xml @@ -9,7 +9,7 @@ <field name="inherit_id" ref="crm.crm_case_form_view_oppor" /> <field name="arch" type="xml"> <data> - <page string="Extra Info" position="before"> + <page string="Lead" position="before"> <page string="Tasks"> <field name="task_ids" colspan="4" nolabel="1"> <tree editable="bottom" string="Tasks"> diff --git a/addons/delivery/delivery_view.xml b/addons/delivery/delivery_view.xml index 10f12a63f4e..6f6e614e676 100644 --- a/addons/delivery/delivery_view.xml +++ b/addons/delivery/delivery_view.xml @@ -266,7 +266,7 @@ <field name="model">stock.picking</field> <field name="inherit_id" ref="stock.view_picking_out_form"/> <field name="arch" type="xml"> - <xpath expr="/form/div[@class='oe_form_topbar']/button[@string='Create Invoice']" position="after"> + <xpath expr="/form/header/button[@string='Create Invoice']" position="after"> <button name="%(report_shipping)d" string="Delivery Order" states="done" type="action" icon="gtk-print"/> </xpath> </field> diff --git a/addons/email_template/email_template_view.xml b/addons/email_template/email_template_view.xml index 387b97ae01d..127d255ec6b 100644 --- a/addons/email_template/email_template_view.xml +++ b/addons/email_template/email_template_view.xml @@ -116,8 +116,6 @@ <field name="email_from"/> <field name="email_to"/> <field name="report_name"/> - <button name="%(wizard_email_template_preview)d" string="Preview Template" - type="action" target="new" icon="gtk-zoom-fit"/> </tree> </field> </record> diff --git a/addons/event/event.py b/addons/event/event.py index f01caac175f..a348e005d06 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -48,6 +48,7 @@ class event_event(osv.osv): _name = 'event.event' _description = __doc__ _order = 'date_begin' + _inherit = ['ir.needaction_mixin','mail.thread'] def name_get(self, cr, uid, ids, context=None): if not ids: @@ -70,6 +71,11 @@ class event_event(osv.osv): res = self.name_get(cr, uid, ids, context=context) return dict(res) + def create(self, cr, uid, vals, context=None): + obj_id = super(event_event, self).create(cr, uid, vals, context) + self.create_send_note(cr, uid, [obj_id], context=context) + return obj_id + def copy(self, cr, uid, id, default=None, context=None): """ Reset the state and the registrations while copying an event """ @@ -82,6 +88,7 @@ class event_event(osv.osv): return super(event_event, self).copy(cr, uid, id, default=default, context=context) def button_draft(self, cr, uid, ids, context=None): + self.button_draft_send_note(cr, uid, ids, context=context) return self.write(cr, uid, ids, {'state': 'draft'}, context=context) def button_cancel(self, cr, uid, ids, context=None): @@ -91,9 +98,11 @@ class event_event(osv.osv): if event_reg.state == 'done': raise osv.except_osv(_('Error!'),_("You have already set a registration for this event as 'Attended'. Please reset it to draft if you want to cancel this event.") ) registration.write(cr, uid, reg_ids, {'state': 'cancel'}, context=context) + self.button_cancel_send_note(cr, uid, ids, context=context) return self.write(cr, uid, ids, {'state': 'cancel'}, context=context) def button_done(self, cr, uid, ids, context=None): + self.button_done_send_note(cr, uid, ids, context=context) return self.write(cr, uid, ids, {'state': 'done'}, context=context) def check_registration_limits(self, cr, uid, ids, context=None): @@ -127,6 +136,7 @@ class event_event(osv.osv): if isinstance(ids, (int, long)): ids = [ids] self.check_registration_limits(cr, uid, ids, context=context) + self.button_confirm_send_note(cr, uid, ids, context=context) return self.confirm_event(cr, uid, ids, context=context) def _get_register(self, cr, uid, ids, fields, args, context=None): @@ -256,13 +266,50 @@ class event_event(osv.osv): 'register_max': type_info.default_registration_max, } return {'value': dic} + + # ---------------------------------------- + # OpenChatter methods and notifications + # ---------------------------------------- + + def get_needaction_user_ids(self, cr, uid, ids, context=None): + result = dict.fromkeys(ids, []) + for obj in self.browse(cr, uid, ids, context=context): + if obj.state == 'draft' and obj.user_id: + result[obj.id] = [obj.user_id.id] + return result + + def create_send_note(self, cr, uid, ids, context=None): + message = _("Event has been <b>created</b>.") + self.message_append_note(cr, uid, ids, body=message, context=context) + return True + + def button_cancel_send_note(self, cr, uid, ids, context=None): + message = _("Event has been <b>cancelled</b>.") + self.message_append_note(cr, uid, ids, body=message, context=context) + return True + + def button_draft_send_note(self, cr, uid, ids, context=None): + message = _("Event has been set to <b>draft</b>.") + self.message_append_note(cr, uid, ids, body=message, context=context) + return True + + def button_done_send_note(self, cr, uid, ids, context=None): + message = _("Event has been <b>done</b>.") + self.message_append_note(cr, uid, ids, body=message, context=context) + return True + + def button_confirm_send_note(self, cr, uid, ids, context=None): + message = _("Event has been <b>confirmed</b>.") + self.message_append_note(cr, uid, ids, body=message, context=context) + return True + event_event() class event_registration(osv.osv): """Event Registration""" _name= 'event.registration' _description = __doc__ - _inherit = ['mail.thread','res.partner'] + _inherit = ['ir.needaction_mixin','mail.thread','res.partner'] _columns = { 'id': fields.integer('ID'), 'origin': fields.char('Source', size=124,readonly=True,help="Name of the sale order which create the registration"), @@ -293,12 +340,17 @@ class event_registration(osv.osv): def do_draft(self, cr, uid, ids, context=None): + self.do_draft_send_note(cr, uid, ids, context=context) return self.write(cr, uid, ids, {'state': 'draft'}, context=context) def confirm_registration(self, cr, uid, ids, context=None): self.message_append(cr, uid, ids,_('State set to open'),body_text= _('Open')) return self.write(cr, uid, ids, {'state': 'open'}, context=context) + def create(self, cr, uid, vals, context=None): + obj_id = super(event_registration, self).create(cr, uid, vals, context) + self.create_send_note(cr, uid, [obj_id], context=context) + return obj_id def registration_open(self, cr, uid, ids, context=None): """ Open Registration @@ -395,6 +447,27 @@ class event_registration(osv.osv): data.update(d['value']) return {'value': data} + # ---------------------------------------- + # OpenChatter methods and notifications + # ---------------------------------------- + + def get_needaction_user_ids(self, cr, uid, ids, context=None): + result = dict.fromkeys(ids, []) + for obj in self.browse(cr, uid, ids, context=context): + if obj.state == 'draft' and obj.user_id: + result[obj.id] = [obj.user_id.id] + return result + + def create_send_note(self, cr, uid, ids, context=None): + message = _("Registration has been <b>created</b>.") + self.message_append_note(cr, uid, ids, body=message, context=context) + return True + + def do_draft_send_note(self, cr, uid, ids, context=None): + message = _("Registration has been set as <b>draft</b>.") + self.message_append_note(cr, uid, ids, body=message, context=context) + return True + event_registration() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 6c4fada6621..e5442b5ec5f 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -51,16 +51,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Events" layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Confirm Event" name="button_confirm" states="draft" type="object"/> <button string="Event Ended" name="button_done" states="confirm" type="object"/> <button string="Set To Draft" name="button_draft" states="cancel,done" type="object"/> <button string="Cancel Event" name="button_cancel" states="draft,confirm" type="object"/> - <div class="oe_right"> - <field name="state" select="1" nolabel="1" widget="statusbar" statusbar_visible="draft,confirm,done"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,confirm,done"/> + </header> <sheet layout="manual"> @@ -130,7 +127,10 @@ </field> </page> </notebook> - </sheet> + </sheet> + <div class="oe_form_sheet_width"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> + </div> </form> </field> </record> @@ -153,10 +153,6 @@ <field name="main_speaker_id" groups="base.extended"/> <field name="user_id"/> <field name="state"/> - <button string="Confirm Event" help="Confirm Event" name="button_confirm" states="draft" type="object" icon="gtk-apply"/> - <button string="Event Done" help="Event Done" name="button_done" states="confirm" type="object" icon="gtk-jump-to"/> - <button string="Cancel Event" help="Cancel Event" name="button_cancel" states="draft,confirm" type="object" icon="gtk-cancel"/> - <button string="Set To Draft" help="Set To Draft" name="button_draft" states="cancel,done" type="object" icon="gtk-convert"/> </tree> </field> </record> @@ -346,10 +342,6 @@ <field name="user_id"/> <field name="origin"/> <field name="state"/> - <button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object" icon="gtk-cancel"/> - <button name="registration_open" string="Confirm Registration" states="draft" type="object" icon="gtk-apply"/> - <button name="button_reg_close" string="Attended" states="open" type="object" icon="gtk-apply"/> - <button string="Set To Unconfirmed" name="do_draft" states="cancel,done" type="object" icon="gtk-convert"/> </tree> </field> </record> @@ -360,16 +352,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="registration_open" string="Confirm" states="draft" type="object"/> <button name="button_reg_close" string="Attended" states="open" type="object"/> <button string="Set To Unconfirmed" name="do_draft" states="cancel,done" type="object"/> <button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object"/> - <div class="oe_right"> - <field name="state" select="1" nolabel="1" colspan="2" widget="statusbar" statusbar_visible="draft,open,done"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" select="1" nolabel="1" colspan="2" widget="statusbar" statusbar_visible="draft,open,done"/> + </header> <sheet string="Registration" layout="auto"> <group col="6" colspan="4"> <field name="event_id" on_change="onchange_event(event_id, context)" domain="[('state','in',('draft','confirm'))]"/> @@ -414,7 +403,10 @@ </page> </notebook> - </sheet> + </sheet> + <div class="oe_form_sheet_width"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> + </div> </form> </field> </record> diff --git a/addons/google_base_account/i18n/sv.po b/addons/google_base_account/i18n/sv.po new file mode 100644 index 00000000000..a90418cbfde --- /dev/null +++ b/addons/google_base_account/i18n/sv.po @@ -0,0 +1,121 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-06-04 09:58+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n" +"X-Generator: Launchpad (build 15353)\n" + +#. module: google_base_account +#: field:res.users,gmail_user:0 +msgid "Username" +msgstr "Användarnamn" + +#. module: google_base_account +#: model:ir.actions.act_window,name:google_base_account.act_google_login_form +msgid "Google Login" +msgstr "Googleinloggning" + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:29 +#, python-format +msgid "Google Contacts Import Error!" +msgstr "Google kontaktimportfel!" + +#. module: google_base_account +#: view:res.users:0 +msgid " Synchronization " +msgstr " Synkronisering " + +#. module: google_base_account +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "Du kan inte ha två användare med samma användarid !" + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:75 +#, python-format +msgid "Error" +msgstr "Fel" + +#. module: google_base_account +#: view:google.login:0 +msgid "Google login" +msgstr "Googleinloggning" + +#. module: google_base_account +#: model:ir.model,name:google_base_account.model_res_users +msgid "res.users" +msgstr "res.users" + +#. module: google_base_account +#: field:google.login,password:0 +msgid "Google Password" +msgstr "Google-lösenord" + +#. module: google_base_account +#: view:google.login:0 +msgid "_Cancel" +msgstr "_Avbryt" + +#. module: google_base_account +#: view:res.users:0 +msgid "Google Account" +msgstr "Google-konto" + +#. module: google_base_account +#: field:google.login,user:0 +msgid "Google Username" +msgstr "Google-användarnamn" + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:29 +#, python-format +msgid "" +"Please install gdata-python-client from http://code.google.com/p/gdata-" +"python-client/downloads/list" +msgstr "" +"Vänligen installera gdata-python-client från http://code.google.com/p/gdata-" +"python-client/downloads/list" + +#. module: google_base_account +#: model:ir.model,name:google_base_account.model_google_login +msgid "Google Contact" +msgstr "Google-kontakt" + +#. module: google_base_account +#: view:google.login:0 +msgid "_Login" +msgstr "Logga _in" + +#. module: google_base_account +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "Detta bolag är inte tillåtet för den här användaren" + +#. module: google_base_account +#: field:res.users,gmail_password:0 +msgid "Password" +msgstr "Lösenord" + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:75 +#, python-format +msgid "Authentication fail check the user and password !" +msgstr "Autenticering misslyckades, kontrollera användarid och lösenord !" + +#. module: google_base_account +#: view:google.login:0 +msgid "ex: user@gmail.com" +msgstr "ex: user@gmail.com" diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml index 5736a382291..31dbd37b699 100644 --- a/addons/hr/hr_view.xml +++ b/addons/hr/hr_view.xml @@ -345,15 +345,12 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="job_recruitement" string="In Recruitement" states="open" type="object"/> <button name="job_open" string="In Position" states="old,recruit" type="object"/> <button name="job_old" string="Mark as Old" states="open,recruit" type="object"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="recruit,open"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="recruit,open"/> + </header> <sheet string="Job" layout="auto"> <group col="6" colspan="4"> <field name="name" /> diff --git a/addons/hr/res_config_view.xml b/addons/hr/res_config_view.xml index 739eaacdf79..e6b55ba45f0 100644 --- a/addons/hr/res_config_view.xml +++ b/addons/hr/res_config_view.xml @@ -15,10 +15,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string ="Configure Human Resources" layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Apply" type="object" name="execute"/> <button string="Cancel" special="cancel"/> - </div> + </header> <sheet layout="auto"> <separator string="Additional Features" colspan="4"/> <field name="module_hr_expense"/> diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml index 2489e93fdca..6dd4bc25a1c 100644 --- a/addons/hr_evaluation/hr_evaluation_view.xml +++ b/addons/hr_evaluation/hr_evaluation_view.xml @@ -155,18 +155,14 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="button_plan_in_progress" string="Start Appraisal" states="draft" type="object"/> <button name="button_final_validation" string="Validate Appraisal" states="wait" type="object"/> <button name="button_done" string="Done" states="progress" type="object"/> <button name="button_draft" string="Reset to Draft" states="cancel" type="object"/> <button name="button_cancel" string="Cancel" states="draft,wait,progress" type="object"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,progress,wait,done" statusbar_colors='{"progress":"blue"}'/> - - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,progress,wait,done" statusbar_colors='{"progress":"blue"}'/> + </header> <sheet string="Appraisal" layout="auto"> <group col="4" colspan="3"> <separator string="Appraisal Data" colspan="4"/> diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml index d82f89930ef..2fc1340fd23 100644 --- a/addons/hr_expense/hr_expense_view.xml +++ b/addons/hr_expense/hr_expense_view.xml @@ -35,8 +35,6 @@ <field name="currency_id"/> <field name="amount"/> <field name="state"/> - <button name="confirm" states="draft" string="Confirm" type="workflow" icon="gtk-apply"/> - <button name="refuse" states="confirm,draft,accepted" string="Refuse" type="workflow" icon="gtk-no" groups="base.group_hr_user"/> </tree> </field> </record> @@ -66,17 +64,14 @@ <field name="model">hr.expense.expense</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="confirm" states="draft" string="Submit to Manager" type="workflow"/> <button name="validate" states="confirm" string="Approve" type="workflow" groups="base.group_hr_user"/> <button name="draft" states="confirm,cancelled" string="Set to Draft" type="workflow" groups="base.group_hr_user"/> <button name="invoice" states="accepted" string="Invoice" type="object" groups="base.group_hr_user"/> <button name="refuse" states="confirm,accepted" string="Refuse" type="workflow" groups="base.group_hr_user" /> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm,accepted" statusbar_colors='{"confirm":"blue","cancelled":"red"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,confirm,accepted" statusbar_colors='{"confirm":"blue","cancelled":"red"}'/> + </header> <sheet string="Expenses Sheet" layout="auto"> <group colspan="4" col="6"> <field name="employee_id" on_change="onchange_employee_id(employee_id)"/> diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index a9359d8ecf5..58abaae02ac 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -64,17 +64,14 @@ <field name="priority">1</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Submit to Manager" name="confirm" states="draft" type="workflow"/> <button string="Approve" name="validate" states="confirm" type="workflow" groups="base.group_hr_user"/> <button string="Validate" name="second_validate" states="validate1" type="workflow" groups="base.group_hr_user"/> <button string="Refuse" name="refuse" states="confirm,validate1" type="workflow" groups="base.group_hr_user,base.group_hr_manager"/> <button string="Reset to New" name="set_to_draft" states="refuse,validate" type="object" groups="base.group_hr_user"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm,validate" statusbar_colors='{"confirm":"blue","validate1":"blue","refuse":"red"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,confirm,validate" statusbar_colors='{"confirm":"blue","validate1":"blue","refuse":"red"}'/> + </header> <sheet string="Leave Request" layout="auto"> <group col="8" colspan="4"> <field name="name" attrs="{'readonly':[('state','!=','draft'),('state','!=','confirm')]}"/> @@ -103,7 +100,7 @@ </notebook> </sheet> <div class="oe_form_sheet_width"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> @@ -116,17 +113,14 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Submit to Manager" name="confirm" states="draft" type="workflow"/> <button string="Approve" name="validate" states="confirm" type="workflow" groups="base.group_hr_user"/> <button string="Validate" name="second_validate" states="validate1" type="workflow" groups="base.group_hr_user"/> <button string="Refuse" name="refuse" states="confirm,validate1" type="workflow" groups="base.group_hr_user"/> <button string="Reset to New" name="set_to_draft" states="cancel,validate,refuse" type="object" groups="base.group_hr_user"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm,validate" statusbar_colors='{"confirm":"blue","validate1":"blue","refuse":"red"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,confirm,validate" statusbar_colors='{"confirm":"blue","validate1":"blue","refuse":"red"}'/> + </header> <sheet string="Allocation Request" layout="auto"> <group col="8" colspan="4" class="oe_form_header"> <field name="name"/> @@ -153,7 +147,7 @@ </notebook> </sheet> <div class="oe_form_sheet_width"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> @@ -177,8 +171,6 @@ <field name="user_id" invisible="1"/> <!--field name="type"/--> <field name="state"/> - <button string="Approve" name="validate" states="confirm" type="workflow" icon="gtk-apply" groups="base.group_hr_user,base.group_hr_manager"/> - <button string="Validate" name="second_validate" states="validate1" type="workflow" icon="gtk-apply" groups="base.group_hr_user,base.group_hr_manager"/> </tree> </field> </record> @@ -234,9 +226,6 @@ <field name="manager_id" invisible="1"/> <field name="user_id" invisible="1"/> <field name="state"/> - <button string="Submit to Manager" name="confirm" states="draft" type="workflow" icon="gtk-yes"/> - <button string="Approve" name="validate" states="confirm" type="workflow" icon="gtk-apply" groups="base.group_hr_user"/> - <button string="Refuse" name="refuse" states="confirm" type="workflow" icon="gtk-no" groups="base.group_hr_user"/> </tree> </field> </record> @@ -262,8 +251,6 @@ <field name="manager_id" invisible="1"/> <field name="user_id" invisible="1"/> <!--field name="type"/--> - <button string="Approve" name="validate" states="confirm" type="workflow" icon="gtk-apply" groups="base.group_hr_user"/> - <button string="Validate" name="second_validate" states="validate1" type="workflow" icon="gtk-apply" groups="base.group_hr_user"/> </tree> </field> </record> diff --git a/addons/hr_payroll/hr_payroll_view.xml b/addons/hr_payroll/hr_payroll_view.xml index 93047230b1f..77b75e1c828 100644 --- a/addons/hr_payroll/hr_payroll_view.xml +++ b/addons/hr_payroll/hr_payroll_view.xml @@ -261,17 +261,14 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Confirm" name="hr_verify_sheet" states="draft"/> <button string="Refund" name="refund_sheet" states="confirm,done" type='object'/> <button string="Set to Draft" name="draft" states="cancel"/> <button string="Compute Sheet" name="compute_sheet" type="object" states="draft"/> <button string="Cancel" name="cancel_sheet" states="draft,hr_check,confirm,verify"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,confirm"/> + </header> <sheet string="Payslip" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="employee_id" on_change="onchange_employee_id(date_from, date_to, employee_id, contract_id)"/> @@ -727,15 +724,12 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="close_payslip_run" type="object" string="Close" states="draft"/> <button name="%(action_hr_payslip_by_employees)d" type="action" states="draft" string="Generate Payslips" /> <button string="Set to Draft" name="draft_payslip_run" type="object" states="close"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar"/> + </header> <sheet string="Payslips Batches" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="name" colspan="4"/> diff --git a/addons/hr_payroll_account/i18n/lv.po b/addons/hr_payroll_account/i18n/lv.po new file mode 100644 index 00000000000..dd9e84c71a1 --- /dev/null +++ b/addons/hr_payroll_account/i18n/lv.po @@ -0,0 +1,140 @@ +# Latvian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-06-01 07:35+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Latvian <lv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: hr_payroll_account +#: field:hr.payslip,move_id:0 +msgid "Accounting Entry" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.salary.rule,account_tax_id:0 +msgid "Tax Code" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.payslip,journal_id:0 +#: field:hr.payslip.run,journal_id:0 +msgid "Expense Journal" +msgstr "" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:157 +#: code:addons/hr_payroll_account/hr_payroll_account.py:173 +#, python-format +msgid "Adjustment Entry" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.contract,analytic_account_id:0 +#: field:hr.salary.rule,analytic_account_id:0 +msgid "Analytic Account" +msgstr "" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_salary_rule +msgid "hr.salary.rule" +msgstr "" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.contract,journal_id:0 +msgid "Salary Journal" +msgstr "" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_payslip +msgid "Pay Slip" +msgstr "Algas Lapa" + +#. module: hr_payroll_account +#: constraint:hr.payslip:0 +msgid "Payslip 'Date From' must be before 'Date To'." +msgstr "" + +#. module: hr_payroll_account +#: help:hr.payslip,period_id:0 +msgid "Keep empty to use the period of the validation(Payslip) date." +msgstr "" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:171 +#, python-format +msgid "" +"The Expense Journal \"%s\" has not properly configured the Debit Account!" +msgstr "" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:155 +#, python-format +msgid "" +"The Expense Journal \"%s\" has not properly configured the Credit Account!" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.salary.rule,account_debit:0 +msgid "Debit Account" +msgstr "" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:102 +#, python-format +msgid "Payslip of %s" +msgstr "" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: hr_payroll_account +#: constraint:hr.contract:0 +msgid "Error! contract start-date must be lower then contract end-date." +msgstr "" + +#. module: hr_payroll_account +#: field:hr.payslip,period_id:0 +msgid "Force Period" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.salary.rule,account_credit:0 +msgid "Credit Account" +msgstr "" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_payslip_employees +msgid "Generate payslips for all selected employees" +msgstr "" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:155 +#: code:addons/hr_payroll_account/hr_payroll_account.py:171 +#, python-format +msgid "Configuration Error!" +msgstr "" + +#. module: hr_payroll_account +#: view:hr.contract:0 +#: view:hr.salary.rule:0 +msgid "Accounting" +msgstr "" diff --git a/addons/hr_recruitment/__openerp__.py b/addons/hr_recruitment/__openerp__.py index 4a29befbfaf..b83a482e1c1 100644 --- a/addons/hr_recruitment/__openerp__.py +++ b/addons/hr_recruitment/__openerp__.py @@ -37,7 +37,14 @@ system to store and search in your CV base. 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'images': ['images/hr_recruitment_analysis.jpeg','images/hr_recruitment_applicants.jpeg'], - 'depends': ['decimal_precision', 'hr', 'survey', 'crm', 'fetchmail'], + 'depends': [ + 'base_status', + 'decimal_precision', + 'hr', + 'survey', + 'crm', + 'fetchmail', + ], 'update_xml': [ 'wizard/hr_recruitment_phonecall_view.xml', 'wizard/hr_recruitment_employee_hired.xml', diff --git a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml index 8af4b0f8553..e9054416eea 100644 --- a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml +++ b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml @@ -12,7 +12,7 @@ <field name="job_id"/> <field name="partner_name"/> <field name="stage_id"/> - <field name="state"/> + <field name="state" groups="base.group_no_one"/> </tree> </field> </record> diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index cd3d0c6b11c..7fd3a7bb403 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -19,6 +19,7 @@ # ############################################################################## +from base_status.base_stage import base_stage import time from datetime import datetime, timedelta @@ -57,8 +58,6 @@ class hr_recruitment_source(osv.osv): _columns = { 'name': fields.char('Source Name', size=64, required=True, translate=True), } -hr_recruitment_source() - class hr_recruitment_stage(osv.osv): """ Stage of HR Recruitment """ @@ -69,12 +68,15 @@ 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 tempy this field."), - 'requirements': fields.text('Requirements') + 'state': fields.selection(AVAILABLE_STATES, 'State', required=True, help="The related state for the stage. The state of your document will automatically change regarding the selected stage. Example, a stage is related to the state '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, } -hr_recruitment_stage() class hr_recruitment_degree(osv.osv): """ Degree of HR Recruitment """ @@ -90,14 +92,60 @@ class hr_recruitment_degree(osv.osv): _sql_constraints = [ ('name_uniq', 'unique (name)', 'The name of the Degree of Recruitment must be unique!') ] -hr_recruitment_degree() -class hr_applicant(crm.crm_case, osv.osv): +class hr_applicant(base_stage, osv.Model): _name = "hr.applicant" _description = "Applicant" _order = "id desc" _inherit = ['ir.needaction_mixin', 'mail.thread'] + def _get_default_department_id(self, cr, uid, context=None): + """ Gives default department by checking if present in the context """ + return (self._resolve_department_id_from_context(cr, uid, context=context) or False) + + 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) + + def _resolve_department_id_from_context(self, cr, uid, context=None): + """ Returns ID of department based on the value of 'default_department_id' + context key, or None if it cannot be resolved to a single + department. + """ + if context is None: + context = {} + if type(context.get('default_department_id')) in (int, long): + return context.get('default_department_id') + if isinstance(context.get('default_department_id'), basestring): + department_name = context['default_department_id'] + department_ids = self.pool.get('hr.department').name_search(cr, uid, name=department_name, context=context) + if len(department_ids) == 1: + return int(department_ids[0][0]) + return None + + def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): + access_rights_uid = access_rights_uid or uid + stage_obj = self.pool.get('hr.recruitment.stage') + order = stage_obj._order + # lame hack to allow reverting search, should just work in the trivial case + if read_group_order == 'stage_id desc': + order = "%s desc" % order + # retrieve section_id from the context and write the domain + # - ('id', 'in', 'ids'): add columns that should be present + # - OR ('department_id', '=', False), ('fold', '=', False): add default columns that are not folded + # - OR ('department_id', 'in', department_id), ('fold', '=', False) if department_id: add department columns that are not folded + department_id = self._resolve_department_id_from_context(cr, uid, context=context) + search_domain = [] + if department_id: + search_domain += ['|', '&', ('department_id', '=', department_id), ('fold', '=', False)] + search_domain += ['|', ('id', 'in', ids), '&', ('department_id', '=', False), ('fold', '=', False)] + stage_ids = stage_obj._search(cr, uid, search_domain, order=order, access_rights_uid=access_rights_uid, context=context) + result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context) + # restore order of the search + result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0]))) + return result + def _compute_day(self, cr, uid, ids, fields, args, context=None): """ @param cr: the current row, from the database cursor, @@ -134,7 +182,6 @@ class hr_applicant(crm.crm_case, osv.osv): _columns = { 'name': fields.char('Name', size=128, required=True), - 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]), 'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the case without removing it."), 'description': fields.text('Description'), 'email_from': fields.char('Email', size=128, help="These people will receive email."), @@ -143,12 +190,15 @@ class hr_applicant(crm.crm_case, osv.osv): 'partner_id': fields.many2one('res.partner', 'Contact Name'), 'create_date': fields.datetime('Creation Date', readonly=True, select=True), 'write_date': fields.datetime('Update Date', readonly=True), - 'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage'), - 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True, - help='The state is set to \'Draft\', when a case is created.\ - \nIf the case is in progress the state is set to \'Open\'.\ - \nWhen the case is over, the state is set to \'Done\'.\ - \nIf the case needs to be reviewed then the state is set to \'Pending\'.'), + 'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage', + domain="['|', ('department_id', '=', department_id), ('department_id', '=', False)]"), + 'state': fields.related('stage_id', 'state', type="selection", store=True, + selection=AVAILABLE_STATES, string="State", readonly=True, + help='The state is set to \'Draft\', when a case is created.\ + If the case is in progress the state is set to \'Open\'.\ + When the case is over, the state is set to \'Done\'.\ + If the case needs to be reviewed then the state is \ + set to \'Pending\'.'), 'company_id': fields.many2one('res.company', 'Company'), 'user_id': fields.many2one('res.users', 'Responsible'), # Applicant Columns @@ -169,7 +219,6 @@ class hr_applicant(crm.crm_case, osv.osv): 'partner_mobile': fields.char('Mobile', size=32), 'type_id': fields.many2one('hr.recruitment.degree', 'Degree'), 'department_id': fields.many2one('hr.department', 'Department'), - 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True), 'survey': fields.related('job_id', 'survey_id', type='many2one', relation='survey', string='Survey'), 'response': fields.integer("Response"), 'reference': fields.char('Referred By', size=128), @@ -185,33 +234,19 @@ class hr_applicant(crm.crm_case, osv.osv): _defaults = { 'active': lambda *a: 1, - 'user_id': lambda self, cr, uid, context: uid, - 'email_from': crm.crm_case. _get_default_email, - 'state': lambda *a: 'draft', + 'user_id': lambda s, cr, uid, c: uid, + 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), + '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), 'priority': lambda *a: '', 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c), 'color': 0, } - def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): - access_rights_uid = access_rights_uid or uid - stage_obj = self.pool.get('hr.recruitment.stage') - order = stage_obj._order - if read_group_order == 'stage_id desc': - # lame hack to allow reverting search, should just work in the trivial case - order = "%s desc" % order - stage_ids = stage_obj._search(cr, uid, ['|',('id','in',ids),('department_id','=',False)], order=order, - access_rights_uid=access_rights_uid, context=context) - result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context) - # restore order of the search - result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0]))) - return result - _group_by_full = { 'stage_id': _read_group_stage_ids } - def onchange_job(self,cr, uid, ids, job, context=None): result = {} @@ -229,47 +264,33 @@ class hr_applicant(crm.crm_case, osv.osv): stage_id = stage_ids and stage_ids[0] or False return {'value': {'stage_id': stage_id}} - def stage_previous(self, cr, uid, ids, context=None): - """This function computes previous stage for case from its current stage - using available stage for that case type - @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 IDs - @param context: A standard dictionary for contextual values""" - stage_obj = self.pool.get('hr.recruitment.stage') - for case in self.browse(cr, uid, ids, context=context): - department = (case.department_id.id or False) - st = case.stage_id.id or False - stage_ids = stage_obj.search(cr, uid, ['|',('department_id','=',department),('department_id','=',False)], context=context) - if st and stage_ids.index(st): - self.write(cr, uid, [case.id], {'stage_id': stage_ids[stage_ids.index(st)-1]}, context=context) - else: - self.write(cr, uid, [case.id], {'stage_id': False}, context=context) - return True - - def stage_next(self, cr, uid, ids, context=None): - """This function computes next stage for case from its current stage - using available stage for that case type - @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 IDs - @param context: A standard dictionary for contextual values""" - stage_obj = self.pool.get('hr.recruitment.stage') - for case in self.browse(cr, uid, ids, context=context): - department = (case.department_id.id or False) - st = case.stage_id.id or False - stage_ids = stage_obj.search(cr, uid, ['|',('department_id','=',department),('department_id','=',False)], context=context) - val = False - if st and len(stage_ids) != stage_ids.index(st)+1: - val = stage_ids[stage_ids.index(st)+1] - elif (not st) and stage_ids: - val = stage_ids[0] - else: - val = False - self.write(cr, uid, [case.id], {'stage_id': val}, context=context) - return True + def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None): + """ Override of the base.stage method + Parameter of the stage search taken from the lead: + - department_id: if set, stages must belong to this section or + be a default case + """ + if isinstance(cases, (int, long)): + cases = self.browse(cr, uid, cases, context=context) + # collect all section_ids + department_ids = [] + if section_id: + department_ids.append(section_id) + for case in cases: + if case.department_id: + department_ids.append(case.department_id.id) + # OR all section_ids and OR with case_default + search_domain = [] + if department_ids: + search_domain += ['|', ('department_id', 'in', department_ids)] + search_domain.append(('department_id', '=', False)) + # AND with the domain in parameter + search_domain += list(domain) + # perform search, return the first found + stage_ids = self.pool.get('hr.recruitment.stage').search(cr, uid, search_domain, order=order, context=context) + if stage_ids: + return stage_ids[0] + return False def action_makeMeeting(self, cr, uid, ids, context=None): """ @@ -475,12 +496,6 @@ class hr_applicant(crm.crm_case, osv.osv): """ return self.set_priority(cr, uid, ids, '3') - def write(self, cr, uid, ids, vals, context=None): - if 'stage_id' in vals and vals['stage_id']: - stage = self.pool.get('hr.recruitment.stage').browse(cr, uid, vals['stage_id'], context=context) - self.message_append_note(cr, uid, ids, body=_("Stage changed to <b>%s</b>.") % stage.name, context=context) - return super(hr_applicant,self).write(cr, uid, ids, vals, context=context) - # ------------------------------------------------------- # OpenChatter methods and notifications # ------------------------------------------------------- @@ -498,7 +513,13 @@ class hr_applicant(crm.crm_case, osv.osv): if obj.state == 'draft' and obj.user_id: result[obj.id] = [obj.user_id.id] return result - + + def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): + """ Override of the (void) default notification method. """ + if not stage_id: return True + stage_name = self.pool.get('hr.recruitment.stage').name_get(cr, uid, [stage_id], context=context)[0][1] + return self.message_append_note(cr, uid, ids, body= _("Stage changed to <b>%s</b>.") % (stage_name), context=context) + def case_get_note_msg_prefix(self, cr, uid, id, context=None): return 'Applicant' @@ -530,7 +551,6 @@ class hr_applicant(crm.crm_case, osv.osv): message = _("Applicant has been <b>created</b>.") return self.message_append_note(cr, uid, ids, body=message, context=context) -hr_applicant() class hr_job(osv.osv): _inherit = "hr.job" diff --git a/addons/hr_recruitment/hr_recruitment_data.xml b/addons/hr_recruitment/hr_recruitment_data.xml index d6cb5952d38..8cbebda5f1f 100644 --- a/addons/hr_recruitment/hr_recruitment_data.xml +++ b/addons/hr_recruitment/hr_recruitment_data.xml @@ -1,7 +1,9 @@ <?xml version="1.0"?> <openerp> +<!-- <data noupdate="1"> - +--> +<data> <!-- HR Recruitment Source --> @@ -37,30 +39,36 @@ <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> <record id="survey_job_0" model="survey"> <field name="title">Job Survey</field> diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index c3a5216620d..2a6fd2c7780 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -59,8 +59,6 @@ <field name="partner_phone"/> <field name="job_id"/> <field name="stage_id"/> - <button name="stage_previous" string="Previous" states="open,pending" type="object" icon="gtk-go-back"/> - <button name="stage_next" string="Next" states="open,pending" type="object" icon="gtk-go-forward"/> <field name="title_action" invisible="context.get('invisible_next_action', True)"/> <field name="date_action" invisible="context.get('invisible_next_date', True)"/> <field name="source_id" invisible="1"/> @@ -71,9 +69,7 @@ <field name="availability" invisible="1"/> <field name="department_id" invisible="context.get('invisible_department', True)"/> <field name="user_id"/> - <field name="state"/> - <button name="case_open" string="In Progress" states="draft,pending" type="object" icon="gtk-go-forward"/> - <button name="case_pending" string="Pending" states="open" type="object" icon="gtk-media-pause"/> + <field name="state" groups="base.group_no_one"/> </tree> </field> </record> @@ -84,81 +80,90 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> - <button name="%(action_hr_recruitment_hired_employee)d" string="Hire" states="open,pending" type="action"/> - <button name="case_open" string="In Progress" states="draft,pending" type="object"/> - <button name="case_pending" string="Pending" states="open" type="object"/> - <button name="case_reset" string="Reset to New" states="done,cancel" type="object"/> - <button name="case_cancel" string="Refuse" states="draft,open,pending" type="object"/> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/> - </div> - </div> + <header> + <button name="%(action_hr_recruitment_hired_employee)d" string="Hire" type="action" + states="open,pending"/> + <button name="case_open" string="Open" type="object" + states="draft,pending"/> + <button name="case_pending" string="Pending" type="object" + states="open"/> + <button name="case_reset" string="Reset to New" type="object" + states="done,cancel"/> + <button name="case_cancel" string="Refuse" type="object" + states="draft,open,pending"/> + <button name="stage_previous" string="Previous" type="object" + states="open" icon="gtk-go-back"/> + <button name="stage_next" string="Next" type="object" + states="open" icon="gtk-go-forward"/> + <field name="stage_id" widget="statusbar" domain="['|',('department_id','=',department_id),('department_id','=',False)]"/> + </header> <sheet string="Jobs - Recruitment Form" layout="auto"> - <group col="7" colspan="4"> - <field name="name" string="Subject"/> - <field name="partner_name"/> - <field name="priority" string="Appreciation"/> - <newline/> - <group col="4" colspan="2"> - <field name="stage_id" domain="['|',('department_id','=',department_id),('department_id','=',False)]"/> - <button name="stage_previous" string="" type="object" icon="gtk-go-back"/> - <button icon="gtk-go-forward" string="" name="stage_next" type="object"/> - </group> - <field name="job_id" on_change="onchange_job(job_id)"/> - <field name="department_id" widget="selection" on_change="onchange_department_id(department_id)"/> - </group> - <group col="11" colspan="4"> - <field name="user_id"/> - <field name="title_action"/> - <field name="date_action"/> + <group colspan="4" col="10"> + <h1><field name="name" colspan="4" nolabel="1"/></h1> + <h1><button name="action_makeMeeting" type="object" colspan="2" string="Shedule Interview" icon="gtk-index"/> + <button name="%(survey.action_view_survey_question_message)d" string="Start Interview" type="action" icon="gtk-execute" context="{'survey_id': survey, 'response_id': [response], 'response_no':0 ,'active' : response, 'object' : 'hr.applicant'}" attrs="{'invisible':[('survey','=',False)]}" help="Answer related job question"/> + <button name="action_print_survey" string="Print Interview" type="object" icon="gtk-print" attrs="{'invisible':[('survey','=',False)]}" help="Print interview report"/></h1> + </group> + <field name="type_id" nolabel="1" placeholder="Degree"/> + <group colspan="4" col="4"> + <field name="partner_name"/> + <field name="job_id" on_change="onchange_job(job_id)"/> + <field name="user_id"/> + <field name="priority" string="Appreciation"/> + <field name="title_action"/> + <field name="department_id" widget="selection" on_change="onchange_department_id(department_id)"/> + <field name="date_action"/> <field name="survey" invisible="1"/> - <button name="action_makeMeeting" type="object" string="Meeting" icon="gtk-index" help="Create meeting"/> - <button name="action_print_survey" string="Print Interview" type="object" icon="gtk-print" attrs="{'invisible':[('survey','=',False)]}" help="Print interview report"/> - <button name="%(survey.action_view_survey_question_message)d" string="Answer" type="action" icon="gtk-execute" context="{'survey_id': survey, 'response_id': [response], 'response_no':0 ,'active' : response, 'object' : 'hr.applicant'}" attrs="{'invisible':[('survey','=',False)]}" help="Answer related job question"/> <field name="response" invisible="1"/> </group> + <field name="state" groups="base.group_no_one"/> <notebook colspan="4"> - <page string="Job Info"> - <group col="3" colspan="2"> - <separator colspan="3" string="Contact"/> - <field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)" colspan="2"/> - <button string="Create Contact" - name="%(action_hr_recruitment_partner_create)d" - icon="gtk-index" type="action" attrs="{'invisible':[('partner_id','!=',False)]}"/> - <field name="email_from" colspan="2"/> - <button string="Send New Email" name="%(mail.action_email_compose_message_wizard)d" icon="terp-mail-message-new" type="action" attrs="{'invisible':[('email_from','=',False)]}"/> - <field name="partner_phone" colspan="3"/> - <field name="partner_mobile" colspan="3"/> - </group> - <group col="3" colspan="2"> - <separator colspan="3" string="Contract Data"/> - <field name="availability" colspan="3"/> - <field name="salary_expected"/> - <field name="salary_expected_extra" nolabel="1"/> - <field name="salary_proposed"/> - <field name="salary_proposed_extra" nolabel="1"/> - </group> - <group col="2" colspan="2"> - <separator colspan="2" string="Qualification"/> - <field name="type_id"/> - <field name="source_id"/> - <field name="reference"/> + <page string="Application"> + <group col="12" colspan="6"> + <group col="3" colspan="4" class="oe_form_group_label_border"> + <separator colspan="4" string="Contact"/> + <field name="partner_id" colspan="1" + on_change="onchange_partner_id(partner_id, email_from)"/> + <button string="" + name="%(action_hr_recruitment_partner_create)d" + icon="gtk-index" + type="action" colspan="1" + attrs="{'invisible':[('partner_id','!=',False)]}"/> + <field name="email_from" colspan="1"/> + <button string="" + name="%(mail.action_email_compose_message_wizard)d" + icon="terp-mail-message-new" + type="action" colspan="1" + attrs="{'invisible':[('email_from','=',False)]}"/> + <field name="partner_phone" colspan="3"/> + <field name="partner_mobile" colspan="3"/> + </group> + <group col="2" colspan="4" class="oe_form_group_label_border"> + <separator colspan="2" string="Reference"/> + <field name="source_id"/> + <field name="reference"/> + </group> + <group col="3" colspan="4" class="oe_form_group_label_border"> + <separator colspan="3" string="Contracts"/> + <field name="availability" colspan="3"/> + <field name="salary_expected"/> + <field name="salary_expected_extra" nolabel="1"/> + <field name="salary_proposed"/> + <field name="salary_proposed_extra" nolabel="1"/> + </group> </group> + <separator colspan="3" string="Details"/> + <field name="description" nolabel="1" colspan="4"/> </page> - <page string="Notes"> - <field name="description" nolabel="1" colspan="4"/> - </page> </notebook> </sheet> <div class="oe_form_bottom"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> </record> - <record model="ir.ui.view" id="crm_case_graph_view_job"> <field name="name">Jobs - Recruitment Graph</field> <field name="model">hr.applicant</field> @@ -240,105 +245,81 @@ <!-- hr Applicant Kanban View --> - <record model="ir.ui.view" id="hr_kanban_view_applicant"> + <record model="ir.ui.view" id="hr_kanban_view_applicant"> <field name="name">Hr Applicants kanban</field> <field name="model">hr.applicant</field> <field name="type">kanban</field> <field name="arch" type="xml"> <kanban default_group_by="stage_id"> <field name="color"/> - <field name="state"/> + <field name="state" groups="base.group_no_one"/> <field name="priority"/> <field name="survey"/> <field name="user_id"/> <field name="user_email"/> - <templates> - <t t-name="partner-infos"> - <div t-if="record.partner_phone.raw_value"> - Phone: <field name="partner_phone"/> - </div> - <div t-if="record.partner_mobile.raw_value"> - Mobile: <field name="partner_mobile"/> - </div> - </t> - <t t-name="kanban-box"> - <t t-if="record.priority.raw_value == 1" t-set="border">oe_kanban_color_red</t> - <div t-attf-class="#{kanban_color(record.color.raw_value)} #{border || ''}"> - <div class="oe_kanban_box oe_kanban_color_border"> - <table class="oe_kanban_table oe_kanban_box_header oe_kanban_color_bgdark oe_kanban_color_border oe_kanban_draghandle"> - <tr> - <td align="left" valign="middle" class="oe_kanban_title" tooltip="partner-infos"> - <field name="partner_name"/> - <t t-if="!record.partner_name.raw_value"> - <field name="email_from"/> - </t> - </td> - <td valign="top" width="22"><img t-att-src="kanban_gravatar(record.user_email.value, 22)" class="oe_kanban_gravatar" t-att-title="record.user_id.value"/></td> - </tr> - </table> - <div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_box_show_onclick_trigger oe_kanban_color_border"> - <div class="oe_kanban_right"> - <span class="oe_kanban_highlight"> - <t t-set="priority" t-value="record.priority.raw_value || 5"/> + <field name="partner_name"/> + <field name="type_id"/> + <field name="job_id"/> + <field name="title_action"/> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_project oe_kanban_auto_height"> + <a class="oe_kanban_menuaction oe_i">B</a> + <ul class="oe_kanban_menu"> + <li><a type="edit">Edit...</a></li> + <li><a type="delete">Delete</a></li> + <li><ul class="oe_kanban_colorpicker" data-field="color"/></li> + </ul> + <div class="oe_kanban_content" > + <h3 class="oe_kanban_ellipsis"><field name="name"/> + </h3> + <div style="margin-bottom:2;padding-top:5px;white-space: nowrap;" > + <field name="partner_name"/> + <div class="oe_kanban_right"> + <span class="oe_kanban_highlight"> + <t t-set="priority" t-value="record.priority.raw_value || 5"/> <a type="object" name="set_priority" args="['3']" t-if="priority gt 3"> - <img src="/web/static/src/img/icons/star-off.png" width="16" height="16"/> + <img src="/web/static/src/img/icons/star-off.png" width="16" height="16"/> </a> <a type="object" name="set_priority" args="['5']" t-if="priority lte 3"> - <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 3 ? 'on' : 'off'}.png" width="16" height="16"/> + <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 3 ? 'on' : 'off'}.png" width="16" height="16"/> </a> <a type="object" name="set_priority" args="['2']"> - <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 2 ? 'on' : 'off'}.png" width="16" height="16"/> + <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 2 ? 'on' : 'off'}.png" width="16" height="16"/> </a> <a type="object" name="set_priority" args="['1']"> - <img t-attf-src="/web/static/src/img/icons/star-#{priority == 1 ? 'on' : 'off'}.png" width="16" height="16"/> + <img t-attf-src="/web/static/src/img/icons/star-#{priority == 1 ? 'on' : 'off'}.png" width="16" height="16"/> </a> - </span> + </span> + </div> + </div> + <div style="white-space: nowrap;" > + <div t-if="record.type_id.raw_value"> + (<field name="type_id"/>) + </div> + </div> + <div style="padding-top:5px;white-space: nowrap;" > + <t t-if="record.job_id.raw_value">Applied for <field name="job_id" /></t> + </div> + <div style="padding-top:5px;white-space: nowrap;" > + <t t-if="record.title_action.raw_value"> + <field name="title_action" /> on + <field name="date_action" /> + </t> </div> - - <field name="job_id"/> - <t t-if="!record.job_id.raw_value"> - <field name="name"/> - </t> - - <div class="oe_kanban_clear" style="padding-top: 4px"/> - - <div t-if="record.type_id.raw_value or record.source_id.raw_value"> - <span t-if="record.type_id.raw_value" class="oe_kanban_highlight oe_kanban_button" style="font-size: 100%%"> - <field name="type_id"/> - </span> - <span t-if="record.source_id.raw_value" class="oe_kanban_highlight oe_kanban_button" style="font-size: 100%%"> - <field name="source_id"/> - </span> - </div> - <div t-if="record.date_action.raw_value or record.title_action.raw_value"> - <i t-if="record.date_action.raw_value"><field name="date_action"/> :</i> <field name="title_action"/> - </div> - </div> - <div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick"> - <div class="oe_kanban_left"> - <a string="Edit" icon="gtk-edit" type="edit"/> - <a string="Delete" icon="gtk-close" type="delete"/> - <a string="Change Color" icon="color-picker" type="color" name="color"/> - <a string="Send New Email" name="%(mail.action_email_compose_message_wizard)d" icon="terp-mail-message-new" type="action"/> - <a string="Add Internal Note" name="%(crm.action_crm_add_note)d" context="{'model': 'crm.lead' }" icon="terp-document-new" type="action"/> - <a string="Schedule Meeting" name="action_makeMeeting" type="object" icon="stock_calendar"/> - <a t-if="record.survey.raw_value" name="action_print_survey" type="object" string="Print Interview" icon="gtk-print" /> - </div> - <div class="oe_kanban_right"> - <a name="case_cancel" string="Refuse" states="draft,open,pending" type="object" icon="gtk-cancel"/> - <a name="case_open" string="In Progress" states="draft,pending" type="object" icon="kanban-apply"/> - <a name="case_pending" string="Pending" states="open" type="object" icon="kanban-pause"/> - <a name="%(action_hr_recruitment_hired_employee)d" string="Hire" states="open,pending" type="action" icon="terp-partner"/> + <div align="left" width="22" style="padding-top:5px;white-space: nowrap;" > + <div align="right"> + <img t-att-src="kanban_image('res.users', 'avatar', record.user_id.raw_value[0])" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/> + </div> </div> - <br class="oe_kanban_clear"/> </div> </div> - </div> - </t> - </templates> - </kanban> - </field> - </record> + </t> + </templates> + </kanban> + </field> + </record> + # ------------------------------------------------------ # HR Job # ------------------------------------------------------ @@ -367,6 +348,7 @@ <field name="sequence" invisible="1"/> <field name="name"/> <field name="department_id"/> + <field name="state"/> </tree> </field> </record> @@ -384,6 +366,7 @@ <field name="name" select="1"/> <field name="department_id"/> <field name="sequence"/> + <field name="state"/> </group> <separator string="Requirements" colspan="4"/> <field name="requirements" nolabel="1" colspan="4"/> diff --git a/addons/hr_recruitment/test/recruitment_process.yml b/addons/hr_recruitment/test/recruitment_process.yml index e856747ed99..38b84fccab2 100644 --- a/addons/hr_recruitment/test/recruitment_process.yml +++ b/addons/hr_recruitment/test/recruitment_process.yml @@ -1,7 +1,7 @@ - In Order to test process of Recruitment, - - Applicant interested in job position. so He send resume by email. + An applicant is interested in the job position. So he sends a resume by email. - !python {model: mail.thread}: | import addons @@ -9,28 +9,43 @@ request_message = request_file.read() self.message_process(cr, uid, 'hr.applicant', request_message) - - After getting the mail, I check details of new applicant. + After getting the mail, I check the details of the new applicant. - !python {model: hr.applicant}: | applicant_ids = self.search(cr, uid, [('email_from','=', 'Mr. Richard Anderson <Richard_Anderson@yahoo.com>')]) assert applicant_ids, "Applicant is not created after getting the mail" applicant = self.browse(cr, uid, applicant_ids[0], context=context) resume_ids = self.pool.get('ir.attachment').search(cr, uid, [('datas_fname','=','resume.doc'),('res_model','=',self._name),('res_id','=',applicant.id)]) - assert applicant.name == "Application for the post of Jr.application Programmer.", "Subject does not match" - assert applicant.state == "draft" - assert len(resume_ids), "Resume does not attached." + 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 len(resume_ids), "Resume is not attached." - - I refuse applicant for the Recruitment. + I refuse the applicant (hr_case_programmer) - !python {model: hr.applicant}: | - self.case_close(cr, uid, [ref("hr_case_programmer")]) + self.case_cancel(cr, uid, [ref("hr_case_programmer")]) - - I open applicant for the Recruitment. + 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}: | @@ -91,7 +106,7 @@ - I check that applicant is "Hired". - - !assert {model: hr.applicant, id: hr_case_programmer}: + !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. diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml index 43ca7a4004e..f9486982432 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml @@ -23,17 +23,14 @@ </group> </group> <xpath expr="/form/sheet" position='before'> - <div class="oe_form_topbar"> + <header> <button name="set_pending" string="Pending" type="object" states="open"/> <button name="set_close" string="Close" type="object" states="open,pending"/> <button name="set_open" string="Re-open project" type="object" states="pending,cancelled,close,draft"/> <button name="set_cancel" string="Cancel" type="object" states="open,pending"/> - <div class="oe_right"> - <field name="state" readonly="1" widget="statusbar" nolabel="1" + <field name="state" readonly="1" widget="statusbar" statusbar_visible="open,pending,close" statusbar_colors='{"pending":"red", "template":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + </header> </xpath> </field> </record> diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml index aa815df5337..afd04aed1e1 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml @@ -61,16 +61,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="button_confirm" states="draft" string="Submited to Manager" type="object"/> <button name="done" states="confirm" string="Approve" type="workflow" groups="base.group_hr_user"/> <button name="action_set_to_draft" states="done" string="Set to Draft" type="object"/> <button name="cancel" states="confirm" string="Refuse" type="workflow" groups="base.group_hr_user"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="new,confirm,done"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="new,confirm,done"/> + </header> <sheet string="Timesheet" layout="auto"> <group colspan="4" col="6" class="oe_form_header"> <field name="employee_id" on_change="onchange_employee_id(employee_id)"/> diff --git a/addons/idea/i18n/gu.po b/addons/idea/i18n/gu.po new file mode 100644 index 00000000000..f2ef969fa3e --- /dev/null +++ b/addons/idea/i18n/gu.po @@ -0,0 +1,710 @@ +# Gujarati translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-06-01 05:11+0000\n" +"Last-Translator: Jalpesh Patel(OpenERP) <pja@tinyerp.com>\n" +"Language-Team: Gujarati <gu@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: idea +#: help:idea.category,visibility:0 +msgid "If True creator of the idea will be visible to others" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "By States" +msgstr "" + +#. module: idea +#: model:ir.actions.act_window,name:idea.action_idea_select +msgid "Idea select" +msgstr "વિચાર પસંદ કરો" + +#. module: idea +#: view:idea.idea:0 +#: view:idea.vote:0 +#: model:ir.ui.menu,name:idea.menu_idea_vote +msgid "Votes" +msgstr "મત" + +#. module: idea +#: view:idea.idea:0 +#: field:idea.idea,comment_ids:0 +msgid "Comments" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "Submit Vote" +msgstr "મત જમા કરો" + +#. module: idea +#: model:ir.actions.act_window,name:idea.action_report_vote_all +#: model:ir.ui.menu,name:idea.menu_report_vote_all +msgid "Ideas Analysis" +msgstr "વિચારો નું પૃથક્કરણ" + +#. module: idea +#: view:idea.category:0 +#: view:idea.idea:0 +#: view:idea.vote:0 +#: view:report.vote:0 +msgid "Group By..." +msgstr "" + +#. module: idea +#: selection:report.vote,month:0 +msgid "March" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "Accepted Ideas" +msgstr "સ્વીકૃત વિચારો" + +#. module: idea +#: code:addons/idea/wizard/idea_post_vote.py:94 +#, python-format +msgid "Idea must be in 'Open' state before vote for that idea." +msgstr "" + +#. module: idea +#: view:report.vote:0 +msgid "Open Date" +msgstr "" + +#. module: idea +#: view:report.vote:0 +#: field:report.vote,day:0 +msgid "Day" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "Refuse" +msgstr "નકારવા" + +#. module: idea +#: field:idea.idea,count_votes:0 +msgid "Count of votes" +msgstr "મતો ગણતરી" + +#. module: idea +#: model:ir.model,name:idea.model_report_vote +msgid "Idea Vote Statistics" +msgstr "વિચાર મતોની આંકડાકીય માહિતી" + +#. module: idea +#: selection:idea.idea,my_vote:0 +#: selection:idea.post.vote,vote:0 +#: selection:idea.vote,score:0 +#: selection:idea.vote.stat,score:0 +msgid "Bad" +msgstr "ખરાબ" + +#. module: idea +#: selection:report.vote,idea_state:0 +msgid "Cancelled" +msgstr "" + +#. module: idea +#: view:idea.category:0 +msgid "Category of ideas" +msgstr "વિચારો ની શ્રેણી" + +#. module: idea +#: code:addons/idea/idea.py:274 +#: code:addons/idea/wizard/idea_post_vote.py:91 +#: code:addons/idea/wizard/idea_post_vote.py:94 +#, python-format +msgid "Warning !" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "Your Comment" +msgstr "" + +#. module: idea +#: model:ir.model,name:idea.model_idea_vote +msgid "Idea Vote" +msgstr "" + +#. module: idea +#: field:idea.category,parent_id:0 +msgid "Parent Categories" +msgstr "પિતૃ શ્રેણીઓ" + +#. module: idea +#: selection:idea.idea,my_vote:0 +#: selection:idea.post.vote,vote:0 +#: selection:idea.vote,score:0 +#: selection:idea.vote.stat,score:0 +msgid "Very Bad" +msgstr "ખૂબ ખરાબ" + +#. module: idea +#: view:idea.vote:0 +msgid "Ideas vote" +msgstr "" + +#. module: idea +#: view:report.vote:0 +#: field:report.vote,nbr:0 +msgid "# of Lines" +msgstr "" + +#. module: idea +#: code:addons/idea/wizard/idea_post_vote.py:91 +#, python-format +msgid "You can not give Vote for this idea more than %s times" +msgstr "" + +#. module: idea +#: view:idea.category:0 +msgid "Ideas Categories" +msgstr "વિચારોની શ્રેણીઓ" + +#. module: idea +#: help:idea.idea,description:0 +msgid "Content of the idea" +msgstr "વિચાર સામગ્રી" + +#. module: idea +#: model:ir.model,name:idea.model_idea_category +msgid "Idea Category" +msgstr "વિચાર શ્રેણીમાં" + +#. module: idea +#: view:idea.idea:0 +#: field:idea.idea,stat_vote_ids:0 +msgid "Statistics" +msgstr "આંકડાકીય માહિતી" + +#. module: idea +#: selection:idea.idea,my_vote:0 +#: selection:idea.post.vote,vote:0 +#: selection:idea.vote,score:0 +#: selection:idea.vote.stat,score:0 +msgid "Not Voted" +msgstr "" + +#. module: idea +#: sql_constraint:idea.category:0 +msgid "The name of the category must be unique" +msgstr "શ્રેણી નામ વિશિષ્ટ હોવું જ જોઈએ" + +#. module: idea +#: model:ir.model,name:idea.model_idea_select +msgid "select idea" +msgstr "વિચાર પસંદ કરો" + +#. module: idea +#: view:idea.stat:0 +msgid "stat" +msgstr "" + +#. module: idea +#: field:idea.category,child_ids:0 +msgid "Child Categories" +msgstr "" + +#. module: idea +#: view:idea.select:0 +msgid "Next" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +#: field:idea.idea,state:0 +#: view:report.vote:0 +#: field:report.vote,idea_state:0 +msgid "State" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +#: selection:idea.idea,state:0 +msgid "New" +msgstr "" + +#. module: idea +#: selection:idea.idea,my_vote:0 +#: selection:idea.post.vote,vote:0 +#: selection:idea.vote,score:0 +#: selection:idea.vote.stat,score:0 +msgid "Good" +msgstr "" + +#. module: idea +#: help:idea.idea,open_date:0 +msgid "Date when an idea opened" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "Idea Detail" +msgstr "વિચાર વિગતો" + +#. module: idea +#: help:idea.idea,state:0 +msgid "" +"When the Idea is created the state is 'Draft'.\n" +" It is opened by the user, the state is 'Opened'. \n" +"If the idea is accepted, the state is 'Accepted'." +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "New Ideas" +msgstr "નવા વિચારો" + +#. module: idea +#: view:report.vote:0 +msgid "Idea Vote created last month" +msgstr "" + +#. module: idea +#: field:idea.category,visibility:0 +#: field:idea.idea,visibility:0 +msgid "Open Idea?" +msgstr "" + +#. module: idea +#: view:report.vote:0 +msgid "Idea Vote created in current month" +msgstr "" + +#. module: idea +#: selection:report.vote,month:0 +msgid "July" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +#: selection:idea.idea,state:0 +#: view:report.vote:0 +#: selection:report.vote,idea_state:0 +msgid "Accepted" +msgstr "સ્વીકૃત" + +#. module: idea +#: model:ir.actions.act_window,name:idea.action_idea_category +#: model:ir.ui.menu,name:idea.menu_idea_category +msgid "Categories" +msgstr "" + +#. module: idea +#: view:idea.category:0 +msgid "Parent Category" +msgstr "પિતૃ શ્રેણીમાં" + +#. module: idea +#: field:idea.idea,open_date:0 +msgid "Open date" +msgstr "" + +#. module: idea +#: field:idea.idea,vote_ids:0 +#: model:ir.actions.act_window,name:idea.action_idea_post_vote +msgid "Vote" +msgstr "મત" + +#. module: idea +#: model:ir.actions.act_window,name:idea.action_idea_vote_stat +#: model:ir.ui.menu,name:idea.menu_idea_vote_stat +msgid "Vote Statistics" +msgstr "મત ની આંકડાકીય માહિતી" + +#. module: idea +#: field:idea.idea,vote_limit:0 +msgid "Maximum Vote per User" +msgstr "મહત્તમ વપરાશકર્તા માટે મત" + +#. module: idea +#: view:idea.vote.stat:0 +msgid "vote_stat of ideas" +msgstr "" + +#. module: idea +#: field:idea.comment,content:0 +#: view:idea.idea:0 +#: view:idea.post.vote:0 +#: field:idea.vote,comment:0 +#: model:ir.model,name:idea.model_idea_comment +msgid "Comment" +msgstr "ટીકા" + +#. module: idea +#: selection:report.vote,month:0 +msgid "September" +msgstr "" + +#. module: idea +#: selection:report.vote,month:0 +msgid "December" +msgstr "" + +#. module: idea +#: view:report.vote:0 +#: field:report.vote,month:0 +msgid "Month" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +#: model:ir.actions.act_window,name:idea.action_idea_idea_categ_open +#: model:ir.actions.act_window,name:idea.action_idea_idea_open +msgid "Open Ideas" +msgstr "" + +#. module: idea +#: view:idea.category:0 +#: field:idea.category,name:0 +#: view:idea.idea:0 +#: field:idea.idea,category_id:0 +#: view:report.vote:0 +#: field:report.vote,category_id:0 +msgid "Category" +msgstr "" + +#. module: idea +#: selection:idea.idea,my_vote:0 +#: selection:idea.post.vote,vote:0 +#: selection:idea.vote,score:0 +#: selection:idea.vote.stat,score:0 +msgid "Very Good" +msgstr "" + +#. module: idea +#: selection:idea.idea,state:0 +#: selection:report.vote,idea_state:0 +msgid "Opened" +msgstr "" + +#. module: idea +#: model:ir.actions.act_window,name:idea.action_idea_vote +msgid "Idea's Votes" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "By Idea Category" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "New Idea" +msgstr "નવો વિચાર" + +#. module: idea +#: model:ir.actions.act_window,name:idea.action_idea_category_tree +#: model:ir.ui.menu,name:idea.menu_idea_category_tree +msgid "Ideas by Categories" +msgstr "" + +#. module: idea +#: selection:report.vote,idea_state:0 +msgid "Draft" +msgstr "" + +#. module: idea +#: selection:report.vote,month:0 +msgid "August" +msgstr "" + +#. module: idea +#: selection:idea.idea,my_vote:0 +#: selection:idea.post.vote,vote:0 +#: selection:idea.vote,score:0 +#: selection:idea.vote.stat,score:0 +msgid "Normal" +msgstr "" + +#. module: idea +#: selection:report.vote,month:0 +msgid "June" +msgstr "" + +#. module: idea +#: field:report.vote,creater_id:0 +#: field:report.vote,user_id:0 +msgid "User Name" +msgstr "" + +#. module: idea +#: model:ir.model,name:idea.model_idea_vote_stat +msgid "Idea Votes Statistics" +msgstr "" + +#. module: idea +#: field:idea.comment,user_id:0 +#: view:idea.vote:0 +#: field:idea.vote,user_id:0 +#: view:report.vote:0 +msgid "User" +msgstr "" + +#. module: idea +#: field:idea.vote,date:0 +msgid "Date" +msgstr "" + +#. module: idea +#: selection:report.vote,month:0 +msgid "November" +msgstr "" + +#. module: idea +#: field:idea.idea,my_vote:0 +msgid "My Vote" +msgstr "" + +#. module: idea +#: selection:report.vote,month:0 +msgid "October" +msgstr "" + +#. module: idea +#: field:idea.comment,create_date:0 +#: field:idea.idea,created_date:0 +msgid "Creation date" +msgstr "" + +#. module: idea +#: selection:report.vote,month:0 +msgid "January" +msgstr "" + +#. module: idea +#: model:ir.model,name:idea.model_idea_idea +msgid "idea.idea" +msgstr "" + +#. module: idea +#: field:idea.category,summary:0 +msgid "Summary" +msgstr "" + +#. module: idea +#: field:idea.idea,name:0 +msgid "Idea Summary" +msgstr "" + +#. module: idea +#: view:idea.post.vote:0 +msgid "Post" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "History" +msgstr "" + +#. module: idea +#: field:report.vote,date:0 +msgid "Date Order" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +#: field:idea.idea,user_id:0 +#: view:report.vote:0 +msgid "Creator" +msgstr "" + +#. module: idea +#: view:idea.post.vote:0 +#: model:ir.ui.menu,name:idea.menu_give_vote +msgid "Give Vote" +msgstr "" + +#. module: idea +#: help:idea.idea,vote_limit:0 +msgid "Set to one if you require only one Vote per user" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "By Creators" +msgstr "" + +#. module: idea +#: view:idea.post.vote:0 +msgid "Cancel" +msgstr "" + +#. module: idea +#: view:idea.select:0 +msgid "Close" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "Open" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +#: view:report.vote:0 +msgid "In Progress" +msgstr "" + +#. module: idea +#: view:report.vote:0 +msgid "Idea Vote Analysis" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +#: model:ir.actions.act_window,name:idea.action_idea_idea +#: model:ir.ui.menu,name:idea.menu_idea_idea +#: model:ir.ui.menu,name:idea.menu_ideas +#: model:ir.ui.menu,name:idea.menu_ideas1 +msgid "Ideas" +msgstr "" + +#. module: idea +#: model:ir.model,name:idea.model_idea_post_vote +msgid "Post vote" +msgstr "" + +#. module: idea +#: field:idea.vote.stat,score:0 +#: field:report.vote,score:0 +msgid "Score" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "Votes Statistics" +msgstr "" + +#. module: idea +#: view:idea.vote:0 +msgid "Comments:" +msgstr "" + +#. module: idea +#: view:idea.category:0 +#: field:idea.idea,description:0 +#: field:idea.post.vote,note:0 +msgid "Description" +msgstr "" + +#. module: idea +#: selection:report.vote,month:0 +msgid "May" +msgstr "" + +#. module: idea +#: selection:idea.idea,state:0 +#: view:report.vote:0 +msgid "Refused" +msgstr "" + +#. module: idea +#: view:idea.vote:0 +msgid "Vote Date" +msgstr "" + +#. module: idea +#: selection:report.vote,month:0 +msgid "February" +msgstr "" + +#. module: idea +#: field:idea.category,complete_name:0 +msgid "Name" +msgstr "" + +#. module: idea +#: field:idea.vote.stat,nbr:0 +msgid "Number of Votes" +msgstr "" + +#. module: idea +#: view:report.vote:0 +msgid "Month-1" +msgstr "" + +#. module: idea +#: selection:report.vote,month:0 +msgid "April" +msgstr "" + +#. module: idea +#: field:idea.idea,count_comments:0 +msgid "Count of comments" +msgstr "" + +#. module: idea +#: field:idea.vote,score:0 +msgid "Vote Status" +msgstr "" + +#. module: idea +#: view:report.vote:0 +msgid "Idea Vote created in current year" +msgstr "" + +#. module: idea +#: field:idea.idea,vote_avg:0 +msgid "Average Score" +msgstr "" + +#. module: idea +#: constraint:idea.category:0 +msgid "Error ! You cannot create recursive categories." +msgstr "" + +#. module: idea +#: field:idea.comment,idea_id:0 +#: field:idea.select,idea_id:0 +#: view:idea.vote:0 +#: field:idea.vote,idea_id:0 +#: field:idea.vote.stat,idea_id:0 +#: model:ir.ui.menu,name:idea.menu_idea_reporting +#: view:report.vote:0 +#: field:report.vote,idea_id:0 +msgid "Idea" +msgstr "" + +#. module: idea +#: view:idea.idea:0 +msgid "Accept" +msgstr "" + +#. module: idea +#: field:idea.post.vote,vote:0 +msgid "Post Vote" +msgstr "" + +#. module: idea +#: view:report.vote:0 +#: field:report.vote,year:0 +msgid "Year" +msgstr "" + +#. module: idea +#: code:addons/idea/idea.py:274 +#, python-format +msgid "You can not vote on a Draft/Accepted/Cancelled ideas." +msgstr "" + +#. module: idea +#: view:idea.select:0 +msgid "Select Idea for Vote" +msgstr "" diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml index 3d541f8aa8e..0e9fb40020f 100644 --- a/addons/idea/idea_view.xml +++ b/addons/idea/idea_view.xml @@ -183,15 +183,12 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="idea_open" string="Open" states="draft"/> <button name="idea_close" string="Accept" states="open"/> <button name="idea_cancel" string="Refuse" states="open" /> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,close"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,open,close"/> + </header> <sheet string="New Idea" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="name" select="1" /> @@ -267,10 +264,6 @@ <field name="count_comments"/> <field name="count_votes"/> <field name="state"/> - <button name="idea_open" string="Open" states="draft" icon="terp-gtk-go-back-rtl"/> - <button name="%(idea.action_idea_post_vote)d" icon="gtk-execute" type="action" states="open" string="Submit Vote"/> - <button name="idea_close" string="Accept" states="open" icon="gtk-jump-to"/> - <button name="idea_cancel" string="Refuse" states="open" icon="gtk-cancel"/> </tree> </field> </record> diff --git a/addons/import_base/i18n/sv.po b/addons/import_base/i18n/sv.po new file mode 100644 index 00000000000..b42d17376c0 --- /dev/null +++ b/addons/import_base/i18n/sv.po @@ -0,0 +1,103 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-06-04 10:28+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n" +"X-Generator: Launchpad (build 15353)\n" + +#. module: import_base +#: code:addons/import_base/import_framework.py:434 +#, python-format +msgid "Import failed due to an unexpected error" +msgstr "Import misslyckades på grund av oväntat fel" + +#. module: import_base +#: code:addons/import_base/import_framework.py:461 +#, python-format +msgid "started at %s and finished at %s \n" +msgstr "Startade på %s och avslutade på %s \n" + +#. module: import_base +#: code:addons/import_base/import_framework.py:448 +#, python-format +msgid "Import of your data finished at %s" +msgstr "Importen av dina data avslutades på %s" + +#. module: import_base +#: code:addons/import_base/import_framework.py:463 +#, python-format +msgid "" +"but failed, in consequence no data were imported to keep database " +"consistency \n" +" error : \n" +msgstr "" +"men misslyckades, till följd att inga data importerades för att hålla " +"databasen konsistent\n" +" fel: \n" + +#. module: import_base +#: code:addons/import_base/import_framework.py:477 +#, python-format +msgid "" +"The import of data \n" +" instance name : %s \n" +msgstr "" + +#. module: import_base +#: code:addons/import_base/import_framework.py:470 +#, python-format +msgid "%s has been successfully imported from %s %s, %s \n" +msgstr "" + +#. module: import_base +#: code:addons/import_base/import_framework.py:447 +#, python-format +msgid "Data Import failed at %s due to an unexpected error" +msgstr "" + +#. module: import_base +#: code:addons/import_base/import_framework.py:436 +#, python-format +msgid "Import finished, notification email sended" +msgstr "" + +#. module: import_base +#: code:addons/import_base/import_framework.py:190 +#, python-format +msgid "%s is not a valid model name" +msgstr "" + +#. module: import_base +#: model:ir.ui.menu,name:import_base.menu_import_crm +msgid "Import" +msgstr "Import" + +#. module: import_base +#: code:addons/import_base/import_framework.py:467 +#, python-format +msgid "with no warning" +msgstr "utan varning" + +#. module: import_base +#: code:addons/import_base/import_framework.py:469 +#, python-format +msgid "with warning : %s" +msgstr "med varning: %s" + +#. module: import_base +#: code:addons/import_base/import_framework.py:191 +#, python-format +msgid " fields imported : " +msgstr " importerade fält: " diff --git a/addons/knowledge/res_config_view.xml b/addons/knowledge/res_config_view.xml index 6816a9da3a1..d1debeaf562 100644 --- a/addons/knowledge/res_config_view.xml +++ b/addons/knowledge/res_config_view.xml @@ -7,10 +7,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Configure Knowledge" layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Apply" type="object" name="execute"/> <button string="Cancel" special="cancel"/> - </div> + </header> <sheet layout="auto"> <separator string="Wiki" colspan="4"/> <field name="module_wiki_faq"/> diff --git a/addons/l10n_multilang/i18n/ro.po b/addons/l10n_multilang/i18n/ro.po new file mode 100644 index 00000000000..e820dde38de --- /dev/null +++ b/addons/l10n_multilang/i18n/ro.po @@ -0,0 +1,178 @@ +# Romanian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 01:06+0000\n" +"PO-Revision-Date: 2012-05-30 20:18+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Romanian <ro@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-05-31 04:54+0000\n" +"X-Generator: Launchpad (build 15322)\n" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template +msgid "Template for Fiscal Position" +msgstr "Sablon pentru Pozitia Fiscala" + +#. module: l10n_multilang +#: sql_constraint:account.account:0 +msgid "The code of the account must be unique per company !" +msgstr "Codul sumei trebuie sa fie unic per companie !" + +#. module: l10n_multilang +#: constraint:account.account.template:0 +msgid "" +"Configuration Error!\n" +"You can not define children to an account with internal type different of " +"\"View\"! " +msgstr "" +"Eroare de Configurare!\n" +"Nu puteti defini conturi secundare intr-un cont cu tipul intern diferit de " +"\"Vizualizare\"! " + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_analytic_journal +msgid "Analytic Journal" +msgstr "Jurnal Analitic" + +#. module: l10n_multilang +#: constraint:account.account.template:0 +msgid "Error ! You can not create recursive account templates." +msgstr "Eroare! Nu puteti crea sabloane de cont recurente." + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_journal +msgid "Journal" +msgstr "Jurnal" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_chart_template +msgid "Templates for Account Chart" +msgstr "Sabloane pentru Planul de Conturi" + +#. module: l10n_multilang +#: sql_constraint:account.tax:0 +msgid "The description must be unique per company!" +msgstr "Descrierea trebuie sa fie unica pe companie!" + +#. module: l10n_multilang +#: constraint:account.tax.code.template:0 +msgid "Error ! You can not create recursive Tax Codes." +msgstr "Eroare ! Nu puteti crea Coduri fiscale recursive." + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_tax_template +msgid "account.tax.template" +msgstr "sablon.taxa.cont" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_tax +msgid "account.tax" +msgstr "taxa.cont" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_account +msgid "Account" +msgstr "Cont" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts +msgid "wizard.multi.charts.accounts" +msgstr "wizard.plan.de.conturi.multi" + +#. module: l10n_multilang +#: constraint:account.journal:0 +msgid "" +"Configuration error! The currency chosen should be shared by the default " +"accounts too." +msgstr "" +"Eroare de configurare! Moneda aleasa trebuie sa fie comuna si conturilor " +"predefinite." + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_account_template +msgid "Templates for Accounts" +msgstr "Sabloane pentru Conturi" + +#. module: l10n_multilang +#: help:account.chart.template,spoken_languages:0 +msgid "" +"State here the languages for which the translations of templates could be " +"loaded at the time of installation of this localization module and copied in " +"the final object when generating them from templates. You must provide the " +"language codes separated by ';'" +msgstr "" +"Aici introduceti limbile pentru care pot fi incarcate traducerile " +"sabloanelor in momentul instalarii acestui modul de localizare si pot fi " +"copiate in obiectul final atunci cand le generati din sabloane. Trebuie sa " +"introduceti codurile limbilor separat cu ';'" + +#. module: l10n_multilang +#: constraint:account.account:0 +msgid "Error ! You can not create recursive accounts." +msgstr "Eroare ! Nu puteti crea conturi recursive." + +#. module: l10n_multilang +#: constraint:account.account:0 +msgid "" +"Configuration Error! \n" +"You can not select an account type with a deferral method different of " +"\"Unreconciled\" for accounts with internal type \"Payable/Receivable\"! " +msgstr "" +"Eroare de configurare! \n" +"Nu puteti selecta un tip de cont cu o metoda de amanare diferita de " +"\"Nereconciliat\" pentru conturile cu tipul intern \"Plati/Incasari\"! " + +#. module: l10n_multilang +#: sql_constraint:account.journal:0 +msgid "The name of the journal must be unique per company !" +msgstr "Numele jurnalului trebuie sa fie unic per companie !" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_analytic_account +msgid "Analytic Account" +msgstr "Cont Analitic" + +#. module: l10n_multilang +#: sql_constraint:account.journal:0 +msgid "The code of the journal must be unique per company !" +msgstr "Codul jurnalului trebuie sa fie unic per companie !" + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_fiscal_position +msgid "Fiscal Position" +msgstr "Pozitie fiscala" + +#. module: l10n_multilang +#: constraint:account.account:0 +msgid "" +"Configuration Error! \n" +"You can not define children to an account with internal type different of " +"\"View\"! " +msgstr "" +"Eroare de configurare! \n" +"Nu puteti defini conturi subordonate unui cont cu tipul intern diferit de " +"\"Vizualizare\"! " + +#. module: l10n_multilang +#: constraint:account.analytic.account:0 +msgid "Error! You can not create recursive analytic accounts." +msgstr "Eroare! Nu puteti crea conturi analitice recursive." + +#. module: l10n_multilang +#: model:ir.model,name:l10n_multilang.model_account_tax_code_template +msgid "Tax Code Template" +msgstr "Sablon Cod Taxa" + +#. module: l10n_multilang +#: field:account.chart.template,spoken_languages:0 +msgid "Spoken Languages" +msgstr "Limbi Vorbite" diff --git a/addons/l10n_syscohada/i18n/ro.po b/addons/l10n_syscohada/i18n/ro.po new file mode 100644 index 00000000000..4bd661a2da3 --- /dev/null +++ b/addons/l10n_syscohada/i18n/ro.po @@ -0,0 +1,123 @@ +# Romanian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-12-23 09:56+0000\n" +"PO-Revision-Date: 2012-05-30 20:37+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Romanian <ro@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-05-31 04:54+0000\n" +"X-Generator: Launchpad (build 15322)\n" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_receivable +msgid "Receivable" +msgstr "Incasari" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_stocks +msgid "Actif circulant" +msgstr "Active" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_commitment +msgid "Engagements" +msgstr "Angajamente" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_expense +msgid "Expense" +msgstr "Cheltuiala" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_stock +msgid "Stocks" +msgstr "Actiuni" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_provision +msgid "Provisions" +msgstr "Clauze" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_income +msgid "Income" +msgstr "Venit" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_tax +msgid "Tax" +msgstr "Taxa" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_cash +msgid "Cash" +msgstr "Numerar" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_immobilisations +msgid "Immobilisations" +msgstr "Imobiliare" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_special +msgid "Comptes spéciaux" +msgstr "Conturi speciale" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_payable +msgid "Payable" +msgstr "Plati" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_asset +msgid "Asset" +msgstr "Active" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_view +msgid "View" +msgstr "Vizualizare" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_equity +msgid "Equity" +msgstr "Capital" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_cloture +msgid "Cloture" +msgstr "Inchidere" + +#. module: l10n_syscohada +#: model:account.account.type,name:l10n_syscohada.account_type_dettes +msgid "Dettes long terme" +msgstr "Datorii pe termen lung" + +#. module: l10n_syscohada +#: model:ir.actions.todo,note:l10n_syscohada.config_call_account_template_syscohada +msgid "" +"Generate Chart of Accounts from a SYSCOHADA Chart Template. You will be " +"asked to pass the name of the company, the chart template to follow, the no. " +"of digits to generate the code for your accounts and Bank account, currency " +"to create Journals. Thus,the pure copy of chart Template is generated.\n" +"\tThis is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" +"Creati Planul de Conturi dintr-un Sablon SYSCOHADA de planuri. Vi se va cere " +"sa introduceti numele companiei, sablonul de planuri de urmat, numarul de " +"cifre pentru crearea codului pentru conturile d-voastra si Contul Bancar, " +"moneda pentru a crea Jurnalele. Astfel, este creata copia originala a " +"Sablonului de planuri.\n" +"\t Acesta este acelasi wizard care ruleaza din Managementul " +"Financiar/Configurare/Contabilitate Financiara/Conturi Financiare/Creati " +"Planul de Conturi dintr-un Sablon de planuri." diff --git a/addons/lunch/lunch_view.xml b/addons/lunch/lunch_view.xml index adfccfc2041..57360829e19 100644 --- a/addons/lunch/lunch_view.xml +++ b/addons/lunch/lunch_view.xml @@ -24,14 +24,11 @@ <field name="model">lunch.order</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="%(action_lunch_order_confirm)d" string="Confirm Order" type="action" attrs="{'invisible':[('state','=','confirmed')]}"/> <button name="%(action_lunch_order_cancel)d" string="Cancel Order" type="action"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirmed"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,confirmed"/> + </header> <sheet string="Order" layout="auto"> <field name="user_id" select="1"/> <field name="date" select="1"/> @@ -60,16 +57,6 @@ <field name="category"/> <field name="price" sum="Total price"/> <field name="state"/> - <button colspan="1" - name="%(action_lunch_order_cancel)d" - string="Cancel Order" - type="action" states="confirmed" - icon="gtk-cancel" /> - <button colspan="1" - name="%(action_lunch_order_confirm)d" - string="Confirm Order" - type="action" states="draft" - icon="terp-gtk-go-back-rtl" /> </tree> </field> </record> @@ -340,7 +327,7 @@ <field name="type">tree</field> <field name="arch" type="xml"> <tree string="Box Amount by User"> - <field name="date" invisible="1"/> + <field name="date" invisible="1"/> <field name="year" invisible="1"/> <field name="day" invisible="1"/> <field name="month" invisible="1"/> diff --git a/addons/mail/doc/index.rst.inc b/addons/mail/doc/index.rst.inc index 4679cd56fdf..822d855d5b4 100644 --- a/addons/mail/doc/index.rst.inc +++ b/addons/mail/doc/index.rst.inc @@ -9,3 +9,4 @@ Mail Module documentation topics mail_thread mail_openchatter_howto mail_needaction_howto + mail_partner diff --git a/addons/mail/doc/mail_openchatter_howto.rst b/addons/mail/doc/mail_openchatter_howto.rst index fe28017be83..7ca52348d99 100644 --- a/addons/mail/doc/mail_openchatter_howto.rst +++ b/addons/mail/doc/mail_openchatter_howto.rst @@ -38,7 +38,7 @@ Make your module inheriting from the ``mail.thread`` class. # inherit from mail.thread allows the use of OpenChatter _inherit = ['mail.thread'] -Use the thread viewer widget inside your form view by using the ThreadView widget on the message_ids_social field inherited from mail.thread. +Use the thread viewer widget inside your form view by using the ThreadView widget on the message_ids field inherited from mail.thread. :: @@ -50,7 +50,7 @@ Use the thread viewer widget inside your form view by using the ThreadView widge <field name="arch" type="xml"> <form> [...] - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </form> </field> </record> diff --git a/addons/mail/doc/mail_partner.rst b/addons/mail/doc/mail_partner.rst new file mode 100644 index 00000000000..a99246395d7 --- /dev/null +++ b/addons/mail/doc/mail_partner.rst @@ -0,0 +1,10 @@ +What is shown +============== + - for every module which are related to partner show apporopriate message in the partner view like opportunities, sale orders and invoices. + + +How it is done +=============== + - _inherit = 'mail.thread' + + - Override def message_load_ids(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[], context=None) search by the partner diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml index 7258db2d9dc..67b2efc84a0 100644 --- a/addons/mail/mail_group_view.xml +++ b/addons/mail/mail_group_view.xml @@ -69,7 +69,8 @@ <label string="This group is visible by non members" colspan="2"/> </group> </group> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1" + options='{"thread_level": 1}'/> </form> </field> </record> diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index edc07817b26..6a6978d544c 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -61,29 +61,29 @@ class mail_thread(osv.osv): ''' _name = 'mail.thread' _description = 'Email Thread' - + def _get_message_ids(self, cr, uid, ids, name, arg, context=None): res = {} for id in ids: res[id] = self.message_load_ids(cr, uid, [id], context=context) return res - - # OpenChatter: message_ids_social is a dummy field that should not be used + + # OpenChatter: message_ids is a dummy field that should not be used _columns = { - 'message_ids_social': fields.function(_get_message_ids, method=True, + 'message_ids': fields.function(_get_message_ids, method=True, type='one2many', obj='mail.message', string='Temp messages', _fields_id = 'res_id'), } #------------------------------------------------------ # Automatic subscription when creating/reading #------------------------------------------------------ - + def create(self, cr, uid, vals, context=None): """Automatically subscribe the creator""" thread_id = super(mail_thread, self).create(cr, uid, vals, context=context); self.message_subscribe(cr, uid, [thread_id], [uid], context=context) return thread_id; - + def write(self, cr, uid, ids, vals, context=None): """Automatically subscribe the writer""" if isinstance(ids, (int, long)): @@ -92,7 +92,7 @@ class mail_thread(osv.osv): if write_res: self.message_subscribe(cr, uid, ids, [uid], context=context) return write_res; - + def unlink(self, cr, uid, ids, context=None): """Override unlink, to automatically delete - subscriptions @@ -111,13 +111,13 @@ class mail_thread(osv.osv): # delete notifications msg_to_del_ids = msg_obj.search(cr, uid, [('model', '=', self._name), ('res_id', 'in', ids)], context=context) msg_obj.unlink(cr, uid, msg_to_del_ids, context=context) - + return super(mail_thread, self).unlink(cr, uid, ids, context=context) - + #------------------------------------------------------ # Generic message api #------------------------------------------------------ - + def message_create(self, cr, uid, thread_id, vals, context=None): """OpenSocial: wrapper of mail.message create method - creates the mail.message @@ -131,15 +131,15 @@ class mail_thread(osv.osv): notification_obj = self.pool.get('mail.notification') res_users_obj = self.pool.get('res.users') body = vals.get('body_html', '') if vals.get('subtype', 'plain') == 'html' else vals.get('body_text', '') - + # automatically subscribe the writer of the message if vals['user_id']: self.message_subscribe(cr, uid, [thread_id], [vals['user_id']], context=context) - + # get users that will get a notification pushed user_to_push_ids = self.message_create_get_notification_user_ids(cr, uid, [thread_id], vals, context=context) user_to_push_from_parse_ids = self.message_parse_users(cr, uid, [thread_id], body, context=context) - + # set email_from and email_to for comments and notifications if vals.get('type', False) and vals['type'] == 'comment' or vals['type'] == 'notification': current_user = res_users_obj.browse(cr, uid, [uid], context=context)[0] @@ -159,24 +159,24 @@ class mail_thread(osv.osv): if email_to: vals['email_to'] = email_to vals['state'] = 'outgoing' - + # create message msg_id = message_obj.create(cr, uid, vals, context=context) - + # special: if install mode, do not push demo data if context.get('install_mode', False): return True - + # push to users for id in user_to_push_ids: notification_obj.create(cr, uid, {'user_id': id, 'message_id': msg_id}, context=context) - + return msg_id - + def message_create_get_notification_user_ids(self, cr, uid, thread_ids, new_msg_vals, context=None): if context is None: context = {} - + notif_user_ids = [] body = new_msg_vals.get('body_html', '') if new_msg_vals.get('subtype', 'plain') == 'html' else new_msg_vals.get('body_text', '') for thread_id in thread_ids: @@ -193,7 +193,7 @@ class mail_thread(osv.osv): parent_notif_ids = notif_obj.search(cr, uid, [('message_id', '=', new_msg_vals.get('parent_id'))], context=context) parent_notifs = notif_obj.read(cr, uid, parent_notif_ids, context=context) notif_user_ids += [parent_notif['user_id'][0] for parent_notif in parent_notifs] - + # remove duplicate entries notif_user_ids = list(set(notif_user_ids)) return notif_user_ids @@ -214,7 +214,7 @@ class mail_thread(osv.osv): for model_name in self.pool.obj_list(): model = self.pool.get(model_name) if 'mail.thread' in getattr(model, '_inherit', []): - ret_dict[model_name] = model._description + ret_dict[model_name] = model._description return ret_dict def message_append(self, cr, uid, threads, subject, body_text=None, body_html=None, @@ -259,7 +259,7 @@ class mail_thread(osv.osv): to determine the model of the thread to update (instead of the current model). """ - if context is None: + if context is None: context = {} if attachments is None: attachments = {} @@ -327,7 +327,7 @@ class mail_thread(osv.osv): 'headers': headers, 'reply_to': reply_to, 'original': original, }) - + new_msg_ids.append(self.message_create(cr, uid, thread.id, data, context=context)) return new_msg_ids @@ -388,7 +388,7 @@ class mail_thread(osv.osv): if (cur_iter > max_iter): _logger.warning("Possible infinite loop in _message_add_ancestor_ids. Note that this algorithm is intended to check for cycle in message graph.") return child_ids - + def message_load_ids(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[], context=None): """ OpenChatter feature: return thread messages ids. It searches in mail.messages where res_id = ids, (res_)model = current model. @@ -406,13 +406,15 @@ class mail_thread(osv.osv): limit=limit, offset=offset, context=context) if (ascent): msg_ids = self._message_add_ancestor_ids(cr, uid, ids, msg_ids, root_ids, context=context) return msg_ids - + def message_load(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[], context=None): """ OpenChatter feature: return thread messages """ msg_ids = self.message_load_ids(cr, uid, ids, limit, offset, domain, ascent, root_ids, context=context) - return self.pool.get('mail.message').read(cr, uid, msg_ids, context=context) - + msgs = self.pool.get('mail.message').read(cr, uid, msg_ids, context=context) + msgs = sorted(msgs, key=lambda d: (-d['id'])) + return msgs + def get_pushed_messages(self, cr, uid, ids, limit=100, offset=0, msg_search_domain=[], ascent=False, root_ids=[], context=None): """ OpenChatter: wall: get messages to display (=pushed notifications) :param domain: domain to add to the search; especially child_of @@ -440,7 +442,7 @@ class mail_thread(osv.osv): if (ascent): msg_ids = self._message_add_ancestor_ids(cr, uid, ids, msg_ids, root_ids, context=context) msgs = msg_obj.read(cr, uid, msg_ids, context=context) return msgs - + #------------------------------------------------------ # Email specific #------------------------------------------------------ @@ -532,7 +534,7 @@ class mail_thread(osv.osv): def message_new(self, cr, uid, msg_dict, custom_values=None, context=None): """Called by ``message_process`` when a new message is received - for a given thread model, if the message did not belong to + for a given thread model, if the message did not belong to an existing thread. The default behavior is to create a new record of the corresponding model (based on some very basic info extracted from the message), @@ -658,7 +660,7 @@ class mail_thread(osv.osv): The keys used in the returned dict are meant to map to usual names for relationships towards a partner and one of its addresses. - + :param email: email address for which a partner should be searched for. :rtype: dict @@ -683,7 +685,7 @@ class mail_thread(osv.osv): #------------------------------------------------------ # Note specific #------------------------------------------------------ - + def message_broadcast(self, cr, uid, ids, subject=None, body=None, parent_id=False, type='notification', subtype='html', context=None): if context is None: context = {} @@ -708,11 +710,11 @@ class mail_thread(osv.osv): for msg_id in msg_ids: notification_obj.create(cr, uid, {'user_id': user.id, 'message_id': msg_id}, context=context) return True - + def log(self, cr, uid, id, message, secondary=False, context=None): _logger.warning("log() is deprecated. Please use OpenChatter notification system instead of the res.log mechanism.") self.message_append_note(cr, uid, [id], 'res.log', message, context=context) - + def message_append_note(self, cr, uid, ids, subject=None, body=None, parent_id=False, type='notification', subtype='html', context=None): if subject is None: if type == 'notification': @@ -728,29 +730,29 @@ class mail_thread(osv.osv): body_html = body body_text = body return self.message_append(cr, uid, ids, subject, body_html=body_html, body_text=body_text, parent_id=parent_id, type=type, subtype=subtype, context=context) - + #------------------------------------------------------ # Subscription mechanism #------------------------------------------------------ - + def message_get_subscribers_ids(self, cr, uid, ids, context=None): subscr_obj = self.pool.get('mail.subscription') subscr_ids = subscr_obj.search(cr, uid, ['&', ('res_model', '=', self._name), ('res_id', 'in', ids)], context=context) subs = subscr_obj.read(cr, uid, subscr_ids, context=context) return [sub['user_id'][0] for sub in subs] - + def message_get_subscribers(self, cr, uid, ids, context=None): user_ids = self.message_get_subscribers_ids(cr, uid, ids, context=context) users = self.pool.get('res.users').read(cr, uid, user_ids, fields=['id', 'name', 'avatar'], context=context) return users - + def message_is_subscriber(self, cr, uid, ids, user_id = None, context=None): users = self.message_get_subscribers(cr, uid, ids, context=context) sub_user_id = uid if user_id is None else user_id if sub_user_id in [user['id'] for user in users]: return True return False - + def message_subscribe(self, cr, uid, ids, user_ids = None, context=None): subscription_obj = self.pool.get('mail.subscription') to_subscribe_uids = [uid] if user_ids is None else user_ids @@ -774,7 +776,7 @@ class mail_thread(osv.osv): #------------------------------------------------------ # Notification API #------------------------------------------------------ - + def message_remove_pushed_notifications(self, cr, uid, ids, msg_ids, remove_childs=True, context=None): if context is None: context = {} diff --git a/addons/mail/res_partner.py b/addons/mail/res_partner.py index 637922ff75c..922f3e4b6ed 100644 --- a/addons/mail/res_partner.py +++ b/addons/mail/res_partner.py @@ -24,11 +24,32 @@ from osv import fields class res_partner(osv.osv): """ Inherits partner and adds CRM information in the partner form """ - _inherit = 'res.partner' + _name = "res.partner" + _inherit = ['res.partner', 'mail.thread'] _columns = { 'emails': fields.one2many('mail.message', 'partner_id', 'Emails', readonly=True, domain=[('email_from','!=',False)]), } + def message_load_ids(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[False], context=None): + """ Override of message_load_ids + partner discussion page : + - messages posted on res.partner, partner_id = partner.id + - messages directly sent to partner + """ + msg_obj = self.pool.get('mail.message') + msg_ids = [] + partner_ids=[] + for partner in self.browse(cr, uid, ids, context=context): + msg_ids += msg_obj.search(cr, uid, [ ('res_id', '=', partner.id), ('model', '=' ,self._name)] + domain, + limit=limit, offset=offset, context=context) + if self._name=='res.partner': + partner_ids=msg_obj.search(cr, uid, [ ('partner_id', 'in', ids)] + domain, + limit=limit, offset=offset, context=context) + if partner_ids : + msg_ids+= partner_ids + if (ascent): msg_ids = self._message_add_ancestor_ids(cr, uid, ids, msg_ids, root_ids, context=context) + return msg_ids + res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mail/res_partner_view.xml b/addons/mail/res_partner_view.xml index 7fc001e4fd4..eb97b725fff 100644 --- a/addons/mail/res_partner_view.xml +++ b/addons/mail/res_partner_view.xml @@ -23,6 +23,10 @@ <page string="History" position="inside"> <field name="emails" colspan="4" nolabel="1"/> </page> + <xpath expr="/form/notebook" position="after"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1" + options='{"thread_level": 1}'/> + </xpath> </field> </record> diff --git a/addons/mail/res_users_view.xml b/addons/mail/res_users_view.xml index 0411bd418dc..7df155b13c0 100644 --- a/addons/mail/res_users_view.xml +++ b/addons/mail/res_users_view.xml @@ -28,7 +28,7 @@ </field> <xpath expr="/form/sheet" position="after"> <div class="oe_form_bottom"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </xpath> </data> diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index bed8faea5e0..1ec6fe32eb5 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -476,10 +476,12 @@ openerp.mail = function(session) { // QWeb template to use when rendering the object template: 'RecordThread', - init: function() { + init: function() { this._super.apply(this, arguments); this.see_subscribers = true; this.thread = null; + this.params = this.get_definition_options(); + this.params.thread_level = this.params.thread_level || 0; // datasets this.ds = new session.web.DataSet(this, this.view.model); this.ds_users = new session.web.DataSet(this, 'res.users'); @@ -520,12 +522,8 @@ openerp.mail = function(session) { // create and render Thread widget this.$element.find('div.oe_mail_recthread_left').empty(); if (this.thread) this.thread.destroy(); - // hack: for groups and users - if (this.view.model == 'mail.group') thread_level = 1; - if (this.view.model == 'res.users') thread_level = 1; - else thread_level = 0; this.thread = new mail.Thread(this, {'res_model': this.view.model, 'res_id': this.view.datarecord.id, 'uid': this.session.uid, - 'thread_level': thread_level, 'show_post_comment': true, 'limit': 15}); + 'thread_level': this.params.thread_level, 'show_post_comment': true, 'limit': 15}); var thread_done = this.thread.appendTo(this.$element.find('div.oe_mail_recthread_left')); return fetch_sub_done && thread_done; }, diff --git a/addons/marketing/res_config_view.xml b/addons/marketing/res_config_view.xml index b7230aa65a7..7a36956a9dc 100644 --- a/addons/marketing/res_config_view.xml +++ b/addons/marketing/res_config_view.xml @@ -7,10 +7,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Configure Marketing" layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Apply" type="object" name="execute"/> <button string="Cancel" special="cancel"/> - </div> + </header> <sheet layout="auto"> <separator string="Campaigns" colspan="4"/> <field name="module_marketing_campaign"/> diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml index 4f401b386ef..9be08469cf4 100644 --- a/addons/marketing_campaign/marketing_campaign_view.xml +++ b/addons/marketing_campaign/marketing_campaign_view.xml @@ -16,16 +16,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="state_running_set" string="Run" states="draft"/> <button name="state_done_set" string="Done" states="running"/> <button name="state_draft_set" string="Set to Draft" states="done,cancelled"/> <button name="state_cancel_set" string="Cancel" states="running"/> - <div class="oe_right"> - <field name="state" readonly="1" widget="statusbar" nolabel="1" statusbar_visible="draft,running,done"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" readonly="1" widget="statusbar" statusbar_visible="draft,running,done"/> + </header> <sheet string="Campaign" layout="auto"> <group colspan="4" col="6"> <group colspan="2" col="2"> @@ -140,16 +137,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="state_running_set" string="Run" states="draft"/> <button name="state_done_set" string="Close" states="running"/> <button name="state_draft_set" string="Set to Draft" states="done,cancelled"/> <button name="state_cancel_set" string="Cancel" states="running"/> - <div class="oe_right"> - <field name="state" readonly="1" nolabel="1" widget="statusbar" statusbar_visible="draft,running,done"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" readonly="1" widget="statusbar" statusbar_visible="draft,running,done"/> + </header> <sheet string="Segments" layout="auto"> <group colspan="2" col="2"> <separator string="Segment" colspan="4"/> @@ -189,7 +183,6 @@ <field name="campaign_id"/> <field name="date_run"/> <field name="sync_last_date"/> - <button string="Synchronize Manually" states="running" name="synchroniz" icon="terp-project" type="object"/> <field name="state" /> </tree> </field> @@ -365,15 +358,12 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Process" states="todo" name="process" type="object"/> <button string="Reset" states="exception,cancelled" name="button_draft" type="object"/> <button string="Cancel" states="todo,exception" name="button_cancel" type="object"/> - <div class="oe_right"> - <field name="state" readonly="True" nolabel="1" widget="statusbar" statusbar_visible="todo,done" statusbar_colors='{"exception":"red"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" readonly="True" widget="statusbar" statusbar_visible="todo,done" statusbar_colors='{"exception":"red"}'/> + </header> <sheet string="Marketing Campaign Activities" layout="auto"> <group colspan="4" col="6"> <group colspan="2" col="2"> diff --git a/addons/mrp/i18n/ja.po b/addons/mrp/i18n/ja.po index c02c6b81d2b..b4316fe0196 100644 --- a/addons/mrp/i18n/ja.po +++ b/addons/mrp/i18n/ja.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-02-08 00:49+0000\n" -"PO-Revision-Date: 2012-05-30 01:25+0000\n" +"PO-Revision-Date: 2012-06-02 04:49+0000\n" "Last-Translator: Akira Hiyama <Unknown>\n" "Language-Team: Japanese <ja@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-05-30 05:21+0000\n" -"X-Generator: Launchpad (build 15316)\n" +"X-Launchpad-Export-Date: 2012-06-03 04:47+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: mrp #: view:mrp.routing.workcenter:0 msgid "Routing Work Centers" -msgstr "配送ワークセンタ" +msgstr "経路作業センタ" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_production_action @@ -42,7 +42,7 @@ msgstr "システムが構成部品を探す場所" #. module: mrp #: field:mrp.production,workcenter_lines:0 msgid "Work Centers Utilisation" -msgstr "ワークセンタ活用" +msgstr "作業センタ活用" #. module: mrp #: model:product.template,name:mrp.product_sugar_product_template @@ -52,12 +52,12 @@ msgstr "砂糖" #. module: mrp #: report:mrp.production.order:0 msgid "No. Of Cycles" -msgstr "周期数" +msgstr "サイクル数" #. module: mrp #: field:mrp.routing.workcenter,cycle_nbr:0 msgid "Number of Cycles" -msgstr "周期数" +msgstr "サイクル数" #. module: mrp #: model:product.uom.categ,name:mrp.product_uom_categ_fluid @@ -102,7 +102,7 @@ msgstr "経路" #. module: mrp #: field:mrp.workcenter,product_id:0 msgid "Work Center Product" -msgstr "ワークセンタ製品" +msgstr "作業センタ製品" #. module: mrp #: view:mrp.bom:0 @@ -124,7 +124,7 @@ msgstr "生産する" msgid "" "Number of iterations this work center has to do in the specified operation " "of the routing." -msgstr "このワークセンタは配送の特定の操作の中で反復回数実行される必要があります。" +msgstr "この作業センタは経路の特定の操作の中で反復回数実行される必要があります。" #. module: mrp #: view:mrp.bom:0 @@ -153,7 +153,7 @@ msgstr "購入のため" #. module: mrp #: model:process.transition,note:mrp.process_transition_purchaseprocure0 msgid "The system launches automatically a RFQ to the preferred supplier." -msgstr "システムは優先仕入先にRFQ(見積依頼書)を自動的に起こします。" +msgstr "システムは優先仕入先にRFQ(見積依頼)を自動的に起こします。" #. module: mrp #: view:mrp.production:0 @@ -233,7 +233,7 @@ msgstr "レポート" #. module: mrp #: field:mrp.workcenter,costs_cycle_account_id:0 msgid "Cycle Account" -msgstr "循環アカウント" +msgstr "サイクルアカウント" #. module: mrp #: code:addons/mrp/report/price.py:130 @@ -327,7 +327,7 @@ msgstr "エラー。再帰的な部品表を作ることはできません。" #. module: mrp #: model:ir.model,name:mrp.model_mrp_routing_workcenter msgid "Work Center Usage" -msgstr "ワークセンタの用途" +msgstr "作業センタの用途" #. module: mrp #: model:process.transition,name:mrp.process_transition_procurestockableproduct0 @@ -343,7 +343,7 @@ msgstr "デフォルト単位" #: sql_constraint:mrp.production:0 #: sql_constraint:stock.picking:0 msgid "Reference must be unique per Company!" -msgstr "参照は会社内で固有でなければいけません" +msgstr "参照は会社ごとに固有でなければいけません。" #. module: mrp #: code:addons/mrp/report/price.py:139 @@ -387,9 +387,9 @@ msgid "" "sales person creates a sales order, he can relate it to several properties " "and OpenERP will automatically select the BoM to use according the needs." msgstr "" -"同じ製品で異なった構築方法を持つ場合、OpenERPのプロパティは製品製造のための正しい部品表を選択するのに使用されます。それぞれの部品表には幾つかのプロ" -"パティを割り当てることができます。販売員が販売オーダーを作成した時、彼はそれを幾つかのプロパティに関連付けることができ、そして、OpenERPは要求によっ" -"て使用する部品表を自動的に選択します。" +"同じ製品で異なった構築方法を持つ場合、OpenERPの属性は製品製造のための正しい部品表を選択するのに使用されます。それぞれの部品表には幾つかの属性を割り" +"当てることができます。販売員が販売オーダーを作成した時、彼はそれを幾つかの属性に関連付けることができ、そして、OpenERPは要求によって使用する部品表を" +"自動的に選択します。" #. module: mrp #: help:mrp.production,picking_id:0 @@ -460,12 +460,12 @@ msgstr "会社名は固有でなければいけません。" msgid "" "Define specific property groups that can be assigned to the properties of " "your bill of materials." -msgstr "部品表のプロパティに割り当てることができる特定のプロパティグループを定義して下さい。" +msgstr "部品表の属性に割り当てることができる特定の属性グループを定義して下さい。" #. module: mrp #: help:mrp.workcenter,costs_cycle:0 msgid "Specify Cost of Work Center per cycle." -msgstr "周期当りのワークセンタのコストを指定して下さい。" +msgstr "サイクル当りの作業センタのコストを指定して下さい。" #. module: mrp #: model:process.transition,name:mrp.process_transition_bom0 @@ -493,7 +493,7 @@ msgstr "製造オーダーの自動分析会計行を望む場合は、これの #. module: mrp #: field:mrp.production.workcenter.line,cycle:0 msgid "Nbr of cycles" -msgstr "周期の数" +msgstr "サイクル数" #. module: mrp #: model:process.node,note:mrp.process_node_orderrfq0 @@ -506,7 +506,7 @@ msgstr "見積要求" msgid "" "The Bill of Material is linked to a routing, i.e. the succession of work " "centers." -msgstr "部品表は経路、すなわちワークセンタの連携とリンクしています。" +msgstr "部品表は経路、すなわち作業センタの連携とリンクしています。" #. module: mrp #: constraint:product.product:0 @@ -532,7 +532,7 @@ msgstr "数量の変更" #. module: mrp #: model:ir.actions.act_window,name:mrp.action_configure_workcenter msgid "Configure your work centers" -msgstr "ワークセンタの設定" +msgstr "作業センタの設定" #. module: mrp #: view:mrp.production:0 @@ -569,7 +569,7 @@ msgstr "単位当りの仕入価格" #: help:mrp.routing.workcenter,sequence:0 msgid "" "Gives the sequence order when displaying a list of routing Work Centers." -msgstr "ワークセンタの経路情報のリストを表示する時の順序を与えて下さい。" +msgstr "作業センタの経路のリストを表示する時の順序を与えて下さい。" #. module: mrp #: constraint:stock.move:0 @@ -591,7 +591,7 @@ msgstr "製品の単位" #. module: mrp #: selection:mrp.production,state:0 msgid "Picking Exception" -msgstr "集荷の例外" +msgstr "例外の集荷" #. module: mrp #: field:mrp.bom,bom_lines:0 @@ -620,14 +620,14 @@ msgstr "材料の経路" #: field:mrp.production,move_lines2:0 #: report:mrp.production.order:0 msgid "Consumed Products" -msgstr "消費者製品" +msgstr "消費製品" #. module: mrp #: model:ir.actions.act_window,name:mrp.action_mrp_workcenter_load_wizard #: model:ir.model,name:mrp.model_mrp_workcenter_load #: model:ir.model,name:mrp.model_report_workcenter_load msgid "Work Center Load" -msgstr "ワークセンタ作業" +msgstr "作業センタの負荷" #. module: mrp #: code:addons/mrp/procurement.py:43 @@ -669,13 +669,13 @@ msgid "" "operations and to plan future loads on work centers based on production " "plannification." msgstr "" -"完成した製品を生産するための操作のリスト(ワークセンタのリスト)。経路情報は操作の間のワークセンタのコストを計算し、生産計画化を基本とするワークセンタの将" -"来の負荷を計画するために主に利用されます。" +"完成した製品を生産するための操作のリスト(作業センタのリスト)。経路は操作の間の作業センタのコストを計算し、生産計画化を基本とする作業センタの将来の負荷を" +"計画するために主に利用されます。" #. module: mrp #: help:mrp.workcenter,time_cycle:0 msgid "Time in hours for doing one cycle." -msgstr "1つの周期のための時間" +msgstr "1サイクルの時間(時)" #. module: mrp #: constraint:mrp.bom:0 @@ -760,7 +760,7 @@ msgstr "印刷日" #: model:process.node,name:mrp.process_node_orderrfq0 #: model:process.node,name:mrp.process_node_rfq0 msgid "RFQ" -msgstr "見積要求" +msgstr "見積依頼" #. module: mrp #: model:process.transition,name:mrp.process_transition_producttostockrules0 @@ -775,7 +775,7 @@ msgstr "部分" #. module: mrp #: report:mrp.production.order:0 msgid "WorkCenter" -msgstr "ワークセンタ" +msgstr "作業センタ" #. module: mrp #: model:process.transition,note:mrp.process_transition_procureserviceproduct0 @@ -805,8 +805,8 @@ msgid "" "resource leave are not taken into account in the time computation of the " "work center." msgstr "" -"ワークセンタは製造ユニットを作成し管理します。それらは容量と計画予測のユニットとして考えられる作業員と機械により構成されます。労働時間とリソースの休暇はワ" -"ークセンタの時間計算で考慮されないことに留意して下さい。" +"作業センタは製造ユニットを作成し管理します。それらは容量と計画予測のユニットとして考えられる作業員と機械により構成されます。労働時間とリソースの休暇は作業" +"センタの時間計算で考慮されないことに留意して下さい。" #. module: mrp #: model:ir.model,name:mrp.model_mrp_production @@ -822,7 +822,7 @@ msgstr "原材料の調達" #: view:mrp.production:0 #: field:mrp.production,cycle_total:0 msgid "Total Cycles" -msgstr "合計周期" +msgstr "合計サイクル" #. module: mrp #: selection:mrp.production,state:0 @@ -866,7 +866,7 @@ msgstr "製造オーダーはキャンセルできません。" #. module: mrp #: field:report.workcenter.load,cycle:0 msgid "Nbr of cycle" -msgstr "周期の数" +msgstr "サイクル数" #. module: mrp #: model:ir.model,name:mrp.model_res_company @@ -916,7 +916,7 @@ msgstr "在庫可能製品" #: code:addons/mrp/report/price.py:130 #, python-format msgid "Work Center name" -msgstr "ワークセンタ名" +msgstr "作業センタ名" #. module: mrp #: field:mrp.routing,code:0 @@ -932,7 +932,7 @@ msgstr "時間数" #: view:mrp.property:0 #: view:mrp.property.group:0 msgid "Property Group" -msgstr "プロパティグループ" +msgstr "属性グループ" #. module: mrp #: view:mrp.production:0 @@ -970,7 +970,7 @@ msgstr "アクティブIDが存在しません。" msgid "" "If the service has a 'Buy' supply method, this creates a RFQ, a " "subcontracting demand for instance." -msgstr "サービスが供給方法として購入の場合、これは、例えば下請けへの見積要求を作成します。" +msgstr "サービスが供給方法として購入の場合、これは、例えば下請けへの見積依頼を作成します。" #. module: mrp #: field:mrp.production,move_prod_id:0 @@ -1001,27 +1001,27 @@ msgstr "生産の開始" #: model:ir.actions.act_window,name:mrp.open_board_manufacturing #: model:ir.ui.menu,name:mrp.menu_board_manufacturing msgid "Production Dashboard" -msgstr "" +msgstr "生産のダッシュボード" #. module: mrp #: model:res.groups,name:mrp.group_mrp_manager msgid "Manager" -msgstr "" +msgstr "マネジャ" #. module: mrp #: view:mrp.production:0 msgid "Source Loc." -msgstr "" +msgstr "元の場所" #. module: mrp #: field:mrp.bom,position:0 msgid "Internal Reference" -msgstr "" +msgstr "内部参照" #. module: mrp #: model:process.node,note:mrp.process_node_billofmaterial0 msgid "Product's structure" -msgstr "" +msgstr "製品の構成" #. module: mrp #: field:mrp.bom,name:0 @@ -1030,22 +1030,22 @@ msgstr "" #: field:mrp.routing,name:0 #: field:mrp.routing.workcenter,name:0 msgid "Name" -msgstr "" +msgstr "名前" #. module: mrp #: field:mrp.product.produce,mode:0 msgid "Mode" -msgstr "" +msgstr "モード" #. module: mrp #: report:bom.structure:0 msgid "]" -msgstr "" +msgstr "]" #. module: mrp #: field:mrp.workcenter.load,measure_unit:0 msgid "Amount measuring unit" -msgstr "" +msgstr "単位量" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_production_action_planning @@ -1057,28 +1057,30 @@ msgid "" "materials have been defined, OpenERP is capable of automatically deciding on " "the manufacturing route depending on the needs of the company." msgstr "" +"製造オーダーは実行される必要がある操作と各生産段階で原材料の用途について説明しています。仕様(部品表)は原材料の要求と完成製品のための製造オーダーの必要と" +"される処理のために使われます。部品表が定義されると、OpenERPは会社のニーズに依存した製造経路を自動的に決める能力を持っています。" #. module: mrp #: model:ir.actions.todo.category,name:mrp.category_mrp_config msgid "MRP Management" -msgstr "" +msgstr "MRP管理" #. module: mrp #: help:mrp.workcenter,costs_hour:0 msgid "Specify Cost of Work Center per hour." -msgstr "" +msgstr "時間当りの作業センタコストを指定して下さい。" #. module: mrp #: help:mrp.workcenter,capacity_per_cycle:0 msgid "" "Number of operations this Work Center can do in parallel. If this Work " "Center represents a team of 5 workers, the capacity per cycle is 5." -msgstr "" +msgstr "この作業センタが並列に処理できる操作の数。この作業センタが5人の作業員のチームを表すなら、サイクル当りの容量は5となります。" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_production_action3 msgid "Manufacturing Orders in Progress" -msgstr "" +msgstr "製造オーダーは進行中です。" #. module: mrp #: view:mrp.bom:0 @@ -1087,52 +1089,52 @@ msgstr "" #: view:mrp.routing:0 #: view:mrp.workcenter:0 msgid "Group By..." -msgstr "" +msgstr "グループ化…" #. module: mrp #: code:addons/mrp/report/price.py:130 #, python-format msgid "Cycles Cost" -msgstr "" +msgstr "サイクルコスト" #. module: mrp #: selection:mrp.workcenter.load,measure_unit:0 msgid "Amount in cycles" -msgstr "" +msgstr "サイクルの量" #. module: mrp #: field:mrp.production,location_dest_id:0 msgid "Finished Products Location" -msgstr "" +msgstr "完成した製品の場所" #. module: mrp #: model:ir.ui.menu,name:mrp.menu_pm_resources_config msgid "Resources" -msgstr "" +msgstr "リソース" #. module: mrp #: help:mrp.routing.workcenter,hour_nbr:0 msgid "" "Time in hours for this Work Center to achieve the operation of the specified " "routing." -msgstr "" +msgstr "特定経路の操作を達成するためのこの作業センタの時間(時)" #. module: mrp #: field:mrp.workcenter,costs_journal_id:0 msgid "Analytic Journal" -msgstr "" +msgstr "分析仕訳帳" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_workcenter_action #: model:ir.ui.menu,name:mrp.menu_view_resource_search_mrp #: field:mrp.routing,workcenter_lines:0 msgid "Work Centers" -msgstr "" +msgstr "作業センタ" #. module: mrp #: selection:mrp.workcenter.load,time_unit:0 msgid "Per week" -msgstr "" +msgstr "週毎" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_routing_action @@ -1142,31 +1144,32 @@ msgid "" "They are attached to bills of materials that will define the required raw " "materials." msgstr "" +"経路は製品の生産のための作業センタの中で行わなければならない製造操作の作成と管理を行います。それには要求された原材料を定義した部品表が添付されます。" #. module: mrp #: model:ir.actions.act_window,name:mrp.product_form_config_action msgid "Create or Import Products" -msgstr "" +msgstr "製品を作成またはインポート" #. module: mrp #: field:report.workcenter.load,hour:0 msgid "Nbr of hour" -msgstr "" +msgstr "時間数" #. module: mrp #: view:mrp.routing:0 msgid "Work Center Operations" -msgstr "" +msgstr "作業センタ操作" #. module: mrp #: view:mrp.routing:0 msgid "Notes" -msgstr "" +msgstr "注記" #. module: mrp #: view:mrp.production:0 msgid "Manufacturing Orders which are ready to start production." -msgstr "" +msgstr "生産開始準備ができた製造オーダーです。" #. module: mrp #: model:ir.model,name:mrp.model_mrp_bom @@ -1174,22 +1177,22 @@ msgstr "" #: field:mrp.production,bom_id:0 #: model:process.node,name:mrp.process_node_billofmaterial0 msgid "Bill of Material" -msgstr "" +msgstr "部品表" #. module: mrp #: view:mrp.workcenter.load:0 msgid "Select time unit" -msgstr "" +msgstr "時間の単位の選択" #. module: mrp #: view:report.workcenter.load:0 msgid "Work Center load" -msgstr "" +msgstr "作業センタの負荷" #. module: mrp #: help:mrp.production,location_dest_id:0 msgid "Location where the system will stock the finished products." -msgstr "" +msgstr "システムが完成した製品を在庫する場所です。" #. module: mrp #: help:mrp.routing.workcenter,routing_id:0 @@ -1198,6 +1201,8 @@ msgid "" "Routing is indicated then,the third tab of a production order (Work Centers) " "will be automatically pre-completed." msgstr "" +"経路は全ての作業センタが長さとサイクルがどのくらい使われるかを示します。経路が示される場合、生産オーダー(作業センタ)の第3のタブは自動的に事前完了します" +"。" #. module: mrp #: model:process.transition,note:mrp.process_transition_producttostockrules0 @@ -1205,7 +1210,7 @@ msgid "" "The Minimum Stock Rule is an automatic procurement rule based on a mini and " "maxi quantity. It's available in the Inventory management menu and " "configured by product." -msgstr "" +msgstr "最小在庫ルールは最小と最大の量に基づき自動調達するルールです。これは在庫管理メニューで利用可能で製品ごとに設定できます。" #. module: mrp #: code:addons/mrp/report/price.py:187 @@ -1216,65 +1221,65 @@ msgstr "%s %s の構成部品コスト" #. module: mrp #: selection:mrp.workcenter.load,time_unit:0 msgid "Day by day" -msgstr "" +msgstr "日々" #. module: mrp #: view:mrp.bom:0 msgid "Revisions" -msgstr "" +msgstr "改訂" #. module: mrp #: model:product.template,name:mrp.product_shirt_product_template msgid "Shirt" -msgstr "" +msgstr "シャツ" #. module: mrp #: field:mrp.production,priority:0 msgid "Priority" -msgstr "" +msgstr "優先度" #. module: mrp #: model:ir.model,name:mrp.model_stock_picking msgid "Picking List" -msgstr "" +msgstr "集荷リスト" #. module: mrp #: code:addons/mrp/mrp.py:1000 #, python-format msgid "Manufacturing order '%s' is scheduled for the %s." -msgstr "" +msgstr "製造オーダー %s は %s に予定されています。" #. module: mrp #: report:mrp.production.order:0 msgid "Production Order N° :" -msgstr "" +msgstr "s生産オーダー番号:" #. module: mrp #: code:addons/mrp/mrp.py:647 #, python-format msgid "Manufacturing order '%s' is ready to produce." -msgstr "" +msgstr "製造オーダー %s は生産する準備ができています。" #. module: mrp #: model:ir.model,name:mrp.model_mrp_production_product_line msgid "Production Scheduled Product" -msgstr "" +msgstr "生産予定済製品" #. module: mrp #: code:addons/mrp/report/price.py:204 #, python-format msgid "Work Cost of %s %s" -msgstr "" +msgstr "作業コスト %s %s" #. module: mrp #: help:res.company,manufacturing_lead:0 msgid "Security days for each manufacturing operation." -msgstr "" +msgstr "各製造操作の安全保障の日" #. module: mrp #: model:product.template,name:mrp.product_water_product_template msgid "Water" -msgstr "" +msgstr "水" #. module: mrp #: view:mrp.bom:0 @@ -1286,12 +1291,12 @@ msgstr "構成部品名" #: model:process.transition,name:mrp.process_transition_servicemts0 #: model:process.transition,name:mrp.process_transition_stockmts0 msgid "Make to Stock" -msgstr "" +msgstr "在庫の作成" #. module: mrp #: constraint:mrp.production:0 msgid "Order quantity cannot be negative or zero!" -msgstr "" +msgstr "オーダー数量は負または0にはできません。" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_bom_form_action @@ -1302,24 +1307,26 @@ msgid "" "product needs. You can either create a bill of materials to define specific " "production steps or define a single multi-level bill of materials." msgstr "" +"マスター部品表は完成品を作るために使用される必要な原材料のリストを作成し管理します。OpenERPは製品のニーズに応じて製造オーダーを自動的に提案するため" +"にそれらの部品表を使用します。特定の生産手順の定義や、単一の多層部品表の定義のために部品表を作成できます。" #. module: mrp #: model:process.transition,note:mrp.process_transition_stockrfq0 msgid "" "In case the Supply method of the product is Buy, the system creates a " "purchase order." -msgstr "" +msgstr "製品の供給方法が購入の場合、システムは仕入オーダーを作成します。" #. module: mrp #: model:ir.model,name:mrp.model_procurement_order msgid "Procurement" -msgstr "" +msgstr "調達" #. module: mrp #: model:ir.actions.act_window,name:mrp.action_view_mrp_product_price_wizard #: view:mrp.product_price:0 msgid "Product Cost Structure" -msgstr "" +msgstr "製品のコスト構造" #. module: mrp #: code:addons/mrp/report/price.py:139 @@ -1330,80 +1337,80 @@ msgstr "構成部品仕入先" #. module: mrp #: view:mrp.production:0 msgid "Production Work Centers" -msgstr "" +msgstr "生産作業センタ" #. module: mrp #: view:mrp.production:0 msgid "Split in production lots" -msgstr "" +msgstr "生産ロットに分割" #. module: mrp #: view:mrp.workcenter:0 msgid "Search for mrp workcenter" -msgstr "" +msgstr "MRP作業センタの検索" #. module: mrp #: view:mrp.bom:0 msgid "BoM Structure" -msgstr "" +msgstr "部品表の構造" #. module: mrp #: field:mrp.production,date_start:0 msgid "Start Date" -msgstr "" +msgstr "開始日" #. module: mrp #: field:mrp.workcenter,costs_hour_account_id:0 msgid "Hour Account" -msgstr "" +msgstr "時間アカウント" #. module: mrp #: view:mrp.production:0 msgid "Destination Loc." -msgstr "" +msgstr "目的地" #. module: mrp #: field:mrp.bom,method:0 msgid "Method" -msgstr "" +msgstr "方法" #. module: mrp #: view:mrp.production:0 msgid "Pending" -msgstr "" +msgstr "保留中" #. module: mrp #: code:addons/mrp/mrp.py:603 #, python-format msgid "Couldn't find a bill of material for this product." -msgstr "" +msgstr "この製品のための部品表がありません。" #. module: mrp #: field:mrp.bom,active:0 #: field:mrp.routing,active:0 msgid "Active" -msgstr "" +msgstr "アクティブ" #. module: mrp #: model:process.node,name:mrp.process_node_procureproducts0 msgid "Procure Products" -msgstr "" +msgstr "調達製品" #. module: mrp #: view:report.workcenter.load:0 msgid "Work Center Loads" -msgstr "" +msgstr "作業センタの負荷" #. module: mrp #: model:ir.model,name:mrp.model_mrp_bom_revision msgid "Bill of Material Revision" -msgstr "" +msgstr "部品表の改訂" #. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." -msgstr "" +msgstr "この生産オーダー要求を生成したドキュメントへの参照" #. module: mrp #: sql_constraint:mrp.bom:0 @@ -1412,56 +1419,58 @@ msgid "" "You should install the mrp_subproduct module if you want to manage extra " "products on BoMs !" msgstr "" +"全製品の数量は0より大きい必要があります。\n" +"部品表上で追加の製品を管理したい場合は、mrp_subproductモジュールをインストールする必要があります。" #. module: mrp #: view:mrp.production:0 msgid "Extra Information" -msgstr "" +msgstr "追加情報" #. module: mrp #: model:ir.model,name:mrp.model_change_production_qty msgid "Change Quantity of Products" -msgstr "" +msgstr "製品の数量変更" #. module: mrp #: model:process.node,note:mrp.process_node_productionorder0 msgid "Drives the procurement orders for raw material." -msgstr "" +msgstr "原材料の調達オーダーを起こす" #. module: mrp #: field:mrp.workcenter,costs_general_account_id:0 msgid "General Account" -msgstr "" +msgstr "一般アカウント" #. module: mrp #: report:mrp.production.order:0 msgid "SO Number" -msgstr "" +msgstr "受注番号" #. module: mrp #: selection:mrp.production,state:0 msgid "Done" -msgstr "" +msgstr "完了" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_production_action4 msgid "Manufacturing Orders Waiting Products" -msgstr "" +msgstr "製造オーダー待ち製品" #. module: mrp #: selection:mrp.production,priority:0 msgid "Not urgent" -msgstr "" +msgstr "緊急外" #. module: mrp #: field:mrp.production,user_id:0 msgid "Responsible" -msgstr "" +msgstr "担当" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_production_action2 msgid "Manufacturing Orders To Start" -msgstr "" +msgstr "製造オーダー開始" #. module: mrp #: model:ir.model,name:mrp.model_mrp_workcenter @@ -1470,12 +1479,12 @@ msgstr "" #: view:mrp.workcenter:0 #: field:report.workcenter.load,workcenter_id:0 msgid "Work Center" -msgstr "" +msgstr "作業センタ" #. module: mrp #: field:mrp.workcenter,capacity_per_cycle:0 msgid "Capacity per Cycle" -msgstr "" +msgstr "サイクル当りの容量" #. module: mrp #: model:ir.model,name:mrp.model_product_product @@ -1486,76 +1495,76 @@ msgstr "" #: report:mrp.production.order:0 #: field:mrp.production.product.line,product_id:0 msgid "Product" -msgstr "" +msgstr "製品" #. module: mrp #: view:mrp.production:0 #: field:mrp.production,hour_total:0 msgid "Total Hours" -msgstr "" +msgstr "合計時間" #. module: mrp #: field:mrp.production,location_src_id:0 msgid "Raw Materials Location" -msgstr "" +msgstr "原材料の場所" #. module: mrp #: view:mrp.product_price:0 msgid "Print Cost Structure of Product." -msgstr "" +msgstr "製品のコスト構造の印刷" #. module: mrp #: field:mrp.bom,product_uos:0 #: field:mrp.production.product.line,product_uos:0 msgid "Product UOS" -msgstr "" +msgstr "製品販売単位" #. module: mrp #: view:mrp.production:0 msgid "Consume Products" -msgstr "" +msgstr "消費製品" #. module: mrp #: model:ir.actions.act_window,name:mrp.act_mrp_product_produce #: view:mrp.product.produce:0 #: view:mrp.production:0 msgid "Produce" -msgstr "" +msgstr "生産" #. module: mrp #: model:process.node,name:mrp.process_node_stock0 #: model:process.transition,name:mrp.process_transition_servicemto0 #: model:process.transition,name:mrp.process_transition_stockproduct0 msgid "Make to Order" -msgstr "" +msgstr "オーダーの作成" #. module: mrp #: code:addons/mrp/mrp.py:358 #, python-format msgid "Copy" -msgstr "" +msgstr "コピー" #. module: mrp #: help:mrp.workcenter,note:0 msgid "" "Description of the Work Center. Explain here what's a cycle according to " "this Work Center." -msgstr "" +msgstr "作業センタの説明。この作業センタは何がサイクルであるかをここで説明して下さい。" #. module: mrp #: view:mrp.production.lot.line:0 msgid "Production Products" -msgstr "" +msgstr "生産製品" #. module: mrp #: field:mrp.production,date_finished:0 msgid "End Date" -msgstr "" +msgstr "終了日" #. module: mrp #: field:mrp.workcenter,resource_id:0 msgid "Resource" -msgstr "" +msgstr "リソース" #. module: mrp #: help:mrp.bom,date_start:0 @@ -1566,12 +1575,12 @@ msgstr "部品表や構成部品の妥当性。常に有効な場合は空のま #. module: mrp #: field:mrp.production,product_uos:0 msgid "Product UoS" -msgstr "" +msgstr "製品販売単位" #. module: mrp #: selection:mrp.production,priority:0 msgid "Very Urgent" -msgstr "" +msgstr "非常に緊急" #. module: mrp #: help:mrp.bom,routing_id:0 @@ -1581,37 +1590,39 @@ msgid "" "operations and to plan future loads on work centers based on production " "planning." msgstr "" +"完成した製品を生産するための操作のリスト(作業センタのリスト)。経路は操作の間の作業センタのコストを計算し、生産計画化を基本とする作業センタの将来の負荷を" +"計画するために主に利用されます。" #. module: mrp #: view:change.production.qty:0 msgid "Approve" -msgstr "" +msgstr "承認" #. module: mrp #: view:mrp.property.group:0 msgid "Properties categories" -msgstr "" +msgstr "属性の分類" #. module: mrp #: help:mrp.production.workcenter.line,sequence:0 msgid "Gives the sequence order when displaying a list of work orders." -msgstr "" +msgstr "作業オーダーリストの表示の際には並びの順序を与えて下さい。" #. module: mrp #: report:mrp.production.order:0 msgid "Source Location" -msgstr "" +msgstr "元の場所" #. module: mrp #: view:mrp.production:0 #: view:mrp.production.product.line:0 msgid "Scheduled Products" -msgstr "" +msgstr "予定済製品" #. module: mrp #: view:mrp.production.lot.line:0 msgid "Production Products Consommation" -msgstr "" +msgstr "生産製品の消費" #. module: mrp #: model:ir.actions.act_window,name:mrp.act_product_manufacturing_open @@ -1621,7 +1632,7 @@ msgstr "" #: model:ir.ui.menu,name:mrp.menu_mrp_production_order_action #: view:mrp.production:0 msgid "Manufacturing Orders" -msgstr "" +msgstr "製造オーダー" #. module: mrp #: help:mrp.product.produce,mode:0 @@ -1632,34 +1643,36 @@ msgid "" "the quantity selected and it will finish the production order when total " "ordered quantities are produced." msgstr "" +"消費のみモードでは、製品は選択した量だけを消費します。\n" +"消費と生産モードでは、製品を選択した数量生産すると同様に消費もされます。そして合計注文量が生産された時に生産オーダーが終わります。" #. module: mrp #: view:mrp.production:0 #: report:mrp.production.order:0 msgid "Work Orders" -msgstr "" +msgstr "作業オーダー" #. module: mrp #: field:mrp.workcenter,costs_cycle:0 msgid "Cost per cycle" -msgstr "" +msgstr "サイクル当りのコスト" #. module: mrp #: model:process.node,name:mrp.process_node_serviceproduct0 #: model:process.node,name:mrp.process_node_serviceproduct1 msgid "Service" -msgstr "" +msgstr "サービス" #. module: mrp #: selection:mrp.production,state:0 msgid "Cancelled" -msgstr "" +msgstr "キャンセル済" #. module: mrp #: help:mrp.bom,product_uom:0 msgid "" "UoM (Unit of Measure) is the unit of measurement for the inventory control" -msgstr "" +msgstr "UOMは在庫管理のための単位です。" #. module: mrp #: code:addons/mrp/mrp.py:734 @@ -1668,6 +1681,8 @@ msgid "" "You are going to consume total %s quantities of \"%s\".\n" "But you can only consume up to total %s quantities." msgstr "" +"合計 %s のうち %s を消費しようとしています。\n" +"しかし、あなたは合計 %s の量までのみ使用することができます。" #. module: mrp #: model:process.transition,note:mrp.process_transition_bom0 @@ -1684,17 +1699,17 @@ msgstr "部品表は製品を分解したものである。構成部品(それ #: field:mrp.routing.workcenter,company_id:0 #: view:mrp.workcenter:0 msgid "Company" -msgstr "" +msgstr "会社" #. module: mrp #: selection:mrp.workcenter.load,measure_unit:0 msgid "Amount in hours" -msgstr "" +msgstr "時間の量" #. module: mrp #: field:mrp.workcenter,time_cycle:0 msgid "Time for 1 cycle (hour)" -msgstr "" +msgstr "サイクル当りの時間(時)" #. module: mrp #: model:ir.actions.report.xml,name:mrp.report_mrp_production_report @@ -1703,22 +1718,22 @@ msgstr "" #: model:process.node,name:mrp.process_node_production0 #: model:process.node,name:mrp.process_node_productionorder0 msgid "Production Order" -msgstr "" +msgstr "生産オーダー" #. module: mrp #: model:process.node,note:mrp.process_node_productminimumstockrule0 msgid "Automatic procurement rule" -msgstr "" +msgstr "自動調達ルール" #. module: mrp #: view:mrp.production:0 msgid "Compute Data" -msgstr "" +msgstr "データ計算" #. module: mrp #: field:mrp.production,product_uos_qty:0 msgid "Product UoS Qty" -msgstr "" +msgstr "製品販売単位数量" #. module: mrp #: code:addons/mrp/report/price.py:139 @@ -1731,33 +1746,33 @@ msgstr "構成部品" #: report:bom.structure:0 #: model:ir.actions.report.xml,name:mrp.report_bom_structure msgid "BOM Structure" -msgstr "" +msgstr "部品表構造" #. module: mrp #: field:mrp.bom,date_stop:0 msgid "Valid Until" -msgstr "" +msgstr "失効日" #. module: mrp #: field:mrp.bom,date_start:0 msgid "Valid From" -msgstr "" +msgstr "発効日" #. module: mrp #: selection:mrp.bom,type:0 msgid "Normal BoM" -msgstr "" +msgstr "通常部品表" #. module: mrp #: field:res.company,manufacturing_lead:0 msgid "Manufacturing Lead Time" -msgstr "" +msgstr "製造リードタイム" #. module: mrp #: field:mrp.bom,product_uos_qty:0 #: field:mrp.production.product.line,product_uos_qty:0 msgid "Product UOS Qty" -msgstr "" +msgstr "製品販売単位数量" #. module: mrp #: model:ir.actions.act_window,help:mrp.action_report_in_out_picking_tree @@ -1770,44 +1785,44 @@ msgstr "週次在庫価値変動は生産活動、製品の受付と配達オー #. module: mrp #: view:mrp.product.produce:0 msgid "Confirm" -msgstr "" +msgstr "確認" #. module: mrp #: field:mrp.bom,product_efficiency:0 msgid "Manufacturing Efficiency" -msgstr "" +msgstr "製造の効率化" #. module: mrp #: constraint:res.company:0 msgid "Error! You can not create recursive companies." -msgstr "" +msgstr "エラー。再帰的な関係となる会社を作ることはできません。" #. module: mrp #: help:mrp.bom,active:0 msgid "" "If the active field is set to False, it will allow you to hide the bills of " "material without removing it." -msgstr "" +msgstr "アクティブな項目をFalseに設定すると、部品表は削除することなく非表示にできます。" #. module: mrp #: field:mrp.bom,product_rounding:0 msgid "Product Rounding" -msgstr "" +msgstr "製品の丸め" #. module: mrp #: selection:mrp.production,state:0 msgid "New" -msgstr "" +msgstr "新規" #. module: mrp #: selection:mrp.product.produce,mode:0 msgid "Consume Only" -msgstr "" +msgstr "消費のみ" #. module: mrp #: view:mrp.production:0 msgid "Recreate Picking" -msgstr "" +msgstr "集荷の再作成" #. module: mrp #: help:mrp.bom,type:0 @@ -1832,83 +1847,89 @@ msgid "" " When the production gets started then the state is set to 'In Production'.\n" " When the production is over, the state is set to 'Done'." msgstr "" +"生産オーダーが作成された時、状態はドラフトに設定されます。\n" +" オーダーが確認されると、状態は商品待ちに設定されます。\n" +" 何か例外がある場合は、状態は集荷例外に設定されます。\n" +"在庫が使用可能になった時に、状態は生産準備完了に設定されます。\n" +" 生産が開始されると、状態は生産中に設定されます。\n" +" 生産が終了すると、状態は完了に設定されます。" #. module: mrp #: selection:mrp.bom,method:0 msgid "On Order" -msgstr "" +msgstr "注文中" #. module: mrp #: model:ir.ui.menu,name:mrp.menu_mrp_configuration #: view:res.company:0 msgid "Configuration" -msgstr "" +msgstr "設定" #. module: mrp #: view:mrp.bom:0 msgid "Starting Date" -msgstr "" +msgstr "開始日" #. module: mrp #: field:mrp.workcenter,time_stop:0 msgid "Time after prod." -msgstr "" +msgstr "生産後の時間" #. module: mrp #: field:mrp.workcenter.load,time_unit:0 msgid "Type of period" -msgstr "" +msgstr "期間のタイプ" #. module: mrp #: view:mrp.production:0 msgid "Total Qty" -msgstr "" +msgstr "合計数量" #. module: mrp #: field:mrp.routing.workcenter,hour_nbr:0 msgid "Number of Hours" -msgstr "" +msgstr "時間数" #. module: mrp #: view:mrp.workcenter:0 msgid "Costing Information" -msgstr "" +msgstr "コスト情報" #. module: mrp #: model:process.node,name:mrp.process_node_purchaseprocure0 msgid "Procurement Orders" -msgstr "" +msgstr "調達オーダー" #. module: mrp #: help:mrp.bom,product_rounding:0 msgid "Rounding applied on the product quantity." -msgstr "" +msgstr "丸めは製品数量に適用されます。" #. module: mrp #: model:process.node,note:mrp.process_node_stock0 msgid "Assignment from Production or Purchase Order." -msgstr "" +msgstr "生産または仕入オーダーから割り当てて下さい。" #. module: mrp #: field:mrp.routing.workcenter,routing_id:0 msgid "Parent Routing" -msgstr "" +msgstr "親経路" #. module: mrp #: help:mrp.workcenter,time_start:0 msgid "Time in hours for the setup." -msgstr "" +msgstr "設定のための時間(時)" #. module: mrp #: model:product.template,name:mrp.product_orangejuice_product_template msgid "Orange Juice" -msgstr "" +msgstr "オレンジジュース" #. module: mrp #: field:mrp.bom.revision,bom_id:0 #: field:procurement.order,bom_id:0 msgid "BoM" -msgstr "" +msgstr "部品表" #. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout @@ -1920,71 +1941,71 @@ msgstr "在庫価値変動" #: model:process.node,note:mrp.process_node_mts0 #: model:process.node,note:mrp.process_node_servicemts0 msgid "Assignment from stock." -msgstr "" +msgstr "在庫から割り当てて下さい。" #. module: mrp #: selection:mrp.production,state:0 msgid "Waiting Goods" -msgstr "" +msgstr "待機商品" #. module: mrp #: field:mrp.bom.revision,last_indice:0 msgid "last indice" -msgstr "" +msgstr "最終インデックス" #. module: mrp #: field:mrp.bom,revision_ids:0 #: view:mrp.bom.revision:0 msgid "BoM Revisions" -msgstr "" +msgstr "部品表改訂" #. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" -msgstr "" +msgstr "週" #. module: mrp #: selection:mrp.production,priority:0 msgid "Normal" -msgstr "" +msgstr "通常" #. module: mrp #: view:mrp.production:0 msgid "Production started late" -msgstr "" +msgstr "生産が遅れて開始" #. module: mrp #: model:process.node,note:mrp.process_node_routing0 msgid "Manufacturing Steps." -msgstr "" +msgstr "製造工程" #. module: mrp #: code:addons/mrp/report/price.py:146 #: model:ir.actions.report.xml,name:mrp.report_cost_structure #, python-format msgid "Cost Structure" -msgstr "" +msgstr "コスト構造" #. module: mrp #: model:res.groups,name:mrp.group_mrp_user msgid "User" -msgstr "" +msgstr "ユーザ" #. module: mrp #: selection:mrp.product.produce,mode:0 msgid "Consume & Produce" -msgstr "" +msgstr "消費と生産" #. module: mrp #: field:mrp.bom,bom_id:0 msgid "Parent BoM" -msgstr "" +msgstr "親部品表" #. module: mrp #: report:bom.structure:0 msgid "BOM Ref" -msgstr "" +msgstr "部品表参照" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_bom_form_action2 @@ -1999,7 +2020,7 @@ msgstr "" #. module: mrp #: model:product.uom,name:mrp.product_uom_litre msgid "Litre" -msgstr "" +msgstr "リットル" #. module: mrp #: code:addons/mrp/mrp.py:762 @@ -2008,11 +2029,13 @@ msgid "" "You are going to produce total %s quantities of \"%s\".\n" "But you can only produce up to total %s quantities." msgstr "" +"合計 %s の %s を生産しようとしています。\n" +"しかし、あなたは合計 %s の量までのみ生産することができます。" #. module: mrp #: model:process.node,note:mrp.process_node_stockproduct0 msgid "Product type is Stockable or Consumable." -msgstr "" +msgstr "製品タイプは在庫可能または消費可能です。" #. module: mrp #: code:addons/mrp/mrp.py:603 @@ -2020,17 +2043,17 @@ msgstr "" #: code:addons/mrp/wizard/change_production_qty.py:83 #, python-format msgid "Error" -msgstr "" +msgstr "エラー" #. module: mrp #: selection:mrp.production,state:0 msgid "Production Started" -msgstr "" +msgstr "生産開始済" #. module: mrp #: field:mrp.product.produce,product_qty:0 msgid "Select Quantity" -msgstr "" +msgstr "数量選択" #. module: mrp #: model:ir.actions.act_window,name:mrp.act_product_product_2_mrp_bom @@ -2038,7 +2061,7 @@ msgstr "" #: model:ir.ui.menu,name:mrp.menu_mrp_bom_form_action #: field:product.product,bom_ids:0 msgid "Bill of Materials" -msgstr "" +msgstr "部品表" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_property_action @@ -2049,18 +2072,18 @@ msgstr "" #: view:procurement.order:0 #: field:procurement.order,property_ids:0 msgid "Properties" -msgstr "" +msgstr "属性" #. module: mrp #: view:mrp.routing.workcenter:0 #: view:mrp.workcenter:0 msgid "General Information" -msgstr "" +msgstr "一般情報" #. module: mrp #: view:mrp.production:0 msgid "Productions" -msgstr "" +msgstr "生産" #. module: mrp #: model:ir.model,name:mrp.model_mrp_routing @@ -2071,59 +2094,59 @@ msgstr "" #: view:mrp.routing:0 #: model:process.node,name:mrp.process_node_routing0 msgid "Routing" -msgstr "" +msgstr "経路" #. module: mrp #: field:mrp.production,date_planned:0 msgid "Scheduled date" -msgstr "" +msgstr "予定日" #. module: mrp #: constraint:stock.move:0 msgid "You must assign a production lot for this product" -msgstr "" +msgstr "この製品に生産ロットを割り当てて下さい。" #. module: mrp #: field:stock.move,production_id:0 msgid "Production" -msgstr "" +msgstr "生産" #. module: mrp #: model:ir.model,name:mrp.model_mrp_production_workcenter_line #: field:mrp.production.workcenter.line,name:0 msgid "Work Order" -msgstr "" +msgstr "作業オーダー" #. module: mrp #: view:board.board:0 msgid "Procurements in Exception" -msgstr "" +msgstr "調達の例外" #. module: mrp #: model:process.transition,name:mrp.process_transition_minimumstockprocure0 msgid "'Minimum stock rule' material" -msgstr "" +msgstr "材料の最小在庫ルール" #. module: mrp #: model:ir.model,name:mrp.model_mrp_product_price msgid "Product Price" -msgstr "" +msgstr "製品価格" #. module: mrp #: model:ir.model,name:mrp.model_stock_move_split msgid "Split in Production lots" -msgstr "" +msgstr "生産ロットに分割" #. module: mrp #: view:change.production.qty:0 msgid "Change Quantity" -msgstr "" +msgstr "数量変更" #. module: mrp #: view:change.production.qty:0 #: model:ir.actions.act_window,name:mrp.action_change_production_qty msgid "Change Product Qty" -msgstr "" +msgstr "製品数量変更" #. module: mrp #: view:mrp.bom.revision:0 @@ -2136,45 +2159,45 @@ msgstr "" #: view:mrp.workcenter:0 #: field:mrp.workcenter,note:0 msgid "Description" -msgstr "" +msgstr "説明" #. module: mrp #: view:board.board:0 msgid "Manufacturing board" -msgstr "" +msgstr "製造ボード" #. module: mrp #: field:mrp.production,date_planned_end:0 msgid "Scheduled End Date" -msgstr "" +msgstr "終了予定日" #. module: mrp #: model:process.node,note:mrp.process_node_procureproducts0 msgid "The way to procurement depends on the product type." -msgstr "" +msgstr "調達方法は製品タイプに依存します。" #. module: mrp #: model:ir.ui.menu,name:mrp.menu_mrp_manufacturing msgid "Manufacturing" -msgstr "" +msgstr "製造" #. module: mrp #: view:board.board:0 msgid "Next Production Orders" -msgstr "" +msgstr "次の生産オーダー" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_property_group_action #: model:ir.ui.menu,name:mrp.menu_mrp_property_group_action msgid "Property Groups" -msgstr "" +msgstr "属性グループ" #. module: mrp #: model:process.transition,note:mrp.process_transition_procurestockableproduct0 msgid "" "Depending on the chosen method to supply the stockable products, the " "procurement order creates a RFQ, a production order, ... " -msgstr "" +msgstr "在庫可能製品の供給をするために選択された方法にしたがって、調達オーダーは見積依頼や生産オーダーなどを作成します。 " #. module: mrp #: code:addons/mrp/mrp.py:874 @@ -2182,24 +2205,24 @@ msgstr "" #: code:addons/mrp/mrp.py:954 #, python-format msgid "PROD: %s" -msgstr "" +msgstr "生産:%s" #. module: mrp #: help:mrp.workcenter,time_stop:0 msgid "Time in hours for the cleaning." -msgstr "" +msgstr "清掃のための時間(時)" #. module: mrp #: model:process.transition,name:mrp.process_transition_purchaseprocure0 msgid "Automatic RFQ" -msgstr "" +msgstr "自動見積依頼" #. module: mrp #: model:process.transition,note:mrp.process_transition_servicemto0 msgid "" "If the service has a 'Produce' supply method, this creates a task in the " "project management module of OpenERP." -msgstr "" +msgstr "サービスが提供方法として生産であるなら、これはOpenERPのプロジェクト管理モジュールの中にタスクを生成します。" #. module: mrp #: model:process.transition,note:mrp.process_transition_productionprocureproducts0 @@ -2216,12 +2239,12 @@ msgstr "" msgid "" "Specify quantity of products to produce or buy. Report of Cost structure " "will be displayed base on this quantity." -msgstr "" +msgstr "生産あるいは購入する製品の数量を指定して下さい。コスト構造のレポートはこの数量を元にして表示されます。" #. module: mrp #: selection:mrp.bom,method:0 msgid "On Stock" -msgstr "" +msgstr "在庫" #. module: mrp #: field:mrp.bom,sequence:0 @@ -2229,21 +2252,21 @@ msgstr "" #: field:mrp.production.workcenter.line,sequence:0 #: field:mrp.routing.workcenter,sequence:0 msgid "Sequence" -msgstr "" +msgstr "順序" #. module: mrp #: model:ir.ui.menu,name:mrp.menu_view_resource_calendar_leaves_search_mrp msgid "Resource Leaves" -msgstr "" +msgstr "リソースの休暇" #. module: mrp #: help:mrp.bom,sequence:0 msgid "Gives the sequence order when displaying a list of bills of material." -msgstr "" +msgstr "部品表のリストを表示する際には並び順を与えて下さい。" #. module: mrp #: view:mrp.production:0 #: field:mrp.production,move_lines:0 #: report:mrp.production.order:0 msgid "Products to Consume" -msgstr "" +msgstr "消費製品" diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index fb5d07c1754..7c8410cad7f 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -632,7 +632,7 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="button_confirm" states="draft" string="Confirm Production"/> <button name="button_produce" states="ready" string="Start Production"/> <button name="%(act_mrp_product_produce)d" states="in_production" string="Produce" type="action"/> @@ -640,11 +640,8 @@ <button name="button_recreate" states="picking_except" string="Recreate Picking"/> <button name="button_cancel" states="draft,ready,in_production,picking_except" string="Cancel"/> <button name="action_cancel" type="object" states="confirmed" string="Cancel"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,ready,in_production,done" statusbar_colors='{"picking_except":"red","confirmed":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,ready,in_production,done" statusbar_colors='{"picking_except":"red","confirmed":"blue"}'/> + </header> <sheet string="Manufacturing Orders" layout="auto"> <group colspan="4" col="7"> <field name="name" string="Reference"/> @@ -658,6 +655,8 @@ icon="terp-accessories-archiver+" name="%(mrp.action_change_production_qty)d" string="Change Qty" states="ready,confirmed" /> + </group> + <group colspan="4" col="4"> <label string="" colspan="2"/> <field name="product_uos_qty" groups="product.group_uos"/> <field name="product_uos" groups="product.group_uos"/> @@ -791,7 +790,7 @@ </notebook> </sheet> <div class="oe_form_sheet_width"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> diff --git a/addons/mrp/procurement.py b/addons/mrp/procurement.py index 4086a401f56..363f98e35d1 100644 --- a/addons/mrp/procurement.py +++ b/addons/mrp/procurement.py @@ -43,7 +43,7 @@ class procurement_order(osv.osv): cr.execute('update procurement_order set message=%s where id=%s', (_('No BoM defined for this product !'), procurement.id)) for (id, name) in self.name_get(cr, uid, procurement.id): message = _("Procurement '%s' has an exception: 'No BoM defined for this product !'") % name - self.log(cr, uid, id, message) + self.message_append_note(cr, uid, [procurement.id], body=message, context=context) return False return True @@ -97,6 +97,7 @@ class procurement_order(osv.osv): }) res[procurement.id] = produce_id self.write(cr, uid, [procurement.id], {'state': 'running'}) + self.running_send_note(cr, uid, ids, context=context) bom_result = production_obj.action_compute(cr, uid, [produce_id], properties=[x.id for x in procurement.property_ids]) wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr) diff --git a/addons/mrp/res_config_view.xml b/addons/mrp/res_config_view.xml index 8e5934b170a..258fe4f8356 100644 --- a/addons/mrp/res_config_view.xml +++ b/addons/mrp/res_config_view.xml @@ -7,10 +7,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Configure Manufacturing" layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Apply" type="object" name="execute"/> <button string="Cancel" special="cancel"/> - </div> + </header> <sheet layout="auto"> <separator string="Manufacturing Order" colspan="4"/> <field name="module_mrp_operations"/> diff --git a/addons/mrp_jit/i18n/ja.po b/addons/mrp_jit/i18n/ja.po new file mode 100644 index 00000000000..3958d6d94ce --- /dev/null +++ b/addons/mrp_jit/i18n/ja.po @@ -0,0 +1,64 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2012-05-30 23:20+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: mrp_jit +#: model:ir.module.module,shortdesc:mrp_jit.module_meta_information +msgid "MRP JIT" +msgstr "MRPジャストインタイム" + +#. module: mrp_jit +#: model:ir.module.module,description:mrp_jit.module_meta_information +msgid "" +"\n" +" This module allows Just In Time computation of procurement orders.\n" +"\n" +" If you install this module, you will not have to run the regular " +"procurement \n" +" scheduler anymore (but you still need to run the minimum order point " +"rule \n" +" scheduler, or for example let it run daily.)\n" +" All procurement orders will be processed immediately, which could in " +"some\n" +" cases entail a small performance impact.\n" +"\n" +" It may also increase your stock size because products are reserved as " +"soon\n" +" as possible and the scheduler time range is not taken into account " +"anymore. \n" +" In that case, you can not use priorities any more on the different " +"picking.\n" +" \n" +" \n" +" " +msgstr "" +"\n" +" このモジュールは調達オーダーのジャストインタイム計算を行います。\n" +"\n" +" このモジュールをインストールしたなら、もう定期的な調達スケジューラを実行させる必要は \n" +" ありません(しかし、まだ最小発注点ルールスケジューラを実行するか、または、例えば、\n" +" それを毎日実行させる必要があります)。\n" +" 全ての調達オーダーは即座に実行されますが、幾つかのケースにおいてはパフォーマンス\n" +" に多少影響するかもしれません。\n" +"\n" +" 製品は可能な限り早く予約され、もはやスケジュールI時間の範囲は考慮されないので、\n" +" 在庫サイズは増えることになるかも知れません。\n" +" そのケースには異なる集荷による優先度をもはや使うことはできません。\n" +" \n" +" \n" +" " diff --git a/addons/mrp_operations/i18n/ja.po b/addons/mrp_operations/i18n/ja.po new file mode 100644 index 00000000000..9a0445ff6c2 --- /dev/null +++ b/addons/mrp_operations/i18n/ja.po @@ -0,0 +1,836 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-06-01 04:26+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: mrp_operations +#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_action_form +#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_wc_action_planning +#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_wc_order +#: view:mrp.production.workcenter.line:0 +#: view:mrp.workorder:0 +msgid "Work Orders" +msgstr "作業オーダー" + +#. module: mrp_operations +#: code:addons/mrp_operations/mrp_operations.py:489 +#, python-format +msgid "Operation is already finished!" +msgstr "操作は既に終了しています。" + +#. module: mrp_operations +#: model:process.node,note:mrp_operations.process_node_canceloperation0 +msgid "Cancel the operation." +msgstr "操作のキャンセル" + +#. module: mrp_operations +#: model:ir.model,name:mrp_operations.model_mrp_operations_operation_code +msgid "mrp_operations.operation.code" +msgstr "" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +#: view:mrp.workorder:0 +msgid "Group By..." +msgstr "グループ化…" + +#. module: mrp_operations +#: model:process.node,note:mrp_operations.process_node_workorder0 +msgid "Information from the routing definition." +msgstr "経路定義からの情報" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "March" +msgstr "3月" + +#. module: mrp_operations +#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_resource_planning +#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_wc_resource_planning +msgid "Work Centers" +msgstr "作業センタ" + +#. module: mrp_operations +#: view:mrp.production:0 +#: view:mrp.production.workcenter.line:0 +#: selection:mrp_operations.operation.code,start_stop:0 +msgid "Resume" +msgstr "再開" + +#. module: mrp_operations +#: report:mrp.code.barcode:0 +msgid "(" +msgstr "(" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +msgid "Product to Produce" +msgstr "生産製品" + +#. module: mrp_operations +#: view:mrp_operations.operation:0 +msgid "Production Operation" +msgstr "製造操作" + +#. module: mrp_operations +#: view:mrp.production:0 +msgid "Set to Draft" +msgstr "ドラフトに設定" + +#. module: mrp_operations +#: field:mrp.production,allow_reorder:0 +msgid "Free Serialisation" +msgstr "自由な直列化" + +#. module: mrp_operations +#: model:ir.model,name:mrp_operations.model_mrp_production +msgid "Manufacturing Order" +msgstr "製造オーダー" + +#. module: mrp_operations +#: model:process.process,name:mrp_operations.process_process_mrpoperationprocess0 +msgid "Mrp Operations" +msgstr "MRP操作" + +#. module: mrp_operations +#: view:mrp.workorder:0 +#: field:mrp.workorder,day:0 +msgid "Day" +msgstr "日" + +#. module: mrp_operations +#: view:mrp.production:0 +msgid "Cancel Order" +msgstr "オーダーのキャンセル" + +#. module: mrp_operations +#: model:process.node,name:mrp_operations.process_node_productionorder0 +msgid "Production Order" +msgstr "生産オーダー" + +#. module: mrp_operations +#: selection:mrp.production.workcenter.line,production_state:0 +msgid "Picking Exception" +msgstr "例外の集荷" + +#. module: mrp_operations +#: model:process.transition,name:mrp_operations.process_transition_productionstart0 +msgid "Creation of the work order" +msgstr "作業オーダーの作成" + +#. module: mrp_operations +#: help:mrp.production.workcenter.line,state:0 +msgid "" +"* When a work order is created it is set in 'Draft' state.\n" +"* When user sets work order in start mode that time it will be set in 'In " +"Progress' state.\n" +"* When work order is in running mode, during that time if user wants to stop " +"or to make changes in order then can set in 'Pending' state.\n" +"* When the user cancels the work order it will be set in 'Canceled' state.\n" +"* When order is completely processed that time it is set in 'Finished' state." +msgstr "" +"・ 作業オーダーが作成されると、それはドラフト状態に設定されます。\n" +"・ ユーザが作業オーダーに開始モードを設定すると、それは進行中に設定されます。\n" +"・ 作業オーダーが実行中モードになった時にユーザが停止やオーダーを変更した場合、保留中状態に設定されます。\n" +"・ ユーザが作業オーダーをキャンセルすると、キャンセル済状態に設定されます。\n" +"・ オーダーが完全に処理されると、完了状態に設定されます。" + +#. module: mrp_operations +#: model:process.transition,note:mrp_operations.process_transition_productionstart0 +msgid "The work orders are created on the basis of the production order." +msgstr "作業オーダーは生産オーダーを元にして作成されます。" + +#. module: mrp_operations +#: code:addons/mrp_operations/mrp_operations.py:134 +#: code:addons/mrp_operations/mrp_operations.py:470 +#: code:addons/mrp_operations/mrp_operations.py:474 +#: code:addons/mrp_operations/mrp_operations.py:486 +#: code:addons/mrp_operations/mrp_operations.py:489 +#, python-format +msgid "Error!" +msgstr "エラー" + +#. module: mrp_operations +#: selection:mrp.production.workcenter.line,state:0 +#: selection:mrp.workorder,state:0 +#: selection:mrp_operations.operation.code,start_stop:0 +msgid "Cancelled" +msgstr "キャンセル済" + +#. module: mrp_operations +#: code:addons/mrp_operations/mrp_operations.py:486 +#, python-format +msgid "There is no Operation to be cancelled!" +msgstr "キャンセルされる操作がありません。" + +#. module: mrp_operations +#: code:addons/mrp_operations/mrp_operations.py:482 +#, python-format +msgid "Operation is Already Cancelled!" +msgstr "操作は既にキャンセル済です。" + +#. module: mrp_operations +#: model:ir.actions.act_window,name:mrp_operations.mrp_production_operation_action +#: view:mrp.production.workcenter.line:0 +msgid "Operations" +msgstr "操作" + +#. module: mrp_operations +#: model:ir.model,name:mrp_operations.model_stock_move +msgid "Stock Move" +msgstr "在庫移動" + +#. module: mrp_operations +#: code:addons/mrp_operations/mrp_operations.py:479 +#, python-format +msgid "" +"In order to Finish the operation, it must be in the Start or Resume state!" +msgstr "操作を完了するには、開始か再開状態でなければなりません。" + +#. module: mrp_operations +#: field:mrp.workorder,nbr:0 +msgid "# of Lines" +msgstr "行数" + +#. module: mrp_operations +#: view:mrp.production:0 +#: view:mrp.production.workcenter.line:0 +msgid "Finish Order" +msgstr "オーダーの完了" + +#. module: mrp_operations +#: field:mrp.production.workcenter.line,date_finished:0 +#: field:mrp.production.workcenter.line,date_planned_end:0 +#: field:mrp_operations.operation,date_finished:0 +msgid "End Date" +msgstr "終了日" + +#. module: mrp_operations +#: selection:mrp.production.workcenter.line,production_state:0 +msgid "In Production" +msgstr "生産中" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +#: field:mrp.production.workcenter.line,state:0 +#: view:mrp.workorder:0 +#: field:mrp.workorder,state:0 +msgid "State" +msgstr "状態" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +#: selection:mrp.production.workcenter.line,production_state:0 +#: selection:mrp.production.workcenter.line,state:0 +#: selection:mrp.workorder,state:0 +msgid "Draft" +msgstr "ドラフト" + +#. module: mrp_operations +#: model:ir.actions.act_window,name:mrp_operations.action_report_mrp_workorder +#: model:ir.model,name:mrp_operations.model_mrp_production_workcenter_line +msgid "Work Order" +msgstr "作業オーダー" + +#. module: mrp_operations +#: model:process.transition,note:mrp_operations.process_transition_workstartoperation0 +msgid "" +"There is 1 work order per work center. The information about the number of " +"cycles or the cycle time." +msgstr "作業センタごとに1つの作業オーダーがあります。サイクルの数あるいはサイクル時間についての情報です。" + +#. module: mrp_operations +#: view:mrp.workorder:0 +msgid "Month -1" +msgstr "月 -1" + +#. module: mrp_operations +#: field:mrp.production.workcenter.line,uom:0 +msgid "UOM" +msgstr "単位" + +#. module: mrp_operations +#: constraint:stock.move:0 +msgid "You can not move products from or to a location of the type view." +msgstr "タイプビューの場所から、あるいは場所へは製品を動かすことはできません。" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +msgid "Planned Date" +msgstr "予定日" + +#. module: mrp_operations +#: view:mrp.workorder:0 +#: field:mrp.workorder,product_qty:0 +msgid "Product Qty" +msgstr "製品数量" + +#. module: mrp_operations +#: code:addons/mrp_operations/mrp_operations.py:134 +#, python-format +msgid "Manufacturing order cannot start in state \"%s\"!" +msgstr "製造オーダーは %s 状態であるため開始できません。" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "July" +msgstr "7月" + +#. module: mrp_operations +#: field:mrp_operations.operation.code,name:0 +msgid "Operation Name" +msgstr "操作名" + +#. module: mrp_operations +#: field:mrp_operations.operation.code,start_stop:0 +msgid "Status" +msgstr "状態" + +#. module: mrp_operations +#: model:ir.actions.act_window,help:mrp_operations.mrp_production_wc_action_planning +msgid "" +"To manufacture or assemble products, and use raw materials and finished " +"products you must also handle manufacturing operations. Manufacturing " +"operations are often called Work Orders. The various operations will have " +"different impacts on the costs of manufacturing and planning depending on " +"the available workload." +msgstr "" +"製品を製造または組み立て、原材料を使って製品を完成させるために、製造操作を処理しなくてはなりません。製造操作はよく、作業オーダーと呼ばれます。多種な操作は" +"製造と使用可能な作業負荷に応じた計画のコストに異なる影響を持ちます。" + +#. module: mrp_operations +#: view:mrp.workorder:0 +msgid "Planned Year" +msgstr "計画年" + +#. module: mrp_operations +#: field:mrp_operations.operation,order_date:0 +msgid "Order Date" +msgstr "オーダー日" + +#. module: mrp_operations +#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_draft_action +msgid "Future Work Orders" +msgstr "将来の作業オーダー" + +#. module: mrp_operations +#: view:mrp.workorder:0 +msgid "Work orders during last month" +msgstr "先月の作業オーダー" + +#. module: mrp_operations +#: help:mrp.production.workcenter.line,delay:0 +msgid "The elapsed time between operation start and stop in this Work Center" +msgstr "この作業センタでの操作の開始と終了の間の経過時間" + +#. module: mrp_operations +#: model:process.node,name:mrp_operations.process_node_canceloperation0 +msgid "Operation Cancelled" +msgstr "操作はキャンセルされました。" + +#. module: mrp_operations +#: view:mrp.production:0 +#: view:mrp.production.workcenter.line:0 +msgid "Pause Work Order" +msgstr "作業オーダーの中断" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "September" +msgstr "9月" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "December" +msgstr "12月" + +#. module: mrp_operations +#: view:mrp.workorder:0 +#: field:mrp.workorder,month:0 +msgid "Month" +msgstr "月" + +#. module: mrp_operations +#: selection:mrp.production.workcenter.line,production_state:0 +msgid "Canceled" +msgstr "キャンセル済" + +#. module: mrp_operations +#: model:ir.model,name:mrp_operations.model_mrp_operations_operation +msgid "mrp_operations.operation" +msgstr "" + +#. module: mrp_operations +#: model:ir.model,name:mrp_operations.model_mrp_workorder +msgid "Work Order Report" +msgstr "作業オーダーレポート" + +#. module: mrp_operations +#: constraint:mrp.production:0 +msgid "Order quantity cannot be negative or zero!" +msgstr "オーダー数量は負または0にはできません。" + +#. module: mrp_operations +#: field:mrp.production.workcenter.line,date_start:0 +#: field:mrp.production.workcenter.line,date_start_date:0 +#: field:mrp_operations.operation,date_start:0 +msgid "Start Date" +msgstr "開始日" + +#. module: mrp_operations +#: selection:mrp.production.workcenter.line,production_state:0 +msgid "Waiting Goods" +msgstr "待機商品" + +#. module: mrp_operations +#: view:mrp.workorder:0 +msgid "Work orders made during current year" +msgstr "現在年中になされた作業オーダー" + +#. module: mrp_operations +#: selection:mrp.workorder,state:0 +#: selection:mrp_operations.operation.code,start_stop:0 +msgid "Pause" +msgstr "一時停止" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +#: selection:mrp.production.workcenter.line,state:0 +#: selection:mrp.workorder,state:0 +msgid "In Progress" +msgstr "進行中" + +#. module: mrp_operations +#: code:addons/mrp_operations/mrp_operations.py:470 +#, python-format +msgid "" +"In order to Pause the operation, it must be in the Start or Resume state!" +msgstr "操作を一時停止するには、開始または再開状態でなければなりません。" + +#. module: mrp_operations +#: code:addons/mrp_operations/mrp_operations.py:474 +#, python-format +msgid "In order to Resume the operation, it must be in the Pause state!" +msgstr "操作を再開するには、一時停止状態でなければなりません。" + +#. module: mrp_operations +#: view:mrp.production:0 +#: view:mrp.production.workcenter.line:0 +#: selection:mrp_operations.operation.code,start_stop:0 +msgid "Start" +msgstr "開始" + +#. module: mrp_operations +#: view:mrp_operations.operation:0 +msgid "Calendar View" +msgstr "カレンダービュー" + +#. module: mrp_operations +#: model:process.transition,note:mrp_operations.process_transition_startcanceloperation0 +msgid "" +"When the operation needs to be cancelled, you can do it in the work order " +"form." +msgstr "操作をキャンセルする必要がある時、作業オーダーフォームの中で行うことができます。" + +#. module: mrp_operations +#: view:mrp.production:0 +#: view:mrp.production.workcenter.line:0 +msgid "Set Draft" +msgstr "ドラフトにセット" + +#. module: mrp_operations +#: view:mrp.production:0 +#: view:mrp.production.workcenter.line:0 +#: selection:mrp.production.workcenter.line,state:0 +msgid "Pending" +msgstr "保留中" + +#. module: mrp_operations +#: view:mrp_operations.operation.code:0 +msgid "Production Operation Code" +msgstr "生産操作コード" + +#. module: mrp_operations +#: code:addons/mrp_operations/mrp_operations.py:466 +#, python-format +msgid "" +"Operation has already started !Youcan either Pause/Finish/Cancel the " +"operation" +msgstr "操作は既に開始されました。一時停止 / 完了 / キャンセル操作ができます。" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "August" +msgstr "8月" + +#. module: mrp_operations +#: view:mrp.workorder:0 +msgid "Started" +msgstr "開始済" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +msgid "Production started late" +msgstr "生産が遅れて開始" + +#. module: mrp_operations +#: view:mrp.workorder:0 +msgid "Planned Day" +msgstr "計画日" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "June" +msgstr "6月" + +#. module: mrp_operations +#: view:mrp.workorder:0 +#: field:mrp.workorder,total_cycles:0 +msgid "Total Cycles" +msgstr "合計サイクル" + +#. module: mrp_operations +#: selection:mrp.production.workcenter.line,production_state:0 +msgid "Ready to Produce" +msgstr "生産準備完了" + +#. module: mrp_operations +#: field:stock.move,move_dest_id_lines:0 +msgid "Children Moves" +msgstr "子の移動" + +#. module: mrp_operations +#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_action_planning +msgid "Work Orders Planning" +msgstr "作業オーダー計画" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +#: field:mrp.workorder,date:0 +msgid "Date" +msgstr "日付" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "November" +msgstr "11月" + +#. module: mrp_operations +#: view:mrp.workorder:0 +msgid "Search" +msgstr "検索" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "October" +msgstr "10月" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "January" +msgstr "1月" + +#. module: mrp_operations +#: view:mrp.production:0 +#: view:mrp.production.workcenter.line:0 +msgid "Resume Work Order" +msgstr "作業オーダーの再開" + +#. module: mrp_operations +#: model:process.node,note:mrp_operations.process_node_doneoperation0 +msgid "Finish the operation." +msgstr "操作の終了" + +#. module: mrp_operations +#: code:addons/mrp_operations/mrp_operations.py:459 +#, python-format +msgid "Operation is not started yet !" +msgstr "操作はまだ開始されていません。" + +#. module: mrp_operations +#: model:process.node,note:mrp_operations.process_node_productionorder0 +msgid "Information from the production order." +msgstr "生産オーダーからの情報" + +#. module: mrp_operations +#: sql_constraint:mrp.production:0 +msgid "Reference must be unique per Company!" +msgstr "参照は会社ごとに固有でなければいけません。" + +#. module: mrp_operations +#: code:addons/mrp_operations/mrp_operations.py:459 +#: code:addons/mrp_operations/mrp_operations.py:466 +#: code:addons/mrp_operations/mrp_operations.py:479 +#: code:addons/mrp_operations/mrp_operations.py:482 +#, python-format +msgid "Sorry!" +msgstr "残念です。" + +#. module: mrp_operations +#: view:mrp.workorder:0 +msgid "Current" +msgstr "現在" + +#. module: mrp_operations +#: field:mrp_operations.operation,code_id:0 +#: field:mrp_operations.operation.code,code:0 +msgid "Code" +msgstr "コード" + +#. module: mrp_operations +#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_confirm_action +msgid "Confirmed Work Orders" +msgstr "確認済作業オーダー" + +#. module: mrp_operations +#: model:ir.actions.act_window,name:mrp_operations.mrp_production_code_action +msgid "Operation Codes" +msgstr "操作コード" + +#. module: mrp_operations +#: field:mrp.production.workcenter.line,qty:0 +msgid "Qty" +msgstr "数量" + +#. module: mrp_operations +#: model:process.node,name:mrp_operations.process_node_doneoperation0 +msgid "Operation Done" +msgstr "操作完了" + +#. module: mrp_operations +#: selection:mrp.production.workcenter.line,production_state:0 +#: view:mrp.workorder:0 +#: selection:mrp_operations.operation.code,start_stop:0 +msgid "Done" +msgstr "完了" + +#. module: mrp_operations +#: model:ir.actions.report.xml,name:mrp_operations.report_code_barcode +msgid "Start/Stop Barcode" +msgstr "開始 / 停止バーコード" + +#. module: mrp_operations +#: view:mrp.production:0 +#: view:mrp.production.workcenter.line:0 +msgid "Cancel" +msgstr "キャンセル" + +#. module: mrp_operations +#: model:ir.actions.act_window,help:mrp_operations.mrp_production_wc_action_form +msgid "" +"Work Orders is the list of operations to be performed for each manufacturing " +"order. Once you start the first work order of a manufacturing order, the " +"manufacturing order is automatically marked as started. Once you finish the " +"latest operation of a manufacturing order, the MO is automatically done and " +"the related products are produced." +msgstr "" +"作業オーダーは各製造オーダーを実行するための操作のリストです。製造オーダーの最初の作業オーダーを開始すると、製造オーダーは自動的に開始したとマークされます" +"。製造オーダーの最後の操作が終わると、製造オーダーは自動的に完了となり関連製品は生産されます。" + +#. module: mrp_operations +#: model:process.node,name:mrp_operations.process_node_startoperation0 +msgid "Start Operation" +msgstr "操作を開始" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +msgid "Information" +msgstr "情報" + +#. module: mrp_operations +#: model:ir.actions.report.xml,name:mrp_operations.report_wc_barcode +msgid "Work Centers Barcode" +msgstr "作業センターバーコード" + +#. module: mrp_operations +#: constraint:stock.move:0 +msgid "You must assign a production lot for this product" +msgstr "この製品に生産ロットを割り当てて下さい。" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +msgid "Late" +msgstr "遅延" + +#. module: mrp_operations +#: field:mrp.workorder,delay:0 +msgid "Delay" +msgstr "遅延" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +#: view:mrp.workorder:0 +#: field:mrp.workorder,production_id:0 +#: field:mrp_operations.operation,production_id:0 +msgid "Production" +msgstr "生産" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +msgid "Search Work Orders" +msgstr "作業オーダーの検索" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +#: view:mrp.workorder:0 +#: field:mrp.workorder,workcenter_id:0 +#: field:mrp_operations.operation,workcenter_id:0 +#: model:process.node,name:mrp_operations.process_node_workorder0 +msgid "Work Center" +msgstr "作業センタ" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +msgid "Real" +msgstr "実物" + +#. module: mrp_operations +#: field:mrp.production.workcenter.line,date_planned:0 +msgid "Scheduled Date" +msgstr "予定日" + +#. module: mrp_operations +#: field:mrp.production.workcenter.line,product:0 +#: view:mrp.workorder:0 +#: field:mrp.workorder,product_id:0 +msgid "Product" +msgstr "製品" + +#. module: mrp_operations +#: view:mrp.workorder:0 +#: field:mrp.workorder,total_hours:0 +msgid "Total Hours" +msgstr "合計時間" + +#. module: mrp_operations +#: help:mrp.production,allow_reorder:0 +msgid "" +"Check this to be able to move independently all production orders, without " +"moving dependent ones." +msgstr "依存する物を動かすことなく、全ての製造オーダー独立して移動させるためにはこれをチェックして下さい。" + +#. module: mrp_operations +#: report:mrp.code.barcode:0 +msgid ")" +msgstr ")" + +#. module: mrp_operations +#: model:ir.ui.menu,name:mrp_operations.menu_report_mrp_workorders_tree +msgid "Work Order Analysis" +msgstr "作業オーダー分析" + +#. module: mrp_operations +#: view:mrp.production:0 +#: view:mrp.production.workcenter.line:0 +#: selection:mrp.production.workcenter.line,state:0 +#: selection:mrp.workorder,state:0 +msgid "Finished" +msgstr "完了" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +msgid "Hours by Work Center" +msgstr "作業センター毎の時間" + +#. module: mrp_operations +#: field:mrp.production.workcenter.line,delay:0 +msgid "Working Hours" +msgstr "労働時間" + +#. module: mrp_operations +#: view:mrp.workorder:0 +msgid "Planned Month" +msgstr "計画月" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "February" +msgstr "2月" + +#. module: mrp_operations +#: view:mrp.workorder:0 +msgid "Work orders made during current month" +msgstr "現在月中になされた作業オーダー" + +#. module: mrp_operations +#: model:process.transition,name:mrp_operations.process_transition_startcanceloperation0 +msgid "Operation cancelled" +msgstr "操作はキャンセルされました。" + +#. module: mrp_operations +#: model:process.node,note:mrp_operations.process_node_startoperation0 +msgid "Start the operation." +msgstr "操作を開始します。" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "April" +msgstr "4月" + +#. module: mrp_operations +#: model:process.transition,name:mrp_operations.process_transition_startdoneoperation0 +msgid "Operation done" +msgstr "操作完了" + +#. module: mrp_operations +#: view:mrp.workorder:0 +msgid "#Line Orders" +msgstr "オーダー行数" + +#. module: mrp_operations +#: view:mrp.production:0 +#: view:mrp.production.workcenter.line:0 +msgid "Start Working" +msgstr "作業開始" + +#. module: mrp_operations +#: model:process.transition,note:mrp_operations.process_transition_startdoneoperation0 +msgid "" +"When the operation is finished, the operator updates the system by finishing " +"the work order." +msgstr "操作が完了した時、操作者は作業オーダーを終えるとシステムを更新します。" + +#. module: mrp_operations +#: selection:mrp.workorder,month:0 +msgid "May" +msgstr "5月" + +#. module: mrp_operations +#: model:process.transition,name:mrp_operations.process_transition_workstartoperation0 +msgid "Details of the work order" +msgstr "作業オーダーの詳細" + +#. module: mrp_operations +#: field:mrp.production.workcenter.line,production_state:0 +msgid "Production State" +msgstr "生産状態" + +#. module: mrp_operations +#: view:mrp.workorder:0 +#: field:mrp.workorder,year:0 +msgid "Year" +msgstr "年" + +#. module: mrp_operations +#: view:mrp.production.workcenter.line:0 +msgid "Duration" +msgstr "期間" + +#. module: mrp_operations +#: constraint:stock.move:0 +msgid "You try to assign a lot which is not from the same product" +msgstr "違う製品のロットを割り当てることはできません。" diff --git a/addons/mrp_operations/mrp_operations_view.xml b/addons/mrp_operations/mrp_operations_view.xml index 53a14fe52da..2ef70a9edf8 100644 --- a/addons/mrp_operations/mrp_operations_view.xml +++ b/addons/mrp_operations/mrp_operations_view.xml @@ -57,10 +57,6 @@ <field name="cycle"/> <field name="hour"/> <field name="state" /> - <button name="button_start_working" string="Start" states="draft" icon="terp-gtk-jump-to-ltr" help="Start Working"/> - <button name="button_resume" string="Resume" states="pause" icon="gtk-media-pause" help="Resume Work Order"/> - <button name="button_pause" string="Pending" states="startworking" icon="gtk-media-pause" help="Pause Work Order"/> - <button name="button_done" string="Finished" states="startworking" icon="terp-check" help="Finish Order"/> </tree> </field> </record> @@ -72,18 +68,15 @@ <field name="inherit_id" eval="False"/> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="button_start_working" string="Start" states="draft"/> <button name="button_resume" string="Resume" states="pause"/> <button name="button_done" string="Finished" states="startworking"/> <button name="button_pause" string="Pending" states="startworking"/> <button name="button_draft" string="Set Draft" states="cancel"/> <button name="button_cancel" string="Cancel" states="draft,startworking"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,startworking"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,startworking"/> + </header> <sheet string="Work Orders" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field colspan="4" name="name" select="1"/> @@ -121,7 +114,9 @@ </page> </notebook> </sheet> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <div class="oe_form_bottom"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> + </div> </form> </field> </record> diff --git a/addons/mrp_repair/i18n/ja.po b/addons/mrp_repair/i18n/ja.po new file mode 100644 index 00000000000..69cd8c15e8a --- /dev/null +++ b/addons/mrp_repair/i18n/ja.po @@ -0,0 +1,795 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-06-01 04:27+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Fees Line" +msgstr "料金行" + +#. module: mrp_repair +#: help:mrp.repair,state:0 +msgid "" +" * The 'Draft' state is used when a user is encoding a new and unconfirmed " +"repair order. \n" +"* The 'Confirmed' state is used when a user confirms the repair order. " +" \n" +"* The 'Ready to Repair' state is used to start to repairing, user can start " +"repairing only after repair order is confirmed. \n" +"* The 'To be Invoiced' state is used to generate the invoice before or after " +"repairing done. \n" +"* The 'Done' state is set when repairing is completed. \n" +"* The 'Cancelled' state is used when user cancel repair order." +msgstr "" +" ・ ドラフト状態は、ユーザが未確認の修理オーダーを新たにエンコードした時に使われます。\n" +"・ 確認済状態は、ユーザが修理オーダーを確認した時に使われます。\n" +"・ 修理準備完了状態は、修理を開始するために、修理オーダー確認後、修理を開始できる時に使われます。\n" +"・ 請求状態は、修理の完了前または完了後で請求書を生成した時に使われます。\n" +"・ 完了状態は、修理が終了した時に設定されます。\n" +"・ キャンセル済状態は、ユーザが修理オーダーをキャンセルした時に使われます。" + +#. module: mrp_repair +#: field:mrp.repair.line,move_id:0 +msgid "Inventory Move" +msgstr "在庫移動" + +#. module: mrp_repair +#: model:ir.actions.act_window,help:mrp_repair.action_repair_order_tree +msgid "" +"Repair orders allow you to organize your product repairs. In a repair order, " +"you can detail the components you remove, add or replace and record the time " +"you spent on the different operations. The repair order uses the warranty " +"date on the production lot in order to know if whether the repair should be " +"invoiced to the customer or not." +msgstr "" +"修理オーダーは製品の修理を手配します。修理オーダーでは、取除いた、追加した、交換した部品を詳述でき、異なる操作で費やした時間を記録できます。修理オーダーは" +"、その修理を顧客に請求すべきであるかどうかを知るために生産ロットの保証日付を使用します。" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Group By..." +msgstr "グループ化…" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Recreate Invoice" +msgstr "請求書再作成" + +#. module: mrp_repair +#: help:mrp.repair,deliver_bool:0 +msgid "" +"Check this box if you want to manage the delivery once the product is " +"repaired. If cheked, it will create a picking with selected product. Note " +"that you can select the locations in the Info tab, if you have the extended " +"view." +msgstr "" +"製品が修理された後の配送を管理したい場合、このボックスをチェックして下さい。チェックすると、製品の選択とともに集荷を作成します。拡張ビューをしている場合は" +"、情報タブで場所を指定することができます。" + +#. module: mrp_repair +#: model:ir.actions.act_window,name:mrp_repair.action_cancel_repair +#: view:mrp.repair.cancel:0 +msgid "Cancel Repair Order" +msgstr "修理オーダーのキャンセル" + +#. module: mrp_repair +#: field:mrp.repair.fee,to_invoice:0 +#: field:mrp.repair.line,to_invoice:0 +msgid "To Invoice" +msgstr "請求対象" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Printing Date" +msgstr "印刷日" + +#. module: mrp_repair +#: field:mrp.repair.make_invoice,group:0 +msgid "Group by partner invoice address" +msgstr "パートナの請求書住所によるグループ" + +#. module: mrp_repair +#: code:addons/mrp_repair/mrp_repair.py:435 +#, python-format +msgid "No product defined on Fees!" +msgstr "料金が定義されていない製品です。" + +#. module: mrp_repair +#: view:mrp.repair:0 +#: field:mrp.repair,company_id:0 +msgid "Company" +msgstr "会社" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Set to Draft" +msgstr "ドラフトに設定" + +#. module: mrp_repair +#: selection:mrp.repair,state:0 +msgid "Invoice Exception" +msgstr "請求書の例外" + +#. module: mrp_repair +#: field:mrp.repair,address_id:0 +msgid "Delivery Address" +msgstr "配達住所" + +#. module: mrp_repair +#: model:ir.actions.act_window,name:mrp_repair.act_mrp_repair_invoice +#: model:ir.model,name:mrp_repair.model_mrp_repair_make_invoice +#: view:mrp.repair:0 +msgid "Make Invoice" +msgstr "請求書作成" + +#. module: mrp_repair +#: field:mrp.repair.fee,price_subtotal:0 +#: field:mrp.repair.line,price_subtotal:0 +msgid "Subtotal" +msgstr "小計" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Invoice address :" +msgstr "請求書住所:" + +#. module: mrp_repair +#: view:mrp.repair:0 +#: field:mrp.repair,guarantee_limit:0 +msgid "Guarantee limit" +msgstr "保証制限" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Notes" +msgstr "注記" + +#. module: mrp_repair +#: view:mrp.repair:0 +#: field:mrp.repair,amount_tax:0 +#: field:mrp.repair.fee,tax_id:0 +#: field:mrp.repair.line,tax_id:0 +msgid "Taxes" +msgstr "税金" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Net Total :" +msgstr "合計:" + +#. module: mrp_repair +#: code:addons/mrp_repair/mrp_repair.py:435 +#, python-format +msgid "Warning !" +msgstr "警告" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "VAT" +msgstr "消費税" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Operations" +msgstr "操作" + +#. module: mrp_repair +#: field:mrp.repair,move_id:0 +msgid "Move" +msgstr "移動" + +#. module: mrp_repair +#: code:addons/mrp_repair/mrp_repair.py:370 +#, python-format +msgid "You have to select a Partner Invoice Address in the repair form !" +msgstr "修理フォームではパートなの請求書住所を選択する必要があります。" + +#. module: mrp_repair +#: model:ir.actions.act_window,name:mrp_repair.action_repair_order_tree +#: model:ir.ui.menu,name:mrp_repair.menu_repair_order +msgid "Repair Orders" +msgstr "修理オーダー" + +#. module: mrp_repair +#: model:ir.actions.report.xml,name:mrp_repair.report_mrp_repair +msgid "Quotation / Order" +msgstr "見積 / オーダー" + +#. module: mrp_repair +#: code:addons/mrp_repair/mrp_repair.py:337 +#, python-format +msgid "Warning" +msgstr "警告" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Extra Info" +msgstr "追加情報" + +#. module: mrp_repair +#: field:mrp.repair.fee,repair_id:0 +#: field:mrp.repair.line,repair_id:0 +msgid "Repair Order Reference" +msgstr "修理オーダー参照" + +#. module: mrp_repair +#: selection:mrp.repair.line,state:0 +msgid "Draft" +msgstr "ドラフト" + +#. module: mrp_repair +#: code:addons/mrp_repair/mrp_repair.py:384 +#, python-format +msgid "No account defined for partner \"%s\"." +msgstr "パートナ %s にアカウントが定義されていません。" + +#. module: mrp_repair +#: view:mrp.repair:0 +#: selection:mrp.repair,state:0 +#: selection:mrp.repair.line,state:0 +msgid "Confirmed" +msgstr "確認済" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Repairs order" +msgstr "修理オーダー" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Repair Order N° :" +msgstr "修理オーダー番号:" + +#. module: mrp_repair +#: field:mrp.repair,prodlot_id:0 +#: field:mrp.repair.line,prodlot_id:0 +#: report:repair.order:0 +msgid "Lot Number" +msgstr "ロット番号" + +#. module: mrp_repair +#: field:mrp.repair,fees_lines:0 +msgid "Fees Lines" +msgstr "料金行" + +#. module: mrp_repair +#: field:mrp.repair.line,type:0 +msgid "Type" +msgstr "タイプ" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Fees Line(s)" +msgstr "料金行" + +#. module: mrp_repair +#: selection:mrp.repair,state:0 +msgid "To be Invoiced" +msgstr "請求" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Shipping address :" +msgstr "送付先:" + +#. module: mrp_repair +#: code:addons/mrp_repair/mrp_repair.py:334 +#: code:addons/mrp_repair/mrp_repair.py:384 +#: code:addons/mrp_repair/mrp_repair.py:413 +#: code:addons/mrp_repair/mrp_repair.py:442 +#, python-format +msgid "Error !" +msgstr "エラー" + +#. module: mrp_repair +#: field:mrp.repair.line,product_uom_qty:0 +msgid "Quantity (UoM)" +msgstr "数量" + +#. module: mrp_repair +#: help:mrp.repair.line,state:0 +msgid "" +" * The 'Draft' state is set automatically as draft when repair order in " +"draft state. \n" +"* The 'Confirmed' state is set automatically as confirm when repair order in " +"confirm state. \n" +"* The 'Done' state is set automatically when repair order is completed. " +" \n" +"* The 'Cancelled' state is set automatically when user cancel repair order." +msgstr "" +" ・ ドラフト状態は、修理オーダーがドラフト状態の時に自動的に設定されます。\n" +"・ 確認済状態は、修理オーダーが確認状態の時に自動的に設定されます。\n" +"・ 完了状態は、修理オーダーが完了した時に自動的に設定されます。\n" +"・ キャンセル済状態は、ユーザが修理オーダーをキャンセルした時に設定されます。" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Total :" +msgstr "合計:" + +#. module: mrp_repair +#: view:mrp.repair.cancel:0 +msgid "" +"This operation will cancel the Repair process, but will not cancel it's " +"Invoice. Do you want to continue?" +msgstr "この操作は修理処理でキャンセルされます。しかし、その請求書はキャンセルできません。続行しますか?" + +#. module: mrp_repair +#: field:mrp.repair,pricelist_id:0 +msgid "Pricelist" +msgstr "価格リスト" + +#. module: mrp_repair +#: view:mrp.repair:0 +#: field:mrp.repair,quotation_notes:0 +msgid "Quotation Notes" +msgstr "見積注記" + +#. module: mrp_repair +#: code:addons/mrp_repair/wizard/cancel_repair.py:49 +#, python-format +msgid "Warning!" +msgstr "警告" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Search Reair Orders" +msgstr "修理オーダー検索" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "(Add)" +msgstr "(追加)" + +#. module: mrp_repair +#: model:ir.model,name:mrp_repair.model_mrp_repair_line +#: view:mrp.repair:0 +msgid "Repair Line" +msgstr "修理行" + +#. module: mrp_repair +#: view:mrp.repair:0 +#: field:mrp.repair,partner_id:0 +msgid "Partner" +msgstr "パートナ" + +#. module: mrp_repair +#: field:mrp.repair,invoice_method:0 +msgid "Invoice Method" +msgstr "請求の方法" + +#. module: mrp_repair +#: field:mrp.repair,repaired:0 +msgid "Repaired" +msgstr "修理済" + +#. module: mrp_repair +#: field:mrp.repair.fee,invoice_line_id:0 +#: field:mrp.repair.line,invoice_line_id:0 +msgid "Invoice Line" +msgstr "請求書行" + +#. module: mrp_repair +#: selection:mrp.repair.line,state:0 +msgid "Canceled" +msgstr "キャンセル済" + +#. module: mrp_repair +#: code:addons/mrp_repair/mrp_repair.py:337 +#, python-format +msgid "Production lot is required for opration line with product '%s'" +msgstr "生産ロットは製品 %s が操作ラインのために必要です。" + +#. module: mrp_repair +#: selection:mrp.repair,invoice_method:0 +msgid "Before Repair" +msgstr "修理前" + +#. module: mrp_repair +#: field:mrp.repair,location_id:0 +msgid "Current Location" +msgstr "現在の場所" + +#. module: mrp_repair +#: view:mrp.repair.cancel:0 +msgid "Yes" +msgstr "" + +#. module: mrp_repair +#: field:mrp.repair,invoiced:0 +#: field:mrp.repair.fee,invoiced:0 +#: field:mrp.repair.line,invoiced:0 +msgid "Invoiced" +msgstr "請求済" + +#. module: mrp_repair +#: view:mrp.repair.cancel:0 +msgid "No" +msgstr "" + +#. module: mrp_repair +#: view:mrp.repair.make_invoice:0 +msgid "Create invoices" +msgstr "請求書作成" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "(Remove)" +msgstr "(取除く)" + +#. module: mrp_repair +#: selection:mrp.repair.line,type:0 +msgid "Add" +msgstr "追加" + +#. module: mrp_repair +#: view:mrp.repair.make_invoice:0 +msgid "Do you really want to create the invoice(s)?" +msgstr "本当に請求書を作成しますか?" + +#. module: mrp_repair +#: field:mrp.repair,name:0 +msgid "Repair Reference" +msgstr "修理参照" + +#. module: mrp_repair +#: model:ir.model,name:mrp_repair.model_mrp_repair +msgid "Repair Order" +msgstr "修理オーダー" + +#. module: mrp_repair +#: selection:mrp.repair,state:0 +msgid "Under Repair" +msgstr "修理中" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Ready To Repair" +msgstr "修理準備完了" + +#. module: mrp_repair +#: field:mrp.repair,amount_untaxed:0 +msgid "Untaxed Amount" +msgstr "非課税金額" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Guarantee Limit" +msgstr "保証制限" + +#. module: mrp_repair +#: field:mrp.repair,default_address_id:0 +msgid "unknown" +msgstr "不明" + +#. module: mrp_repair +#: field:mrp.repair,product_id:0 +#: report:repair.order:0 +msgid "Product to Repair" +msgstr "修理製品" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "N° :" +msgstr "番号:" + +#. module: mrp_repair +#: help:mrp.repair,pricelist_id:0 +msgid "The pricelist comes from the selected partner, by default." +msgstr "価格リストはデフォルトで選択したパートナから来ます。" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Date" +msgstr "日付" + +#. module: mrp_repair +#: model:ir.model,name:mrp_repair.model_mrp_repair_fee +msgid "Repair Fees Line" +msgstr "修理費行" + +#. module: mrp_repair +#: code:addons/mrp_repair/mrp_repair.py:334 +#, python-format +msgid "You cannot confirm a repair order which has no line." +msgstr "修理行には明細行がないため確認できません。" + +#. module: mrp_repair +#: selection:mrp.repair,state:0 +msgid "Quotation" +msgstr "見積" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Compute" +msgstr "計算" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Confirm Repair" +msgstr "修理の確認" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Repair Quotation" +msgstr "修理見積" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "End Repair" +msgstr "修理終了" + +#. module: mrp_repair +#: code:addons/mrp_repair/mrp_repair.py:413 +#: code:addons/mrp_repair/mrp_repair.py:442 +#, python-format +msgid "No account defined for product \"%s\"." +msgstr "製品 %s のアカウントが定義されていません。" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Quotations" +msgstr "見積" + +#. module: mrp_repair +#: field:mrp.repair.fee,product_uom_qty:0 +#: report:repair.order:0 +msgid "Quantity" +msgstr "数量" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Start Repair" +msgstr "修理開始" + +#. module: mrp_repair +#: view:mrp.repair:0 +#: field:mrp.repair,state:0 +#: field:mrp.repair.line,state:0 +msgid "State" +msgstr "状態" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Qty" +msgstr "数量" + +#. module: mrp_repair +#: field:mrp.repair.fee,price_unit:0 +#: field:mrp.repair.line,price_unit:0 +#: report:repair.order:0 +msgid "Unit Price" +msgstr "単価" + +#. module: mrp_repair +#: selection:mrp.repair,state:0 +#: selection:mrp.repair.line,state:0 +msgid "Done" +msgstr "完了" + +#. module: mrp_repair +#: help:mrp.repair,guarantee_limit:0 +msgid "" +"The guarantee limit is computed as: last move date + warranty defined on " +"selected product. If the current date is below the guarantee limit, each " +"operation and fee you will add will be set as 'not to invoiced' by default. " +"Note that you can change manually afterwards." +msgstr "" +"保証制限は次のように計算されます:最終移動日+選択製品で定義された保証期間。現在日付が保証期限内であれば、各操作と料金にはデフォルトで請求外としてセットさ" +"れます。その後、手作業で変更ができます。" + +#. module: mrp_repair +#: field:mrp.repair,invoice_id:0 +msgid "Invoice" +msgstr "請求書" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Fees" +msgstr "費用" + +#. module: mrp_repair +#: selection:mrp.repair,state:0 +#: view:mrp.repair.make_invoice:0 +msgid "Cancel" +msgstr "キャンセル" + +#. module: mrp_repair +#: field:mrp.repair.line,location_dest_id:0 +msgid "Dest. Location" +msgstr "宛先場所" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Operation Line(s)" +msgstr "操作行" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "History" +msgstr "履歴" + +#. module: mrp_repair +#: field:mrp.repair,location_dest_id:0 +msgid "Delivery Location" +msgstr "配達場所" + +#. module: mrp_repair +#: help:mrp.repair,invoice_method:0 +msgid "" +"This field allow you to change the workflow of the repair order. If value " +"selected is different from 'No Invoice', it also allow you to select the " +"pricelist and invoicing address." +msgstr "" +"この項目は修理オーダーのワークフローを変更することを許します。請求書なしと異なる値が選択された場合、価格リストと請求書住所の選択ができます。" + +#. module: mrp_repair +#: view:mrp.repair.make_invoice:0 +msgid "Create Invoice" +msgstr "請求書作成" + +#. module: mrp_repair +#: field:mrp.repair.fee,name:0 +#: field:mrp.repair.line,name:0 +#: report:repair.order:0 +msgid "Description" +msgstr "説明" + +#. module: mrp_repair +#: field:mrp.repair,operations:0 +msgid "Operation Lines" +msgstr "操作行" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "invoiced" +msgstr "請求済" + +#. module: mrp_repair +#: view:mrp.repair:0 +#: field:mrp.repair.fee,product_id:0 +#: field:mrp.repair.line,product_id:0 +msgid "Product" +msgstr "製品" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Invoice Corrected" +msgstr "修正された請求書" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Price" +msgstr "価格" + +#. module: mrp_repair +#: field:mrp.repair,deliver_bool:0 +msgid "Deliver" +msgstr "配達" + +#. module: mrp_repair +#: view:mrp.repair:0 +#: field:mrp.repair,internal_notes:0 +msgid "Internal Notes" +msgstr "内部注記" + +#. module: mrp_repair +#: report:repair.order:0 +msgid "Taxes:" +msgstr "税金:" + +#. module: mrp_repair +#: field:mrp.repair,picking_id:0 +msgid "Picking" +msgstr "集荷" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Untaxed amount" +msgstr "税抜金額" + +#. module: mrp_repair +#: code:addons/mrp_repair/wizard/cancel_repair.py:41 +#, python-format +msgid "Active ID is not Found" +msgstr "アクティブIDが見つかりません。" + +#. module: mrp_repair +#: code:addons/mrp_repair/wizard/cancel_repair.py:49 +#, python-format +msgid "Repair order is not invoiced." +msgstr "修理オーダーは請求されていません。" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Total amount" +msgstr "合計金額" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "UoM" +msgstr "単位" + +#. module: mrp_repair +#: selection:mrp.repair.line,type:0 +msgid "Remove" +msgstr "取除く" + +#. module: mrp_repair +#: field:mrp.repair.fee,product_uom:0 +#: field:mrp.repair.line,product_uom:0 +msgid "Product UoM" +msgstr "製品単位" + +#. module: mrp_repair +#: field:mrp.repair,partner_invoice_id:0 +msgid "Invoicing Address" +msgstr "請求住所" + +#. module: mrp_repair +#: selection:mrp.repair,invoice_method:0 +msgid "After Repair" +msgstr "修理後" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "Invoicing" +msgstr "請求中" + +#. module: mrp_repair +#: field:mrp.repair.line,location_id:0 +msgid "Source Location" +msgstr "元の場所" + +#. module: mrp_repair +#: model:ir.model,name:mrp_repair.model_mrp_repair_cancel +#: view:mrp.repair:0 +msgid "Cancel Repair" +msgstr "修理のキャンセル" + +#. module: mrp_repair +#: selection:mrp.repair,invoice_method:0 +msgid "No Invoice" +msgstr "請求外" + +#. module: mrp_repair +#: view:mrp.repair:0 +msgid "States" +msgstr "状態" + +#. module: mrp_repair +#: help:mrp.repair,partner_id:0 +msgid "" +"This field allow you to choose the parner that will be invoiced and delivered" +msgstr "この項目は請求して配信されるパートナを選択することを許します。" + +#. module: mrp_repair +#: field:mrp.repair,amount_total:0 +msgid "Total" +msgstr "合計" + +#. module: mrp_repair +#: selection:mrp.repair,state:0 +msgid "Ready to Repair" +msgstr "修理準備完了" + +#. module: mrp_repair +#: code:addons/mrp_repair/mrp_repair.py:370 +#, python-format +msgid "No partner !" +msgstr "パートナがありません。" diff --git a/addons/mrp_repair/mrp_repair_view.xml b/addons/mrp_repair/mrp_repair_view.xml index ff262329ce2..21e3dd5aa25 100644 --- a/addons/mrp_repair/mrp_repair_view.xml +++ b/addons/mrp_repair/mrp_repair_view.xml @@ -28,7 +28,7 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="repair_confirm" states="draft" string="Confirm Repair"/> <button name="repair_ready" states="confirmed" string="Start Repair"/> <button name="action_repair_start" states="ready" string="Start Repair"/> @@ -40,11 +40,8 @@ <button name="%(action_cancel_repair)d" states="confirmed,2binvoiced,ready,under_repair" string="Cancel Repair" type="action"/> <button name="%(action_cancel_repair)d" states="invoice_except" string="Cancel Repair" type="action"/> <button name="cancel" states="draft" string="Cancel Repair"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirmed,ready" /> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,confirmed,ready" /> + </header> <sheet string="Repairs order" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="name"/> diff --git a/addons/mrp_subproduct/i18n/ja.po b/addons/mrp_subproduct/i18n/ja.po new file mode 100644 index 00000000000..369cb9ec43d --- /dev/null +++ b/addons/mrp_subproduct/i18n/ja.po @@ -0,0 +1,128 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-05-31 06:38+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: mrp_subproduct +#: field:mrp.subproduct,product_id:0 +msgid "Product" +msgstr "製品" + +#. module: mrp_subproduct +#: selection:mrp.subproduct,subproduct_type:0 +msgid "Fixed" +msgstr "固定" + +#. module: mrp_subproduct +#: sql_constraint:mrp.bom:0 +msgid "" +"All product quantities must be greater than 0.\n" +"You should install the mrp_subproduct module if you want to manage extra " +"products on BoMs !" +msgstr "" +"全製品の数量は0より大きい必要があります。\n" +"部品表上で追加の製品を管理したい場合は、mrp_subproductモジュールをインストールする必要があります。" + +#. module: mrp_subproduct +#: view:mrp.bom:0 +msgid "sub products" +msgstr "サブ製品" + +#. module: mrp_subproduct +#: model:ir.model,name:mrp_subproduct.model_mrp_production +msgid "Manufacturing Order" +msgstr "製造オーダー" + +#. module: mrp_subproduct +#: constraint:mrp.bom:0 +msgid "BoM line product should not be same as BoM product." +msgstr "部品表のライン製品は部品表製品と同じではいけません。" + +#. module: mrp_subproduct +#: view:mrp.bom:0 +msgid "Sub Products" +msgstr "サブ製品" + +#. module: mrp_subproduct +#: field:mrp.subproduct,subproduct_type:0 +msgid "Quantity Type" +msgstr "数量タイプ" + +#. module: mrp_subproduct +#: model:ir.model,name:mrp_subproduct.model_mrp_bom +msgid "Bill of Material" +msgstr "部品表" + +#. module: mrp_subproduct +#: field:mrp.subproduct,product_qty:0 +msgid "Product Qty" +msgstr "製品数量" + +#. module: mrp_subproduct +#: field:mrp.subproduct,product_uom:0 +msgid "Product UOM" +msgstr "製品単位" + +#. module: mrp_subproduct +#: field:mrp.subproduct,bom_id:0 +msgid "BoM" +msgstr "部品表" + +#. module: mrp_subproduct +#: sql_constraint:mrp.production:0 +msgid "Reference must be unique per Company!" +msgstr "参照は会社ごとに固有でなければいけません。" + +#. module: mrp_subproduct +#: field:mrp.bom,sub_products:0 +msgid "sub_products" +msgstr "サブ製品" + +#. module: mrp_subproduct +#: selection:mrp.subproduct,subproduct_type:0 +msgid "Variable" +msgstr "変数" + +#. module: mrp_subproduct +#: model:ir.model,name:mrp_subproduct.model_mrp_subproduct +msgid "Sub Product" +msgstr "サブ製品" + +#. module: mrp_subproduct +#: constraint:mrp.production:0 +msgid "Order quantity cannot be negative or zero!" +msgstr "オーダー数量は負または0にはできません。" + +#. module: mrp_subproduct +#: help:mrp.subproduct,subproduct_type:0 +msgid "" +"Define how the quantity of subproducts will be set on the production orders " +"using this BoM. 'Fixed' depicts a situation where the quantity of created " +"subproduct is always equal to the quantity set on the BoM, regardless of how " +"many are created in the production order. By opposition, 'Variable' means " +"that the quantity will be computed as '(quantity of subproduct set on the " +"BoM / quantity of manufactured product set on the BoM * quantity of " +"manufactured product in the production order.)'" +msgstr "" +"この部品表を使った生産オーダー上にセットされるサブ製品の数量をどのくらいにするかを定義して下さい。固定は、生産オーダーによってどのくらい作成されるのかに関" +"係なく、作成されるサブ製品の数量は部品表上にセットする数量といつも一致します。反対に可変は、その数量は(部品表上のサブ製品設定の数量 / " +"部品表情の製造製品設定の数量 * 生産オーダーの製造製品の数量)として計算されます。" + +#. module: mrp_subproduct +#: constraint:mrp.bom:0 +msgid "Error ! You cannot create recursive BoM." +msgstr "エラー。再帰的な部品表を作ることはできません。" diff --git a/addons/multi_company/i18n/ja.po b/addons/multi_company/i18n/ja.po new file mode 100644 index 00000000000..9c792f95913 --- /dev/null +++ b/addons/multi_company/i18n/ja.po @@ -0,0 +1,97 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-05-31 06:13+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: multi_company +#: model:res.company,overdue_msg:multi_company.res_company_odoo +#: model:res.company,overdue_msg:multi_company.res_company_oerp_be +#: model:res.company,overdue_msg:multi_company.res_company_oerp_editor +#: model:res.company,overdue_msg:multi_company.res_company_oerp_in +#: model:res.company,overdue_msg:multi_company.res_company_oerp_us +msgid "" +"\n" +"Date: %(date)s\n" +"\n" +"Dear %(partner_name)s,\n" +"\n" +"Please find in attachment a reminder of all your unpaid invoices, for a " +"total amount due of:\n" +"\n" +"%(followup_amount).2f %(company_currency)s\n" +"\n" +"Thanks,\n" +"--\n" +"%(user_signature)s\n" +"%(company_name)s\n" +" " +msgstr "" +"\n" +"日付:%(date)s\n" +"\n" +"%(partner_name)s 様、\n" +"\n" +"どうぞ、添付いたしました御社のお支払をいただいていない請求書をご確認下さい。合計金額は次のとおりです:\n" +"\n" +"%(followup_amount).2f %(company_currency)s\n" +"\n" +"それではよろしくお願いいたします。\n" +"--\n" +"%(user_signature)s\n" +"%(company_name)s\n" +" " + +#. module: multi_company +#: model:product.category,name:multi_company.Odoo1 +msgid "Odoo Offers" +msgstr "Odoo提案" + +#. module: multi_company +#: view:multi_company.default:0 +msgid "Returning" +msgstr "返品" + +#. module: multi_company +#: model:ir.ui.menu,name:multi_company.menu_custom_multicompany +msgid "Multi-Companies" +msgstr "多角化会社" + +#. module: multi_company +#: view:multi_company.default:0 +msgid "Multi Company" +msgstr "多角化会社" + +#. module: multi_company +#: model:ir.actions.act_window,name:multi_company.action_inventory_form +#: model:ir.ui.menu,name:multi_company.menu_action_inventory_form +msgid "Default Company per Object" +msgstr "オブジェクト毎のデフォルト会社" + +#. module: multi_company +#: view:multi_company.default:0 +msgid "Matching" +msgstr "マッチング" + +#. module: multi_company +#: view:multi_company.default:0 +msgid "Condition" +msgstr "条件" + +#. module: multi_company +#: model:product.template,name:multi_company.product_product_odoo1_product_template +msgid "Odoo Offer" +msgstr "Odoo提案" diff --git a/addons/plugin/i18n/sv.po b/addons/plugin/i18n/sv.po new file mode 100644 index 00000000000..6d33164d1c4 --- /dev/null +++ b/addons/plugin/i18n/sv.po @@ -0,0 +1,23 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-06-04 15:14+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n" +"X-Generator: Launchpad (build 15353)\n" + +#. module: plugin +#: model:ir.model,name:plugin.model_plugin_handler +msgid "plugin.handler" +msgstr "plugin.handler" diff --git a/addons/plugin_thunderbird/i18n/ja.po b/addons/plugin_thunderbird/i18n/ja.po new file mode 100644 index 00000000000..b929d9c05e4 --- /dev/null +++ b/addons/plugin_thunderbird/i18n/ja.po @@ -0,0 +1,100 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-09 00:36+0000\n" +"PO-Revision-Date: 2012-05-31 22:07+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: plugin_thunderbird +#: field:plugin_thunderbird.installer,pdf_file:0 +msgid "Installation Manual" +msgstr "インストールマニュアル" + +#. module: plugin_thunderbird +#: field:plugin_thunderbird.installer,description:0 +msgid "Description" +msgstr "説明" + +#. module: plugin_thunderbird +#: view:plugin_thunderbird.installer:0 +msgid "title" +msgstr "タイトル" + +#. module: plugin_thunderbird +#: model:ir.model,name:plugin_thunderbird.model_plugin_thunderbird_installer +msgid "plugin_thunderbird.installer" +msgstr "" + +#. module: plugin_thunderbird +#: field:plugin_thunderbird.installer,config_logo:0 +msgid "Image" +msgstr "画像" + +#. module: plugin_thunderbird +#: field:plugin_thunderbird.installer,plugin_file:0 +#: field:plugin_thunderbird.installer,thunderbird:0 +msgid "Thunderbird Plug-in" +msgstr "Thunderbirdプラグイン" + +#. module: plugin_thunderbird +#: view:plugin_thunderbird.installer:0 +msgid "" +"This plug-in allows you to link your e-mail to OpenERP's documents. You can " +"attach it to any existing one in OpenERP or create a new one." +msgstr "" +"このプラグインはあなたのEメールをOpenERPのドキュメントにリンクさせることができます。OpenERPの既存あるいは新しく作成したドキュメントを添付で" +"きます。" + +#. module: plugin_thunderbird +#: help:plugin_thunderbird.installer,thunderbird:0 +msgid "" +"Allows you to select an object that you would like to add to your email and " +"its attachments." +msgstr "あなたがEメールに追加したい、添付したいオブジェクトを選択するのが許されます。" + +#. module: plugin_thunderbird +#: help:plugin_thunderbird.installer,pdf_file:0 +msgid "The documentation file :- how to install Thunderbird Plug-in." +msgstr "ドキュメントファイル:Thunderbirdプラグインのインストール方法" + +#. module: plugin_thunderbird +#: view:plugin_thunderbird.installer:0 +msgid "_Close" +msgstr "閉じる" + +#. module: plugin_thunderbird +#: view:plugin_thunderbird.installer:0 +msgid "Installation and Configuration Steps" +msgstr "インストールと設定の手順" + +#. module: plugin_thunderbird +#: field:plugin_thunderbird.installer,name:0 +#: field:plugin_thunderbird.installer,pdf_name:0 +msgid "File name" +msgstr "ファイル名" + +#. module: plugin_thunderbird +#: help:plugin_thunderbird.installer,plugin_file:0 +msgid "" +"Thunderbird plug-in file. Save as this file and install this plug-in in " +"thunderbird." +msgstr "Thunderbirdプラグインファイル。このファイルを保存し、Thunderbirdの中にこのプラグインをインストールして下さい。" + +#. module: plugin_thunderbird +#: model:ir.actions.act_window,name:plugin_thunderbird.action_thunderbird_installer +#: model:ir.ui.menu,name:plugin_thunderbird.menu_base_config_plugins_thunderbird +#: view:plugin_thunderbird.installer:0 +msgid "Install Thunderbird Plug-In" +msgstr "Thunderbirdプラグインのインストール" diff --git a/addons/point_of_sale/i18n/ja.po b/addons/point_of_sale/i18n/ja.po new file mode 100644 index 00000000000..f65e8872a7c --- /dev/null +++ b/addons/point_of_sale/i18n/ja.po @@ -0,0 +1,2730 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 01:37+0100\n" +"PO-Revision-Date: 2012-06-01 20:39+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: point_of_sale +#: field:report.transaction.pos,product_nb:0 +msgid "Product Nb." +msgstr "商品番号" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_today +msgid "Sales by day" +msgstr "日毎の販売" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_open_statement.py:49 +#, python-format +msgid "" +"You must define which payment method must be available through the point of " +"sale by reusing existing bank and cash through \"Accounting > Configuration " +"> Financial Accounting > Journals\". Select a journal and check the field " +"\"PoS Payment Method\" from the \"Point of Sale\" tab. You can also create " +"new payment methods directly from menu \"PoS Backend > Configuration > " +"Payment Methods\"." +msgstr "" +"会計 > 設定 > 財務会計 > 仕訳帳 " +"から既存の銀行と現金を再利用することによって、POSを通して利用可能にしなければならない支払方法を定義する必要があります。仕訳帳を選択し、POSタブからP" +"OS支払方法項目をチェックして下さい。POS後方事務 > 設定 > 支払方法メニューから直接新しい支払方法を作成することもできます。" + +#. module: point_of_sale +#: view:pos.order:0 view:report.pos.order:0 +msgid "Today" +msgstr "本日" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.plain_water +msgid "Plain Water" +msgstr "一般の水" + +#. module: point_of_sale +#: view:report.cash.register:0 +msgid "Year from Creation date of cash register" +msgstr "キャッシュレジスタの作成日の年" + +#. module: point_of_sale +#: view:pos.confirm:0 +msgid "Post All Orders" +msgstr "全ての注文を記帳" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_2l_product_template +msgid "Spa Reine 2L" +msgstr "SPA REINE 2L" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_box_out +msgid "Pos Box Out" +msgstr "POSボックスアウト" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_cash_register_all +#: model:ir.ui.menu,name:point_of_sale.menu_report_cash_register_all +msgid "Register Analysis" +msgstr "レジスター分析" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_lines_detail +#: report:pos.details:0 report:pos.details_summary:0 +msgid "Details of Sales" +msgstr "販売の詳細" + +#. module: point_of_sale +#: view:report.cash.register:0 field:report.cash.register,day:0 +#: view:report.pos.order:0 field:report.pos.order,day:0 +msgid "Day" +msgstr "日" + +#. module: point_of_sale +#: view:pos.make.payment:0 +msgid "Add payment :" +msgstr "支払の追加:" + +#. module: point_of_sale +#: field:pos.box.out,name:0 +msgid "Description / Reason" +msgstr "説明 / 理由" + +#. module: point_of_sale +#: field:report.sales.by.margin.pos,product_name:0 +#: field:report.sales.by.margin.pos.month,product_name:0 +msgid "Product Name" +msgstr "商品名" + +#. module: point_of_sale +#: view:report.cash.register:0 +msgid "Month from Creation date of cash register" +msgstr "キャッシュレジスタの作成日の月" + +#. module: point_of_sale +#: report:account.statement:0 field:pos.box.entries,amount:0 +#: field:pos.box.out,amount:0 report:pos.invoice:0 +#: field:pos.make.payment,amount:0 report:pos.user.product:0 +#: field:report.transaction.pos,amount:0 +msgid "Amount" +msgstr "金額" + +#. module: point_of_sale +#: constraint:account.journal:0 +msgid "" +"Configuration error! The currency chosen should be shared by the default " +"accounts too." +msgstr "設定エラー。選択された通貨はデフォルトアカウントによっても共有されなければなりません。" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.pos_category_action +#: model:ir.ui.menu,name:point_of_sale.menu_pos_category view:pos.category:0 +msgid "PoS Categories" +msgstr "POS分類" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_box_out +#: model:ir.ui.menu,name:point_of_sale.menu_wizard_enter_jrnl2 +msgid "Take Money Out" +msgstr "現金取出" + +#. module: point_of_sale +#: report:pos.lines:0 +msgid "VAT" +msgstr "消費税" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Origin" +msgstr "起点" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Tax" +msgstr "税金" + +#. module: point_of_sale +#: report:pos.user.product:0 +msgid "Starting Date" +msgstr "開始日" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_box_entries.py:46 +#, python-format +msgid "" +"You do not have any open cash register. You must create a payment method or " +"open a cash register." +msgstr "開いているキャッシュレジスタを持っていません。支払方法を作成するか、キャッシュレジスタを開く必要があります。" + +#. module: point_of_sale +#: report:account.statement:0 field:report.pos.order,partner_id:0 +msgid "Partner" +msgstr "パートナ" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.details_summary:0 +msgid "Total of the day" +msgstr "1日の合計" + +#. module: point_of_sale +#: view:report.pos.order:0 field:report.pos.order,average_price:0 +msgid "Average Price" +msgstr "平均価格" + +#. module: point_of_sale +#: report:pos.lines:0 +msgid "Disc. (%)" +msgstr "割引(%)" + +#. module: point_of_sale +#: model:ir.ui.menu,name:point_of_sale.menu_point_open_config +msgid "Cash Register Management" +msgstr "キャッシュレジスタ管理" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_naturel_45g_product_template +msgid "Lays Naturel 45g" +msgstr "Lays ナチュラル 45g" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Accounting Information" +msgstr "会計情報" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_regular_2l_product_template +msgid "Coca-Cola Regular 2L" +msgstr "コカコーラ 2L" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_month +msgid "Sales by month" +msgstr "月毎の売上" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.soda_orange +msgid "Orange" +msgstr "オレンジ" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_user_pos_today +#: view:report.sales.by.user.pos:0 view:report.sales.by.user.pos.month:0 +msgid "Sales by User" +msgstr "ユーザ毎の売上" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Disc.(%)" +msgstr "割引(%)" + +#. module: point_of_sale +#: field:pos.box.entries,ref:0 +msgid "Ref" +msgstr "参照" + +#. module: point_of_sale +#: view:report.pos.order:0 field:report.pos.order,price_total:0 +msgid "Total Price" +msgstr "合計価格" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.leffe_brune_33cl_product_template +msgid "Leffe Brune 33cl" +msgstr "Leffe Brune 330ml" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_sales_user +#: report:pos.sales.user:0 +msgid "Sales Report" +msgstr "販売レポート" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.beverage +msgid "Beverages" +msgstr "飲物" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.stella_50cl_product_template +msgid "Stella Artois 50cl" +msgstr "Stella Artois 500ml" + +#. module: point_of_sale +#: view:pos.details:0 +msgid "Dates" +msgstr "日付" + +#. module: point_of_sale +#: field:pos.category,parent_id:0 +msgid "Parent Category" +msgstr "親分類" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.lines:0 report:pos.payment.report.user:0 +#: report:pos.user.product:0 +msgid "[" +msgstr "[" + +#. module: point_of_sale +#: field:report.sales.by.margin.pos,total:0 +#: field:report.sales.by.margin.pos.month,total:0 +msgid "Margin" +msgstr "粗利益" + +#. module: point_of_sale +#: field:pos.discount,discount:0 field:pos.order.line,discount:0 +msgid "Discount (%)" +msgstr "割引(%)" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_speciale_product_template +msgid "Dr. Oetker Ristorante Speciale" +msgstr "Dr. Oetker レストラン スペシャル" + +#. module: point_of_sale +#: view:pos.order.line:0 +msgid "Total qty" +msgstr "合計数量" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_orange_33cl_product_template +msgid "Fanta Orange 33cl" +msgstr "ファンタ オレンジ 330ml" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_user_pos_month +msgid "Sales by User Monthly" +msgstr "月間ユーザ別販売" + +#. module: point_of_sale +#: report:all.closed.cashbox.of.the.day:0 +msgid "Today's Closed Cashbox" +msgstr "本日の閉じられた金庫" + +#. module: point_of_sale +#: view:report.cash.register:0 +msgid "Day from Creation date of cash register" +msgstr "キャッシュレジスタの作成日の日" + +#. module: point_of_sale +#: model:ir.ui.menu,name:point_of_sale.menu_point_of_sale +msgid "Daily Operations" +msgstr "日常業務" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:285 +#, python-format +msgid "Configuration Error !" +msgstr "設定エラーです。" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.sparkling_water +msgid "Sparkling Water" +msgstr "スパークリングウォーター" + +#. module: point_of_sale +#: view:pos.box.entries:0 +msgid "Fill in this form if you put money in the cash register:" +msgstr "キャッシュレジスタ内にお金を装填する場合はこのフォームに記入して下さい。" + +#. module: point_of_sale +#: view:account.bank.statement:0 +msgid "Search Cash Statements" +msgstr "現金取引明細書の検索" + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "August" +msgstr "8月" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_max_lemon_33cl_product_template +msgid "Pepsi Max Cool Lemon 33cl" +msgstr "ペプシマックス クールレモン 330ml" + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "June" +msgstr "6月" + +#. module: point_of_sale +#: view:pos.order.line:0 +msgid "POS Order line" +msgstr "POSオーダー行" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_orange_50cl_product_template +msgid "Fanta Orange 50cl" +msgstr "ファンタ オレンジ 500ml" + +#. module: point_of_sale +#: field:pos.category,child_id:0 +msgid "Children Categories" +msgstr "子分類" + +#. module: point_of_sale +#: field:pos.make.payment,payment_date:0 +msgid "Payment Date" +msgstr "支払日" + +#. module: point_of_sale +#: help:product.product,pos_categ_id:0 +msgid "" +"If you want to sell this product through the point of sale, select the " +"category it belongs to." +msgstr "POSを通してこの商品を販売したい場合は、それが属する分類を選択して下さい。" + +#. module: point_of_sale +#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0 +msgid "Closing Date" +msgstr "締切日" + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "October" +msgstr "10月" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_1l_product_template +msgid "Coca-Cola Light 1L" +msgstr "コカコーラ ライト 1L" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.details_summary:0 +msgid "Summary" +msgstr "要約" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_50cl_product_template +msgid "Chaudfontaine 50cl" +msgstr "Chaudfontaine 500ml" + +#. module: point_of_sale +#: report:pos.invoice:0 report:pos.lines:0 field:pos.order.line,qty:0 +#: field:report.sales.by.user.pos,qty:0 +#: field:report.sales.by.user.pos.month,qty:0 +msgid "Quantity" +msgstr "数量" + +#. module: point_of_sale +#: field:pos.order.line,name:0 +msgid "Line No" +msgstr "行番号" + +#. module: point_of_sale +#: view:account.bank.statement:0 +msgid "Period" +msgstr "期間" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_open_statement.py:49 +#, python-format +msgid "No Cash Register Defined !" +msgstr "キャッシュレジスタが定義されていません。" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Net Total:" +msgstr "合計:" + +#. module: point_of_sale +#: field:pos.make.payment,payment_name:0 +msgid "Payment Reference" +msgstr "支払参照" + +#. module: point_of_sale +#: report:pos.details_summary:0 +msgid "Mode of Payment" +msgstr "支払モード" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_confirm +msgid "Post POS Journal Entries" +msgstr "POS仕訳帳エントリーの記帳" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:408 +#, python-format +msgid "Customer Invoice" +msgstr "顧客請求書" + +#. module: point_of_sale +#: view:pos.box.out:0 +msgid "Output Operation" +msgstr "出力操作" + +#. module: point_of_sale +#: view:report.pos.order:0 field:report.pos.order,total_discount:0 +msgid "Total Discount" +msgstr "合計割引" + +#. module: point_of_sale +#: view:pos.details:0 view:pos.payment.report:0 view:pos.payment.report.user:0 +#: view:pos.sale.user:0 +msgid "Print Report" +msgstr "レポートの印刷" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_bolognese_product_template +msgid "Dr. Oetker Ristorante Bolognese" +msgstr "Dr. Oetker レストランボロネーゼ" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_box_entries.py:105 +#, python-format +msgid "Please check that income account is set to %s" +msgstr "その損益勘定が %s にセットされていることをチェックして下さい。" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.pizza +msgid "Pizza" +msgstr "ピザ" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_return.py:85 +#: code:addons/point_of_sale/wizard/pos_return.py:240 +#, python-format +msgid "Add Product" +msgstr "商品追加" + +#. module: point_of_sale +#: field:report.transaction.pos,invoice_am:0 +msgid "Invoice Amount" +msgstr "請求書金額" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.coke +msgid "Coke" +msgstr "コーク" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Tel. :" +msgstr "TEL:" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_confirm +#: model:ir.ui.menu,name:point_of_sale.menu_wizard_pos_confirm +msgid "Create Sale Entries" +msgstr "販売エントリーの作成" + +#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: point_of_sale +#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: model:ir.actions.act_window,name:point_of_sale.action_pos_payment +#: report:pos.details:0 view:pos.order:0 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:87 +msgid "Payment" +msgstr "支払" + +#. module: point_of_sale +#: view:report.cash.register:0 +msgid "Cash Analysis created in current month" +msgstr "現在月中に作成された現金分析" + +#. module: point_of_sale +#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0 +msgid "Ending Balance" +msgstr "終了残高" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_max_50cl_product_template +msgid "Pepsi Max 50cl" +msgstr "ペプシマックス 500ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.san_pellegrino_1l_product_template +msgid "San Pellegrino 1L" +msgstr "サンペレグリノ 1L" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Post Entries" +msgstr "エントリーの記帳" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_1l_product_template +msgid "Spa Reine 1L" +msgstr "SPA REINE 1L" + +#. module: point_of_sale +#: report:pos.details_summary:0 +msgid "Mode of Taxes" +msgstr "税金のモード" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_close_statement.py:50 +#, python-format +msgid "Cash registers are already closed." +msgstr "キャッシュレジスタは既に閉じられました。" + +#. module: point_of_sale +#: constraint:product.product:0 +msgid "Error: Invalid ean code" +msgstr "エラー:無効な商品識別番号です。" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_open_statement +#: view:pos.open.statement:0 +msgid "Open Statements" +msgstr "取引明細書を開く" + +#. module: point_of_sale +#: field:pos.details,date_end:0 field:pos.sale.user,date_end:0 +msgid "Date End" +msgstr "終了日" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "POS ordered created during current year" +msgstr "現在年中に作成されたPOSオーダー" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_pos_form +#: model:ir.ui.menu,name:point_of_sale.menu_point_ofsale view:pos.order:0 +msgid "PoS Orders" +msgstr "POSオーダー" + +#. module: point_of_sale +#: report:pos.details:0 +msgid "Sales total(Revenue)" +msgstr "販売合計(売上)" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.details_summary:0 +msgid "Total paid" +msgstr "合計支払" + +#. module: point_of_sale +#: model:ir.ui.menu,name:point_of_sale.menu_all_menu_all_register +msgid "List of Cash Registers" +msgstr "キャッシュレジスタのリスト" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.maes_50cl_product_template +msgid "Maes 50cl" +msgstr "メイズ 500ml" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_report_transaction_pos +msgid "transaction for the pos" +msgstr "POS取引" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "Not Invoiced" +msgstr "請求外" + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "March" +msgstr "3月" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_users_product_re +#: report:pos.user.product:0 +msgid "User's Product" +msgstr "ユーザ商品" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:641 +#, python-format +msgid "" +"You have to select a pricelist in the sale form !\n" +"Please set one before choosing a product." +msgstr "" +"販売フォームの中の価格リストを選択する必要があります。\n" +"商品を選択する前にそれをセットして下さい。" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_orange_2l_product_template +msgid "Fanta Orange 2L" +msgstr "ファンタ オレンジ 2L" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_33cl_product_template +msgid "Spa Reine 33cl" +msgstr "SPA REINE 330ml" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_discount +msgid "Add a Global Discount" +msgstr "全体割引を追加" + +#. module: point_of_sale +#: field:pos.order.line,price_subtotal_incl:0 +msgid "Subtotal" +msgstr "小計" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_prosciutto_product_template +msgid "Dr. Oetker Ristorante Prosciutto" +msgstr "Dr. Oetker レストラン プロシュート" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_light_paprika_170g_product_template +#: model:product.template,name:point_of_sale.lays_paprika_170g_product_template +msgid "Lays Light Paprika 170g" +msgstr "Lays ライト パプリカ 170g" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_lemon_50cl_product_template +msgid "Coca-Cola Light Lemon 50cl" +msgstr "コカコーラ ライト レモン 500ml" + +#. module: point_of_sale +#: field:report.cash.register,balance_end_real:0 +msgid "Closing Balance" +msgstr "締切残高" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.act_pos_open_statement +#: model:ir.model,name:point_of_sale.model_pos_close_statement +msgid "Close Statements" +msgstr "取引明細書を閉じる" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.croky_naturel_45g_product_template +msgid "Croky Naturel 45g" +msgstr "Croky ナチュラル 45g" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.product_product_putmoneyforchange1_product_template +msgid "Cash Out" +msgstr "現金引出" + +#. module: point_of_sale +#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0 +msgid "Starting Balance" +msgstr "開始残高" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_category +#: field:product.product,pos_categ_id:0 +msgid "PoS Category" +msgstr "POS分類" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chimay_bleu_75cl_product_template +msgid "Chimay Bleu 75cl" +msgstr "シメイ Bleu 750ml" + +#. module: point_of_sale +#: report:pos.payment.report.user:0 +msgid "Payment By User" +msgstr "ユーザによる支払" + +#. module: point_of_sale +#: view:report.pos.order:0 field:report.pos.order,nbr:0 +msgid "# of Lines" +msgstr "行数" + +#. module: point_of_sale +#: help:account.journal,check_dtls:0 +msgid "" +"This field authorize Validation of Cashbox without controlling the closing " +"balance." +msgstr "この項目は締切残高を制御することなく金庫の検証を許可します。" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_details +#: model:ir.ui.menu,name:point_of_sale.menu_pos_details +msgid "Sale Details" +msgstr "販売詳細" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.pils +msgid "Pils" +msgstr "ピルスナー" + +#. module: point_of_sale +#: report:all.closed.cashbox.of.the.day:0 +msgid "St.Name" +msgstr "" + +#. module: point_of_sale +#: report:pos.details_summary:0 +msgid "Sales total" +msgstr "販売合計" + +#. module: point_of_sale +#: view:pos.order.line:0 +msgid "Sum of subtotals" +msgstr "小計の合計" + +#. module: point_of_sale +#: field:pos.order,lines:0 +msgid "Order Lines" +msgstr "受注行" + +#. module: point_of_sale +#: view:report.transaction.pos:0 +msgid "Total Transaction" +msgstr "合計取引" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_petillante_50cl_product_template +msgid "Chaudfontaine Petillante 50cl" +msgstr "Chaudfontaine ペティアント 500ml" + +#. module: point_of_sale +#: field:pos.order.line,create_date:0 +msgid "Creation Date" +msgstr "作成日" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_sales_user_today +msgid "Today's Sales" +msgstr "本日の販売" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_naturel_300g_product_template +msgid "Lays Naturel XXL 300g" +msgstr "Lays ナチュラル XXL 300g" + +#. module: point_of_sale +#: view:report.sales.by.margin.pos:0 view:report.sales.by.margin.pos.month:0 +#: view:report.sales.by.user.pos:0 view:report.sales.by.user.pos.month:0 +#: view:report.transaction.pos:0 +msgid "POS " +msgstr "" + +#. module: point_of_sale +#: report:account.statement:0 report:pos.user.product:0 +msgid "Total :" +msgstr "合計:" + +#. module: point_of_sale +#: view:report.cash.register:0 view:report.pos.order:0 +msgid "My Sales" +msgstr "私の販売" + +#. module: point_of_sale +#: field:pos.order,pricelist_id:0 +msgid "Pricelist" +msgstr "価格リスト" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.details_summary:0 +msgid "Total invoiced" +msgstr "請求合計" + +#. module: point_of_sale +#: view:report.pos.order:0 field:report.pos.order,product_qty:0 +msgid "# of Qty" +msgstr "数量の数" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_report_sales_by_margin_pos_month +msgid "Sales by margin monthly" +msgstr "月間利鞘別売上" + +#. module: point_of_sale +#: view:pos.order:0 field:report.sales.by.margin.pos,date_order:0 +#: field:report.sales.by.margin.pos.month,date_order:0 +#: field:report.sales.by.user.pos,date_order:0 +#: field:report.sales.by.user.pos.month,date_order:0 +msgid "Order Date" +msgstr "オーダー日" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.stella_33cl_product_template +msgid "Stella Artois 33cl" +msgstr "Stella Artois 330ml" + +#. module: point_of_sale +#: view:report.cash.register:0 +msgid "Cash Analysis created during this year" +msgstr "今年中に作成された現金分析" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Draft Invoice" +msgstr "ドラフト請求書" + +#. module: point_of_sale +#: constraint:account.bank.statement.line:0 +msgid "" +"The amount of the voucher must be the same amount as the one on the " +"statement line" +msgstr "バウチャーの金額は明細行のひとつの金額と同じでなければなりません。" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Fiscal Position Remark :" +msgstr "会計ポジションの注釈:" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.evian_2l_product_template +msgid "Evian 2L" +msgstr "エビアン 2L" + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "September" +msgstr "9月" + +#. module: point_of_sale +#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0 +msgid "Opening Date" +msgstr "開始日" + +#. module: point_of_sale +#: report:pos.lines:0 +msgid "Taxes :" +msgstr "税金:" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_2l_product_template +msgid "Coca-Cola Light 2L" +msgstr "コカコーラ ライト 2L" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_funghi_product_template +msgid "Dr. Oetker Ristorante Funghi" +msgstr "Dr. Oetker レストラン フンギ" + +#. module: point_of_sale +#: field:report.transaction.pos,disc:0 +msgid "Disc." +msgstr "割引" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lindemans_kriek_37,5cl_product_template +msgid "Lindemans Kriek 37.5cl" +msgstr "リンデマンス Kriek 375ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_zero_33cl_product_template +msgid "Coca-Cola Zero 33cl" +msgstr "コカコーラ ゼロ 330ml" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "VAT :" +msgstr "消費税:" + +#. module: point_of_sale +#: view:pos.order.line:0 +msgid "POS Order lines" +msgstr "POSオーダー行" + +#. module: point_of_sale +#: view:pos.receipt:0 +msgid "Receipt :" +msgstr "レシート:" + +#. module: point_of_sale +#: field:account.bank.statement.line,pos_statement_id:0 +#: field:pos.order,amount_return:0 +msgid "unknown" +msgstr "不明" + +#. module: point_of_sale +#: report:pos.details:0 field:report.transaction.pos,date_create:0 +msgid "Date" +msgstr "日付" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_discount +#: view:pos.discount:0 +msgid "Apply Discount" +msgstr "割引適用" + +#. module: point_of_sale +#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0 +#: view:pos.details:0 report:pos.sales.user:0 report:pos.sales.user.today:0 +#: report:pos.user.product:0 view:report.cash.register:0 +#: field:report.cash.register,user_id:0 +#: field:report.sales.by.margin.pos,user_id:0 +#: field:report.sales.by.margin.pos.month,user_id:0 +#: field:report.sales.by.user.pos,user_id:0 +#: field:report.sales.by.user.pos.month,user_id:0 +#: field:report.transaction.pos,user_id:0 +#: model:res.groups,name:point_of_sale.group_pos_user +msgid "User" +msgstr "ユーザ" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_33cl_product_template +msgid "Coca-Cola Light 33cl" +msgstr "コカコーラ ライト 330ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.perrier_1l_product_template +msgid "Perrier 1L" +msgstr "ペリエ 1L" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.details_summary:0 +msgid "Total discount" +msgstr "合計割引" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_box_entries +msgid "Pos Box Entries" +msgstr "POSボックスエントリー" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.boon_framboise_37,5cl_product_template +msgid "Boon Framboise 37.5cl" +msgstr "Boon Framboise 375ml" + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "November" +msgstr "11月" + +#. module: point_of_sale +#: field:pos.config.journal,code:0 +msgid "Code" +msgstr "コード" + +#. module: point_of_sale +#: view:account.bank.statement:0 report:account.statement:0 +#: report:all.closed.cashbox.of.the.day:0 +#: model:ir.model,name:point_of_sale.model_account_journal +#: field:pos.config.journal,journal_id:0 field:pos.order,sale_journal:0 +#: view:report.cash.register:0 field:report.cash.register,journal_id:0 +#: field:report.pos.order,journal_id:0 +msgid "Journal" +msgstr "仕訳帳" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.timmermans_faro_37,5cl_product_template +msgid "Timmermans Faro 37.5cl" +msgstr "Timmermans Faro 375ml" + +#. module: point_of_sale +#: view:account.bank.statement:0 view:pos.order:0 field:pos.order,state:0 +#: report:pos.sales.user:0 report:pos.sales.user.today:0 +#: field:report.cash.register,state:0 field:report.pos.order,state:0 +msgid "State" +msgstr "状態" + +#. module: point_of_sale +#: field:report.transaction.pos,no_trans:0 +msgid "Number of Transaction" +msgstr "取引数" + +#. module: point_of_sale +#: view:pos.box.entries:0 view:pos.box.out:0 view:pos.confirm:0 +#: view:pos.make.payment:0 view:pos.open.statement:0 view:pos.receipt:0 +msgid "Cancel" +msgstr "キャンセル" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_details_summary +msgid "Sales (summary)" +msgstr "販売(合計)" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.timmermans_kriek_37,5cl_product_template +msgid "Timmermans Kriek 37.5cl" +msgstr "Timmermans Kriek 375ml" + +#. module: point_of_sale +#: field:account.journal,check_dtls:0 +msgid "Control Balance Before Closing" +msgstr "閉じる前のコントロール残高" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_order_line +msgid "Lines of Point of Sale" +msgstr "POSの行" + +#. module: point_of_sale +#: view:pos.order:0 view:report.transaction.pos:0 +msgid "Amount total" +msgstr "金額合計" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_new_bank_statement_all_tree +msgid "Cash Registers" +msgstr "キャッシュレジスタ" + +#. module: point_of_sale +#: report:pos.details:0 +msgid "Users" +msgstr "ユーザ" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.food +msgid "Food" +msgstr "食品" + +#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: point_of_sale +#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: report:pos.details:0 report:pos.invoice:0 report:pos.lines:0 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:30 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:69 +msgid "Price" +msgstr "価格" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.ijsboerke_stracciatella_2,5l_product_template +msgid "ijsboerke Stracciatella 2.5L" +msgstr "アイスブルク Stracciatella 2.5L" + +#. module: point_of_sale +#: field:account.journal,journal_user:0 +msgid "PoS Payment Method" +msgstr "POS支払方法" + +#. module: point_of_sale +#: help:product.product,expense_pdt:0 +msgid "" +"This is a product you can use to take cash from a statement for the point of " +"sale backend, exemple: money lost, transfer to bank, etc." +msgstr "これはPOS後方事務のための取引明細書から現金を出すために使用できる商品です。例えば、現金の紛失、銀行への転送など。" + +#. module: point_of_sale +#: field:report.cash.register,date:0 +msgid "Create Date" +msgstr "作成日" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_regular_33cl_product_template +msgid "Coca-Cola Regular 33cl" +msgstr "コカコーラ 330ml" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:65 +#, python-format +msgid "Unable to Delete !" +msgstr "削除できません。" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_paprika_oven_150g_product_template +msgid "Lays Paprika Oven Baked 150g" +msgstr "Lays パプリカ オーブンベークド 150g" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.details_summary:0 +msgid "Start Period" +msgstr "期首日" + +#. module: point_of_sale +#: report:account.statement:0 field:pos.category,complete_name:0 +#: field:pos.category,name:0 report:pos.sales.user:0 +#: report:pos.sales.user.today:0 +msgid "Name" +msgstr "名前" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_gazeuse_33cl_product_template +msgid "Spa Barisart 33cl" +msgstr "SPA Barisart 330ml" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:284 +#, python-format +msgid "" +"There is no receivable account defined to make payment for the partner: " +"\"%s\" (id:%d)" +msgstr "パートナに支払をするための売掛金勘定がありません:%s (id:%d)" + +#. module: point_of_sale +#: view:pos.confirm:0 +msgid "" +"Generate all sale journal entries for non invoiced orders linked to a closed " +"cash register or statement." +msgstr "閉じたキャッシュレジスタや取引明細書に関連する請求書なしのオーダーのための全ての仕訳帳エントリーを生成します。" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:293 +#: code:addons/point_of_sale/point_of_sale.py:472 +#: code:addons/point_of_sale/report/pos_invoice.py:46 +#: code:addons/point_of_sale/wizard/pos_box_entries.py:46 +#: code:addons/point_of_sale/wizard/pos_box_entries.py:100 +#: code:addons/point_of_sale/wizard/pos_box_entries.py:105 +#: code:addons/point_of_sale/wizard/pos_box_out.py:86 +#: code:addons/point_of_sale/wizard/pos_box_out.py:88 +#, python-format +msgid "Error !" +msgstr "エラー" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.lines:0 report:pos.payment.report.user:0 +#: report:pos.user.product:0 +msgid "]" +msgstr "]" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_account_bank_statement +msgid "Bank Statement" +msgstr "銀行取引明細書" + +#. module: point_of_sale +#: sql_constraint:account.journal:0 +msgid "The name of the journal must be unique per company !" +msgstr "仕訳帳の名前は会社ごとに固有でなければなりません、" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_light_naturel_170g_product_template +#: model:product.template,name:point_of_sale.lays_naturel_170g_product_template +msgid "Lays Light Naturel 170g" +msgstr "Lays ライト ナチュラル 170g" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.details_summary:0 report:pos.lines:0 +#: report:pos.payment.report.user:0 report:pos.sales.user:0 +#: report:pos.sales.user.today:0 report:pos.user.product:0 +msgid "Print Date" +msgstr "印刷日" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:282 +#, python-format +msgid "There is no receivable account defined to make payment" +msgstr "支払のための売掛金勘定が定義されていません。" + +#. module: point_of_sale +#: view:pos.open.statement:0 +msgid "Do you want to open cash registers?" +msgstr "キャッシュレジスタを開きますか?" + +#. module: point_of_sale +#: help:pos.category,sequence:0 +msgid "" +"Gives the sequence order when displaying a list of product categories." +msgstr "商品分類のリストを表示する時に並び順を与えて下さい。" + +#. module: point_of_sale +#: field:product.product,expense_pdt:0 +msgid "PoS Cash Output" +msgstr "POS現金払出" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.soda +msgid "Soda" +msgstr "ソーダ" + +#. module: point_of_sale +#: view:account.bank.statement:0 view:pos.order:0 view:report.cash.register:0 +#: view:report.pos.order:0 +msgid "Group By..." +msgstr "グループ化…" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "POS Orders" +msgstr "POSオーダー" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.all_closed_cashbox_of_the_day +msgid "All Closed CashBox" +msgstr "全ての閉じた金庫" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:640 +#, python-format +msgid "No Pricelist !" +msgstr "価格リストがありません。" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Update" +msgstr "更新" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Base" +msgstr "基本" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.categ_others +msgid "Others" +msgstr "その他" + +#. module: point_of_sale +#: view:product.product:0 +msgid "Point-of-Sale" +msgstr "POS" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.evian_50cl_product_template +msgid "Evian 50cl" +msgstr "エビアン 500ml" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Notes" +msgstr "注記" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Sale Order" +msgstr "販売オーダー" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_lemon_2l_product_template +msgid "Coca-Cola Light Lemon 2L" +msgstr "コカコーラ ライト レモン 2L" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.invoice:0 field:pos.order,amount_tax:0 +msgid "Taxes" +msgstr "税金" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line +#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line_day +#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line_form +msgid "Sale line" +msgstr "販売行" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_naturel_oven_150g_product_template +msgid "Lays Naturel Oven Baked 150g" +msgstr "Lays ナチュラル オーブンベークド 150g" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_decaf_33cl_product_template +msgid "Coca-Cola Light Decaf 33cl" +msgstr "コカコーラ ライト デカフェ 330ml" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.product_normal_action +#: model:ir.ui.menu,name:point_of_sale.menu_point_of_sale_product +#: model:ir.ui.menu,name:point_of_sale.menu_pos_products +msgid "Products" +msgstr "商品" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_4formaggi_product_template +msgid "Dr. Oetker Ristorante Quattro Formaggi" +msgstr "Dr. Oetker レストラン クアトロフォルマッジ" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_zero_1l_product_template +msgid "Coca-Cola Zero 1L" +msgstr "コカコーラ ゼロ 1L" + +#. module: point_of_sale +#: report:pos.sales.user:0 report:pos.sales.user.today:0 +#: field:report.pos.order,date:0 +msgid "Date Order" +msgstr "日付順" + +#. module: point_of_sale +#: view:report.sales.by.margin.pos:0 view:report.sales.by.margin.pos.month:0 +#: view:report.sales.by.user.pos:0 view:report.sales.by.user.pos.month:0 +#: view:report.transaction.pos:0 +msgid "POS" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_product_output +#: model:ir.ui.menu,name:point_of_sale.products_for_output_operations +msgid "Products 'Put Money In'" +msgstr "現金装填という商品" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.croky_bolognaise_250g_product_template +msgid "Croky Bolognaise 250g" +msgstr "Croky ボロネーズ 250g" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Extra Info" +msgstr "追加情報" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Fax :" +msgstr "FAX:" + +#. module: point_of_sale +#: field:pos.order,user_id:0 +msgid "Connected Salesman" +msgstr "担当販売員" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_sale_all +#: model:ir.ui.menu,name:point_of_sale.menu_point_ofsale_all +msgid "All Sales Orders" +msgstr "全販売オーダー" + +#. module: point_of_sale +#: help:product.product,income_pdt:0 +msgid "" +"This is a product you can use to put cash into a statement for the point of " +"sale backend." +msgstr "これはPOS後方事務のために取引明細書の中に現金を入れるために使用できる商品です。" + +#. module: point_of_sale +#: view:pos.receipt:0 +msgid "Print the Receipt of the Sale" +msgstr "販売レシートの印刷" + +#. module: point_of_sale +#: field:pos.make.payment,journal:0 +msgid "Payment Mode" +msgstr "支払モード" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_paprika_45g_product_template +msgid "Lays Paprika 45g" +msgstr "Lays パプリカ 45g" + +#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: point_of_sale +#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: report:pos.details:0 report:pos.payment.report.user:0 +#: report:pos.user.product:0 field:report.sales.by.margin.pos,qty:0 +#: field:report.sales.by.margin.pos.month,qty:0 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:32 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:59 +msgid "Qty" +msgstr "数量" + +#. module: point_of_sale +#: view:report.cash.register:0 view:report.pos.order:0 +msgid "Month -1" +msgstr "月 -1" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_sale_user +#: model:ir.model,name:point_of_sale.model_pos_sale_user +#: view:pos.payment.report.user:0 +msgid "Sale by User" +msgstr "ユーザ毎の販売" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.evian_1l_product_template +msgid "Evian 1L" +msgstr "エビアン 1L" + +#. module: point_of_sale +#: model:ir.ui.menu,name:point_of_sale.menu_open_statement +msgid "Open Cash Registers" +msgstr "キャッシュレジスタを開く" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.water +msgid "Water" +msgstr "水" + +#. module: point_of_sale +#: view:report.cash.register:0 +msgid "state" +msgstr "状態" + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "July" +msgstr "7月" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_poivre_sel_oven_150g_product_template +msgid "Lays Sel et Poivre Oven Baked 150g" +msgstr "Lays 塩コショウ オーブンベークド 150g" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.details_summary:0 +msgid "Qty of product" +msgstr "商品の数量" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chimay_rouge_33cl_product_template +msgid "Chimay Rouge 33cl" +msgstr "シメイ Rouge 330ml" + +#. module: point_of_sale +#: field:report.pos.order,delay_validation:0 +msgid "Delay Validation" +msgstr "検証の遅延" + +#. module: point_of_sale +#: field:pos.order,nb_print:0 +msgid "Number of Print" +msgstr "印刷数" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_make_payment +msgid "Point of Sale Payment" +msgstr "POS支払" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_50cl_product_template +msgid "Coca-Cola Light 50cl" +msgstr "コカコーラ ライト 500ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.jupiler_50cl_product_template +msgid "Jupiler 50cl" +msgstr "ジュピラー 500ml" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.details_summary:0 +msgid "End Period" +msgstr "期末日" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_lemon_33cl_product_template +msgid "Coca-Cola Light Lemon 33cl" +msgstr "コカコーラ ライト レモン 330ml" + +#. module: point_of_sale +#: field:account.journal,auto_cash:0 +msgid "Automatic Opening" +msgstr "自動開始" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_ketchup_250g_product_template +msgid "Lays Ketchup 250g" +msgstr "Lays ケチャップ 250g" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.perrier_50cl_product_template +msgid "Perrier 50cl" +msgstr "ペリエ 500ml" + +#. module: point_of_sale +#: selection:report.pos.order,state:0 +msgid "Synchronized" +msgstr "同期" + +#. module: point_of_sale +#: view:report.cash.register:0 field:report.cash.register,month:0 +#: view:report.pos.order:0 field:report.pos.order,month:0 +msgid "Month" +msgstr "月" + +#. module: point_of_sale +#: report:account.statement:0 +msgid "Statement Name" +msgstr "取引明細書名" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "Year of order date" +msgstr "オーダー日の年" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_new_bank_statement_tree +#: field:pos.box.entries,journal_id:0 field:pos.box.out,journal_id:0 +msgid "Cash Register" +msgstr "キャッシュレジスタ" + +#. module: point_of_sale +#: view:pos.close.statement:0 +msgid "Yes" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_receipt +msgid "Point of sale receipt" +msgstr "販売レシート印刷" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_margin_pos_today +msgid "Sales by User Daily margin" +msgstr "ユーザの1日の利鞘別販売" + +#. module: point_of_sale +#: view:pos.open.statement:0 +msgid "Open Registers" +msgstr "レジスタを開く" + +#. module: point_of_sale +#: field:report.transaction.pos,journal_id:0 +msgid "Sales Journal" +msgstr "売上仕訳帳" + +#. module: point_of_sale +#: field:report.cash.register,balance_start:0 +msgid "Opening Balance" +msgstr "開始残高" + +#. module: point_of_sale +#: view:account.bank.statement:0 selection:report.pos.order,state:0 +msgid "Closed" +msgstr "閉じた" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_vegetale_product_template +msgid "Dr. Oetker Ristorante Vegetale" +msgstr "Dr. Oetker レストラン ベジタブル" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "POS ordered created by today" +msgstr "本日作成されたPOSオーダー" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_zero_2l_product_template +msgid "Coca-Cola Zero 2L" +msgstr "コカコーラ ゼロ 2L" + +#. module: point_of_sale +#: field:pos.order,amount_paid:0 selection:pos.order,state:0 +msgid "Paid" +msgstr "支払済" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_all_sales_lines +msgid "All sales lines" +msgstr "全販売行" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Discount" +msgstr "割引" + +#. module: point_of_sale +#: view:report.cash.register:0 +msgid "Cash Analysis created in last month" +msgstr "先月に作成された現金分析" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.beers +msgid "Beers" +msgstr "ビール" + +#. module: point_of_sale +#: view:pos.close.statement:0 +msgid "" +"OpenERP will close all cash registers he can close automatically without " +"validation. He will also open all cash registers for which you have to " +"control the ending belance before closing manually." +msgstr "" +"OpenERPは検証なしで自動的に全てのキャッシュレジスタを閉じることができます。また、手動で閉じる前に終了残高を管理しなければならない全てのキャッシュレ" +"ジスタを開くこともできます。" + +#. module: point_of_sale +#: view:report.cash.register:0 +msgid "Cash Analysis created by today" +msgstr "本日作成された現金分析" + +#. module: point_of_sale +#: selection:report.cash.register,state:0 +msgid "Quotation" +msgstr "見積" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.product_product_putmoneyforchange0_product_template +msgid "Cash In" +msgstr "現金入金" + +#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: point_of_sale +#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: report:all.closed.cashbox.of.the.day:0 report:pos.invoice:0 +#: report:pos.lines:0 report:pos.payment.report.user:0 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:49 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:93 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:271 +msgid "Total:" +msgstr "合計:" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_report_sales_by_margin_pos +msgid "Sales by margin" +msgstr "利鞘別売上" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_config_journal +msgid "Journal Configuration" +msgstr "仕訳帳設定" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Statement lines" +msgstr "取引明細書行" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.croky_paprika_45g_product_template +msgid "Croky Paprika 45g" +msgstr "Croky パプリカ 45g" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Reprint" +msgstr "再印刷" + +#. module: point_of_sale +#: help:pos.order,user_id:0 +msgid "" +"Person who uses the the cash register. It could be a reliever, a student or " +"an interim employee." +msgstr "キャッシュレジスタのユーザとなる人は救援者や学生、一時的な従業員かもしれません。" + +#. module: point_of_sale +#: field:report.transaction.pos,invoice_id:0 +msgid "Nbr Invoice" +msgstr "請求書番号" + +#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: point_of_sale +#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_receipt +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:231 +msgid "Receipt" +msgstr "レシート" + +#. module: point_of_sale +#: view:pos.open.statement:0 +msgid "" +"The system will open all cash registers, so that you can start recording " +"payments. We suggest you to control the opening balance of each register, " +"using their CashBox tab." +msgstr "" +"システムは全てのキャッシュレジスタを開きます。それで支払の記録を開始できます。金庫タブを使って各レジスタの開始残高を管理することを推奨します。" + +#. module: point_of_sale +#: report:pos.invoice:0 report:pos.lines:0 field:pos.order.line,price_unit:0 +#: report:pos.payment.report.user:0 +msgid "Unit Price" +msgstr "単価" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Done" +msgstr "完了" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_invoice_report +#: report:pos.invoice:0 view:pos.order:0 field:pos.order,invoice_id:0 +msgid "Invoice" +msgstr "請求書" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.rochefort_8_33cl_product_template +msgid "Rochefort \"8\" 33cl" +msgstr "ロシュフォール 8 330ml" + +#. module: point_of_sale +#: view:account.bank.statement:0 selection:report.cash.register,state:0 +msgid "Open" +msgstr "開く" + +#. module: point_of_sale +#: field:pos.order,name:0 field:pos.order.line,order_id:0 +msgid "Order Ref" +msgstr "オーダー参照" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.timmermans_geuze_37,5cl_product_template +msgid "Timmermans Geuze 37.5cl" +msgstr "Timmermans Geuze 375ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_pickles_250g_product_template +msgid "Lays Pickels 250g" +msgstr "Lays ピクルス 250g" + +#. module: point_of_sale +#: field:report.sales.by.margin.pos,net_margin_per_qty:0 +#: field:report.sales.by.margin.pos.month,net_margin_per_qty:0 +msgid "Net margin per Qty" +msgstr "1個当り正味利鞘" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_report_sales_by_user_pos_month +msgid "Sales by user monthly" +msgstr "月間ユーザ別販売" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_et_fruit_50cl_product_template +msgid "Spa et Fruit Orange 50cl" +msgstr "SPA et Fruit Orange 500ml" + +#. module: point_of_sale +#: view:report.sales.by.margin.pos:0 view:report.sales.by.margin.pos.month:0 +msgid "Sales by User Margin" +msgstr "ユーザ利鞘別売上" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_payment.py:59 +#, python-format +msgid "Paiement" +msgstr "支払" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Taxes:" +msgstr "税金:" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_max_33cl_product_template +msgid "Pepsi Max 33cl" +msgstr "ペプシマックス 330ml" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_report_pos_order +msgid "Point of Sale Orders Statistics" +msgstr "POSオーダー統計" + +#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: point_of_sale +#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: model:ir.model,name:point_of_sale.model_product_product +#: report:pos.details:0 field:pos.order.line,product_id:0 +#: report:pos.payment.report.user:0 report:pos.user.product:0 +#: view:report.pos.order:0 field:report.pos.order,product_id:0 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:29 +msgid "Product" +msgstr "商品" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_pollo_product_template +msgid "Dr. Oetker Ristorante Pollo" +msgstr "Dr. Oetker レストラン ポロ" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_lines_report +msgid "Pos Lines" +msgstr "POS行" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.grisette_cerise_25cl_product_template +msgid "Grisette Cerise 25cl" +msgstr "Grisette Cerise 250ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_33cl_product_template +msgid "Chaudfontaine 33cl" +msgstr "Chaudfontaine 330ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_margherita_product_template +msgid "Dr. Oetker La Margherita" +msgstr "Dr. Oetker ラ マルゲリータ" + +#. module: point_of_sale +#: model:ir.ui.menu,name:point_of_sale.menu_point_root +msgid "PoS Backend" +msgstr "POS後方事務" + +#. module: point_of_sale +#: view:pos.order:0 selection:pos.order,state:0 +msgid "Posted" +msgstr "記帳済" + +#. module: point_of_sale +#: field:pos.order,date_order:0 +msgid "Date Ordered" +msgstr "オーダー日" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_payment_report_user +#: model:ir.model,name:point_of_sale.model_pos_payment_report_user +msgid "Sales lines by Users" +msgstr "ユーザ別販売傾向" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_2l_product_template +msgid "Pepsi 2L" +msgstr "ペプシ 2L" + +#. module: point_of_sale +#: report:pos.details:0 +msgid "Order" +msgstr "順番" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:472 +#, python-format +msgid "There is no income account defined for this product: \"%s\" (id:%d)" +msgstr "この商品のために定義された損益勘定がありません:%s(ID:%d)" + +#. module: point_of_sale +#: view:pos.details:0 +msgid "POS Details" +msgstr "POS詳細" + +#. module: point_of_sale +#: field:pos.details,user_ids:0 +msgid "Salesmen" +msgstr "販売員" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_report_cash_register +#: view:report.cash.register:0 +msgid "Point of Sale Cash Register Analysis" +msgstr "POSキャッシュレジスタ分析" + +#. module: point_of_sale +#: report:pos.lines:0 +msgid "Net Total :" +msgstr "合計:" + +#. module: point_of_sale +#: model:res.groups,name:point_of_sale.group_pos_manager +msgid "Manager" +msgstr "マネジャ" + +#. module: point_of_sale +#: field:pos.details,date_start:0 field:pos.sale.user,date_start:0 +msgid "Date Start" +msgstr "開始日" + +#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: point_of_sale +#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: field:pos.order,amount_total:0 report:pos.payment.report.user:0 +#: field:report.sales.by.user.pos,amount:0 +#: field:report.sales.by.user.pos.month,amount:0 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:33 +msgid "Total" +msgstr "合計" + +#. module: point_of_sale +#: view:pos.sale.user:0 +msgid "Sale By User" +msgstr "ユーザ別販売" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_open_statement +msgid "Open Cash Register" +msgstr "キャッシュレジスタを開く" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lindemans_pecheresse_37,5cl_product_template +msgid "Lindemans Pecheresse 37.5cl" +msgstr "リンデマンス Pecheresse 375ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_33cl_product_template +msgid "Pepsi 33cl" +msgstr "ペプシ 330ml" + +#. module: point_of_sale +#: report:account.statement:0 +#: model:ir.actions.report.xml,name:point_of_sale.account_statement +msgid "Statement" +msgstr "取引明細書" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_payment_report +#: model:ir.model,name:point_of_sale.model_pos_payment_report +#: view:pos.payment.report:0 +msgid "Payment Report" +msgstr "支払レポート" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_orange_25cl_product_template +msgid "Fanta Orange 25cl" +msgstr "ファンタ オレンジ 250ml" + +#. module: point_of_sale +#: view:pos.confirm:0 +msgid "Generate Journal Entries" +msgstr "仕訳帳エントリーの生成" + +#. module: point_of_sale +#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0 +#: report:pos.details:0 report:pos.details_summary:0 report:pos.lines:0 +#: field:pos.order,company_id:0 field:pos.order.line,company_id:0 +#: report:pos.payment.report.user:0 report:pos.sales.user:0 +#: report:pos.sales.user.today:0 report:pos.user.product:0 +#: field:report.pos.order,company_id:0 +msgid "Company" +msgstr "会社" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Invoice Date" +msgstr "請求日" + +#. module: point_of_sale +#: field:pos.box.entries,name:0 +msgid "Reason" +msgstr "理由" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.orangina_33cl_product_template +msgid "Orangina 33cl" +msgstr "オランジーナ 330ml" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_product_input +#: model:ir.ui.menu,name:point_of_sale.products_for_input_operations +msgid "Products 'Take Money Out'" +msgstr "現金取出という商品" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chimay_bleu_33cl_product_template +msgid "Chimay Bleu 33cl" +msgstr "シメイ Bleu 330ml" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_account_journal_form +#: model:ir.ui.menu,name:point_of_sale.menu_action_account_journal_form_open +msgid "Payment Methods" +msgstr "支払方法" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.chips +msgid "Chips" +msgstr "チップス" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_spinaci_product_template +msgid "Dr. Oetker Ristorante Spinaci" +msgstr "Dr. Oetker レストラン スピナッチ" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:293 +#: code:addons/point_of_sale/wizard/pos_box_entries.py:100 +#: code:addons/point_of_sale/wizard/pos_box_out.py:88 +#, python-format +msgid "You have to open at least one cashbox" +msgstr "少なくとも1個の金庫を開く必要があります。" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_payment_report_user +msgid "Today's Payment By User" +msgstr "ユーザ別本日の支払" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_box_entries +#: model:ir.ui.menu,name:point_of_sale.menu_wizard_enter_jrnl +msgid "Put Money In" +msgstr "現金装填" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:238 +#: code:addons/point_of_sale/point_of_sale.py:253 +#, python-format +msgid "Error!" +msgstr "エラー" + +#. module: point_of_sale +#: report:pos.lines:0 +msgid "No. Of Articles" +msgstr "品目数" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.ijsboerke_vanille_2,5l_product_template +msgid "ijsboerke Vanille 2.5L" +msgstr "アイスブルク バニラ 2.5L" + +#. module: point_of_sale +#: selection:pos.order,state:0 selection:report.pos.order,state:0 +msgid "Cancelled" +msgstr "キャンセル済" + +#. module: point_of_sale +#: report:pos.user.product:0 +msgid "Ending Date" +msgstr "終了日" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.orangina_1,5l_product_template +msgid "Orangina 1.5L" +msgstr "オランジーナ 1.5L" + +#. module: point_of_sale +#: field:pos.order,picking_id:0 +msgid "Picking" +msgstr "集荷" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.ice_cream +msgid "Ice Cream" +msgstr "アイスクリーム" + +#. module: point_of_sale +#: field:pos.order,shop_id:0 field:report.pos.order,shop_id:0 +msgid "Shop" +msgstr "店" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "銀行取引明細書行" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.belle_vue_kriek_25cl_product_template +msgid "Belle-Vue Kriek 25cl" +msgstr "ベルビュー Kriek 250ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_petillante_1,5l_product_template +msgid "Chaudfontaine Petillante 1.5l" +msgstr "Chaudfontaine ペティアント 1.5L" + +#. module: point_of_sale +#: view:report.sales.by.user.pos:0 view:report.sales.by.user.pos.month:0 +#: view:report.transaction.pos:0 +msgid "POS Report" +msgstr "POSレポート" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_1,5l_product_template +msgid "Chaudfontaine 1.5l" +msgstr "Chaudfontaine 1.5L" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_close_statement +msgid "Close Cash Register" +msgstr "キャッシュレジスタを閉じる" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:65 +#, python-format +msgid "In order to delete a sale, it must be new or cancelled." +msgstr "販売を削除するために、それは新規またはキャンセルする必要があります。" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_regular_50cl_product_template +msgid "Coca-Cola Regular 50cl" +msgstr "コカコーラ 500ml" + +#. module: point_of_sale +#: view:pos.confirm:0 +msgid "Generate Entries" +msgstr "エントリーの生成" + +#. module: point_of_sale +#: field:pos.box.entries,product_id:0 field:pos.box.out,product_id:0 +msgid "Operation" +msgstr "操作" + +#. module: point_of_sale +#: field:pos.order,account_move:0 +msgid "Journal Entry" +msgstr "仕訳帳入力" + +#. module: point_of_sale +#: selection:report.cash.register,state:0 +msgid "Confirmed" +msgstr "確認済" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Cancelled Invoice" +msgstr "キャンセル済請求書" + +#. module: point_of_sale +#: view:report.cash.register:0 +msgid "Confirm" +msgstr "確認" + +#. module: point_of_sale +#: help:account.journal,auto_cash:0 +msgid "" +"This field authorize the automatic creation of the cashbox, without control " +"of the initial balance." +msgstr "この項目は初期残高の制御なしに金庫の自動作成を許可します。" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_zero_50cl_product_template +msgid "Coca-Cola Zero 50cl" +msgstr "コカコーラ ゼロ 500ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_tonno_product_template +msgid "Dr. Oetker Ristorante Tonno" +msgstr "Dr. Oetker レストラン トンノ" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Supplier Invoice" +msgstr "仕入先請求書" + +#. module: point_of_sale +#: constraint:account.bank.statement:0 +msgid "The journal and period chosen have to belong to the same company." +msgstr "選択された仕訳帳と期間は同じ会社に属していなければなりません。" + +#. module: point_of_sale +#: view:pos.order:0 selection:pos.order,state:0 +#: selection:report.pos.order,state:0 +msgid "New" +msgstr "新規" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:238 +#, python-format +msgid "In order to set to draft a sale, it must be cancelled." +msgstr "販売をドラフトにセットするためには、それをキャンセルする必要があります。" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_zero_orange_33cl_product_template +msgid "Fanta Zero Orange 33cl" +msgstr "ファンタ ゼロ オレンジ 330ml" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "Day of order date" +msgstr "オーダー日の日" + +#. module: point_of_sale +#: model:ir.ui.menu,name:point_of_sale.menu_point_rep +msgid "Reporting" +msgstr "レポート" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.maes_33cl_product_template +msgid "Maes 33cl" +msgstr "メイズ 330ml" + +#. module: point_of_sale +#: view:pos.box.entries:0 +msgid "Put Money" +msgstr "現金装填" + +#. module: point_of_sale +#: sql_constraint:account.journal:0 +msgid "The code of the journal must be unique per company !" +msgstr "仕訳帳のコードは会社ごとに固有でなければなりません。" + +#. module: point_of_sale +#: model:ir.ui.menu,name:point_of_sale.menu_point_config_product +msgid "Configuration" +msgstr "設定" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.orval_33cl_product_template +msgid "Orval 33cl" +msgstr "オルヴァル 330ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_regular_1l_product_template +msgid "Coca-Cola Regular 1L" +msgstr "コカコーラ 1L" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:253 +#, python-format +msgid "Unable to cancel the picking." +msgstr "集荷をキャンセルできません。" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "POS ordered created during current month" +msgstr "現在月中に作成されたPOSオーダー" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "POS ordered created last month" +msgstr "先月作成されたPOSオーダー" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_invoice +msgid "Invoices" +msgstr "請求書" + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "December" +msgstr "12月" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_gazeuse_1,5l_product_template +msgid "Spa Barisart 1.5l" +msgstr "SPA Barisart 1.5L" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:329 view:pos.order:0 +#, python-format +msgid "Return Products" +msgstr "商品の返品" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.jupiler_33cl_product_template +msgid "Jupiler 33cl" +msgstr "ジュピラー 330ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.ijsboerke_chocolat_2,5l_product_template +msgid "ijsboerke Chocolat 2.5L" +msgstr "アイスブルク チョコレート 2.5L" + +#. module: point_of_sale +#: view:pos.box.out:0 +msgid "Take Money" +msgstr "現金取出" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_details +msgid "Sales Details" +msgstr "販売詳細" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_close_statement.py:50 +#, python-format +msgid "Message" +msgstr "メッセージ" + +#. module: point_of_sale +#: view:account.journal:0 model:ir.model,name:point_of_sale.model_pos_order +#: model:ir.ui.menu,name:point_of_sale.menu_point_root_touchscreen +#: view:product.product:0 +msgid "Point of Sale" +msgstr "POS" + +#. module: point_of_sale +#: view:pos.order:0 field:pos.payment.report.user,user_id:0 +#: field:pos.sale.user,user_id:0 field:pos.sales.user.today,user_id:0 +#: view:report.pos.order:0 field:report.pos.order,user_id:0 +msgid "Salesman" +msgstr "販売員" + +#. module: point_of_sale +#: report:pos.details:0 view:pos.order:0 selection:pos.order,state:0 +#: view:report.pos.order:0 selection:report.pos.order,state:0 +msgid "Invoiced" +msgstr "請求済" + +#. module: point_of_sale +#: view:pos.close.statement:0 +msgid "No" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_gazeuse_50cl_product_template +msgid "Spa Barisart 50cl" +msgstr "SPA Barisart 500ml" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.special_beers +msgid "Special Beers" +msgstr "特別なビール" + +#. module: point_of_sale +#: field:pos.order.line,notice:0 +msgid "Discount Notice" +msgstr "割引注記" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Re-Print" +msgstr "再印刷" + +#. module: point_of_sale +#: view:report.cash.register:0 +msgid "Draft" +msgstr "ドラフト" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_zero_orange_1,5l_product_template +msgid "Fanta Zero Orange 1.5L" +msgstr "ファンタ ゼロ オレンジ 1.5L" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "PRO-FORMA" +msgstr "プロフォーマ" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:358 +#, python-format +msgid "Please provide a partner for the sale." +msgstr "販売のためのパートナを提供して下さい。" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.fruity_beers +msgid "Fruity Beers" +msgstr "フルーティなビール" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.ijsboerke_dame_blanche_2,5l_product_template +msgid "ijsboerke Dame Blanche 2.5L" +msgstr "アイスブルク Dame Blanche 2.5L" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.ijsboerke_moka_2,5l_product_template +msgid "ijsboerke Moka 2.5L" +msgstr "アイスブルク モカ 2.5L" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Search Sales Order" +msgstr "販売オーダーの検索" + +#. module: point_of_sale +#: model:ir.actions.act_window,help:point_of_sale.action_account_journal_form +msgid "" +"Payment methods are defined by accounting journals having the field Payment " +"Method checked." +msgstr "支払方法はチェックされた支払方法項目を持つ会計仕訳帳によって定義されます。" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree +#: model:ir.model,name:point_of_sale.model_report_sales_by_user_pos +msgid "Sales by user" +msgstr "ユーザ別販売" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_hawaii_product_template +msgid "Dr. Oetker Ristorante Hawaii" +msgstr "Dr. Oetker レストラン ハワイ" + +#. module: point_of_sale +#: view:pos.receipt:0 +msgid "Print Receipt" +msgstr "レシート印刷" + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "January" +msgstr "1月" + +#. module: point_of_sale +#: view:pos.order.line:0 +msgid "POS Orders lines" +msgstr "POSオーダー行" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_petillante_33cl_product_template +msgid "Chaudfontaine Petillante 33cl" +msgstr "Chaudfontaine ペティアント 330ml" + +#. module: point_of_sale +#: model:ir.actions.act_window,help:point_of_sale.product_normal_action +msgid "" +"You must define a Product for everything you buy or sell. Products can be " +"raw materials, stockable products, consumables or services. The Product form " +"contains detailed information about your products related to procurement " +"logistics, sales price, product category, suppliers and so on." +msgstr "" +"購入または販売する全ての商品を定義する必要があります。商品は原材料、在庫可能商品、消耗品、またはサービスです。商品フォームはその商品が関連する調達の物流、" +"販売価格、商品分類、仕入先などについての詳細な情報を含みます。" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_max_2l_product_template +msgid "Pepsi Max 2L" +msgstr "ペプシマックス 2L" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:358 +#, python-format +msgid "Error" +msgstr "エラー" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_paprika_300g_product_template +msgid "Lays Paprika XXL 300g" +msgstr "Lays パプリカ XXL 300g" + +#. module: point_of_sale +#: view:pos.close.statement:0 +msgid "Do you want to close your cash registers?" +msgstr "キャッシュレジスタを閉じますか?" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Refund" +msgstr "返金" + +#. module: point_of_sale +#: code:addons/point_of_sale/report/pos_invoice.py:46 +#, python-format +msgid "Please create an invoice for this sale." +msgstr "この販売の請求書を作成して下さい。" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_mozzarella_product_template +msgid "Dr. Oetker Ristorante Mozzarella" +msgstr "Dr. Oetker レストラン モッツァレッラ" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_close_statement.py:66 +#: model:ir.ui.menu,name:point_of_sale.menu_close_statement +#: view:pos.close.statement:0 +#, python-format +msgid "Close Cash Registers" +msgstr "キャッシュレジスタを閉じる" + +#. module: point_of_sale +#: report:pos.details:0 report:pos.payment.report.user:0 +msgid "Disc(%)" +msgstr "割引(%)" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "General Information" +msgstr "一般情報" + +#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-# +#. module: point_of_sale +#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-# +#. openerp-web +#: view:pos.details:0 view:pos.discount:0 view:pos.payment.report:0 +#: view:pos.payment.report.user:0 view:pos.sale.user:0 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:13 +msgid "Close" +msgstr "閉じる" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Order lines" +msgstr "オーダー行" + +#. module: point_of_sale +#: view:account.journal:0 +msgid "Extended Configuration" +msgstr "拡張設定" + +#. module: point_of_sale +#: field:pos.order.line,price_subtotal:0 +msgid "Subtotal w/o Tax" +msgstr "税抜小計" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_50cl_product_template +msgid "Spa Reine 50cl" +msgstr "SPA REINE 500ml" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.leffe_blonde_33cl_product_template +msgid "Leffe Blonde 33cl" +msgstr "レフ ブロンド 330ml" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_payment +msgid "Pyament Report" +msgstr "支払レポート" + +#. module: point_of_sale +#: field:report.transaction.pos,jl_id:0 +msgid "Cash Journals" +msgstr "現金仕訳帳" + +#. module: point_of_sale +#: report:pos.sales.user.today:0 +msgid "Today's Sales By User" +msgstr "ユーザ別本日販売" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Customer Code" +msgstr "顧客コード" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_box_out.py:86 +#, python-format +msgid "please check that account is set to %s" +msgstr "そのアカウントが %s にセットされていることを確認して下さい。" + +#. module: point_of_sale +#: field:pos.config.journal,name:0 report:pos.invoice:0 report:pos.lines:0 +msgid "Description" +msgstr "説明" + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "May" +msgstr "5月" + +#. module: point_of_sale +#: report:pos.lines:0 +msgid "Sales lines" +msgstr "販売行" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Yesterday" +msgstr "昨日" + +#. module: point_of_sale +#: field:pos.order,note:0 +msgid "Internal Notes" +msgstr "内部注記" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_zero_decaf_33cl_product_template +msgid "Coca-Cola Zero Decaf 33cl" +msgstr "コカコーラ ゼロ デカフェ 330ml" + +#. module: point_of_sale +#: view:pos.box.out:0 +msgid "Describe why you take money from the cash register:" +msgstr "キャッシュレジスタから現金取出をした理由を説明して下さい。" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_order_all +#: model:ir.ui.menu,name:point_of_sale.menu_report_pos_order_all +#: view:report.pos.order:0 +msgid "Point of Sale Analysis" +msgstr "POS分析" + +#. module: point_of_sale +#: view:pos.order:0 field:pos.order,partner_id:0 view:report.pos.order:0 +msgid "Customer" +msgstr "顧客" + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "February" +msgstr "2月" + +#. module: point_of_sale +#: view:report.cash.register:0 +msgid " Today " +msgstr " 本日 " + +#. module: point_of_sale +#: selection:report.cash.register,month:0 selection:report.pos.order,month:0 +msgid "April" +msgstr "4月" + +#. module: point_of_sale +#: field:pos.order,statement_ids:0 +msgid "Payments" +msgstr "支払" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Supplier Refund" +msgstr "仕入先返金" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_margin_pos_month +msgid "Sales by User Monthly margin" +msgstr "ユーザ月間利鞘別売上" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.leffe_9_33cl_product_template +msgid "Leffe Brune \"9\" 33cl" +msgstr "Leffe Brune 9 330ml" + +#. module: point_of_sale +#: help:account.journal,journal_user:0 +msgid "" +"Check this box if this journal define a payment method that can be used in " +"point of sales." +msgstr "この仕訳帳がPOSで使用する支払方法を定義している場合はこのボックスをチェックして下さい。" + +#. module: point_of_sale +#: field:pos.category,sequence:0 +msgid "Sequence" +msgstr "順序" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_return.py:316 view:pos.make.payment:0 +#, python-format +msgid "Make Payment" +msgstr "支払の作成" + +#. module: point_of_sale +#: constraint:pos.category:0 +msgid "Error ! You cannot create recursive categories." +msgstr "エラー:再帰カテゴリーを作成することはできません。" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_sales_user_today +msgid "Sales User Today" +msgstr "ユーザの本日販売" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "Month of order date" +msgstr "オーダー日の月" + +#. module: point_of_sale +#: field:product.product,income_pdt:0 +msgid "PoS Cash Input" +msgstr "POS現金装填" + +#. module: point_of_sale +#: view:report.cash.register:0 field:report.cash.register,year:0 +#: view:report.pos.order:0 field:report.pos.order,year:0 +msgid "Year" +msgstr "年" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:31 +msgid "Disc (%)" +msgstr "割引(%)" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:41 +msgid "Subtotal:" +msgstr "小計:" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:45 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:268 +msgid "Tax:" +msgstr "税金:" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:64 +msgid "Disc" +msgstr "割引" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:71 +msgid "+/-" +msgstr "+ / -" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:105 +msgid "Paid:" +msgstr "支払済:" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:113 +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:288 +msgid "Change:" +msgstr "手数料:" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:124 +msgid "Back to Products" +msgstr "商品に戻る" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:127 +msgid "Validate" +msgstr "検証" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:140 +msgid "pending orders" +msgstr "保留中オーダー" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:145 +msgid "" +"There are pending operations that could not be saved into the database, are " +"you sure you want to exit?" +msgstr "データベースの保存することができなかった保留中の操作がありますが、本当に終了しますか?" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:236 +msgid "Print" +msgstr "印刷" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:238 +msgid "Next Order" +msgstr "次のオーダー" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:248 +msgid "Phone:" +msgstr "TEL:" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:249 +msgid "User:" +msgstr "ユーザ:" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:250 +msgid "Shop:" +msgstr "店:" diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index a83aab01ca9..670e10feec2 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -17,16 +17,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="%(action_pos_payment)d" string="Payment" type="action" states="draft"/> <button name="%(action_report_pos_receipt)d" string="Reprint" type="action" states="paid,done,invoiced"/> <button name="refund" string="Return Products" type="object" attrs="{'invisible':[('state','=','draft')]}"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,paid,done" statusbar_colors='{"cancel":"red"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,paid,done" statusbar_colors='{"cancel":"red"}'/> + </header> <sheet string="PoS Orders" layout="auto"> <group col="7" colspan="4" class="oe_form_header"> <field name="name"/> diff --git a/addons/portal/i18n/ja.po b/addons/portal/i18n/ja.po new file mode 100644 index 00000000000..32590f36985 --- /dev/null +++ b/addons/portal/i18n/ja.po @@ -0,0 +1,407 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-06-01 23:22+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: portal +#: code:addons/portal/wizard/share_wizard.py:51 +#, python-format +msgid "Please select at least one user to share with" +msgstr "共有するためには少なくとも1ユーザと共有して下さい。" + +#. module: portal +#: code:addons/portal/wizard/share_wizard.py:55 +#, python-format +msgid "Please select at least one group to share with" +msgstr "共有するためには少なくとも1グループと共有して下さい。" + +#. module: portal +#: field:res.portal,group_id:0 +msgid "Group" +msgstr "グループ" + +#. module: portal +#: view:share.wizard:0 +#: field:share.wizard,group_ids:0 +msgid "Existing groups" +msgstr "既存のグループ" + +#. module: portal +#: model:ir.model,name:portal.model_res_portal_wizard_user +msgid "Portal User Config" +msgstr "ポータルユーザ設定" + +#. module: portal +#: view:res.portal.wizard.user:0 +msgid "Portal User" +msgstr "ポータルユーザ" + +#. module: portal +#: model:res.groups,comment:portal.group_portal_manager +msgid "" +"Portal managers have access to the portal definitions, and can easily " +"configure the users, access rights and menus of portal users." +msgstr "ポータルマネジャはポータル定義へアクセスして、ユーザ、アクセス権、ユーザのポータルメニューの設定を簡単にできます。" + +#. module: portal +#: help:res.portal,override_menu:0 +msgid "Enable this option to override the Menu Action of portal users" +msgstr "ポータルユーザのメニューアクションを無効にするためにはこのオプションを有効にして下さい。" + +#. module: portal +#: field:res.portal.wizard.user,user_email:0 +msgid "E-mail" +msgstr "Eメール" + +#. module: portal +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "選択した会社は、このユーザに許された会社ではありません。" + +#. module: portal +#: view:res.portal:0 +#: field:res.portal,widget_ids:0 +msgid "Widgets" +msgstr "ウィジェット" + +#. module: portal +#: view:res.portal.wizard:0 +msgid "Send Invitations" +msgstr "招待の送信" + +#. module: portal +#: view:res.portal:0 +msgid "Widgets Assigned to Users" +msgstr "ユーザ割当ウィジット" + +#. module: portal +#: help:res.portal,url:0 +msgid "The url where portal users can connect to the server" +msgstr "ポータルユーザがサーバに接続できるURL" + +#. module: portal +#: model:res.groups,comment:portal.group_portal_officer +msgid "Portal officers can create new portal users with the portal wizard." +msgstr "ポータル役員はポータルウィザードを使って新しいポータルユーザを作成できます。" + +#. module: portal +#: help:res.portal.wizard,message:0 +msgid "This text is included in the welcome email sent to the users" +msgstr "このテキストはユーザに送信される歓迎Eメールに含まれます。" + +#. module: portal +#: help:res.portal,menu_action_id:0 +msgid "If set, replaces the standard menu for the portal's users" +msgstr "セットした場合、ポータルユーザのための標準メニューを置き換えます。" + +#. module: portal +#: field:res.portal.wizard.user,lang:0 +msgid "Language" +msgstr "言語" + +#. module: portal +#: view:res.portal:0 +msgid "Portal Name" +msgstr "ポータル名" + +#. module: portal +#: view:res.portal.wizard.user:0 +msgid "Portal Users" +msgstr "ポータルユーザ" + +#. module: portal +#: field:res.portal,override_menu:0 +msgid "Override Menu Action of Users" +msgstr "ユーザのメニューアクションの無効化" + +#. module: portal +#: field:res.portal,menu_action_id:0 +msgid "Menu Action" +msgstr "メニューアクション" + +#. module: portal +#: field:res.portal.wizard.user,name:0 +msgid "User Name" +msgstr "ユーザ名" + +#. module: portal +#: help:res.portal,group_id:0 +msgid "The group corresponding to this portal" +msgstr "このポータルに対応するグループ" + +#. module: portal +#: model:ir.model,name:portal.model_res_portal_widget +msgid "Portal Widgets" +msgstr "ポータルウィジット" + +#. module: portal +#: model:ir.model,name:portal.model_res_portal +#: model:ir.module.category,name:portal.module_category_portal +#: view:res.portal:0 +#: field:res.portal.widget,portal_id:0 +#: field:res.portal.wizard,portal_id:0 +msgid "Portal" +msgstr "ポータル" + +#. module: portal +#: code:addons/portal/wizard/portal_wizard.py:35 +#, python-format +msgid "Your OpenERP account at %(company)s" +msgstr "%(company)s 上のあなたのOpenERPアカウント" + +#. module: portal +#: code:addons/portal/portal.py:107 +#: code:addons/portal/portal.py:184 +#, python-format +msgid "%s Menu" +msgstr "%s メニュー" + +#. module: portal +#: help:res.portal.wizard,portal_id:0 +msgid "The portal in which new users must be added" +msgstr "新しいユーザを追加すべきポータル" + +#. module: portal +#: model:ir.model,name:portal.model_res_portal_wizard +msgid "Portal Wizard" +msgstr "ポータルウィザード" + +#. module: portal +#: help:res.portal,widget_ids:0 +msgid "Widgets assigned to portal users" +msgstr "ポータルユーザ割当ウィザード" + +#. module: portal +#: code:addons/portal/wizard/portal_wizard.py:163 +#, python-format +msgid "(missing url)" +msgstr "(不足しているURL)" + +#. module: portal +#: view:share.wizard:0 +#: field:share.wizard,user_ids:0 +msgid "Existing users" +msgstr "既存ユーザ" + +#. module: portal +#: field:res.portal.wizard.user,wizard_id:0 +msgid "Wizard" +msgstr "ウィザード" + +#. module: portal +#: help:res.portal.wizard.user,user_email:0 +msgid "" +"Will be used as user login. Also necessary to send the account information " +"to new users" +msgstr "ユーザログインとして使用されます。新しいユーザへのアカウント情報を送信するためにも必要です。" + +#. module: portal +#: field:res.portal,parent_menu_id:0 +msgid "Parent Menu" +msgstr "親メニュー" + +#. module: portal +#: field:res.portal,url:0 +msgid "URL" +msgstr "URL" + +#. module: portal +#: field:res.portal.widget,widget_id:0 +msgid "Widget" +msgstr "ウィジット" + +#. module: portal +#: help:res.portal.wizard.user,lang:0 +msgid "The language for the user's user interface" +msgstr "ユーザのユーザインタフェースのための言語" + +#. module: portal +#: view:res.portal.wizard:0 +msgid "Cancel" +msgstr "キャンセル" + +#. module: portal +#: view:res.portal:0 +msgid "Website" +msgstr "Webサイト" + +#. module: portal +#: view:res.portal:0 +msgid "Create Parent Menu" +msgstr "親メニュー作成" + +#. module: portal +#: view:res.portal.wizard:0 +msgid "" +"The following text will be included in the welcome email sent to users." +msgstr "次のテキストはユーザに送信する歓迎Eメールに含まれます。" + +#. module: portal +#: code:addons/portal/wizard/portal_wizard.py:135 +#, python-format +msgid "Email required" +msgstr "Eメールは必須" + +#. module: portal +#: model:ir.model,name:portal.model_res_users +msgid "res.users" +msgstr "" + +#. module: portal +#: constraint:res.portal.wizard.user:0 +msgid "Invalid email address" +msgstr "無効なEメールアドレスです。" + +#. module: portal +#: code:addons/portal/wizard/portal_wizard.py:136 +#, python-format +msgid "" +"You must have an email address in your User Preferences to send emails." +msgstr "Eメール送信のためのユーザ設定の中にEメールアドレスを持つ必要があります。" + +#. module: portal +#: model:ir.model,name:portal.model_ir_ui_menu +msgid "ir.ui.menu" +msgstr "" + +#. module: portal +#: view:res.portal:0 +#: view:res.portal.wizard:0 +#: field:res.portal.wizard,user_ids:0 +msgid "Users" +msgstr "ユーザ" + +#. module: portal +#: model:ir.actions.act_window,name:portal.portal_list_action +#: model:ir.ui.menu,name:portal.portal_list_menu +#: model:ir.ui.menu,name:portal.portal_menu +#: view:res.portal:0 +msgid "Portals" +msgstr "ポータル" + +#. module: portal +#: help:res.portal,parent_menu_id:0 +msgid "The menu action opens the submenus of this menu item" +msgstr "メニューアクションはこのメニュー項目のサブメニューを開きます。" + +#. module: portal +#: field:res.portal.widget,sequence:0 +msgid "Sequence" +msgstr "順序" + +#. module: portal +#: field:res.users,partner_id:0 +msgid "Related Partner" +msgstr "関連パートナ" + +#. module: portal +#: view:res.portal:0 +msgid "Portal Menu" +msgstr "ポータルメニュー" + +#. module: portal +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "同じログインでは2つのユーザを持てません。" + +#. module: portal +#: view:res.portal.wizard:0 +#: field:res.portal.wizard,message:0 +msgid "Invitation message" +msgstr "招待メッセージ" + +#. module: portal +#: code:addons/portal/wizard/portal_wizard.py:36 +#, python-format +msgid "" +"Dear %(name)s,\n" +"\n" +"You have been created an OpenERP account at %(url)s.\n" +"\n" +"Your login account data is:\n" +"Database: %(db)s\n" +"User: %(login)s\n" +"Password: %(password)s\n" +"\n" +"%(message)s\n" +"\n" +"--\n" +"OpenERP - Open Source Business Applications\n" +"http://www.openerp.com\n" +msgstr "" +"%(name)s 様、\n" +"\n" +"あなたのOpenERPアカウントは作成されました。%(url)s\n" +"\n" +"あなたのログイン情報は次のとおりです:\n" +"データベース:%(db)s\n" +"ユーザ:%(login)s\n" +"パスワード:%(password)s\n" +"\n" +"%(message)s\n" +"\n" +"--\n" +"OpenERP - Open Source Business Applications\n" +"http://www.openerp.com\n" + +#. module: portal +#: model:res.groups,name:portal.group_portal_manager +msgid "Manager" +msgstr "マネジャ" + +#. module: portal +#: help:res.portal.wizard.user,name:0 +msgid "The user's real name" +msgstr "ユーザの本名" + +#. module: portal +#: model:ir.actions.act_window,name:portal.address_wizard_action +#: model:ir.actions.act_window,name:portal.partner_wizard_action +#: view:res.portal.wizard:0 +msgid "Add Portal Access" +msgstr "ポータルアクセスの追加" + +#. module: portal +#: field:res.portal.wizard.user,partner_id:0 +msgid "Partner" +msgstr "パートナ" + +#. module: portal +#: model:ir.actions.act_window,help:portal.portal_list_action +msgid "" +"\n" +"A portal helps defining specific views and rules for a group of users (the\n" +"portal group). A portal menu, widgets and specific groups may be assigned " +"to\n" +"the portal's users.\n" +" " +msgstr "" +"\n" +"ポータルはユーザのグループ(ポータルグループ)のために特定のビューやルールの\n" +"定義ができます。ポータルメニュー、ウィジット、特定のグループはポータルユーザに\n" +"割り当てることができます。\n" +" " + +#. module: portal +#: model:ir.model,name:portal.model_share_wizard +msgid "Share Wizard" +msgstr "共有ウィザード" + +#. module: portal +#: model:res.groups,name:portal.group_portal_officer +msgid "Officer" +msgstr "役員" diff --git a/addons/process/i18n/ja.po b/addons/process/i18n/ja.po new file mode 100644 index 00000000000..fbb68f8de5b --- /dev/null +++ b/addons/process/i18n/ja.po @@ -0,0 +1,313 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-06-01 23:37+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-03 04:47+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: process +#: model:ir.model,name:process.model_process_node +#: view:process.node:0 +#: view:process.process:0 +msgid "Process Node" +msgstr "処理ノード" + +#. module: process +#: help:process.process,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the process " +"without removing it." +msgstr "アクティブ項目にFalseを設定すると、処理を削除することなく非表示にできます。" + +#. module: process +#: field:process.node,menu_id:0 +msgid "Related Menu" +msgstr "関連メニュー" + +#. module: process +#: field:process.transition,action_ids:0 +msgid "Buttons" +msgstr "ボタン" + +#. module: process +#: view:process.node:0 +#: view:process.process:0 +msgid "Group By..." +msgstr "グループ化…" + +#. module: process +#: selection:process.node,kind:0 +msgid "State" +msgstr "状態" + +#. module: process +#: view:process.node:0 +msgid "Kind Of Node" +msgstr "ノードの種類" + +#. module: process +#: field:process.node,help_url:0 +msgid "Help URL" +msgstr "ヘルプURL" + +#. module: process +#: model:ir.actions.act_window,name:process.action_process_node_form +#: model:ir.ui.menu,name:process.menu_process_node_form +#: view:process.node:0 +#: view:process.process:0 +msgid "Process Nodes" +msgstr "処理ノード" + +#. module: process +#: view:process.process:0 +#: field:process.process,node_ids:0 +msgid "Nodes" +msgstr "ノード" + +#. module: process +#: view:process.node:0 +#: field:process.node,condition_ids:0 +#: view:process.process:0 +msgid "Conditions" +msgstr "条件" + +#. module: process +#: view:process.transition:0 +msgid "Search Process Transition" +msgstr "処理遷移の検索" + +#. module: process +#: field:process.condition,node_id:0 +msgid "Node" +msgstr "ノード" + +#. module: process +#: selection:process.transition.action,state:0 +msgid "Workflow Trigger" +msgstr "ワークフロートリガー" + +#. module: process +#: field:process.transition,note:0 +msgid "Description" +msgstr "説明" + +#. module: process +#: model:ir.model,name:process.model_process_transition_action +msgid "Process Transitions Actions" +msgstr "処理遷移アクション" + +#. module: process +#: field:process.condition,model_id:0 +#: view:process.node:0 +#: field:process.node,model_id:0 +#: view:process.process:0 +#: field:process.process,model_id:0 +msgid "Object" +msgstr "オブジェクト" + +#. module: process +#: field:process.transition,source_node_id:0 +msgid "Source Node" +msgstr "元ノード" + +#. module: process +#: view:process.transition:0 +#: field:process.transition,transition_ids:0 +msgid "Workflow Transitions" +msgstr "ワークフロー遷移" + +#. module: process +#: field:process.transition.action,action:0 +msgid "Action ID" +msgstr "アクションID" + +#. module: process +#: model:ir.model,name:process.model_process_transition +#: view:process.transition:0 +msgid "Process Transition" +msgstr "処理遷移" + +#. module: process +#: model:ir.model,name:process.model_process_condition +msgid "Condition" +msgstr "条件" + +#. module: process +#: selection:process.transition.action,state:0 +msgid "Dummy" +msgstr "ダミー" + +#. module: process +#: model:ir.actions.act_window,name:process.action_process_form +#: model:ir.ui.menu,name:process.menu_process_form +msgid "Processes" +msgstr "処理" + +#. module: process +#: field:process.condition,name:0 +#: field:process.node,name:0 +#: field:process.process,name:0 +#: field:process.transition,name:0 +#: field:process.transition.action,name:0 +msgid "Name" +msgstr "名前" + +#. module: process +#: field:process.node,transition_in:0 +msgid "Starting Transitions" +msgstr "遷移の始点" + +#. module: process +#: view:process.node:0 +#: field:process.node,note:0 +#: view:process.process:0 +#: field:process.process,note:0 +#: view:process.transition:0 +msgid "Notes" +msgstr "注記" + +#. module: process +#: field:process.transition.action,transition_id:0 +msgid "Transition" +msgstr "遷移" + +#. module: process +#: view:process.process:0 +msgid "Search Process" +msgstr "処理検索" + +#. module: process +#: selection:process.node,kind:0 +#: field:process.node,subflow_id:0 +msgid "Subflow" +msgstr "サブフロー" + +#. module: process +#: field:process.process,active:0 +msgid "Active" +msgstr "アクティブ" + +#. module: process +#: view:process.transition:0 +msgid "Associated Groups" +msgstr "関連グループ" + +#. module: process +#: field:process.node,model_states:0 +msgid "States Expression" +msgstr "状態式" + +#. module: process +#: selection:process.transition.action,state:0 +msgid "Action" +msgstr "アクション" + +#. module: process +#: field:process.node,flow_start:0 +msgid "Starting Flow" +msgstr "開始フロー" + +#. module: process +#: field:process.condition,model_states:0 +msgid "Expression" +msgstr "式" + +#. module: process +#: field:process.transition,group_ids:0 +msgid "Required Groups" +msgstr "グループは必須" + +#. module: process +#: view:process.node:0 +#: view:process.process:0 +msgid "Incoming Transitions" +msgstr "内向き遷移" + +#. module: process +#: field:process.transition.action,state:0 +msgid "Type" +msgstr "タイプ" + +#. module: process +#: field:process.node,transition_out:0 +msgid "Ending Transitions" +msgstr "遷移の終点" + +#. module: process +#: model:ir.model,name:process.model_process_process +#: field:process.node,process_id:0 +#: view:process.process:0 +msgid "Process" +msgstr "処理" + +#. module: process +#: view:process.node:0 +msgid "Search ProcessNode" +msgstr "処理ノード検索" + +#. module: process +#: view:process.node:0 +#: view:process.process:0 +msgid "Other Conditions" +msgstr "他の条件" + +#. module: process +#: model:ir.ui.menu,name:process.menu_process +msgid "Enterprise Process" +msgstr "企業の処理" + +#. module: process +#: view:process.transition:0 +msgid "Actions" +msgstr "アクション" + +#. module: process +#: view:process.node:0 +#: view:process.process:0 +msgid "Properties" +msgstr "属性" + +#. module: process +#: model:ir.actions.act_window,name:process.action_process_transition_form +#: model:ir.ui.menu,name:process.menu_process_transition_form +msgid "Process Transitions" +msgstr "処理遷移" + +#. module: process +#: field:process.transition,target_node_id:0 +msgid "Target Node" +msgstr "対象ノード" + +#. module: process +#: field:process.node,kind:0 +msgid "Kind of Node" +msgstr "ノードの種類" + +#. module: process +#: view:process.node:0 +#: view:process.process:0 +msgid "Outgoing Transitions" +msgstr "外向き遷移" + +#. module: process +#: view:process.node:0 +#: view:process.process:0 +msgid "Transitions" +msgstr "遷移" + +#. module: process +#: selection:process.transition.action,state:0 +msgid "Object Method" +msgstr "オブジェクトメソッド" diff --git a/addons/procurement/i18n/ja.po b/addons/procurement/i18n/ja.po new file mode 100644 index 00000000000..c1a3125723e --- /dev/null +++ b/addons/procurement/i18n/ja.po @@ -0,0 +1,1001 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:37+0000\n" +"PO-Revision-Date: 2012-06-02 05:39+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-03 04:47+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: procurement +#: view:make.procurement:0 +msgid "Ask New Products" +msgstr "新製品を求める" + +#. module: procurement +#: model:ir.ui.menu,name:procurement.menu_stock_sched +msgid "Schedulers" +msgstr "スケジュール" + +#. module: procurement +#: model:ir.model,name:procurement.model_make_procurement +msgid "Make Procurements" +msgstr "調達の作成" + +#. module: procurement +#: help:procurement.order.compute.all,automatic:0 +msgid "" +"Triggers an automatic procurement for all products that have a virtual stock " +"under 0. You should probably not use this option, we suggest using a MTO " +"configuration on products." +msgstr "" +"実質上の在庫が0未満である全製品のために自動調達のトリガーです。恐らくこのオプションは使用すべきではありません。製品のMTO(make to " +"order:受注生産)設定を使用することを推奨します。" + +#. module: procurement +#: view:stock.warehouse.orderpoint:0 +msgid "Group By..." +msgstr "グループ化…" + +#. module: procurement +#: help:stock.warehouse.orderpoint,procurement_draft_ids:0 +msgid "Draft procurement of the product and location of that orderpoint" +msgstr "ドラフトの製品の調達とその発注点の場所" + +#. module: procurement +#: code:addons/procurement/procurement.py:291 +#, python-format +msgid "No supplier defined for this product !" +msgstr "この製品には仕入先が定義されていません。" + +#. module: procurement +#: field:make.procurement,uom_id:0 +msgid "Unit of Measure" +msgstr "単位" + +#. module: procurement +#: field:procurement.order,procure_method:0 +msgid "Procurement Method" +msgstr "調達方法" + +#. module: procurement +#: code:addons/procurement/procurement.py:307 +#, python-format +msgid "No address defined for the supplier" +msgstr "仕入先の住所が定義されていません。" + +#. module: procurement +#: model:ir.actions.act_window,name:procurement.action_procurement_compute +msgid "Compute Stock Minimum Rules Only" +msgstr "在庫最小ルールのみ計算" + +#. module: procurement +#: view:procurement.order:0 +msgid "Temporary Procurement Exceptions" +msgstr "一時的な調達例外" + +#. module: procurement +#: field:procurement.order,company_id:0 +#: field:stock.warehouse.orderpoint,company_id:0 +msgid "Company" +msgstr "会社" + +#. module: procurement +#: field:procurement.order,product_uos_qty:0 +msgid "UoS Quantity" +msgstr "販売単位の数量" + +#. module: procurement +#: view:procurement.order:0 +#: field:procurement.order,name:0 +msgid "Reason" +msgstr "理由" + +#. module: procurement +#: view:procurement.order.compute:0 +msgid "Compute Procurements" +msgstr "調達計算" + +#. module: procurement +#: field:procurement.order,message:0 +msgid "Latest error" +msgstr "最新のエラー" + +#. module: procurement +#: help:mrp.property,composition:0 +msgid "Not used in computations, for information purpose only." +msgstr "情報目的のみであるため、計算には使用されません。" + +#. module: procurement +#: field:stock.warehouse.orderpoint,procurement_id:0 +msgid "Latest procurement" +msgstr "最新の調達" + +#. module: procurement +#: view:procurement.order:0 +msgid "Notes" +msgstr "注記" + +#. module: procurement +#: selection:procurement.order,procure_method:0 +msgid "on order" +msgstr "オーダー中" + +#. module: procurement +#: help:procurement.order,message:0 +msgid "Exception occurred while computing procurement orders." +msgstr "調達オーダーの計算中に例外が発生しました。" + +#. module: procurement +#: help:procurement.order,state:0 +msgid "" +"When a procurement is created the state is set to 'Draft'.\n" +" If the procurement is confirmed, the state is set to 'Confirmed'. " +" \n" +"After confirming the state is set to 'Running'.\n" +" If any exception arises in the order then the state is set to 'Exception'.\n" +" Once the exception is removed the state becomes 'Ready'.\n" +" It is in 'Waiting'. state when the procurement is waiting for another one " +"to finish." +msgstr "" +"調達が生成されると、状態はドラフトにセットされます。\n" +" 調達が確認されると、状態は確認済にセットされます。\n" +"確認の後に状態は実行中にセットされます。 \n" +" オーダーで何らかの例外が発生すると、状態は例外にセットされます。\n" +" 例外が取り除かれると、状態は準備完了になります。\n" +" 調達が他の調達の完了を待っている時は、待機中の状態になります。" + +#. module: procurement +#: view:procurement.order:0 +msgid "Permanent Procurement Exceptions" +msgstr "継続する調達の例外" + +#. module: procurement +#: view:stock.warehouse.orderpoint:0 +msgid "Minimum Stock Rules Search" +msgstr "最小在庫ルールの検索" + +#. module: procurement +#: view:procurement.order.compute.all:0 +msgid "Scheduler Parameters" +msgstr "スケジューラのパラメータ" + +#. module: procurement +#: model:ir.model,name:procurement.model_stock_move +msgid "Stock Move" +msgstr "在庫移動" + +#. module: procurement +#: model:ir.model,name:procurement.model_procurement_order_compute_all +msgid "Compute all schedulers" +msgstr "全スケジュールを計算" + +#. module: procurement +#: view:procurement.order:0 +msgid "Planification" +msgstr "計画化" + +#. module: procurement +#: selection:procurement.order,state:0 +msgid "Ready" +msgstr "準備完了" + +#. module: procurement +#: field:procurement.order.compute.all,automatic:0 +msgid "Automatic orderpoint" +msgstr "自動発注点" + +#. module: procurement +#: code:addons/procurement/schedulers.py:123 +#, python-format +msgid "" +"Here is the procurement scheduling report.\n" +"\n" +" Start Time: %s \n" +" End Time: %s \n" +" Total Procurements processed: %d \n" +" Procurements with exceptions: %d \n" +" Skipped Procurements (scheduled date outside of scheduler range) %d " +"\n" +"\n" +" Exceptions:\n" +msgstr "" +"これは調達スケジュールレポートです。\n" +"\n" +" 開始時間:%s \n" +" 終了時間:%s \n" +" 合計調達処理:%d \n" +" 調達の例外:%d \n" +" スキップした調達(スケジューラーの範囲外の予定日):%d \n" +"\n" +" 例外:\n" + +#. module: procurement +#: selection:procurement.order,state:0 +msgid "Confirmed" +msgstr "確認済" + +#. module: procurement +#: view:procurement.order:0 +msgid "Retry" +msgstr "再試行" + +#. module: procurement +#: help:stock.warehouse.orderpoint,product_max_qty:0 +msgid "" +"When the virtual stock goes below the Min Quantity, OpenERP generates a " +"procurement to bring the virtual stock to the Quantity specified as Max " +"Quantity." +msgstr "実質上の在庫が最小数量を下回った時に、OpenERPは最大数量として定義された数量まで実質上の在庫を持ってくるために調達を生成します。" + +#. module: procurement +#: view:procurement.order.compute:0 +#: view:procurement.orderpoint.compute:0 +msgid "Parameters" +msgstr "パラメータ" + +#. module: procurement +#: view:procurement.order:0 +msgid "Confirm" +msgstr "確認" + +#. module: procurement +#: help:procurement.order,origin:0 +msgid "" +"Reference of the document that created this Procurement.\n" +"This is automatically completed by OpenERP." +msgstr "" +"この調達を作成したドキュメントへの参照です。\n" +"これはOpenERPによって自動的に完了します。" + +#. module: procurement +#: view:stock.warehouse.orderpoint:0 +msgid "Procurement Orders to Process" +msgstr "調達オーダーの処理" + +#. module: procurement +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "エラー。再帰的な関係となる会社を作ることはできません。" + +#. module: procurement +#: code:addons/procurement/procurement.py:386 +#, python-format +msgid "Procurement '%s' is in exception: " +msgstr "調達 %s は例外です: " + +#. module: procurement +#: field:procurement.order,priority:0 +msgid "Priority" +msgstr "優先度" + +#. module: procurement +#: view:procurement.order:0 +#: field:procurement.order,state:0 +msgid "State" +msgstr "状態" + +#. module: procurement +#: field:procurement.order,location_id:0 +#: view:stock.warehouse.orderpoint:0 +#: field:stock.warehouse.orderpoint,location_id:0 +msgid "Location" +msgstr "場所" + +#. module: procurement +#: model:ir.model,name:procurement.model_stock_picking +msgid "Picking List" +msgstr "集荷リスト" + +#. module: procurement +#: field:make.procurement,warehouse_id:0 +#: view:stock.warehouse.orderpoint:0 +#: field:stock.warehouse.orderpoint,warehouse_id:0 +msgid "Warehouse" +msgstr "倉庫" + +#. module: procurement +#: selection:stock.warehouse.orderpoint,logic:0 +msgid "Best price (not yet active!)" +msgstr "最良価格(まだアクティブでない)" + +#. module: procurement +#: code:addons/procurement/schedulers.py:111 +#, python-format +msgid "PROC %d: from stock - %3.2f %-5s - %s" +msgstr "調達 %d: 元在庫 - %3.2f %-5s - %s" + +#. module: procurement +#: view:procurement.order:0 +msgid "Product & Location" +msgstr "製品と場所" + +#. module: procurement +#: model:ir.model,name:procurement.model_procurement_order_compute +msgid "Compute Procurement" +msgstr "調達計算" + +#. module: procurement +#: field:stock.move,procurements:0 +msgid "Procurements" +msgstr "調達" + +#. module: procurement +#: field:res.company,schedule_range:0 +msgid "Scheduler Range Days" +msgstr "スケジューラ範囲日数" + +#. module: procurement +#: model:ir.actions.act_window,help:procurement.procurement_action +msgid "" +"A procurement order is used to record a need for a specific product at a " +"specific location. A procurement order is usually created automatically from " +"sales orders, a Pull Logistics rule or Minimum Stock Rules. When the " +"procurement order is confirmed, it automatically creates the necessary " +"operations to fullfil the need: purchase order proposition, manufacturing " +"order, etc." +msgstr "" +"調達オーダーは特定の場所で特定の製品のためのニーズを記録するために使われます。調達オーダーは通常、仕入オーダー、プル型物流ルールまたは最小在庫ルールから自" +"動的に作成されます。調達オーダーが確認された時、ニーズを埋めるために必要な操作を自動的に作成します:仕入オーダーの提案、製造オーダーなど。" + +#. module: procurement +#: field:make.procurement,date_planned:0 +msgid "Planned Date" +msgstr "予定日" + +#. module: procurement +#: view:procurement.order:0 +msgid "Group By" +msgstr "グループ化" + +#. module: procurement +#: field:make.procurement,qty:0 +#: field:procurement.order,product_qty:0 +msgid "Quantity" +msgstr "数量" + +#. module: procurement +#: code:addons/procurement/procurement.py:379 +#, python-format +msgid "Not enough stock and no minimum orderpoint rule defined." +msgstr "十分な在庫がなく、かつ最小発注点ルールが定義されていません。" + +#. module: procurement +#: code:addons/procurement/procurement.py:137 +#, python-format +msgid "Invalid action !" +msgstr "無効なアクションです。" + +#. module: procurement +#: view:procurement.order:0 +msgid "References" +msgstr "参照" + +#. module: procurement +#: view:product.product:0 +#: field:product.product,orderpoint_ids:0 +msgid "Minimum Stock Rule" +msgstr "最小在庫ルール" + +#. module: procurement +#: view:res.company:0 +msgid "Configuration" +msgstr "設定" + +#. module: procurement +#: code:addons/procurement/procurement.py:328 +#, python-format +msgid "" +"Please check the quantity in procurement order(s), it should not be 0 or " +"less!" +msgstr "調達オーダーの数量をチェックして下さい。0やそれ以下であってはなりません。" + +#. module: procurement +#: help:procurement.order,procure_method:0 +msgid "" +"If you encode manually a Procurement, you probably want to use a make to " +"order method." +msgstr "調達を手動で作成する場合、あなたは恐らくオーダー方法のための型を使うことを望むでしょう。" + +#. module: procurement +#: model:ir.ui.menu,name:procurement.menu_stock_procurement +msgid "Automatic Procurements" +msgstr "自動調達" + +#. module: procurement +#: field:stock.warehouse.orderpoint,product_max_qty:0 +msgid "Max Quantity" +msgstr "最大数量" + +#. module: procurement +#: model:ir.model,name:procurement.model_procurement_order +#: model:process.process,name:procurement.process_process_procurementprocess0 +#: view:procurement.order:0 +msgid "Procurement" +msgstr "調達" + +#. module: procurement +#: model:ir.actions.act_window,name:procurement.procurement_action +msgid "Procurement Orders" +msgstr "調達オーダー" + +#. module: procurement +#: view:procurement.order:0 +msgid "To Fix" +msgstr "修正" + +#. module: procurement +#: view:procurement.order:0 +msgid "Exceptions" +msgstr "例外" + +#. module: procurement +#: model:process.node,note:procurement.process_node_serviceonorder0 +msgid "Assignment from Production or Purchase Order." +msgstr "生産または仕入オーダーから割り当てて下さい。" + +#. module: procurement +#: model:ir.model,name:procurement.model_mrp_property +msgid "Property" +msgstr "属性" + +#. module: procurement +#: model:ir.actions.act_window,name:procurement.act_make_procurement +#: view:make.procurement:0 +msgid "Procurement Request" +msgstr "調達要求" + +#. module: procurement +#: view:procurement.orderpoint.compute:0 +msgid "Compute Stock" +msgstr "在庫計算" + +#. module: procurement +#: help:stock.warehouse.orderpoint,product_min_qty:0 +msgid "" +"When the virtual stock goes below the Min Quantity specified for this field, " +"OpenERP generates a procurement to bring the virtual stock to the Max " +"Quantity." +msgstr "" +"実質上の在庫がこの項目のために定義された最小数量を下回った時に、OpenERPは最大数量まで実質上の在庫を持ってくるために調達を生成します。" + +#. module: procurement +#: model:process.process,name:procurement.process_process_serviceproductprocess0 +msgid "Service" +msgstr "サービス" + +#. module: procurement +#: field:stock.warehouse.orderpoint,procurement_draft_ids:0 +msgid "Related Procurement Orders" +msgstr "関連する調達オーダー" + +#. module: procurement +#: view:procurement.orderpoint.compute:0 +msgid "" +"Wizard checks all the stock minimum rules and generate procurement order." +msgstr "ウィザードは全ての在庫最小ルールをチェックし調達オーダーを生成します。" + +#. module: procurement +#: field:stock.warehouse.orderpoint,product_min_qty:0 +msgid "Min Quantity" +msgstr "最小数量" + +#. module: procurement +#: selection:procurement.order,priority:0 +msgid "Urgent" +msgstr "緊急" + +#. module: procurement +#: selection:mrp.property,composition:0 +msgid "plus" +msgstr "+" + +#. module: procurement +#: constraint:stock.move:0 +msgid "You can not move products from or to a location of the type view." +msgstr "タイプビューの場所から、あるいは場所へは製品を動かすことはできません。" + +#. module: procurement +#: help:stock.warehouse.orderpoint,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the " +"orderpoint without removing it." +msgstr "アクティブな項目がFalseにセットされている場合は、発注点を削除することなく非表示にできます。" + +#. module: procurement +#: help:procurement.orderpoint.compute,automatic:0 +msgid "If the stock of a product is under 0, it will act like an orderpoint" +msgstr "製品の在庫が0未満の時は、それは発注点のように動作します。" + +#. module: procurement +#: view:procurement.order:0 +msgid "Procurement Lines" +msgstr "調達行" + +#. module: procurement +#: view:procurement.order.compute.all:0 +msgid "" +"This wizard allows you to run all procurement, production and/or purchase " +"orders that should be processed based on their configuration. By default, " +"the scheduler is launched automatically every night by OpenERP. You can use " +"this menu to force it to be launched now. Note that it runs in the " +"background, you may have to wait for a few minutes until it has finished " +"computing." +msgstr "" +"このウィザードはそれらの設定に基づき実行されるべき全ての調達、生産や仕入オーダーを実行することができます。デフォルトでは、スケジューラはOpenERPによ" +"って毎夜自動的に起動されます。このメニューを使うと強制的に今起動することができます。ただ、それはバックグラウンドで実行されるので、計算が終わるまで数分待た" +"されるかもしれません。" + +#. module: procurement +#: view:procurement.order:0 +#: field:procurement.order,note:0 +msgid "Note" +msgstr "注記" + +#. module: procurement +#: selection:procurement.order,state:0 +msgid "Draft" +msgstr "ドラフト" + +#. module: procurement +#: view:procurement.order.compute:0 +msgid "This wizard will schedule procurements." +msgstr "ウィザードは調達をスケジュールします。" + +#. module: procurement +#: view:procurement.order:0 +msgid "Status" +msgstr "状態" + +#. module: procurement +#: selection:procurement.order,priority:0 +msgid "Normal" +msgstr "通常" + +#. module: procurement +#: constraint:stock.move:0 +msgid "You try to assign a lot which is not from the same product" +msgstr "違う製品のロットを割り当てることはできません。" + +#. module: procurement +#: code:addons/procurement/procurement.py:383 +#, python-format +msgid "Not enough stock." +msgstr "十分な在庫ではありません。" + +#. module: procurement +#: field:stock.warehouse.orderpoint,active:0 +msgid "Active" +msgstr "アクティブ" + +#. module: procurement +#: model:process.node,name:procurement.process_node_procureproducts0 +msgid "Procure Products" +msgstr "調達製品" + +#. module: procurement +#: field:procurement.order,date_planned:0 +msgid "Scheduled date" +msgstr "予定日" + +#. module: procurement +#: selection:procurement.order,state:0 +msgid "Exception" +msgstr "例外" + +#. module: procurement +#: code:addons/procurement/procurement.py:381 +#, python-format +msgid "No minimum orderpoint rule defined." +msgstr "最小発注点ルールが定義されていません。" + +#. module: procurement +#: code:addons/procurement/schedulers.py:151 +#, python-format +msgid "Automatic OP: %s" +msgstr "自動発注点:%s" + +#. module: procurement +#: model:ir.model,name:procurement.model_procurement_orderpoint_compute +msgid "Automatic Order Point" +msgstr "自動発注点" + +#. module: procurement +#: model:ir.model,name:procurement.model_stock_warehouse_orderpoint +msgid "Minimum Inventory Rule" +msgstr "最小在庫ルール" + +#. module: procurement +#: help:stock.warehouse.orderpoint,qty_multiple:0 +msgid "The procurement quantity will be rounded up to this multiple." +msgstr "調達数量はこの倍数に切り上げされます。" + +#. module: procurement +#: model:ir.model,name:procurement.model_res_company +msgid "Companies" +msgstr "会社" + +#. module: procurement +#: view:procurement.order:0 +msgid "Extra Information" +msgstr "追加情報" + +#. module: procurement +#: help:procurement.order,name:0 +msgid "Procurement name." +msgstr "調達名" + +#. module: procurement +#: constraint:stock.move:0 +msgid "You must assign a production lot for this product" +msgstr "この製品に生産ロットを割り当てて下さい。" + +#. module: procurement +#: view:procurement.order:0 +msgid "Procurement Reason" +msgstr "調達理由" + +#. module: procurement +#: sql_constraint:stock.warehouse.orderpoint:0 +msgid "Qty Multiple must be greater than zero." +msgstr "数量倍数は0より大きい必要があります。" + +#. module: procurement +#: selection:stock.warehouse.orderpoint,logic:0 +msgid "Order to Max" +msgstr "最大まで発注" + +#. module: procurement +#: sql_constraint:stock.picking:0 +msgid "Reference must be unique per Company!" +msgstr "参照は会社ごとに固有でなければいけません。" + +#. module: procurement +#: field:procurement.order,date_close:0 +msgid "Date Closed" +msgstr "終了日" + +#. module: procurement +#: field:mrp.property,composition:0 +msgid "Properties composition" +msgstr "属性の構成" + +#. module: procurement +#: code:addons/procurement/procurement.py:327 +#, python-format +msgid "Data Insufficient !" +msgstr "データが不足しています。" + +#. module: procurement +#: model:ir.model,name:procurement.model_mrp_property_group +#: field:mrp.property,group_id:0 +#: field:mrp.property.group,name:0 +msgid "Property Group" +msgstr "属性グループ" + +#. module: procurement +#: view:stock.warehouse.orderpoint:0 +msgid "Misc" +msgstr "その他" + +#. module: procurement +#: view:stock.warehouse.orderpoint:0 +msgid "Locations" +msgstr "場所" + +#. module: procurement +#: selection:procurement.order,procure_method:0 +msgid "from stock" +msgstr "在庫から" + +#. module: procurement +#: view:stock.warehouse.orderpoint:0 +msgid "General Information" +msgstr "一般情報" + +#. module: procurement +#: view:procurement.order:0 +msgid "Run Procurement" +msgstr "調達実行" + +#. module: procurement +#: selection:procurement.order,state:0 +msgid "Done" +msgstr "完了" + +#. module: procurement +#: view:make.procurement:0 +#: view:procurement.order:0 +#: selection:procurement.order,state:0 +#: view:procurement.order.compute:0 +#: view:procurement.order.compute.all:0 +#: view:procurement.orderpoint.compute:0 +msgid "Cancel" +msgstr "キャンセル" + +#. module: procurement +#: field:stock.warehouse.orderpoint,logic:0 +msgid "Reordering Mode" +msgstr "再オーダーのモード" + +#. module: procurement +#: field:procurement.order,origin:0 +msgid "Source Document" +msgstr "基となるドキュメント" + +#. module: procurement +#: selection:procurement.order,priority:0 +msgid "Not urgent" +msgstr "緊急外" + +#. module: procurement +#: code:addons/procurement/procurement.py:297 +#, python-format +msgid "No default supplier defined for this product" +msgstr "この製品には仕入先が定義されていません。" + +#. module: procurement +#: view:procurement.order:0 +msgid "Late" +msgstr "遅延" + +#. module: procurement +#: view:board.board:0 +msgid "Procurements in Exception" +msgstr "調達の例外" + +#. module: procurement +#: view:procurement.order:0 +msgid "Details" +msgstr "詳細" + +#. module: procurement +#: model:ir.actions.act_window,name:procurement.procurement_action5 +#: model:ir.actions.act_window,name:procurement.procurement_action_board +#: model:ir.actions.act_window,name:procurement.procurement_exceptions +#: model:ir.ui.menu,name:procurement.menu_stock_procurement_action +#: view:procurement.order:0 +msgid "Procurement Exceptions" +msgstr "調達の例外" + +#. module: procurement +#: model:ir.actions.act_window,name:procurement.act_procurement_2_stock_warehouse_orderpoint +#: model:ir.actions.act_window,name:procurement.act_product_product_2_stock_warehouse_orderpoint +#: model:ir.actions.act_window,name:procurement.act_stock_warehouse_2_stock_warehouse_orderpoint +#: model:ir.actions.act_window,name:procurement.action_orderpoint_form +#: model:ir.ui.menu,name:procurement.menu_stock_order_points +#: view:product.product:0 +#: view:stock.warehouse.orderpoint:0 +msgid "Minimum Stock Rules" +msgstr "最小在庫ルール" + +#. module: procurement +#: field:procurement.order,close_move:0 +msgid "Close Move at end" +msgstr "終わりに移動して閉じる" + +#. module: procurement +#: field:stock.warehouse.orderpoint,qty_multiple:0 +msgid "Qty Multiple" +msgstr "数量倍数" + +#. module: procurement +#: view:procurement.order:0 +msgid "Scheduled Date" +msgstr "予定日" + +#. module: procurement +#: model:ir.model,name:procurement.model_product_product +#: field:make.procurement,product_id:0 +#: view:procurement.order:0 +#: field:procurement.order,product_id:0 +#: field:stock.warehouse.orderpoint,product_id:0 +msgid "Product" +msgstr "製品" + +#. module: procurement +#: view:procurement.order:0 +msgid "Temporary" +msgstr "一時的" + +#. module: procurement +#: field:mrp.property,description:0 +#: field:mrp.property.group,description:0 +msgid "Description" +msgstr "説明" + +#. module: procurement +#: selection:mrp.property,composition:0 +msgid "min" +msgstr "最小" + +#. module: procurement +#: view:stock.warehouse.orderpoint:0 +msgid "Quantity Rules" +msgstr "数量のルール" + +#. module: procurement +#: selection:procurement.order,state:0 +msgid "Running" +msgstr "実行中" + +#. module: procurement +#: field:stock.warehouse.orderpoint,product_uom:0 +msgid "Product UOM" +msgstr "製品単位" + +#. module: procurement +#: model:process.node,name:procurement.process_node_serviceonorder0 +msgid "Make to Order" +msgstr "オーダーの作成" + +#. module: procurement +#: view:procurement.order:0 +msgid "UOM" +msgstr "単位" + +#. module: procurement +#: selection:procurement.order,state:0 +msgid "Waiting" +msgstr "待機中" + +#. module: procurement +#: model:ir.actions.act_window,help:procurement.action_orderpoint_form +msgid "" +"You can define your minimum stock rules, so that OpenERP will automatically " +"create draft manufacturing orders or purchase quotations according to the " +"stock level. Once the virtual stock of a product (= stock on hand minus all " +"confirmed orders and reservations) is below the minimum quantity, OpenERP " +"will generate a procurement request to increase the stock up to the maximum " +"quantity." +msgstr "" +"最小在庫ルールを定義できます。それによってOpenERPは自動的に在庫レベルに応じて、ドラフトの製造オーダーまたは仕入見積を作成します。ひとたび、製品の実" +"質上の在庫(全ての確認済オーダーと予約を在庫から差し引く)が最小在庫を下回ったなら、OpenERPは在庫を最大数量まで増加させるための調達要求を生成します" +"。" + +#. module: procurement +#: field:procurement.order,move_id:0 +msgid "Reservation" +msgstr "予約" + +#. module: procurement +#: model:process.node,note:procurement.process_node_procureproducts0 +msgid "The way to procurement depends on the product type." +msgstr "調達方法は製品タイプに依存します。" + +#. module: procurement +#: view:make.procurement:0 +msgid "" +"This wizard will plan the procurement for this product. This procurement may " +"generate task, production orders or purchase orders." +msgstr "このウィザードはこの製品のための調達を計画します。この調達は生産オーダーまたは仕入オーダーのタスクを生成します。" + +#. module: procurement +#: view:res.company:0 +msgid "MRP & Logistics Scheduler" +msgstr "MRPと物流のスケジューラ" + +#. module: procurement +#: code:addons/procurement/procurement.py:138 +#, python-format +msgid "Cannot delete Procurement Order(s) which are in %s state!" +msgstr "%s 状態であるため調達オーダーは削除できません。" + +#. module: procurement +#: sql_constraint:res.company:0 +msgid "The company name must be unique !" +msgstr "会社名は固有でなければいけません。" + +#. module: procurement +#: field:mrp.property,name:0 +#: field:stock.warehouse.orderpoint,name:0 +msgid "Name" +msgstr "名前" + +#. module: procurement +#: selection:mrp.property,composition:0 +msgid "max" +msgstr "最大" + +#. module: procurement +#: field:procurement.order,product_uos:0 +msgid "Product UoS" +msgstr "製品販売単位" + +#. module: procurement +#: code:addons/procurement/procurement.py:356 +#, python-format +msgid "from stock: products assigned." +msgstr "在庫から:製品は割当済" + +#. module: procurement +#: model:ir.actions.act_window,name:procurement.action_compute_schedulers +#: model:ir.ui.menu,name:procurement.menu_stock_proc_schedulers +#: view:procurement.order.compute.all:0 +msgid "Compute Schedulers" +msgstr "スケジューラを計算" + +#. module: procurement +#: model:ir.actions.act_window,help:procurement.procurement_exceptions +msgid "" +"Procurement Orders represent the need for a certain quantity of products, at " +"a given time, in a given location. Sales Orders are one typical source of " +"Procurement Orders (but these are distinct documents). Depending on the " +"procurement parameters and the product configuration, the procurement engine " +"will attempt to satisfy the need by reserving products from stock, ordering " +"products from a supplier, or passing a manufacturing order, etc. A " +"Procurement Exception occurs when the system cannot find a way to fulfill a " +"procurement. Some exceptions will resolve themselves automatically, but " +"others require manual intervention (those are identified by a specific error " +"message)." +msgstr "" +"調達オーダーは与えられた時間と場所において製品の確かなすうりょおうのためのニーズを表しています。販売オーダーは調達オーダーのひとつの典型的な元(しかし、こ" +"れらは別個のドキュメントです)となっています。調達パラメータ、製品の設定に依存して、調達エンジンは在庫から製品を予約する、仕入先に製品をオーダーする、製造" +"オーダーを出すなどによりニーズを満たそうとします。システムが調達を満たす方法を見つけることができない場合、調達の例外が発生します。幾つかの例外は自動的に自" +"分自身で解決します。しかし、他は手動による介入を要求します(それらは特定のエラーメッセージにより識別されます)。" + +#. module: procurement +#: field:procurement.order,product_uom:0 +msgid "Product UoM" +msgstr "製品単位" + +#. module: procurement +#: view:procurement.order:0 +msgid "Search Procurement" +msgstr "調達の検索" + +#. module: procurement +#: help:res.company,schedule_range:0 +msgid "" +"This is the time frame analysed by the scheduler when computing " +"procurements. All procurements that are not between today and today+range " +"are skipped for future computation." +msgstr "" +"これは、計算による調達の時のスケジューラによる時間枠分析です。本日から本日+範囲の範囲にない全ての調達は、今後の計算のためにスキップされます。" + +#. module: procurement +#: selection:procurement.order,priority:0 +msgid "Very Urgent" +msgstr "非常に緊急" + +#. module: procurement +#: field:procurement.orderpoint.compute,automatic:0 +msgid "Automatic Orderpoint" +msgstr "自動発注点" + +#. module: procurement +#: view:procurement.order:0 +msgid "Procurement Details" +msgstr "調達の詳細" + +#. module: procurement +#: view:procurement.order:0 +msgid "Procurement started late" +msgstr "遅れて開始された調達" + +#. module: procurement +#: constraint:product.product:0 +msgid "Error: Invalid ean code" +msgstr "エラー:無効な商品識別番号です。" + +#. module: procurement +#: code:addons/procurement/schedulers.py:152 +#, python-format +msgid "SCHEDULER" +msgstr "スケジューラ" + +#. module: procurement +#: code:addons/procurement/schedulers.py:88 +#, python-format +msgid "PROC %d: on order - %3.2f %-5s - %s" +msgstr "調達 %d:オーダー中 - %3.2f %-5s - %s" diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 2263a441363..db313e65353 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -81,6 +81,7 @@ class procurement_order(osv.osv): _name = "procurement.order" _description = "Procurement" _order = 'priority,date_planned desc' + _inherit = ['mail.thread'] _log_create = False _columns = { 'name': fields.char('Reason', size=64, required=True, help='Procurement name.'), @@ -103,7 +104,7 @@ class procurement_order(osv.osv): " a make to order method."), 'note': fields.text('Note'), - 'message': fields.char('Latest error', size=64, help="Exception occurred while computing procurement orders."), + 'message': fields.char('Latest error', size=124, help="Exception occurred while computing procurement orders."), 'state': fields.selection([ ('draft','Draft'), ('cancel','Cancelled'), @@ -276,7 +277,7 @@ class procurement_order(osv.osv): if not res: return False return True - + def check_buy(self, cr, uid, ids): """ Checks product type. @return: True or Product Id. @@ -287,24 +288,26 @@ class procurement_order(osv.osv): if procurement.product_id.product_tmpl_id.supply_method <> 'buy': return False if not procurement.product_id.seller_ids: - cr.execute('update procurement_order set message=%s where id=%s', - (_('No supplier defined for this product !'), procurement.id)) + message = _('No supplier defined for this product !') + self.message_append_note(cr, uid, [procurement.id], body=message) + cr.execute('update procurement_order set message=%s where id=%s', (message, procurement.id)) return False partner = procurement.product_id.seller_id #Taken Main Supplier of Product of Procurement. if not partner: - cr.execute('update procurement_order set message=%s where id=%s', - (_('No default supplier defined for this product'), procurement.id)) + message = _('No default supplier defined for this product') + self.message_append_note(cr, uid, [procurement.id], body=message) + cr.execute('update procurement_order set message=%s where id=%s', (message, procurement.id)) return False - if user.company_id and user.company_id.partner_id: if partner.id == user.company_id.partner_id.id: return False address_id = partner_obj.address_get(cr, uid, [partner.id], ['delivery'])['delivery'] if not address_id: - cr.execute('update procurement_order set message=%s where id=%s', - (_('No address defined for the supplier'), procurement.id)) + message = _('No address defined for the supplier') + self.message_append_note(cr, uid, [procurement.id], body=message) + cr.execute('update procurement_order set message=%s where id=%s', (message, procurement.id)) return False return True @@ -346,14 +349,18 @@ class procurement_order(osv.osv): move_obj.action_confirm(cr, uid, [id], context=context) self.write(cr, uid, [procurement.id], {'move_id': id, 'close_move': 1}) self.write(cr, uid, ids, {'state': 'confirmed', 'message': ''}) + self.confirm_send_note(cr, uid, ids, context) return True def action_move_assigned(self, cr, uid, ids, context=None): """ Changes procurement state to Running and writes message. @return: True """ + message = _('From stock: products assigned.') self.write(cr, uid, ids, {'state': 'running', - 'message': _('from stock: products assigned.')}) + 'message': message}, context=context) + self.message_append_note(cr, uid, ids, body=message, context=context) + self.running_send_note(cr, uid, ids, context=context) return True def _check_make_to_stock_service(self, cr, uid, procurement, context=None): @@ -383,8 +390,9 @@ class procurement_order(osv.osv): message = _("Not enough stock.") if message: - self.log(cr, uid, procurement.id, _("Procurement '%s' is in exception: ") % (procurement.name) + message) + message = _("Procurement '%s' is in exception: ") % (procurement.name) + message cr.execute('update procurement_order set message=%s where id=%s', (message, procurement.id)) + self.message_append_note(cr, uid, [procurement.id], body=message, context=context) return ok def action_produce_assign_service(self, cr, uid, ids, context=None): @@ -393,6 +401,7 @@ class procurement_order(osv.osv): """ for procurement in self.browse(cr, uid, ids, context=context): self.write(cr, uid, [procurement.id], {'state': 'running'}) + self.running_send_note(cr, uid, ids, context=None) return True def action_produce_assign_product(self, cr, uid, ids, context=None): @@ -427,6 +436,7 @@ class procurement_order(osv.osv): if len(todo): move_obj.write(cr, uid, todo, {'state': 'assigned'}) self.write(cr, uid, ids, {'state': 'cancel'}) + self.cancel_send_note(cr, uid, ids, context=None) wf_service = netsvc.LocalService("workflow") for id in ids: wf_service.trg_trigger(uid, 'procurement.order', id, cr) @@ -451,6 +461,7 @@ class procurement_order(osv.osv): @return: True """ res = self.write(cr, uid, ids, {'state': 'ready'}) + self.ready_send_note(cr, uid, ids, context=None) return res def action_done(self, cr, uid, ids): @@ -463,11 +474,39 @@ class procurement_order(osv.osv): if procurement.close_move and (procurement.move_id.state <> 'done'): move_obj.action_done(cr, uid, [procurement.move_id.id]) res = self.write(cr, uid, ids, {'state': 'done', 'date_close': time.strftime('%Y-%m-%d')}) + self.done_send_note(cr, uid, ids, context=None) wf_service = netsvc.LocalService("workflow") for id in ids: wf_service.trg_trigger(uid, 'procurement.order', id, cr) return res + # ---------------------------------------- + # OpenChatter methods and notifications + # ---------------------------------------- + + def create(self, cr, uid, vals, context=None): + obj_id = super(procurement_order, self).create(cr, uid, vals, context) + self.create_send_note(cr, uid, [obj_id], context=context) + return obj_id + + def create_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Procurement has been <b>created</b>."), context=context) + + def confirm_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Procurement has been <b>confirmed</b>."), context=context) + + def running_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Procurement has been set to <b>running</b>."), context=context) + + def ready_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Procurement has been set to <b>ready</b>."), context=context) + + def cancel_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Procurement has been <b>cancelled</b>."), context=context) + + def done_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Procurement has been <b>done</b>."), context=context) + procurement_order() class StockPicking(osv.osv): diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml index 5343d6aaf0f..09bf0c6c24f 100644 --- a/addons/procurement/procurement_view.xml +++ b/addons/procurement/procurement_view.xml @@ -47,16 +47,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="button_confirm" states="draft" string="Confirm"/> <button name="button_check" states="confirmed" string="Run Procurement"/> <button name="button_restart" states="exception" string="Retry"/> <button name="button_cancel" states="draft,exception,waiting" string="Cancel"/> - <div class="oe_right"> - <field name="state" readonly="1" widget="statusbar" nolabel="1" statusbar_visible="draft,confirmed" /> - </div> - <div class="oe_clear"/> - </div> + <field name="state" readonly="1" widget="statusbar" statusbar_visible="draft,confirmed" /> + </header> <sheet string="Procurement" layout="auto"> <group col="2" colspan="2" class="oe_form_header"> <separator colspan="2" string="References"/> @@ -96,6 +93,9 @@ </page> </notebook> </sheet> + <div class="oe_form_sheet_width"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> + </div> </form> </field> </record> diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 446463ecf4d..410a802c810 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -19,15 +19,15 @@ # ############################################################################## -import time from datetime import datetime from dateutil.relativedelta import relativedelta +import netsvc +import pooler from osv import osv +from osv import fields from tools.translate import _ from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT import tools -import netsvc -import pooler class procurement_order(osv.osv): _inherit = 'procurement.order' @@ -69,7 +69,7 @@ class procurement_order(osv.osv): cr.commit() company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id maxdate = (datetime.today() + relativedelta(days=company.schedule_range)).strftime(tools.DEFAULT_SERVER_DATE_FORMAT) - start_date = time.strftime('%Y-%m-%d, %Hh %Mm %Ss') + start_date = fields.datetime.now() offset = 0 report = [] report_total = 0 @@ -113,13 +113,14 @@ class procurement_order(osv.osv): proc.product_id.name,)) report_except += 1 + if use_new_cursor: cr.commit() offset += len(ids) if not ids: break - end_date = time.strftime('%Y-%m-%d, %Hh %Mm %Ss') + end_date = fields.datetime.now() if uid: - request = self.pool.get('res.request') + # Chatter: old res.request is now a chatter on res.users, id=uid summary = _("""Here is the procurement scheduling report. Start Time: %s @@ -130,12 +131,7 @@ class procurement_order(osv.osv): Exceptions:\n""") % (start_date, end_date, report_total, report_except, report_later) summary += '\n'.join(report) - request.create(cr, uid, - {'name': "Procurement Processing Report.", - 'act_from': uid, - 'act_to': uid, - 'body': summary, - }) + self.pool.get('res.users').message_append_note(cr, uid, [uid], body=summary, context=context) if use_new_cursor: cr.commit() @@ -237,7 +233,6 @@ class procurement_order(osv.osv): orderpoint_obj = self.pool.get('stock.warehouse.orderpoint') location_obj = self.pool.get('stock.location') procurement_obj = self.pool.get('procurement.order') - request_obj = self.pool.get('res.request') wf_service = netsvc.LocalService("workflow") report = [] offset = 0 @@ -293,12 +288,8 @@ class procurement_order(osv.osv): if use_new_cursor: cr.commit() if user_id and report: - request_obj.create(cr, uid, { - 'name': 'Orderpoint report.', - 'act_from': user_id, - 'act_to': user_id, - 'body': '\n'.join(report) - }) + # Chatter: old res.request is now a chatter on res.users, id=uid + self.pool.get('res.users').message_append_note(cr, uid, [user_id], body='\n'.join(report), subject=_('Orderpoint report'), context=context) if use_new_cursor: cr.commit() cr.close() diff --git a/addons/product/i18n/ja.po b/addons/product/i18n/ja.po new file mode 100644 index 00000000000..326bcce9365 --- /dev/null +++ b/addons/product/i18n/ja.po @@ -0,0 +1,2334 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:37+0000\n" +"PO-Revision-Date: 2012-06-02 06:21+0000\n" +"Last-Translator: Akira Hiyama <Unknown>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-03 04:47+0000\n" +"X-Generator: Launchpad (build 15342)\n" + +#. module: product +#: model:product.template,name:product.product_product_ram512_product_template +msgid "DDR 512MB PC400" +msgstr "" + +#. module: product +#: field:product.packaging,rows:0 +msgid "Number of Layers" +msgstr "層の数" + +#. module: product +#: constraint:product.pricelist.item:0 +msgid "" +"Error ! You cannot assign the Main Pricelist as Other Pricelist in PriceList " +"Item!" +msgstr "エラー。価格表項目の中に他の価格表としてメインの価格表を割り当てることはできません。" + +#. module: product +#: help:product.pricelist.item,product_tmpl_id:0 +msgid "" +"Set a template if this rule only apply to a template of product. Keep empty " +"for all products" +msgstr "このルールを製品のテンプレートのみに適用するのであれば、テンプレートを設定して下さい。全ての製品のために空を保って下さい。" + +#. module: product +#: help:product.product,virtual_available:0 +msgid "" +"Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n" +"In a context with a single Stock Location, this includes goods stored at " +"this Location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods stored in the " +"Stock Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods stored in the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods stored in any Stock Location typed as " +"'internal'." +msgstr "" +"予測数量(手作業による数量の計算 - 出て行く + 入ってくる)\n" +"単数の在庫場所:商品がこの場所または子の何れかの場所に格納されるものが含まれます。\n" +"単数の倉庫:商品がこの倉庫の在庫場所または子の何れかの場所に格納されるものが含まれます。\n" +"単数の店:商品がこの店の倉庫の在庫場所または子の何れかの場所に格納されるものが含まれます。\n" +"他:商品が在庫場所タイプが内部となっている何れかの場所に格納されるものが含まれます。" + +#. module: product +#: model:product.category,name:product.cat1 +msgid "Sellable" +msgstr "販売可能" + +#. module: product +#: model:product.template,name:product.product_product_mb2_product_template +msgid "Mainboard ASUStek A7V8X-X" +msgstr "" + +#. module: product +#: help:product.template,seller_qty:0 +msgid "This is minimum quantity to purchase from Main Supplier." +msgstr "" + +#. module: product +#: model:product.uom,name:product.uom_day +msgid "Day" +msgstr "日" + +#. module: product +#: view:product.product:0 +msgid "UoM" +msgstr "単位" + +#. module: product +#: model:product.template,name:product.product_product_pc2_product_template +msgid "Basic+ PC (assembly on order)" +msgstr "" + +#. module: product +#: field:product.product,incoming_qty:0 +msgid "Incoming" +msgstr "入ってくる" + +#. module: product +#: help:res.partner,property_product_pricelist:0 +msgid "" +"This pricelist will be used, instead of the default one, for sales to the " +"current partner" +msgstr "この価格リストは現在のパートナに販売するために、デフォルトのそれに代って使用されます。" + +#. module: product +#: field:product.template,seller_qty:0 +msgid "Supplier Quantity" +msgstr "仕入数量" + +#. module: product +#: selection:product.template,mes_type:0 +msgid "Fixed" +msgstr "固定" + +#. module: product +#: code:addons/product/pricelist.py:178 +#, python-format +msgid "Warning !" +msgstr "警告" + +#. module: product +#: model:ir.actions.report.xml,name:product.report_product_pricelist +#: model:ir.model,name:product.model_product_pricelist +#: field:product.product,price:0 +#: field:product.product,pricelist_id:0 +#: view:product.supplierinfo:0 +msgid "Pricelist" +msgstr "価格リスト" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Base Prices" +msgstr "基本価格" + +#. module: product +#: field:product.pricelist.item,name:0 +msgid "Rule Name" +msgstr "ルール名" + +#. module: product +#: field:product.product,code:0 +#: field:product.product,default_code:0 +msgid "Reference" +msgstr "参照" + +#. module: product +#: help:pricelist.partnerinfo,min_quantity:0 +msgid "" +"The minimal quantity to trigger this rule, expressed in the supplier UoM if " +"any or in the default UoM of the product otherrwise." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_24_product_template +msgid "Keyboard" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_res_partner +msgid "Partner" +msgstr "" + +#. module: product +#: code:addons/product/product.py:143 +#, python-format +msgid "" +"Conversion from Product UoM %s to Default UoM %s is not possible as they " +"both belong to different Category!." +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_dozen +msgid "Dozen" +msgstr "" + +#. module: product +#: selection:product.template,cost_method:0 +msgid "Average Price" +msgstr "" + +#. module: product +#: help:product.pricelist.item,name:0 +msgid "Explicit rule name for this pricelist line." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_cpu1_product_template +msgid "Processor AMD Athlon XP 1800+" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_20_product_template +msgid "HDD on demand" +msgstr "" + +#. module: product +#: field:product.price_list,price_list:0 +msgid "PriceList" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "UOM" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_unit +msgid "PCE" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Miscelleanous" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_worker0_product_template +msgid "Worker" +msgstr "" + +#. module: product +#: help:product.template,sale_ok:0 +msgid "" +"Determines if the product can be visible in the list of product within a " +"selection from a sale order line." +msgstr "" + +#. module: product +#: model:product.pricelist.version,name:product.ver0 +msgid "Default Public Pricelist Version" +msgstr "" + +#. module: product +#: selection:product.template,cost_method:0 +msgid "Standard Price" +msgstr "" + +#. module: product +#: model:product.pricelist.type,name:product.pricelist_type_sale +#: field:res.partner,property_product_pricelist:0 +msgid "Sale Pricelist" +msgstr "" + +#. module: product +#: view:product.template:0 +#: field:product.template,type:0 +msgid "Product Type" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_form_config_action +msgid "" +"Create a product form for everything you buy or sell. Specify a supplier if " +"the product can be purchased." +msgstr "" + +#. module: product +#: view:product.uom:0 +msgid " e.g: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: product +#: code:addons/product/product.py:418 +#, python-format +msgid "Products: " +msgstr "" + +#. module: product +#: field:product.category,parent_id:0 +msgid "Parent Category" +msgstr "" + +#. module: product +#: help:product.template,procure_method:0 +msgid "" +"'Make to Stock': When needed, take from the stock or wait until re-" +"supplying. 'Make to Order': When needed, purchase or produce for the " +"procurement request." +msgstr "" + +#. module: product +#: model:process.node,note:product.process_node_supplier0 +msgid "Supplier name, price, product code, ..." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_hdd3_product_template +msgid "HDD Seagate 7200.8 160GB" +msgstr "" + +#. module: product +#: field:product.product,ean13:0 +msgid "EAN13" +msgstr "" + +#. module: product +#: field:product.template,seller_id:0 +msgid "Main Supplier" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_ul_form_action +#: model:ir.model,name:product.model_product_packaging +#: model:ir.ui.menu,name:product.menu_product_ul_form_action +#: view:product.packaging:0 +#: view:product.product:0 +#: view:product.ul:0 +msgid "Packaging" +msgstr "" + +#. module: product +#: view:product.product:0 +#: field:product.template,categ_id:0 +msgid "Category" +msgstr "" + +#. module: product +#: help:product.pricelist.item,min_quantity:0 +msgid "" +"The rule only applies if the partner buys/sells more than this quantity." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_woodmm0_product_template +msgid "Wood 2mm" +msgstr "" + +#. module: product +#: field:product.price_list,qty1:0 +msgid "Quantity-1" +msgstr "" + +#. module: product +#: help:product.packaging,ul_qty:0 +msgid "The number of packages by layer" +msgstr "" + +#. module: product +#: field:product.packaging,qty:0 +msgid "Quantity by Package" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +#: field:product.template,state:0 +msgid "Status" +msgstr "" + +#. module: product +#: help:product.template,categ_id:0 +msgid "Select category for the current product" +msgstr "" + +#. module: product +#: field:product.product,outgoing_qty:0 +msgid "Outgoing" +msgstr "" + +#. module: product +#: selection:product.uom,uom_type:0 +msgid "Reference UoM for this category" +msgstr "" + +#. module: product +#: model:product.price.type,name:product.list_price +#: field:product.product,lst_price:0 +msgid "Public Price" +msgstr "" + +#. module: product +#: field:product.price_list,qty5:0 +msgid "Quantity-5" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_10 +msgid "IT components" +msgstr "" + +#. module: product +#: field:product.template,product_manager:0 +msgid "Product Manager" +msgstr "" + +#. module: product +#: field:product.supplierinfo,product_name:0 +msgid "Supplier Product Name" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_pc3_product_template +msgid "Medium PC" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_normal_action_puchased +msgid "" +"Products can be purchased and/or sold. They can be raw materials, stockable " +"products, consumables or services. The Product form contains detailed " +"information about your products related to procurement logistics, sales " +"price, product category, suppliers and so on." +msgstr "" + +#. module: product +#: help:product.product,qty_available:0 +msgid "" +"Current quantity of products.\n" +"In a context with a single Stock Location, this includes goods stored at " +"this Location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods stored in the " +"Stock Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods stored in the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods stored in any Stock Location typed as " +"'internal'." +msgstr "" + +#. module: product +#: view:product.pricelist:0 +msgid "Products Price Search" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +#: field:product.template,description_sale:0 +msgid "Sale Description" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Storage Localisation" +msgstr "" + +#. module: product +#: help:product.packaging,length:0 +msgid "The length of the package" +msgstr "" + +#. module: product +#: help:product.template,weight_net:0 +msgid "The net weight in Kg." +msgstr "" + +#. module: product +#: help:product.template,state:0 +msgid "Tells the user if he can use the product or not." +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,min_quantity:0 +#: field:product.supplierinfo,qty:0 +msgid "Quantity" +msgstr "" + +#. module: product +#: field:product.packaging,height:0 +msgid "Height" +msgstr "" + +#. module: product +#: help:product.pricelist.version,date_end:0 +msgid "Ending date for this pricelist version to be valid." +msgstr "" + +#. module: product +#: model:product.category,name:product.cat0 +msgid "All products" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_pricelist_partnerinfo +msgid "pricelist.partnerinfo" +msgstr "" + +#. module: product +#: field:product.price_list,qty2:0 +msgid "Quantity-2" +msgstr "" + +#. module: product +#: field:product.price_list,qty3:0 +msgid "Quantity-3" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Codes" +msgstr "" + +#. module: product +#: field:product.price_list,qty4:0 +msgid "Quantity-4" +msgstr "" + +#. module: product +#: view:res.partner:0 +msgid "Sales & Purchases" +msgstr "" + +#. module: product +#: model:product.uom.categ,name:product.uom_categ_wtime +msgid "Working Time" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_pricelist_action2 +#: model:ir.actions.act_window,help:product.product_pricelist_action_for_purchase +msgid "" +"A price list contains rules to be evaluated in order to compute the purchase " +"or sales price for all the partners assigned to a price list. Price lists " +"have several versions (2010, 2011, Promotion of February 2010, etc.) and " +"each version has several rules. Example: the customer price of a product " +"category will be based on the supplier price multiplied by 1.80." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_metalcleats0_product_template +msgid "Metal Cleats" +msgstr "" + +#. module: product +#: code:addons/product/product.py:175 +#, python-format +msgid "Cannot change the category of existing UoM '%s'." +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_uom_categ +msgid "Product uom categ" +msgstr "" + +#. module: product +#: model:product.ul,name:product.product_ul_box +msgid "Box 20x20x40" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Price Computation" +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_uos +msgid "Product UoS View" +msgstr "" + +#. module: product +#: field:product.template,purchase_ok:0 +msgid "Can be Purchased" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_cpu2_product_template +msgid "High speed processor config" +msgstr "" + +#. module: product +#: model:process.transition,note:product.process_transition_supplierofproduct0 +msgid "" +"1 or several supplier(s) can be linked to a product. All information stands " +"in the product form." +msgstr "" + +#. module: product +#: help:product.uom,category_id:0 +msgid "" +"Quantity conversions may happen automatically between Units of Measure in " +"the same category, according to their respective ratios." +msgstr "" + +#. module: product +#: help:product.packaging,width:0 +msgid "The width of the package" +msgstr "" + +#. module: product +#: selection:product.category,type:0 +msgid "View" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_template_action_tree +msgid "Product Templates" +msgstr "" + +#. module: product +#: field:product.category,parent_left:0 +msgid "Left Parent" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_restaurantexpenses0_product_template +msgid "Restaurant Expenses" +msgstr "" + +#. module: product +#: help:product.packaging,qty:0 +msgid "The total number of products you can put by pallet or box." +msgstr "" + +#. module: product +#: constraint:product.packaging:0 +#: constraint:product.product:0 +msgid "Error: Invalid ean code" +msgstr "" + +#. module: product +#: field:product.pricelist.item,min_quantity:0 +msgid "Min. Quantity" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_price_type +msgid "Price Type" +msgstr "" + +#. module: product +#: code:addons/product/product.py:363 +#, python-format +msgid "" +"New UoM '%s' must belong to same UoM category '%s' as of old UoM '%s'. If " +"you need to change the unit of measure, you may desactivate this product " +"from the 'Procurement & Locations' tab and create a new one." +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Max. Margin" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Base Price" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_consultant_product_template +msgid "Service on Timesheet" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_fan2_product_template +msgid "Silent fan" +msgstr "" + +#. module: product +#: help:product.supplierinfo,name:0 +msgid "Supplier of this product" +msgstr "" + +#. module: product +#: help:product.pricelist.version,active:0 +msgid "" +"When a version is duplicated it is set to non active, so that the dates do " +"not overlaps with original version. You should change the dates and " +"reactivate the pricelist" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_kitshelfofcm0_product_template +msgid "KIT Shelf of 100cm" +msgstr "" + +#. module: product +#: field:product.supplierinfo,name:0 +msgid "Supplier" +msgstr "" + +#. module: product +#: field:product.product,qty_available:0 +msgid "Quantity On Hand" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_26_product_template +msgid "Kit Keyboard + Mouse" +msgstr "" + +#. module: product +#: field:product.price.type,name:0 +msgid "Price Name" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_arm_product_template +msgid "Cabinet" +msgstr "" + +#. module: product +#: help:product.product,incoming_qty:0 +msgid "" +"Quantity of products that are planned to arrive.\n" +"In a context with a single Stock Location, this includes goods arriving to " +"this Location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods arriving to the " +"Stock Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods arriving to the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods arriving to any Stock Location typed as " +"'internal'." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_woodentable0_product_template +msgid "Wooden Table" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_cpu3_product_template +msgid "Processor AMD Athlon XP 2200+" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.action_product_price_list +#: model:ir.model,name:product.model_product_price_list +#: view:product.price_list:0 +#: report:product.pricelist:0 +#: field:product.pricelist.version,pricelist_id:0 +msgid "Price List" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Suppliers" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "To Purchase" +msgstr "" + +#. module: product +#: help:product.supplierinfo,min_qty:0 +msgid "" +"The minimal quantity to purchase to this supplier, expressed in the supplier " +"Product UoM if not empty, in the default unit of measure of the product " +"otherwise." +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "New Price =" +msgstr "" + +#. module: product +#: help:pricelist.partnerinfo,price:0 +msgid "" +"This price will be considered as a price for the supplier UoM if any or the " +"default Unit of Measure of the product otherwise" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_accessories +msgid "Accessories" +msgstr "" + +#. module: product +#: field:product.template,sale_delay:0 +msgid "Customer Lead Time" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_25_product_template +msgid "Mouse" +msgstr "" + +#. module: product +#: help:product.template,uos_id:0 +msgid "" +"Used by companies that manage two units of measure: invoicing and inventory " +"management. For example, in food industries, you will manage a stock of ham " +"but invoice in Kg. Keep empty to use the default UOM." +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Min. Margin" +msgstr "" + +#. module: product +#: field:product.category,child_id:0 +msgid "Child Categories" +msgstr "" + +#. module: product +#: field:product.pricelist.version,date_end:0 +msgid "End Date" +msgstr "" + +#. module: product +#: view:product.price_list:0 +msgid "Print" +msgstr "" + +#. module: product +#: view:product.product:0 +#: field:product.ul,type:0 +msgid "Type" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_pricelist_action2 +#: model:ir.actions.act_window,name:product.product_pricelist_action_for_purchase +#: model:ir.ui.menu,name:product.menu_product_pricelist_action2 +#: model:ir.ui.menu,name:product.menu_product_pricelist_main +msgid "Pricelists" +msgstr "" + +#. module: product +#: field:product.product,partner_ref:0 +msgid "Customer ref" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Miscellaneous" +msgstr "" + +#. module: product +#: field:product.pricelist.type,key:0 +msgid "Key" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Rules Test Match" +msgstr "" + +#. module: product +#: help:product.pricelist.item,product_id:0 +msgid "" +"Set a product if this rule only apply to one product. Keep empty for all " +"products" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Procurement & Locations" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_kitchendesignproject0_product_template +msgid "Kitchen Design Project" +msgstr "" + +#. module: product +#: model:product.uom,name:product.uom_hour +msgid "Hour" +msgstr "" + +#. module: product +#: selection:product.template,state:0 +msgid "In Development" +msgstr "" + +#. module: product +#: code:addons/product/product.py:363 +#, python-format +msgid "UoM categories Mismatch!" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_shelfofcm1_product_template +msgid "Shelf of 200cm" +msgstr "" + +#. module: product +#: view:product.uom:0 +msgid "Ratio & Precision" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_gram +msgid "g" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_11 +msgid "IT components kits" +msgstr "" + +#. module: product +#: selection:product.category,type:0 +#: selection:product.template,state:0 +msgid "Normal" +msgstr "" + +#. module: product +#: model:process.node,name:product.process_node_supplier0 +#: view:product.supplierinfo:0 +msgid "Supplier Information" +msgstr "" + +#. module: product +#: field:product.price.type,currency_id:0 +#: report:product.pricelist:0 +#: field:product.pricelist,currency_id:0 +msgid "Currency" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_ram_product_template +msgid "DDR 256MB PC400" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_category_action_form +#: model:ir.ui.menu,name:product.menu_product_category_action_form +#: view:product.category:0 +msgid "Product Categories" +msgstr "" + +#. module: product +#: view:product.uom:0 +msgid " e.g: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_uom_form_action +msgid "" +"Create and manage the units of measure you want to be used in your system. " +"You can define a conversion rate between several Units of Measure within the " +"same category." +msgstr "" + +#. module: product +#: field:product.packaging,weight:0 +msgid "Total Package Weight" +msgstr "" + +#. module: product +#: field:product.template,seller_info_id:0 +msgid "unknown" +msgstr "" + +#. module: product +#: help:product.packaging,code:0 +msgid "The code of the transport unit." +msgstr "" + +#. module: product +#: help:product.template,standard_price:0 +msgid "" +"Product's cost for accounting stock valuation. It is the base price for the " +"supplier price." +msgstr "" + +#. module: product +#: view:product.price.type:0 +msgid "Products Price Type" +msgstr "" + +#. module: product +#: field:product.product,price_extra:0 +msgid "Variant Price Extra" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_fan_product_template +msgid "Regular case fan 80mm" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +#: field:product.template,description_purchase:0 +msgid "Purchase Description" +msgstr "" + +#. module: product +#: constraint:product.pricelist.version:0 +msgid "You cannot have 2 pricelist versions that overlap!" +msgstr "" + +#. module: product +#: help:product.supplierinfo,delay:0 +msgid "" +"Lead time in days between the confirmation of the purchase order and the " +"reception of the products in your warehouse. Used by the scheduler for " +"automatic computation of the purchase order planning." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_pricelist_action +msgid "" +"There can be more than one version of a pricelist. Here you can create and " +"manage new versions of a price list. Some examples of versions: 2010, 2011, " +"Summer Promotion, etc." +msgstr "" + +#. module: product +#: selection:product.template,type:0 +msgid "Stockable Product" +msgstr "" + +#. module: product +#: field:product.packaging,code:0 +msgid "Code" +msgstr "" + +#. module: product +#: view:product.supplierinfo:0 +msgid "Seq" +msgstr "" + +#. module: product +#: view:product.price_list:0 +msgid "Calculate Product Price per Unit Based on Pricelist Version." +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_ul +msgid "Shipping Unit" +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,suppinfo_id:0 +msgid "Partner Information" +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +#: model:product.uom.categ,name:product.product_uom_categ_unit +msgid "Unit" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Information" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Products Listprices Items" +msgstr "" + +#. module: product +#: view:product.packaging:0 +msgid "Other Info" +msgstr "" + +#. module: product +#: field:product.pricelist.version,items_id:0 +msgid "Price List Items" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_uom_categ_form_action +msgid "" +"Create and manage the units of measure categories you want to be used in " +"your system. If several units of measure are in the same category, they can " +"be converted to each other. For example, in the unit of measure category " +"\"Time\", you will have the following UoM: Hours, Days." +msgstr "" + +#. module: product +#: selection:product.uom,uom_type:0 +msgid "Bigger than the reference UoM" +msgstr "" + +#. module: product +#: field:product.category,parent_right:0 +msgid "Right Parent" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "To Sell" +msgstr "" + +#. module: product +#: help:product.product,outgoing_qty:0 +msgid "" +"Quantity of products that are planned to leave.\n" +"In a context with a single Stock Location, this includes goods leaving from " +"this Location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods leaving from the " +"Stock Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods leaving from the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods leaving from any Stock Location typed as " +"'internal'." +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_services0 +msgid "Marketable Services" +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_surcharge:0 +msgid "Price Surcharge" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_mb1_product_template +msgid "Mainboard ASUStek A7N8X" +msgstr "" + +#. module: product +#: field:product.product,packaging:0 +msgid "Logistical Units" +msgstr "" + +#. module: product +#: field:product.category,complete_name:0 +#: field:product.category,name:0 +#: field:product.pricelist.type,name:0 +#: field:product.pricelist.version,name:0 +#: view:product.product:0 +#: field:product.product,name_template:0 +#: field:product.template,name:0 +#: field:product.ul,name:0 +#: field:product.uom,name:0 +#: field:product.uom.categ,name:0 +msgid "Name" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_woodlintelm0_product_template +msgid "Wood Lintel 4m" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_normal_action +#: model:ir.actions.act_window,help:product.product_normal_action_sell +msgid "" +"You must define a Product for everything you buy or sell. Products can be " +"raw materials, stockable products, consumables or services. The Product form " +"contains detailed information about your products related to procurement " +"logistics, sales price, product category, suppliers and so on." +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_kgm +msgid "kg" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_meter +msgid "m" +msgstr "" + +#. module: product +#: selection:product.template,state:0 +msgid "Obsolete" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_km +msgid "km" +msgstr "" + +#. module: product +#: help:product.template,cost_method:0 +msgid "" +"Standard Price: the cost price is fixed and recomputed periodically (usually " +"at the end of the year), Average Price: the cost price is recomputed at each " +"reception of products." +msgstr "" + +#. module: product +#: help:product.category,sequence:0 +msgid "" +"Gives the sequence order when displaying a list of product categories." +msgstr "" + +#. module: product +#: field:product.uom,factor:0 +#: field:product.uom,factor_inv:0 +msgid "Ratio" +msgstr "" + +#. module: product +#: help:product.template,purchase_ok:0 +msgid "" +"Determine if the product is visible in the list of products within a " +"selection from a purchase order line." +msgstr "" + +#. module: product +#: field:product.template,weight_net:0 +msgid "Net Weight" +msgstr "" + +#. module: product +#: field:product.packaging,width:0 +msgid "Width" +msgstr "" + +#. module: product +#: help:product.price.type,field:0 +msgid "Associated field in the product form." +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Unit of Measure" +msgstr "" + +#. module: product +#: field:product.template,procure_method:0 +msgid "Procurement Method" +msgstr "" + +#. module: product +#: report:product.pricelist:0 +msgid "Printing Date" +msgstr "" + +#. module: product +#: field:product.template,uos_id:0 +msgid "Unit of Sale" +msgstr "" + +#. module: product +#: help:product.template,seller_delay:0 +msgid "" +"This is the average delay in days between the purchase order confirmation " +"and the reception of goods for this product and for the default supplier. It " +"is used by the scheduler to order requests based on reordering delays." +msgstr "" + +#. module: product +#: help:product.template,seller_id:0 +msgid "Main Supplier who has highest priority in Supplier List." +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_services +#: view:product.product:0 +msgid "Services" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_form_config_action +msgid "Create or Import Products" +msgstr "" + +#. module: product +#: field:product.pricelist.item,base_pricelist_id:0 +msgid "If Other Pricelist" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_normal_action +#: model:ir.actions.act_window,name:product.product_normal_action_puchased +#: model:ir.actions.act_window,name:product.product_normal_action_sell +#: model:ir.actions.act_window,name:product.product_normal_action_tree +#: model:ir.ui.menu,name:product.menu_products +#: model:ir.ui.menu,name:product.prod_config_main +#: view:product.product:0 +msgid "Products" +msgstr "" + +#. module: product +#: help:product.packaging,rows:0 +msgid "The number of layers on a pallet or box" +msgstr "" + +#. module: product +#: help:product.pricelist.item,base:0 +msgid "The mode for computing the price for this rule." +msgstr "" + +#. module: product +#: view:product.packaging:0 +#: view:product.product:0 +msgid "Pallet Dimension" +msgstr "" + +#. module: product +#: code:addons/product/product.py:668 +#, python-format +msgid " (copy)" +msgstr "" + +#. module: product +#: field:product.template,seller_ids:0 +msgid "Partners" +msgstr "" + +#. module: product +#: help:product.template,sale_delay:0 +msgid "" +"This is the average delay in days between the confirmation of the customer " +"order and the delivery of the finished products. It's the time you promise " +"to your customers." +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Second UoM" +msgstr "" + +#. module: product +#: code:addons/product/product.py:143 +#, python-format +msgid "Error !" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_uom_form_action +#: model:ir.ui.menu,name:product.menu_product_uom_form_action +#: model:ir.ui.menu,name:product.next_id_16 +#: view:product.uom:0 +msgid "Units of Measure" +msgstr "" + +#. module: product +#: field:product.supplierinfo,min_qty:0 +msgid "Minimal Quantity" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_pc +msgid "PC" +msgstr "" + +#. module: product +#: help:product.supplierinfo,product_code:0 +msgid "" +"This supplier's product code will be used when printing a request for " +"quotation. Keep empty to use the internal one." +msgstr "" + +#. module: product +#: selection:product.template,procure_method:0 +msgid "Make to Stock" +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_version_id:0 +msgid "Price List Version" +msgstr "" + +#. module: product +#: field:product.product,virtual_available:0 +msgid "Quantity Available" +msgstr "" + +#. module: product +#: help:product.pricelist.item,sequence:0 +msgid "" +"Gives the order in which the pricelist items will be checked. The evaluation " +"gives highest priority to lowest sequence and stops as soon as a matching " +"item is found." +msgstr "" + +#. module: product +#: selection:product.template,type:0 +msgid "Consumable" +msgstr "" + +#. module: product +#: help:product.price.type,currency_id:0 +msgid "The currency the field is expressed in." +msgstr "" + +#. module: product +#: help:product.template,weight:0 +msgid "The gross weight in Kg." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_sidepanel0_product_template +msgid "Side Panel" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Procurement" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Weights" +msgstr "" + +#. module: product +#: field:product.uom,category_id:0 +msgid "UoM Category" +msgstr "" + +#. module: product +#: field:product.template,loc_rack:0 +msgid "Rack" +msgstr "" + +#. module: product +#: field:product.template,uom_po_id:0 +msgid "Purchase Unit of Measure" +msgstr "" + +#. module: product +#: field:product.template,supply_method:0 +msgid "Supply Method" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_category_action +msgid "" +"Here is a list of all your products classified by category. You can click a " +"category to get the list of all products linked to this category or to a " +"child of this category." +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Group by..." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_cpu_gen_product_template +msgid "Regular processor config" +msgstr "" + +#. module: product +#: help:product.template,type:0 +msgid "" +"Will change the way procurements are processed. Consumable are product where " +"you don't manage stock." +msgstr "" + +#. module: product +#: field:product.pricelist.version,date_start:0 +msgid "Start Date" +msgstr "" + +#. module: product +#: help:product.template,produce_delay:0 +msgid "" +"Average delay in days to produce this product. This is only for the " +"production order and, if it is a multi-level bill of material, it's only for " +"the level of this product. Different lead times will be summed for all " +"levels and purchase orders." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_pc1_product_template +msgid "Basic PC" +msgstr "" + +#. module: product +#: help:product.pricelist,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the pricelist " +"without removing it." +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_cm +msgid "cm" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: product +#: constraint:product.template:0 +msgid "" +"Error: The default UOM and the purchase UOM must be in the same category." +msgstr "" + +#. module: product +#: field:product.uom,rounding:0 +msgid "Rounding Precision" +msgstr "" + +#. module: product +#: view:product.uom:0 +msgid "Unit of Measure Properties" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_shelf1_product_template +msgid "Rack 200cm" +msgstr "" + +#. module: product +#: selection:product.template,supply_method:0 +msgid "Buy" +msgstr "" + +#. module: product +#: view:product.uom.categ:0 +msgid "Units of Measure categories" +msgstr "" + +#. module: product +#: help:product.packaging,weight_ul:0 +msgid "The weight of the empty UL" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_woodmm10_product_template +msgid "Wood 10mm" +msgstr "" + +#. module: product +#: selection:product.uom,uom_type:0 +msgid "Smaller than the reference UoM" +msgstr "" + +#. module: product +#: field:product.price.type,active:0 +#: field:product.pricelist,active:0 +#: field:product.pricelist.version,active:0 +#: field:product.product,active:0 +#: field:product.uom,active:0 +msgid "Active" +msgstr "" + +#. module: product +#: field:product.product,price_margin:0 +msgid "Variant Price Margin" +msgstr "" + +#. module: product +#: sql_constraint:product.uom:0 +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "" + +#. module: product +#: help:product.packaging,ean:0 +msgid "The EAN code of the package unit." +msgstr "" + +#. module: product +#: help:product.supplierinfo,product_uom:0 +msgid "This comes from the product form." +msgstr "" + +#. module: product +#: field:product.packaging,weight_ul:0 +msgid "Empty Package Weight" +msgstr "" + +#. module: product +#: field:product.price.type,field:0 +msgid "Product Field" +msgstr "" + +#. module: product +#: field:product.template,mes_type:0 +msgid "Measure Type" +msgstr "" + +#. module: product +#: help:product.uom,factor:0 +msgid "" +"How many times this UoM is smaller than the reference UoM in this category:\n" +"1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_price_type_action +#: model:ir.ui.menu,name:product.menu_product_price_type +msgid "Price Types" +msgstr "" + +#. module: product +#: help:product.template,uom_id:0 +msgid "Default Unit of Measure used for all stock operation." +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_misc0 +msgid "Misc" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_pc4_product_template +msgid "Customizable PC" +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,price:0 +msgid "Unit Price" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_7 +#: model:product.template,name:product.product_product_1_product_template +msgid "Onsite Intervention" +msgstr "" + +#. module: product +#: model:product.pricelist,name:product.list0 +msgid "Public Pricelist" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_marketableproduct0 +msgid "Marketable Products" +msgstr "" + +#. module: product +#: field:product.supplierinfo,product_code:0 +msgid "Supplier Product Code" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Default UOM" +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +msgid "Pallet" +msgstr "" + +#. module: product +#: field:product.packaging,ul_qty:0 +msgid "Package by layer" +msgstr "" + +#. module: product +#: field:product.template,warranty:0 +msgid "Warranty (months)" +msgstr "" + +#. module: product +#: help:product.pricelist.item,categ_id:0 +msgid "" +"Set a category of product if this rule only apply to products of a category " +"and his children. Keep empty for all products" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_product +#: model:process.node,name:product.process_node_product0 +#: model:process.process,name:product.process_process_productprocess0 +#: field:product.packaging,product_id:0 +#: field:product.pricelist.item,product_id:0 +#: view:product.product:0 +#: field:product.supplierinfo,product_id:0 +#: model:res.request.link,name:product.req_link_product +msgid "Product" +msgstr "" + +#. module: product +#: selection:product.template,supply_method:0 +msgid "Produce" +msgstr "" + +#. module: product +#: selection:product.template,procure_method:0 +msgid "Make to Order" +msgstr "" + +#. module: product +#: help:product.template,supply_method:0 +msgid "" +"Produce will generate production order or tasks, according to the product " +"type. Buy will trigger purchase orders when requested." +msgstr "" + +#. module: product +#: field:product.product,variants:0 +msgid "Variants" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_category_action +#: model:ir.ui.menu,name:product.menu_products_category +msgid "Products by Category" +msgstr "" + +#. module: product +#: field:product.template,uos_coeff:0 +msgid "UOM -> UOS Coeff" +msgstr "" + +#. module: product +#: help:product.supplierinfo,sequence:0 +msgid "Assigns the priority to the list of product supplier." +msgstr "" + +#. module: product +#: field:product.template,uom_id:0 +msgid "Default Unit of Measure" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_tow1_product_template +msgid "ATX Mid-size Tower" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Rounding Method" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_assembly +msgid "Assembly Service" +msgstr "" + +#. module: product +#: model:ir.actions.report.xml,name:product.report_product_label +msgid "Products Labels" +msgstr "" + +#. module: product +#: model:product.ul,name:product.product_ul_big_box +msgid "Box 30x40x60" +msgstr "" + +#. module: product +#: selection:product.template,type:0 +msgid "Service" +msgstr "" + +#. module: product +#: help:product.packaging,height:0 +msgid "The height of the package" +msgstr "" + +#. module: product +#: view:product.pricelist:0 +msgid "Products Price List" +msgstr "" + +#. module: product +#: field:product.pricelist,company_id:0 +#: field:product.pricelist.item,company_id:0 +#: field:product.pricelist.version,company_id:0 +#: view:product.product:0 +#: field:product.supplierinfo,company_id:0 +#: field:product.template,company_id:0 +msgid "Company" +msgstr "" + +#. module: product +#: help:product.template,list_price:0 +msgid "" +"Base price for computing the customer price. Sometimes called the catalog " +"price." +msgstr "" + +#. module: product +#: code:addons/product/pricelist.py:376 +#, python-format +msgid "Partner section of the product form" +msgstr "" + +#. module: product +#: help:product.price.type,name:0 +msgid "Name of this kind of price." +msgstr "" + +#. module: product +#: field:product.supplierinfo,product_uom:0 +msgid "Supplier UoM" +msgstr "" + +#. module: product +#: help:product.pricelist.version,date_start:0 +msgid "Starting date for this pricelist version to be valid." +msgstr "" + +#. module: product +#: help:product.template,uom_po_id:0 +msgid "" +"Default Unit of Measure used for purchase orders. It must be in the same " +"category than the default unit of measure." +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_cpu1_product_template +msgid "This product is configured with example of push/pull flows" +msgstr "" + +#. module: product +#: field:product.packaging,length:0 +msgid "Length" +msgstr "" + +#. module: product +#: model:product.uom.categ,name:product.uom_categ_length +msgid "Length / Distance" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_0_product_template +msgid "Onsite Senior Intervention" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_pricelist_type +#: field:product.pricelist,type:0 +msgid "Pricelist Type" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_otherproducts0 +msgid "Other Products" +msgstr "" + +#. module: product +#: field:product.product,color:0 +msgid "Color Index" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Characteristics" +msgstr "" + +#. module: product +#: field:product.template,sale_ok:0 +msgid "Can be Sold" +msgstr "" + +#. module: product +#: field:product.template,produce_delay:0 +msgid "Manufacturing Lead Time" +msgstr "" + +#. module: product +#: field:product.supplierinfo,pricelist_ids:0 +msgid "Supplier Pricelist" +msgstr "" + +#. module: product +#: code:addons/product/product.py:175 +#, python-format +msgid "Warning" +msgstr "" + +#. module: product +#: field:product.pricelist.item,base:0 +msgid "Based on" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_ton +msgid "t" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_rawmaterial0 +msgid "Raw Materials" +msgstr "" + +#. module: product +#: help:product.template,product_manager:0 +msgid "This is use as task responsible" +msgstr "" + +#. module: product +#: field:product.pricelist,name:0 +msgid "Pricelist Name" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_pricelist_version +#: view:product.pricelist:0 +#: view:product.pricelist.version:0 +msgid "Pricelist Version" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "* ( 1 + " +msgstr "" + +#. module: product +#: help:product.packaging,weight:0 +msgid "The weight of a full package, pallet or box." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_hdd2_product_template +msgid "HDD Seagate 7200.8 120GB" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_employee0_product_template +msgid "Employee" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_shelfofcm0_product_template +msgid "Shelf of 100cm" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_category +#: field:product.pricelist.item,categ_id:0 +msgid "Product Category" +msgstr "" + +#. module: product +#: report:product.pricelist:0 +msgid "Price List Name" +msgstr "" + +#. module: product +#: field:product.supplierinfo,delay:0 +msgid "Delivery Lead Time" +msgstr "" + +#. module: product +#: help:product.uom,active:0 +msgid "" +"By unchecking the active field you can disable a unit of measure without " +"deleting it." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_uom_categ_form_action +#: model:ir.ui.menu,name:product.menu_product_uom_categ_form_action +msgid "UoM Categories" +msgstr "" + +#. module: product +#: field:product.template,seller_delay:0 +msgid "Supplier Lead Time" +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +msgid "Box" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_ul_form_action +msgid "" +"Create and manage your packaging dimensions and types you want to be " +"maintained in your system." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_rearpanelarm1_product_template +msgid "Rear Panel SHE200" +msgstr "" + +#. module: product +#: help:product.pricelist.type,key:0 +msgid "" +"Used in the code to select specific prices based on the context. Keep " +"unchanged." +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Context..." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_hdd1_product_template +msgid "HDD Seagate 7200.8 80GB" +msgstr "" + +#. module: product +#: help:product.supplierinfo,qty:0 +msgid "This is a quantity which is converted into Default Uom." +msgstr "" + +#. module: product +#: field:product.packaging,ul:0 +msgid "Type of Package" +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +msgid "Pack" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_4 +msgid "Dello Computer" +msgstr "" + +#. module: product +#: model:product.uom.categ,name:product.product_uom_categ_kgm +msgid "Weight" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_22_product_template +msgid "Processor on demand" +msgstr "" + +#. module: product +#: model:process.transition,name:product.process_transition_supplierofproduct0 +msgid "Supplier of the product" +msgstr "" + +#. module: product +#: field:product.product,product_image:0 +msgid "Image" +msgstr "" + +#. module: product +#: field:product.uom,uom_type:0 +msgid "UoM Type" +msgstr "" + +#. module: product +#: help:product.product,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the product " +"without removing it." +msgstr "" + +#. module: product +#: help:product.uom,rounding:0 +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a UoM " +"that cannot be further split, such as a piece." +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Descriptions" +msgstr "" + +#. module: product +#: field:product.template,loc_row:0 +msgid "Row" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_rearpanelarm0_product_template +msgid "Rear Panel SHE100" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_23_product_template +msgid "Complete PC With Peripherals" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_hotelexpenses0_product_template +msgid "Hotel Expenses" +msgstr "" + +#. module: product +#: help:product.uom,factor_inv:0 +msgid "" +"How many times this UoM is bigger than the reference UoM in this category:\n" +"1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_shelf0_product_template +msgid "Rack 100cm" +msgstr "" + +#. module: product +#: help:product.packaging,sequence:0 +msgid "Gives the sequence order when displaying a list of packaging." +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_round:0 +msgid "Price Rounding" +msgstr "" + +#. module: product +#: code:addons/product/pricelist.py:178 +#, python-format +msgid "" +"At least one pricelist has no active version !\n" +"Please create or activate one." +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_max_margin:0 +msgid "Max. Price Margin" +msgstr "" + +#. module: product +#: help:product.supplierinfo,product_name:0 +msgid "" +"This supplier's product name will be used when printing a request for " +"quotation. Keep empty to use the internal one." +msgstr "" + +#. module: product +#: selection:product.template,mes_type:0 +msgid "Variable" +msgstr "" + +#. module: product +#: field:product.template,rental:0 +msgid "Can be Rent" +msgstr "" + +#. module: product +#: model:product.price.type,name:product.standard_price +#: field:product.template,standard_price:0 +msgid "Cost Price" +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_min_margin:0 +msgid "Min. Price Margin" +msgstr "" + +#. module: product +#: field:product.template,weight:0 +msgid "Gross Weight" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_assemblysection0_product_template +msgid "Assembly Section" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_3 +msgid "Computer Stuff" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_8 +msgid "Phone Help" +msgstr "" + +#. module: product +#: field:product.category,sequence:0 +#: field:product.packaging,sequence:0 +#: field:product.pricelist.item,sequence:0 +#: field:product.supplierinfo,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_assembly_product_template +msgid "Assembly Service Cost" +msgstr "" + +#. module: product +#: view:product.price_list:0 +msgid "Close" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_pricelist_item +msgid "Pricelist item" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_21_product_template +msgid "RAM on demand" +msgstr "" + +#. module: product +#: view:res.partner:0 +msgid "Sales Properties" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Delays" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Both stockable and consumable products" +msgstr "" + +#. module: product +#: model:process.node,note:product.process_node_product0 +msgid "Creation of the product" +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,name:0 +#: field:product.packaging,name:0 +#: report:product.pricelist:0 +#: view:product.product:0 +#: view:product.template:0 +#: field:product.template,description:0 +msgid "Description" +msgstr "" + +#. module: product +#: field:product.packaging,ean:0 +msgid "EAN" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Product Description" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid " ) + " +msgstr "" + +#. module: product +#: field:product.template,volume:0 +msgid "Volume" +msgstr "" + +#. module: product +#: field:product.template,loc_case:0 +msgid "Case" +msgstr "" + +#. module: product +#: view:product.product:0 +#: model:res.groups,name:product.group_product_variant +msgid "Product Variant" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_shelves0 +msgid "Shelves" +msgstr "" + +#. module: product +#: code:addons/product/pricelist.py:375 +#, python-format +msgid "Other Pricelist" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_template +#: field:product.pricelist.item,product_tmpl_id:0 +#: field:product.product,product_tmpl_id:0 +#: view:product.template:0 +msgid "Product Template" +msgstr "" + +#. module: product +#: field:product.template,cost_method:0 +msgid "Costing Method" +msgstr "" + +#. module: product +#: view:product.packaging:0 +#: view:product.product:0 +msgid "Palletization" +msgstr "" + +#. module: product +#: help:product.template,volume:0 +msgid "The volume in m3." +msgstr "" + +#. module: product +#: selection:product.template,state:0 +msgid "End of Lifecycle" +msgstr "" + +#. module: product +#: help:product.product,packaging:0 +msgid "" +"Gives the different ways to package the same product. This has no impact on " +"the picking order and is mainly used if you use the EDI module." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_pricelist_action +#: model:ir.ui.menu,name:product.menu_product_pricelist_action +#: field:product.pricelist,version_id:0 +msgid "Pricelist Versions" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_span100_product_template +msgid "Shelf Panel" +msgstr "" + +#. module: product +#: help:product.pricelist.item,price_round:0 +msgid "" +"Sets the price so that it is a multiple of this value.\n" +"Rounding is applied after the discount and before the surcharge.\n" +"To have prices that end in 9.99, set rounding 10, surcharge -0.01" +msgstr "" + +#. module: product +#: field:product.template,list_price:0 +msgid "Sale Price" +msgstr "" + +#. module: product +#: constraint:product.category:0 +msgid "Error ! You cannot create recursive categories." +msgstr "" + +#. module: product +#: field:product.category,type:0 +msgid "Category Type" +msgstr "" + +#. module: product +#: model:product.category,name:product.cat2 +msgid "Private" +msgstr "" + +#. module: product +#: help:product.template,uos_coeff:0 +msgid "" +"Coefficient to convert UOM to UOS\n" +" uos = uom * coeff" +msgstr "" + +#. module: product +#: constraint:res.partner:0 +msgid "Error ! You cannot create recursive associated members." +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_discount:0 +msgid "Price Discount" +msgstr "" diff --git a/addons/product/product.py b/addons/product/product.py index 4201c16402a..f81378be04e 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -518,7 +518,7 @@ class product_product(osv.osv): 'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the product without removing it."), 'variants': fields.char('Variants', size=64), 'product_tmpl_id': fields.many2one('product.template', 'Product Template', required=True, ondelete="cascade"), - 'ean13': fields.char('EAN13', size=13), + 'ean13': fields.char('EAN13', size=13, help="The numbers encoded in EAN-13 bar codes are product identification numbers."), 'packaging' : fields.one2many('product.packaging', 'product_id', 'Logistical Units', help="Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."), 'price_extra': fields.float('Variant Price Extra', digits_compute=dp.get_precision('Sale Price')), 'price_margin': fields.float('Variant Price Margin', digits_compute=dp.get_precision('Sale Price')), diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml index 5d06a80b024..6072aac86e6 100644 --- a/addons/product/product_view.xml +++ b/addons/product/product_view.xml @@ -68,7 +68,7 @@ <field name="type">form</field> <field eval="7" name="priority"/> <field name="arch" type="xml"> - <form string="Product"> + <form string="Product" layout="auto"> <group colspan="4" col="8"> <group colspan="4" col="2"> <separator string="Name" colspan="2"/> @@ -78,7 +78,7 @@ <group colspan="1" col="2"> <separator string="Codes" colspan="2"/> <field name="default_code"/> - <field name="ean13"/> + <field name="ean13" placeholder="5901234123457" /> </group> <group colspan="1" col="2"> <separator string="Characteristics" colspan="2"/> @@ -163,9 +163,9 @@ <separator string="Description"/> <field colspan="4" name="description" nolabel="1"/> <separator string="Sale Description"/> - <field colspan="4" name="description_sale" nolabel="1"/> + <field colspan="4" name="description_sale" nolabel="1" placeholder="This note will be displayed on quotations..."/> <separator string="Purchase Description"/> - <field colspan="4" name="description_purchase" nolabel="1"/> + <field colspan="4" name="description_purchase" nolabel="1" placeholder="This note will be displayed on requests for quotation..."/> </page> <page groups="product.group_stock_packaging" string="Packaging"> <field colspan="4" name="packaging" nolabel="1"> @@ -190,7 +190,9 @@ </field> </page> </notebook> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <div class="oe_form_sheet_width"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> + </div> </form> </field> </record> diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py index ef26425d3c9..2c53fc2a28a 100644 --- a/addons/project/__openerp__.py +++ b/addons/project/__openerp__.py @@ -28,7 +28,7 @@ "category": "Project Management", "sequence": 8, "images": ["images/gantt.png", "images/project_dashboard.jpeg","images/project_task_tree.jpeg","images/project_task.jpeg","images/project.jpeg","images/task_analysis.jpeg"], - "depends": ["base_setup", "product", "analytic", "board", "mail", "resource","web_kanban"], + "depends": ["base_setup", "base_status", "product", "analytic", "board", "mail", "resource","web_kanban"], "description": """ Project management module tracks multi-level projects, tasks, work done on tasks, eso. ====================================================================================== diff --git a/addons/project/board_project_view.xml b/addons/project/board_project_view.xml index fa6816ebbf7..a4b302f33f2 100644 --- a/addons/project/board_project_view.xml +++ b/addons/project/board_project_view.xml @@ -17,11 +17,8 @@ <field name="planned_hours" widget="float_time"/> <field name="effective_hours" widget="float_time"/> <field name="progress" widget="progressbar"/> - <field name="state" invisible="context.get('set_visible',False)"/> - <button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel" help="For cancelling the task"/> - <button name="do_open" states="pending,draft,done,cancel" string="Start Task" type="object" icon="gtk-execute" help="For changing to open state" invisible="context.get('set_visible',False)"/> - <button name="%(action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-sort-descending" help="For changing to delegate state"/> - <button name="action_close" states="draft,pending,open" string="Done" type="object" icon="terp-dialog-close" help="For changing to done state"/> + <field name="stage_id" invisible="context.get('set_visible',False)"/> + <field name="state" invisible="context.get('set_visible',False)" groups="base.group_no_one"/> </tree> </field> </record> @@ -39,10 +36,8 @@ <field name="date_deadline"/> <field name="total_hours" widget="float_time"/> <field name="progress" widget="progressbar"/> - <field name="state" invisible="context.get('set_visible',False)"/> - <button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel" help="For cancelling the task"/> - <button name="do_open" states="pending,draft,done,cancel" string="Start Task" type="object" icon="gtk-execute" help="For changing to open state" invisible="context.get('set_visible',False)"/> - <button name="action_close" states="draft,pending,open" string="Done" type="object" icon="gtk-apply" help="For changing to done state"/> + <field name="stage_id" invisible="context.get('set_visible',False)"/> + <field name="state" invisible="context.get('set_visible',False)" groups="base.group_no_one"/> </tree> </field> </record> diff --git a/addons/project/project.py b/addons/project/project.py index 0b23196a67f..e7af9f49b7d 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-today OpenERP SA (<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,18 +19,15 @@ # ############################################################################## -from lxml import etree -import time +from base_status.base_stage import base_stage from datetime import datetime, date - -from tools.translate import _ +from lxml import etree from osv import fields, osv from openerp.addons.resource.faces import task as Task +import time +from tools.translate import _ -# I think we can remove this in v6.1 since VMT's improvements in the framework ? -#class project_project(osv.osv): -# _name = 'project.project' -#project_project() +_TASK_STATE = [('draft', 'New'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done'), ('cancelled', 'Cancelled')] class project_task_type(osv.osv): _name = 'project.task.type' @@ -40,14 +37,20 @@ class project_task_type(osv.osv): 'name': fields.char('Stage Name', required=True, size=64, translate=True), 'description': fields.text('Description'), 'sequence': fields.integer('Sequence'), - 'project_default': fields.boolean('Common to All Projects', help="If you check this field, this stage will be proposed by default on each new project. It will not assign this stage to existing projects."), + 'case_default': fields.boolean('Common to All Projects', + help="If you check this field, this stage will be proposed by default on each new project. It will not assign this stage to existing projects."), 'project_ids': fields.many2many('project.project', 'project_task_type_rel', 'type_id', 'project_id', 'Projects'), + 'state': fields.selection(_TASK_STATE, 'State', required=True, + help="The related state for the stage. The state of your document will automatically change regarding the selected stage. Example, a stage is related to the state '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."), } _defaults = { - 'sequence': 1 + 'sequence': 1, + 'state': 'draft', + 'fold': False, } _order = 'sequence' -project_task_type() class project(osv.osv): _name = "project.project" @@ -208,7 +211,7 @@ class project(osv.osv): return True def _get_type_common(self, cr, uid, context): - ids = self.pool.get('project.task.type').search(cr, uid, [('project_default','=',1)], context=context) + ids = self.pool.get('project.task.type').search(cr, uid, [('case_default','=',1)], context=context) return ids _order = "sequence" @@ -239,7 +242,7 @@ class project(osv.osv): def set_done(self, cr, uid, ids, context=None): task_obj = self.pool.get('project.task') task_ids = task_obj.search(cr, uid, [('project_id', 'in', ids), ('state', 'not in', ('cancelled', 'done'))]) - task_obj.write(cr, uid, task_ids, {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0}) + task_obj.case_close(cr, uid, task_ids, context=context) self.write(cr, uid, ids, {'state':'close'}, context=context) self.set_close_send_note(cr, uid, ids, context=context) return True @@ -247,7 +250,7 @@ class project(osv.osv): def set_cancel(self, cr, uid, ids, context=None): task_obj = self.pool.get('project.task') task_ids = task_obj.search(cr, uid, [('project_id', 'in', ids), ('state', '!=', 'done')]) - task_obj.write(cr, uid, task_ids, {'state': 'cancelled', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0}) + task_obj.case_cancel(cr, uid, task_ids, context=context) self.write(cr, uid, ids, {'state':'cancelled'}, context=context) self.set_cancel_send_note(cr, uid, ids, context=context) return True @@ -501,49 +504,60 @@ def Project(): def set_close_send_note(self, cr, uid, ids, context=None): message = _("Project has been <b>closed</b>.") return self.message_append_note(cr, uid, ids, body=message, context=context) - -project() -class task(osv.osv): + +class task(base_stage, osv.osv): _name = "project.task" _description = "Task" - _log_create = True _date_name = "date_start" _inherit = ['ir.needaction_mixin', 'mail.thread'] + 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) + + def _get_default_stage_id(self, cr, uid, context=None): + """ Gives default stage_id """ + project_id = self._get_default_project_id(cr, uid, context=context) + return self.stage_find(cr, uid, [], project_id, [('state', '=', 'draft')], context=context) def _resolve_project_id_from_context(self, cr, uid, context=None): - """Return ID of project based on the value of 'project_id' - context key, or None if it cannot be resolved to a single project. + """ Returns ID of project based on the value of 'default_project_id' + context key, or None if it cannot be resolved to a single + project. """ if context is None: context = {} if type(context.get('default_project_id')) in (int, long): - project_id = context['default_project_id'] - return project_id + return context['default_project_id'] if isinstance(context.get('default_project_id'), basestring): project_name = context['default_project_id'] - project_ids = self.pool.get('project.project').name_search(cr, uid, name=project_name) + project_ids = self.pool.get('project.project').name_search(cr, uid, name=project_name, context=context) if len(project_ids) == 1: return project_ids[0][0] + return None - def _read_group_type_id(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): + def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): stage_obj = self.pool.get('project.task.type') - project_id = self._resolve_project_id_from_context(cr, uid, context=context) order = stage_obj._order access_rights_uid = access_rights_uid or uid - if read_group_order == 'type_id desc': - # lame way to allow reverting search, should just work in the trivial case + # lame way to allow reverting search, should just work in the trivial case + if read_group_order == 'stage_id desc': order = '%s desc' % order + # retrieve section_id from the context and write the domain + # - ('id', 'in', 'ids'): add columns that should be present + # - OR ('case_default', '=', True), ('fold', '=', False): add default columns that are not folded + # - OR ('project_ids', 'in', project_id), ('fold', '=', False) if project_id: add project columns that are not folded + search_domain = [] + project_id = self._resolve_project_id_from_context(cr, uid, context=context) if project_id: - domain = ['|', ('id','in',ids), ('project_ids','in',project_id)] - else: - domain = ['|', ('id','in',ids), ('project_default','=',1)] - stage_ids = stage_obj._search(cr, uid, domain, order=order, access_rights_uid=access_rights_uid, context=context) + search_domain += ['|', '&', ('project_ids', '=', project_id), ('fold', '=', False)] + search_domain += ['|', ('id', 'in', ids), '&', ('case_default', '=', True), ('fold', '=', False)] + stage_ids = stage_obj._search(cr, uid, search_domain, order=order, access_rights_uid=access_rights_uid, context=context) result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context) # restore order of the search result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0]))) return result - + def _read_group_user_id(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): res_users = self.pool.get('res.users') project_id = self._resolve_project_id_from_context(cr, uid, context=context) @@ -562,11 +576,10 @@ class task(osv.osv): return result _group_by_full = { - 'type_id': _read_group_type_id, - 'user_id': _read_group_user_id + 'stage_id': _read_group_stage_ids, + 'user_id': _read_group_user_id, } - def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False): obj_project = self.pool.get('project.project') for domain in args: @@ -597,7 +610,6 @@ class task(osv.osv): res[task.id]['progress'] = 100.0 return res - def onchange_remaining(self, cr, uid, ids, remaining=0.0, planned = 0.0): if remaining and not planned: return {'value':{'planned_hours': remaining}} @@ -640,7 +652,7 @@ class task(osv.osv): if not default.get('remaining_hours', False): default['remaining_hours'] = float(self.read(cr, uid, id, ['planned_hours'])['planned_hours']) default['active'] = True - default['type_id'] = False + default['stage_id'] = False if not default.get('name', False): default['name'] = self.browse(cr, uid, id, context=context).name or '' if not context.get('copy',False): @@ -670,10 +682,15 @@ class task(osv.osv): 'description': fields.text('Description'), 'priority': fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Important'), ('0','Very important')], 'Priority', select=True), 'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of tasks."), - 'type_id': fields.many2one('project.task.type', 'Stage'), - 'state': fields.selection([('draft', 'New'),('cancelled', 'Cancelled'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done')], 'Status', readonly=True, required=True, - help='If the task is created the state is \'Draft\'.\n If the task is started, the state becomes \'In Progress\'.\n If review is needed the task is in \'Pending\' state.\ - \n If the task is over, the states is set to \'Done\'.'), + 'stage_id': fields.many2one('project.task.type', 'Stage', + domain="['|', ('project_ids', '=', project_id), ('case_default', '=', True)]"), + 'state': fields.related('stage_id', 'state', type="selection", store=True, + selection=_TASK_STATE, string="State", readonly=True, + help='The state is set to \'Draft\', when a case is created.\ + If the case is in progress the state is set to \'Open\'.\ + When the case is over, the state is set to \'Done\'.\ + If the case needs to be reviewed then the state is \ + set to \'Pending\'.'), 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready To Pull')], 'Kanban State', help="A task's kanban state indicates special situations affecting it:\n" " * Normal is the default situation\n" @@ -722,6 +739,8 @@ class task(osv.osv): } _defaults = { + 'stage_id': _get_default_stage_id, + 'project_id': _get_default_project_id, 'state': 'draft', 'kanban_state': 'normal', 'priority': '2', @@ -729,7 +748,7 @@ class task(osv.osv): '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) + 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'project.task', context=c), } _order = "priority, sequence, date_start, name, id" @@ -828,6 +847,41 @@ class task(osv.osv): res['fields'][f]['string'] = res['fields'][f]['string'].replace('Hours',tm) return res + # **************************************** + # Case management + # **************************************** + + def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None): + """ Override of the base.stage method + Parameter of the stage search taken from the lead: + - section_id: if set, stages must belong to this section or + be a default stage; if not set, stages must be default + stages + """ + if isinstance(cases, (int, long)): + cases = self.browse(cr, uid, cases, context=context) + # collect all section_ids + section_ids = [] + if section_id: + section_ids.append(section_id) + for task in cases: + if task.project_id: + section_ids.append(task.project_id.id) + # OR all section_ids and OR with case_default + search_domain = [] + if section_ids: + search_domain += [('|')] * len(section_ids) + for section_id in section_ids: + search_domain.append(('project_ids', '=', section_id)) + search_domain.append(('case_default', '=', True)) + # AND with the domain in parameter + search_domain += list(domain) + # perform search, return the first found + stage_ids = self.pool.get('project.task.type').search(cr, uid, search_domain, order=order, context=context) + if stage_ids: + return stage_ids[0] + return False + def _check_child_task(self, cr, uid, ids, context=None): if context == None: context = {} @@ -840,9 +894,9 @@ class task(osv.osv): return True def action_close(self, cr, uid, ids, context=None): - # This action open wizard to send email to partner or project manager after close task. - if context == None: - context = {} + """ This action closes the task, then opens the wizard to send an + email to the partner or the project manager. + """ task_id = len(ids) and ids[0] or False self._check_child_task(cr, uid, ids, context=context) if not task_id: return False @@ -863,28 +917,17 @@ class task(osv.osv): } return res - def do_close(self, cr, uid, ids, context={}): - """ - Close Task - """ + def do_close(self, cr, uid, ids, context=None): + """ Compatibility when changing to case_close. """ + return self.case_close(cr, uid, ids, context=context) + + def case_close(self, cr, uid, ids, context=None): + """ Closes Task """ request = self.pool.get('res.request') - if not isinstance(ids,list): ids = [ids] + if not isinstance(ids, list): ids = [ids] for task in self.browse(cr, uid, ids, context=context): vals = {} project = task.project_id - if project: - # Send request to project manager - if project.warn_manager and project.user_id and (project.user_id.id != uid): - request.create(cr, uid, { - 'name': _("Task '%s' closed") % task.name, - 'state': 'waiting', - 'act_from': uid, - 'act_to': project.user_id.id, - 'ref_partner_id': task.partner_id.id, - 'ref_doc1': 'project.task,%d'% (task.id,), - 'ref_doc2': 'project.project,%d'% (project.id,), - }, context=context) - for parent_id in task.parent_ids: if parent_id.state in ('pending','draft'): reopen = True @@ -893,71 +936,61 @@ class task(osv.osv): reopen = False if reopen: self.do_reopen(cr, uid, [parent_id.id], context=context) - vals.update({'state': 'done'}) - vals.update({'remaining_hours': 0.0}) + # close task + vals['remaining_hours'] = 0.0 if not task.date_end: - vals.update({ 'date_end':time.strftime('%Y-%m-%d %H:%M:%S')}) - self.write(cr, uid, [task.id],vals, context=context) - self.do_close_send_note(cr, uid, [task.id], context) + vals['date_end'] = fields.datetime.now() + self.case_set(cr, uid, [task.id], 'done', vals, context=context) + self.case_close_send_note(cr, uid, [task.id], context=context) return True def do_reopen(self, cr, uid, ids, context=None): - request = self.pool.get('res.request') - for task in self.browse(cr, uid, ids, context=context): project = task.project_id - if project and project.warn_manager and project.user_id.id and (project.user_id.id != uid): - request.create(cr, uid, { - 'name': _("Task '%s' set in progress") % task.name, - 'state': 'waiting', - 'act_from': uid, - 'act_to': project.user_id.id, - 'ref_partner_id': task.partner_id.id, - 'ref_doc1': 'project.task,%d' % task.id, - 'ref_doc2': 'project.project,%d' % project.id, - }, context=context) - - self.write(cr, uid, [task.id], {'state': 'open'}, context=context) - self.do_open_send_note(cr, uid, [task.id], context) + self.case_set(cr, uid, [task.id], 'open', {}, context=context) + self.case_open_send_note(cr, uid, [task.id], context) return True - def do_cancel(self, cr, uid, ids, context={}): + def do_cancel(self, cr, uid, ids, context=None): + """ Compatibility when changing to case_cancel. """ + return self.case_cancel(cr, uid, ids, context=context) + + def case_cancel(self, cr, uid, ids, context=None): request = self.pool.get('res.request') tasks = self.browse(cr, uid, ids, context=context) self._check_child_task(cr, uid, ids, context=context) for task in tasks: - project = task.project_id - if project.warn_manager and project.user_id and (project.user_id.id != uid): - request.create(cr, uid, { - 'name': _("Task '%s' cancelled") % task.name, - 'state': 'waiting', - 'act_from': uid, - 'act_to': project.user_id.id, - 'ref_partner_id': task.partner_id.id, - 'ref_doc1': 'project.task,%d' % task.id, - 'ref_doc2': 'project.project,%d' % project.id, - }, context=context) - self.write(cr, uid, [task.id], {'state': 'cancelled', 'remaining_hours':0.0}, context=context) - self.do_cancel_send_note(cr, uid, [task.id], context) + self.case_set(cr, uid, [task.id], 'cancelled', {'remaining_hours': 0.0}, context=context) + self.case_cancel_send_note(cr, uid, [task.id], context=context) return True - def do_open(self, cr, uid, ids, context={}): + def do_open(self, cr, uid, ids, context=None): + """ Compatibility when changing to case_open. """ + return self.case_open(cr, uid, ids, context=context) + + def case_open(self, cr, uid, ids, context=None): if not isinstance(ids,list): ids = [ids] - tasks= self.browse(cr, uid, ids, context=context) - for t in tasks: - data = {'state': 'open'} - if not t.date_start: - data['date_start'] = time.strftime('%Y-%m-%d %H:%M:%S') - self.write(cr, uid, [t.id], data, context=context) - self.do_open_send_note(cr, uid, [t.id], context) + self.case_set(cr, uid, ids, 'open', {'date_start': fields.datetime.now()}, context=context) + self.case_open_send_note(cr, uid, ids, context) return True - def do_draft(self, cr, uid, ids, context={}): - self.write(cr, uid, ids, {'state': 'draft'}, context=context) - self.do_draft_send_note(cr, uid, ids, context) + def do_draft(self, cr, uid, ids, context=None): + """ Compatibility when changing to case_draft. """ + return self.case_draft(cr, uid, ids, context=context) + + def case_draft(self, cr, uid, ids, context=None): + self.case_set(cr, uid, ids, 'draft', {}, context=context) + self.case_draft_send_note(cr, uid, ids, context=context) return True - + def do_pending(self, cr, uid, ids, context=None): + """ Compatibility when changing to case_pending. """ + return self.case_pending(cr, uid, ids, context=context) + + def case_pending(self, cr, uid, ids, context=None): + self.case_set(cr, uid, ids, 'pending', {}, context=context) + return self.case_pending_send_note(cr, uid, ids, context=context) + def _delegate_task_attachments(self, cr, uid, task_id, delegated_task_id, context=None): attachment = self.pool.get('ir.attachment') attachment_ids = attachment.search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', task_id)], context=context) @@ -966,7 +999,6 @@ class task(osv.osv): new_attachment_ids.append(attachment.copy(cr, uid, attachment_id, default={'res_id': delegated_task_id}, context=context)) return new_attachment_ids - def do_delegate(self, cr, uid, ids, delegate_data={}, context=None): """ Delegate Task to another users. @@ -1000,11 +1032,6 @@ class task(osv.osv): delegated_tasks[task.id] = delegated_task_id return delegated_tasks - def do_pending(self, cr, uid, ids, context={}): - self.write(cr, uid, ids, {'state': 'pending'}, context=context) - self.do_pending_send_note(cr, uid, ids, context) - return True - def set_remaining_time(self, cr, uid, ids, remaining_time=1.0, context=None): for task in self.browse(cr, uid, ids, context=context): if (task.state=='draft') or (task.planned_hours==0.0): @@ -1033,36 +1060,6 @@ class task(osv.osv): def set_kanban_state_done(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'kanban_state': 'done'}, context=context) - def _change_type(self, cr, uid, ids, next, context=None): - """ - go to the next stage - if next is False, go to previous stage - """ - for task in self.browse(cr, uid, ids): - if task.project_id.type_ids: - typeid = task.type_id.id - types_seq={} - for type in task.project_id.type_ids : - types_seq[type.id] = type.sequence - if next: - types = sorted(types_seq.items(), lambda x, y: cmp(x[1], y[1])) - else: - types = sorted(types_seq.items(), lambda x, y: cmp(y[1], x[1])) - sorted_types = [x[0] for x in types] - if not typeid: - self.write(cr, uid, task.id, {'type_id': sorted_types[0]}) - elif typeid and typeid in sorted_types and sorted_types.index(typeid) != len(sorted_types)-1: - index = sorted_types.index(typeid) - self.write(cr, uid, task.id, {'type_id': sorted_types[index+1]}) - self.state_change_send_note(cr, uid, [task.id], context) - return True - - def next_type(self, cr, uid, ids, context=None): - return self._change_type(cr, uid, ids, True, context=context) - - def prev_type(self, cr, uid, ids, context=None): - return self._change_type(cr, uid, ids, False, context=context) - def _store_history(self, cr, uid, ids, context=None): for task in self.browse(cr, uid, ids, context=context): self.pool.get('project.task.history').create(cr, uid, { @@ -1070,7 +1067,7 @@ class task(osv.osv): 'remaining_hours': task.remaining_hours, 'planned_hours': task.planned_hours, 'kanban_state': task.kanban_state, - 'type_id': task.type_id.id, + 'type_id': task.stage_id.id, 'state': task.state, 'user_id': task.user_id.id @@ -1084,22 +1081,25 @@ class task(osv.osv): return task_id # Overridden to reset the kanban_state to normal whenever - # the stage (type_id) of the task changes. + # the stage (stage_id) of the task changes. def write(self, cr, uid, ids, vals, context=None): if isinstance(ids, (int, long)): ids = [ids] - if vals and not 'kanban_state' in vals and 'type_id' in vals: - new_stage = vals.get('type_id') + 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') for t in self.browse(cr, uid, ids, context=context): - write_vals = vals_reset_kstate if t.type_id != new_stage else vals + #TO FIX:Kanban view doesn't raise warning + #stages = [stage.id for stage in t.project_id.type_ids] + #if new_stage not in stages: + #raise osv.except_osv(_('Warning !'), _('Stage is not defined in the project.')) + write_vals = vals_reset_kstate if t.stage_id != new_stage else vals super(task,self).write(cr, uid, [t.id], write_vals, context=context) result = True else: result = super(task,self).write(cr, uid, ids, vals, context=context) - if ('type_id' in vals) or ('remaining_hours' in vals) or ('user_id' in vals) or ('state' in vals) or ('kanban_state' in vals): + if ('stage_id' in vals) or ('remaining_hours' in vals) or ('user_id' in vals) or ('state' in vals) or ('kanban_state' in vals): self._store_history(cr, uid, ids, context=context) - self.state_change_send_note(cr, uid, ids, context) return result def unlink(self, cr, uid, ids, context=None): @@ -1139,7 +1139,11 @@ class task(osv.osv): # --------------------------------------------------- # OpenChatter methods and notifications # --------------------------------------------------- - + + def case_get_note_msg_prefix(self, cr, uid, id, context=None): + """ Override of default prefix for notifications. """ + return 'Task' + def get_needaction_user_ids(self, cr, uid, ids, context=None): result = dict.fromkeys(ids, []) for obj in self.browse(cr, uid, ids, context=context): @@ -1156,28 +1160,16 @@ class task(osv.osv): sub_ids.append(obj.manager_id.id) return self.pool.get('res.users').read(cr, uid, sub_ids, context=context) + def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): + """ Override of the (void) default notification method. """ + stage_name = self.pool.get('project.task.type').name_get(cr, uid, [stage_id], context=context)[0][1] + return self.message_append_note(cr, uid, ids, body= _("Stage changed to <b>%s</b>.") % (stage_name), context=context) + def create_send_note(self, cr, uid, ids, context=None): return self.message_append_note(cr, uid, ids, body=_("Task has been <b>created</b>."), context=context) - def do_pending_send_note(self, cr, uid, ids, context=None): - if not isinstance(ids,list): ids = [ids] - msg = _('Task is now <b>pending</b>.') - return self.message_append_note(cr, uid, ids, body=msg, context=context) - - def do_open_send_note(self, cr, uid, ids, context=None): - msg = _('Task has been <b>opened</b>.') - return self.message_append_note(cr, uid, ids, body=msg, context=context) - - def do_cancel_send_note(self, cr, uid, ids, context=None): - msg = _('Task has been <b>canceled</b>.') - return self.message_append_note(cr, uid, ids, body=msg, context=context) - - def do_close_send_note(self, cr, uid, ids, context=None): - msg = _('Task has been <b>closed</b>.') - return self.message_append_note(cr, uid, ids, body=msg, context=context) - - def do_draft_send_note(self, cr, uid, ids, context=None): - msg = _('Task has been <b>renewed</b>.') + def case_draft_send_note(self, cr, uid, ids, context=None): + msg = _('Task has been set as <b>draft</b>.') return self.message_append_note(cr, uid, ids, body=msg, context=context) def do_delegation_send_note(self, cr, uid, ids, context=None): @@ -1186,13 +1178,6 @@ class task(osv.osv): self.message_append_note(cr, uid, [task.id], body=msg, context=context) return True - def state_change_send_note(self, cr, uid, ids, context=None): - for task in self.browse(cr, uid, ids, context=context): - msg = _('Stage changed to <b>%s</b>') % (task.type_id.name) - self.message_append_note(cr, uid, [task.id], body=msg, context=context) - return True - -task() class project_work(osv.osv): _name = "project.task.work" @@ -1231,7 +1216,7 @@ class project_work(osv.osv): for work in self.browse(cr, uid, ids): cr.execute('update project_task set remaining_hours=remaining_hours + %s where id=%s', (work.hours, work.task_id.id)) return super(project_work,self).unlink(cr, uid, ids,*args, **kwargs) -project_work() + class account_analytic_account(osv.osv): @@ -1252,7 +1237,6 @@ class account_analytic_account(osv.osv): raise osv.except_osv(_('Warning !'), _('Please delete the project linked with this account first.')) return super(account_analytic_account, self).unlink(cr, uid, ids, *args, **kwargs) -account_analytic_account() # # Tasks History, used for cumulative flow charts (Lean/Agile) @@ -1313,7 +1297,7 @@ class project_task_history(osv.osv): _defaults = { 'date': fields.date.context_today, } -project_task_history() + class project_task_history_cumulative(osv.osv): _name = 'project.task.history.cumulative' @@ -1341,4 +1325,4 @@ class project_task_history_cumulative(osv.osv): ) as history ) """) -project_task_history_cumulative() + diff --git a/addons/project/project_data.xml b/addons/project/project_data.xml index b7b59911fa4..4c95373d91f 100644 --- a/addons/project/project_data.xml +++ b/addons/project/project_data.xml @@ -24,22 +24,40 @@ <record id="project_tt_specification" model="project.task.type"> <field name="sequence">1</field> <field name="name">Design</field> - <field name="project_default" eval="1"/> + <field name="state">draft</field> + <field name="case_default" eval="True"/> </record> <record id="project_tt_development" model="project.task.type"> <field name="sequence">2</field> <field name="name">Development</field> - <field name="project_default" eval="1"/> + <field name="state">open</field> + <field name="case_default" eval="True"/> </record> <record id="project_tt_testing" model="project.task.type"> <field name="sequence">3</field> <field name="name">Testing</field> - <field name="project_default" eval="1"/> + <field name="state">open</field> + <field name="case_default" eval="True"/> </record> - <record id="project_tt_merge" model="project.task.type"> + <record id="project_tt_pending" model="project.task.type"> <field name="sequence">4</field> + <field name="name">Pending</field> + <field name="state">pending</field> + <field name="case_default" eval="True"/> + <field name="fold" eval="True"/> + </record> + <record id="project_tt_merge" model="project.task.type"> + <field name="sequence">5</field> <field name="name">Deployment</field> - <field name="project_default" eval="1"/> + <field name="state">done</field> + <field name="case_default" eval="True"/> + </record> + <record id="project_tt_cancel" model="project.task.type"> + <field name="sequence">6</field> + <field name="name">Cancelled</field> + <field name="state">cancelled</field> + <field name="case_default" eval="True"/> + <field name="fold" eval="True"/> </record> </data> </openerp> diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml index 2f8c9e9638a..f685f14c85b 100644 --- a/addons/project/project_demo.xml +++ b/addons/project/project_demo.xml @@ -77,7 +77,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Prepare Requirements Document</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> <field name="color">3</field> </record> @@ -88,7 +88,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Make SRS</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <record id="project_task_3" model="project.task"> @@ -99,7 +99,7 @@ <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Design Use Cases</field> <field name="date_deadline" eval="time.strftime('%Y-%m-24')"/> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <record id="project_task_4" model="project.task"> @@ -112,7 +112,7 @@ <field name="description">Use the account_budget module</field> <field name="date_deadline" eval="time.strftime('%Y-%m-19')"/> <field name="color">3</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <record id="project_task_5" model="project.task"> @@ -125,7 +125,7 @@ <field name="kanban_state">done</field> <field name="priority">0</field> <field name="date_deadline" eval="time.strftime('%Y-%m-%d')"/> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <record id="project_task_6" model="project.task"> @@ -135,7 +135,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Risk Management Planning</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <record id="project_task_7" model="project.task"> @@ -145,7 +145,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Create Project Schedules</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <record id="project_task_8" model="project.task"> @@ -156,7 +156,7 @@ <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Dataflow Design</field> <field name="priority">0</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <record id="project_task_9" model="project.task"> @@ -166,7 +166,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">User Interface Design</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <record id="project_task_10" model="project.task"> @@ -177,7 +177,7 @@ <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Develop Module in Sale Management</field> <field name="kanban_state">blocked</field> - <field name="type_id" ref="project_tt_development"/> + <field name="stage_id" ref="project_tt_development"/> </record> <record id="project_task_11" model="project.task"> @@ -187,7 +187,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Develop module in Warehouse</field> - <field name="type_id" ref="project_tt_merge"/> + <field name="stage_id" ref="project_tt_merge"/> </record> <function model="project.task" name="do_close" eval="[ref('project_task_11')], {'install_mode': True}"/> @@ -199,7 +199,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Integrate Modules</field> - <field name="type_id" ref="project_tt_development"/> + <field name="stage_id" ref="project_tt_development"/> </record> <function model="project.task" name="do_close" eval="[ref('project_task_12')], {'install_mode': True}"/> @@ -211,7 +211,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Unit Testing</field> - <field name="type_id" ref="project_tt_development"/> + <field name="stage_id" ref="project_tt_development"/> </record> <function model="project.task" name="do_pending" eval="[ref('project_task_13')], {'install_mode': True}"/> @@ -223,8 +223,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Regression Test</field> - <field name="type_id" ref="project_tt_development"/> - <field name="state">pending</field> + <field name="stage_id" ref="project_tt_development"/> </record> <record id="project_task_15" model="project.task"> @@ -234,7 +233,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Documentation</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> <field name="date_start">2011-02-06</field> </record> @@ -247,7 +246,7 @@ <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Performance Tuning</field> <field name="description">Test on Runbot</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <function model="project.task" name="do_open" eval="[ref('project_task_16')], {'install_mode': True}"/> @@ -258,7 +257,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Deploy and Review on Customer System</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <function model="project.task" name="do_open" eval="[ref('project_task_17')], {'install_mode': True}"/> @@ -269,7 +268,7 @@ <field name="priority">2</field> <field name="project_id" ref="project.project_integrate_openerp"/> <field name="name">Training and Presentation</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <!-- @@ -322,7 +321,7 @@ <record id="project_task_116" model="project.task"> <field name="planned_hours">38.0</field> <field name="remaining_hours">38.0</field> - <field name="type_id" ref="project_tt_development"/> + <field name="stage_id" ref="project_tt_development"/> <field name="user_id" eval="False"/> <field name="project_id" ref="project_project_22"/> <field name="description">BoM, After sales returns, interventions. Traceability.</field> @@ -334,7 +333,7 @@ <field name="planned_hours">16.0</field> <field name="remaining_hours">16.0</field> <field name="user_id" eval="False"/> - <field name="type_id" ref="project_tt_development"/> + <field name="stage_id" ref="project_tt_development"/> <field name="project_id" ref="project_project_23"/> <field name="name">Data importation + Doc</field> </record> @@ -344,7 +343,7 @@ <field name="planned_hours">16.0</field> <field name="remaining_hours">16.0</field> <field name="user_id" eval="False"/> - <field name="type_id" ref="project_tt_development"/> + <field name="stage_id" ref="project_tt_development"/> <field name="project_id" ref="project_project_23"/> <field name="name">Modifications asked by the customer.</field> </record> @@ -353,7 +352,7 @@ <record id="project_task_184" model="project.task"> <field name="planned_hours">16.0</field> <field name="remaining_hours">16.0</field> - <field name="type_id" ref="project_tt_testing"/> + <field name="stage_id" ref="project_tt_testing"/> <field name="user_id" eval="False"/> <field name="priority">0</field> <field name="project_id" ref="project_project_21"/> @@ -364,7 +363,7 @@ <field name="sequence">15</field> <field name="planned_hours">8.0</field> <field name="remaining_hours">8.0</field> - <field name="type_id" ref="project_tt_testing"/> + <field name="stage_id" ref="project_tt_testing"/> <field name="user_id" eval="False"/> <field name="project_id" ref="project_project_21"/> <field name="name">Internal testing + Software Install</field> @@ -374,7 +373,7 @@ <field name="sequence">17</field> <field name="planned_hours">16.0</field> <field name="remaining_hours">16.0</field> - <field name="type_id" ref="project_tt_development"/> + <field name="stage_id" ref="project_tt_development"/> <field name="user_id" eval="False"/> <field name="priority">2</field> <field name="project_id" ref="project_project_21"/> @@ -389,7 +388,7 @@ <field name="user_id" eval="False"/> <field name="project_id" ref="project_project_23"/> <field name="name">Parameters</field> - <field name="type_id" ref="project_tt_specification"/> + <field name="stage_id" ref="project_tt_specification"/> </record> <function model="project.task" name="do_open" eval="[ref('project_task_189')], {'install_mode': True}"/> @@ -398,10 +397,9 @@ <field name="planned_hours">32.0</field> <field name="remaining_hours">32.0</field> <field name="user_id" eval="False"/> - <field name="state">open</field> <field name="project_id" ref="project_project_21"/> <field name="name">Start of the doc redaction + MRP</field> - <field name="type_id" ref="project_tt_testing"/> + <field name="stage_id" ref="project_tt_testing"/> </record> <!-- Schedule tasks to assign users and dates --> diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 70cdac1efa0..31af9a9bc44 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -19,7 +19,7 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Project" layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="set_done" string="Done" type="object" states="open,pending"/> <button name="set_open" string="Re-open project" type="object" states="pending,cancelled,close"/> <button name="set_pending" string="Pending" type="object" states="open"/> @@ -27,11 +27,8 @@ <button string="New Project Based on Template" name="duplicate_template" type="object" states="template" context="{'parent_id':parent_id}"/> <button name="reset_project" string="Reset as Project" type="object" states="template"/> <button name="set_cancel" string="Cancel" type="object" states="open,pending"/> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="open,close" statusbar_colors='{"pending":"blue"}' select="1" readonly="1"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="open,close" statusbar_colors='{"pending":"blue"}' readonly="1"/> + </header> <sheet string="Project" layout="auto"> <group colspan="6" col="6"> <field name="name" string="Project Name" select="1"/> @@ -102,7 +99,7 @@ <newline/> </sheet> <div class="oe_form_bottom"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> @@ -161,9 +158,9 @@ </tree> </field> </record> - + <act_window - context="{'search_default_project_id': [active_id], 'default_project_id': active_id}" + context="{'search_default_project_id': active_id, 'default_project_id': active_id}" id="act_project_project_2_project_task_all" name="Tasks" res_model="project.task" @@ -304,19 +301,27 @@ <field eval="2" name="priority"/> <field name="arch" type="xml"> <form string="Project" layout="manual"> - <div class="oe_form_topbar"> - <button name="action_close" states="pending,open" string="Done" type="object"/> - <button name="do_open" states="pending,draft" string="Start Task" type="object"/> - <button name="%(action_project_task_reevaluate)d" states="done,cancelled" string="Reactivate" type="action" context="{'button_reactivate':True}" /> - <button name="do_pending" states="open" string="Pending" type="object"/> - <button name="do_draft" states="open" string="Draft" type="object"/> - <button name="%(action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action"/> - <button name="do_cancel" states="draft,open,pending" string="Cancel" type="object"/> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}' select="1"/> - </div> - <div class="oe_clear"/> - </div> + <header> + <button name="do_open" string="Start Task" type="object" + states="draft,pending"/> + <button name="%(action_project_task_reevaluate)d" string="Reactivate" type="action" + states="done,cancelled" context="{'button_reactivate':True}"/> + <button name="do_pending" string="Pending" type="object" + states="open"/> + <button name="action_close" string="Done" type="object" + states="draft,open,pending"/> + <button name="do_draft" string="Draft" type="object" + states="cancel,done"/> + <button name="%(action_project_task_delegate)d" string="Delegate" type="action" + states="pending,open,draft"/> + <button name="do_cancel" string="Cancel" type="object" + states="draft,open,pending" /> + <button name="stage_previous" string="Previous Stage" type="object" + states="open,pending" icon="gtk-go-back" attrs="{'invisible': [('stage_id','=', False)]}"/> + <button name="stage_next" string="Next Stage" type="object" + states="open,pending" icon="gtk-go-forward" attrs="{'invisible': [('stage_id','=', False)]}"/> + <field name="stage_id" widget="statusbar"/> + </header> <sheet string="Task edition" layout="auto"> <group colspan="6" col="6"> <field name="name" select="1"/> @@ -362,7 +367,8 @@ <tree string="Delegated tasks"> <field name="name"/> <field name="user_id"/> - <field name="state"/> + <field name="stage_id"/> + <field name="state" groups="base.group_no_one"/> <field name="effective_hours" widget="float_time"/> <field name="progress" widget="progressbar"/> <field name="remaining_hours" widget="float_time"/> @@ -376,43 +382,40 @@ <separator string="Planning" colspan="2"/> <field name="priority"/> <field name="sequence"/> + <field name="state" groups="base.group_no_one"/> </group> <separator string="Miscellaneous" colspan="4"/> <field name="partner_id" /> <field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/> - <group col="4" colspan="2"> - <field name="type_id" widget="selection" readonly="1"/> - <button name="prev_type" string="Previous" type="object" icon="gtk-go-back" help="Change to Previous Stage"/> - <button name="next_type" string="Next" type="object" icon="gtk-go-forward" help="Change to Next Stage"/> - </group> + <field name="state" groups="base.group_no_one"/> <separator colspan="4" string="Notes"/> <field colspan="4" name="notes" nolabel="1"/> </page> </notebook> </sheet> <div class="oe_form_bottom"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> </record> - + <!-- Project Task Kanban View --> <record model="ir.ui.view" id="view_task_kanban"> <field name="name">project.task.kanban</field> <field name="model">project.task</field> <field name="type">kanban</field> <field name="arch" type="xml"> - <kanban default_group_by="type_id" > + <kanban default_group_by="stage_id" > <field name="color"/> <field name="priority"/> - <field name="type_id"/> + <field name="stage_id"/> <field name="user_id"/> <field name="user_email"/> <field name="description"/> <field name="sequence"/> - <field name="state"/> + <field name="state" groups="base.group_no_one"/> <field name="kanban_state"/> <field name="remaining_hours" sum="Remaining Time" groups="project.group_time_work_estimation_tasks"/> <field name="date_deadline"/> @@ -508,20 +511,11 @@ <field name="effective_hours" widget="float_time" sum="Spent Hours" invisible="1"/> <field name="remaining_hours" widget="float_time" sum="Remaining Hours" on_change="onchange_remaining(remaining_hours,planned_hours)" invisible="context.get('set_visible',False)" groups="project.group_time_work_estimation_tasks"/> <field name="date_deadline" invisible="context.get('deadline_visible',True)"/> - <field name="type_id" invisible="context.get('set_visible',False)"/> - <button name="next_type" invisible="context.get('set_visible',False)" - states="draft,open,pending" - string="Change Stage" - type="object" - icon="gtk-go-forward" - help="Change Type"/> + <field name="stage_id" invisible="context.get('set_visible',False)"/> + <field name="state" invisible="context.get('set_visible',False)" groups="base.group_no_one"/> <field name="date_start" invisible="1" groups="base.group_no_one"/> <field name="date_end" invisible="1" groups="base.group_no_one"/> <field name="progress" widget="progressbar" invisible="context.get('set_visible',False)"/> - <field name="state" invisible="context.get('set_visible',False)"/> - <button name="do_open" states="pending,draft,done,cancelled" string="Start Task" type="object" icon="gtk-media-play" help="For changing to open state" invisible="context.get('set_visible',False)"/> - <button name="%(action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="terp-personal" help="For changing to delegate state"/> - <button name="action_close" states="draft,pending,open" string="Done" type="object" icon="terp-dialog-close" help="For changing to done state"/> </tree> </field> </record> @@ -578,6 +572,7 @@ <separator orientation="vertical"/> <field name="name"/> <filter name="project" string="Project" domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-check"/> + <field name="project_id"/> <field name="user_id"> <filter string="My Tasks" domain="[('user_id','=',uid)]" help="My Tasks" icon="terp-personal" /> <filter string="Unassigned Tasks" domain="[('user_id','=',False)]" help="Unassigned Tasks" icon="terp-personal-" /> @@ -589,7 +584,7 @@ <separator orientation="vertical"/> <filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/> <separator orientation="vertical"/> - <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'type_id'}"/> + <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/> <filter string="Status" name="group_state" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/> <separator orientation="vertical"/> <filter string="Deadline" icon="terp-gnome-cpu-frequency-applet+" domain="[]" context="{'group_by':'date_deadline'}"/> @@ -660,7 +655,7 @@ <field name="arch" type="xml"> <search string="Tasks Stages"> <group> - <filter icon="terp-check" string="Common" name="common" domain="[('project_default', '=', 1)]" help="Stages common to all projects"/> + <filter icon="terp-check" string="Common" name="common" domain="[('case_default', '=', 1)]" help="Stages common to all projects"/> <separator orientation="vertical"/> <field name="name"/> </group> @@ -674,10 +669,14 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Task Stage"> - <group colspan="4" col="6"> - <field name="name"/> - <field name="project_default"/> - <field name="sequence"/> + <group colspan="2" col="2"> + <field name="name"/> + <field name="state"/> + </group> + <group colspan="2" col="4"> + <field name="case_default"/> + <field name="sequence"/> + <field name="fold"/> </group> <separator string="Description" colspan="4"/> <field colspan="4" name="description" nolabel="1"/> @@ -693,6 +692,7 @@ <tree string="Task Stage"> <field name="sequence"/> <field name="name"/> + <field name="state"/> </tree> </field> </record> @@ -707,12 +707,12 @@ <menuitem id="menu_tasks_config" name="GTD" parent="project.menu_definitions" sequence="1"/> - <menuitem id="menu_project_config_project" name="Stages" parent="menu_definitions" sequence="1"/> + <menuitem id="menu_project_config_project" name="Stages" parent="project.menu_definitions" sequence="1"/> - <menuitem action="open_task_type_form" id="menu_task_types_view" parent="menu_project_config_project" sequence="2" groups="base.group_no_one"/> + <menuitem action="open_task_type_form" name="Task Stages" id="menu_task_types_view" parent="menu_project_config_project" sequence="2"/> <menuitem action="open_view_project_all" id="menu_projects" name="Projects" parent="menu_project_management" sequence="1"/> - <act_window context="{'search_default_user_id': [active_id], 'default_user_id': active_id}" id="act_res_users_2_project_project" name="User's projects" res_model="project.project" src_model="res.users" view_mode="tree,form" view_type="form"/> + <act_window context="{'search_default_user_id': active_id, 'default_user_id': active_id}" id="act_res_users_2_project_project" name="User's projects" res_model="project.project" src_model="res.users" view_mode="tree,form" view_type="form"/> <record id="task_company" model="ir.ui.view"> <field name="name">res.company.task.config</field> diff --git a/addons/project/report/project_cumulative.xml b/addons/project/report/project_cumulative.xml index 89667992f0a..3c04d36feb6 100644 --- a/addons/project/report/project_cumulative.xml +++ b/addons/project/report/project_cumulative.xml @@ -15,7 +15,8 @@ <field name="user_id"/> <field name="remaining_hours"/> <field name="kanban_state"/> - <field name="state"/> + <field name="stage_id"/> + <field name="state" groups="base.group_no_one"/> </tree> </field> </record> diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py index 1012ca9d518..58f7739e96d 100644 --- a/addons/project/report/project_report.py +++ b/addons/project/report/project_report.py @@ -82,7 +82,7 @@ class report_project_task_user(osv.osv): t.name as name, t.company_id, t.partner_id, - t.type_id, + t.stage_id, remaining_hours as remaining_hours, total_hours as total_hours, t.delay_hours as hours_delay, @@ -114,7 +114,7 @@ class report_project_task_user(osv.osv): name, t.company_id, t.partner_id, - t.type_id + t.stage_id """) diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml index 3bdec47fcb9..240176f7941 100644 --- a/addons/project/report/project_report_view.xml +++ b/addons/project/report/project_report_view.xml @@ -214,7 +214,7 @@ <tree string="Task By Days" > <field name="day"/> <field name="total_task"/> - <field name="state"/> + <field name="state" groups="base.group_no_one"/> </tree> </field> </record> diff --git a/addons/project/res_config_view.xml b/addons/project/res_config_view.xml index ee937bfdcfc..4914ff26e88 100644 --- a/addons/project/res_config_view.xml +++ b/addons/project/res_config_view.xml @@ -8,10 +8,10 @@ <field name="priority" eval="20"/> <field name="arch" type="xml"> <form string="Configure Project" layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Apply" type="object" name="execute"/> <button string="Cancel" special="cancel"/> - </div> + </header> <sheet layout="auto"> <separator string="Project" colspan="4"/> <field name="module_project_mrp"/> diff --git a/addons/project/test/task_process.yml b/addons/project/test/task_process.yml index c4d17f783f6..ad4bbe53bb3 100644 --- a/addons/project/test/task_process.yml +++ b/addons/project/test/task_process.yml @@ -40,7 +40,7 @@ I change the stage of task to next stage. - !python {model: project.task}: | - self.next_type(cr, uid, [ref("project_task_1")]) + self.stage_next(cr, uid, [ref("project_task_1")]) - !record {model: project.task.reevaluate, id: reevaluate_id}: remaining_hours : 120 @@ -68,9 +68,9 @@ I change the stage of task to previous stage. - !python {model: project.task}: | - self.prev_type(cr, uid, [ref("project_task_1")]) + self.stage_previous(cr, uid, [ref("project_task_1")]) - I cancel Task. - !python {model: project.task}: | - self.do_cancel(cr, uid, [ref("project_task_2")])
\ No newline at end of file + self.do_cancel(cr, uid, [ref("project_task_2")]) diff --git a/addons/project_issue/__openerp__.py b/addons/project_issue/__openerp__.py index fc88372fe90..9037523d41e 100644 --- a/addons/project_issue/__openerp__.py +++ b/addons/project_issue/__openerp__.py @@ -38,6 +38,7 @@ and decide on their status as they evolve. 'website': 'http://www.openerp.com', 'images': ['images/issue_analysis.jpeg','images/project_issue.jpeg'], 'depends': [ + 'base_status', 'crm', 'project', ], diff --git a/addons/project_issue/board_project_issue_view.xml b/addons/project_issue/board_project_issue_view.xml index a070bdbe521..b6e1f8a5d99 100644 --- a/addons/project_issue/board_project_issue_view.xml +++ b/addons/project_issue/board_project_issue_view.xml @@ -35,7 +35,7 @@ <field name="type">graph</field> <field name="arch" type="xml"> <graph orientation="vertical" string="Project Issue" type="bar"> - <field name="type_id"/> + <field name="stage_id"/> <field name="nbr" operator="+"/> <field group="True" name="user_id"/> </graph> @@ -96,18 +96,10 @@ <field name="partner_id"/> <field name="project_id" /> <field name="priority" string="Priority"/> - <field name="type_id" widget="selection" readonly="1"/> - <button name="prev_type" string="Previous" type="object" icon="gtk-go-back" help="Change to Previous Stage"/> - <button name="next_type" string="Next" type="object" icon="gtk-go-forward" help="Change to Next Stage"/> <field name="version_id" widget="selection"/> <field name="progress" widget="progressbar" attrs="{'invisible':[('task_id','=',False)]}"/> - <field name="state"/> - <button name="case_cancel" string="Cancel" states="draft,open,pending" type="object" icon="gtk-cancel"/> - <button name="case_close" string="Done" states="open,draft,pending" type="object" icon="gtk-jump-to"/> - <button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward" help="To Do"/> - <button name="case_pending" string="Pending" states="draft,open" type="object" icon="gtk-media-pause"/> - <button name="case_escalate" string="Escalate" states="open,draft,pending" type="object" icon="gtk-go-up"/> - <button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" icon="gtk-convert"/> + <field name="stage_id" widget="selection" readonly="1"/> + <field name="state" groups="base.group_no_one"/> <field name="categ_id" invisible="1"/> <field name="task_id" invisible="1"/> </tree> diff --git a/addons/project_issue/i18n/sv.po b/addons/project_issue/i18n/sv.po new file mode 100644 index 00000000000..134b7a9477b --- /dev/null +++ b/addons/project_issue/i18n/sv.po @@ -0,0 +1,952 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 01:37+0100\n" +"PO-Revision-Date: 2012-05-30 19:13+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-05-31 04:54+0000\n" +"X-Generator: Launchpad (build 15322)\n" + +#. module: project_issue +#: view:project.issue.report:0 +msgid "Previous Month" +msgstr "" + +#. module: project_issue +#: field:project.issue.report,delay_open:0 +msgid "Avg. Delay to Open" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 view:project.issue.report:0 +msgid "Group By..." +msgstr "" + +#. module: project_issue +#: field:project.issue,working_hours_open:0 +msgid "Working Hours to Open the Issue" +msgstr "" + +#. module: project_issue +#: constraint:project.project:0 +msgid "Error! project start-date must be lower then project end-date." +msgstr "" + +#. module: project_issue +#: field:project.issue,date_open:0 +msgid "Opened" +msgstr "" + +#. module: project_issue +#: field:project.issue.report,opening_date:0 +msgid "Date of Opening" +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "March" +msgstr "" + +#. module: project_issue +#: field:project.issue,progress:0 +msgid "Progress (%)" +msgstr "" + +#. module: project_issue +#: code:addons/project_issue/project_issue.py:406 +#, python-format +msgid "Warning !" +msgstr "" + +#. module: project_issue +#: field:project.issue,company_id:0 view:project.issue.report:0 +#: field:project.issue.report,company_id:0 +msgid "Company" +msgstr "" + +#. module: project_issue +#: field:project.issue,email_cc:0 +msgid "Watchers Emails" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Today's features" +msgstr "" + +#. module: project_issue +#: model:ir.model,name:project_issue.model_project_issue_version +msgid "project.issue.version" +msgstr "" + +#. module: project_issue +#: field:project.issue,day_open:0 +msgid "Days to Open" +msgstr "" + +#. module: project_issue +#: code:addons/project_issue/project_issue.py:406 +#, python-format +msgid "" +"You cannot escalate this issue.\n" +"The relevant Project has not configured the Escalation Project!" +msgstr "" + +#. module: project_issue +#: constraint:project.project:0 +msgid "Error! You cannot assign escalation to the same project!" +msgstr "" + +#. module: project_issue +#: selection:project.issue,priority:0 +#: selection:project.issue.report,priority:0 +msgid "Highest" +msgstr "" + +#. module: project_issue +#: help:project.issue,inactivity_days:0 +msgid "Difference in days between last action and current date" +msgstr "" + +#. module: project_issue +#: view:project.issue.report:0 field:project.issue.report,day:0 +msgid "Day" +msgstr "" + +#. module: project_issue +#: field:project.issue,days_since_creation:0 +msgid "Days since creation date" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Add Internal Note" +msgstr "" + +#. module: project_issue +#: field:project.issue,task_id:0 view:project.issue.report:0 +#: field:project.issue.report,task_id:0 +msgid "Task" +msgstr "" + +#. module: project_issue +#: view:board.board:0 +msgid "Issues By Stage" +msgstr "" + +#. module: project_issue +#: field:project.issue,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: project_issue +#: field:project.issue,inactivity_days:0 +msgid "Days since last action" +msgstr "" + +#. module: project_issue +#: model:ir.model,name:project_issue.model_project_project +#: view:project.issue:0 field:project.issue,project_id:0 +#: view:project.issue.report:0 field:project.issue.report,project_id:0 +msgid "Project" +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,name:project_issue.action_view_my_open_project_issue_tree +msgid "My Open Project issues" +msgstr "" + +#. module: project_issue +#: selection:project.issue,state:0 selection:project.issue.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Change to Next Stage" +msgstr "" + +#. module: project_issue +#: field:project.issue.report,date_closed:0 +msgid "Date of Closing" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Issue Tracker Search" +msgstr "" + +#. module: project_issue +#: field:project.issue,color:0 +msgid "Color Index" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Issue / Partner" +msgstr "" + +#. module: project_issue +#: field:project.issue.report,working_hours_open:0 +msgid "Avg. Working Hours to Open" +msgstr "" + +#. module: project_issue +#: field:project.issue,date_action_next:0 +msgid "Next Action" +msgstr "" + +#. module: project_issue +#: help:project.project,project_escalation_id:0 +msgid "" +"If any issue is escalated from the current Project, it will be listed under " +"the project selected here." +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Extra Info" +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,help:project_issue.action_project_issue_report +msgid "" +"This report on the project issues allows you to analyse the quality of your " +"support or after-sales services. You can track the issues per age. You can " +"analyse the time required to open or close an issue, the number of email to " +"exchange and the time spent on average by issues." +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Change Color" +msgstr "" + +#. module: project_issue +#: code:addons/project_issue/project_issue.py:482 +#, python-format +msgid " (copy)" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Responsible" +msgstr "" + +#. module: project_issue +#: selection:project.issue,priority:0 +#: selection:project.issue.report,priority:0 +msgid "Low" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Statistics" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Convert To Task" +msgstr "" + +#. module: project_issue +#: model:crm.case.categ,name:project_issue.bug_categ +msgid "Maintenance" +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,name:project_issue.action_project_issue_report +#: model:ir.ui.menu,name:project_issue.menu_project_issue_report_tree +#: view:project.issue.report:0 +msgid "Issues Analysis" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Next" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 field:project.issue,priority:0 +#: view:project.issue.report:0 field:project.issue.report,priority:0 +msgid "Priority" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Send New Email" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 field:project.issue,version_id:0 +#: view:project.issue.report:0 field:project.issue.report,version_id:0 +msgid "Version" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 selection:project.issue,state:0 +#: view:project.issue.report:0 +msgid "New" +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,name:project_issue.project_issue_categ_action +msgid "Issue Categories" +msgstr "" + +#. module: project_issue +#: field:project.issue,email_from:0 +msgid "Email" +msgstr "" + +#. module: project_issue +#: field:project.issue,channel_id:0 field:project.issue.report,channel_id:0 +msgid "Channel" +msgstr "" + +#. module: project_issue +#: selection:project.issue,priority:0 +#: selection:project.issue.report,priority:0 +msgid "Lowest" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Unassigned Issues" +msgstr "" + +#. module: project_issue +#: field:project.issue,create_date:0 view:project.issue.report:0 +#: field:project.issue.report,creation_date:0 +msgid "Creation Date" +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,name:project_issue.project_issue_version_action +#: model:ir.ui.menu,name:project_issue.menu_project_issue_version_act +msgid "Versions" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "To Do Issues" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Reset to Draft" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Today" +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,name:project_issue.open_board_project_issue +#: model:ir.ui.menu,name:project_issue.menu_deshboard_project_issue +msgid "Project Issue Dashboard" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 selection:project.issue,state:0 +#: view:project.issue.report:0 +msgid "Done" +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "July" +msgstr "" + +#. module: project_issue +#: model:ir.ui.menu,name:project_issue.menu_project_issue_category_act +msgid "Categories" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 view:project.issue.report:0 +#: field:project.issue.report,type_id:0 +msgid "Stage" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "History Information" +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,name:project_issue.action_view_current_project_issue_tree +#: model:ir.actions.act_window,name:project_issue.action_view_pending_project_issue_tree +msgid "Project issues" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Communication & History" +msgstr "" + +#. module: project_issue +#: view:project.issue.report:0 +msgid "My Open Project Issue" +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,name:project_issue.action_view_my_project_issue_tree +msgid "My Project Issues" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Contact" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 field:project.issue,partner_id:0 +#: view:project.issue.report:0 field:project.issue.report,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: project_issue +#: view:board.board:0 +msgid "My Issues" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Change to Previous Stage" +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,help:project_issue.project_issue_version_action +msgid "" +"You can use the issues tracker in OpenERP to handle bugs in the software " +"development project, to handle claims in after-sales services, etc. Define " +"here the different versions of your products on which you can work on issues." +msgstr "" + +#. module: project_issue +#: code:addons/project_issue/project_issue.py:330 +#, python-format +msgid "Tasks" +msgstr "" + +#. module: project_issue +#: field:project.issue.report,nbr:0 +msgid "# of Issues" +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "September" +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "December" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Issue Tracker Tree" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 view:project.issue.report:0 +#: field:project.issue.report,month:0 +msgid "Month" +msgstr "" + +#. module: project_issue +#: model:ir.model,name:project_issue.model_project_issue_report +msgid "project.issue.report" +msgstr "" + +#. module: project_issue +#: code:addons/project_issue/project_issue.py:408 view:project.issue:0 +#, python-format +msgid "Escalate" +msgstr "" + +#. module: project_issue +#: model:crm.case.categ,name:project_issue.feature_request_categ +msgid "Feature Requests" +msgstr "" + +#. module: project_issue +#: field:project.issue,write_date:0 +msgid "Update Date" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Open Features" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Previous" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 field:project.issue,categ_id:0 +#: view:project.issue.report:0 field:project.issue.report,categ_id:0 +msgid "Category" +msgstr "" + +#. module: project_issue +#: field:project.issue,user_email:0 +msgid "User Email" +msgstr "" + +#. module: project_issue +#: view:project.issue.report:0 +msgid "#Number of Project Issues" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Reset to New" +msgstr "" + +#. module: project_issue +#: help:project.issue,channel_id:0 +msgid "Communication channel." +msgstr "" + +#. module: project_issue +#: help:project.issue,email_cc:0 +msgid "" +"These email addresses will be added to the CC field of all inbound and " +"outbound emails for this record before being sent. Separate multiple email " +"addresses with a comma" +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,state:0 +msgid "Draft" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Contact Information" +msgstr "" + +#. module: project_issue +#: field:project.issue,date_closed:0 selection:project.issue.report,state:0 +msgid "Closed" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Reply" +msgstr "" + +#. module: project_issue +#: field:project.issue.report,delay_close:0 +msgid "Avg. Delay to Close" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 selection:project.issue,state:0 +#: view:project.issue.report:0 selection:project.issue.report,state:0 +msgid "Pending" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Status" +msgstr "" + +#. module: project_issue +#: view:project.issue.report:0 +msgid "#Project Issues" +msgstr "" + +#. module: project_issue +#: view:board.board:0 +msgid "Current Issues" +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "August" +msgstr "" + +#. module: project_issue +#: selection:project.issue,priority:0 +#: selection:project.issue.report,priority:0 +msgid "Normal" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Global CC" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 view:project.issue.report:0 +msgid "To Do" +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "June" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "New Issues" +msgstr "" + +#. module: project_issue +#: field:project.issue,day_close:0 +msgid "Days to Close" +msgstr "" + +#. module: project_issue +#: field:project.issue,active:0 field:project.issue.version,active:0 +msgid "Active" +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "November" +msgstr "" + +#. module: project_issue +#: view:project.issue.report:0 +msgid "Search" +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "October" +msgstr "" + +#. module: project_issue +#: view:board.board:0 +msgid "Issues Dashboard" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 field:project.issue,type_id:0 +msgid "Stages" +msgstr "" + +#. module: project_issue +#: help:project.issue,days_since_creation:0 +msgid "Difference in days between creation date and current date" +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "January" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Feature Tracker Tree" +msgstr "" + +#. module: project_issue +#: help:project.issue,email_from:0 +msgid "These people will receive email." +msgstr "" + +#. module: project_issue +#: view:board.board:0 +msgid "Issues By State" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 field:project.issue,date:0 +msgid "Date" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "History" +msgstr "" + +#. module: project_issue +#: field:project.issue,user_id:0 view:project.issue.report:0 +#: field:project.issue.report,user_id:0 +msgid "Assigned to" +msgstr "" + +#. module: project_issue +#: field:project.project,reply_to:0 +msgid "Reply-To Email Address" +msgstr "" + +#. module: project_issue +#: field:project.issue,partner_address_id:0 +msgid "Partner Contact" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Issue Tracker Form" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 field:project.issue,state:0 +#: view:project.issue.report:0 field:project.issue.report,state:0 +msgid "State" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "General" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Current Features" +msgstr "" + +#. module: project_issue +#: view:project.issue.version:0 +msgid "Issue Version" +msgstr "" + +#. module: project_issue +#: field:project.issue.version,name:0 +msgid "Version Number" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Cancel" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Close" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 selection:project.issue.report,state:0 +msgid "Open" +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,name:project_issue.act_project_project_2_project_issue_all +#: model:ir.actions.act_window,name:project_issue.project_issue_categ_act0 +#: model:ir.ui.menu,name:project_issue.menu_project_confi +#: model:ir.ui.menu,name:project_issue.menu_project_issue_track +#: view:project.issue:0 +msgid "Issues" +msgstr "" + +#. module: project_issue +#: selection:project.issue,state:0 +msgid "In Progress" +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,name:project_issue.action_project_issue_graph_stage +#: model:ir.actions.act_window,name:project_issue.action_project_issue_graph_state +#: model:ir.model,name:project_issue.model_project_issue +#: view:project.issue.report:0 +msgid "Project Issue" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Creation Month" +msgstr "" + +#. module: project_issue +#: help:project.issue,progress:0 +msgid "Computed as: Time Spent / Total Time." +msgstr "" + +#. module: project_issue +#: model:ir.actions.act_window,help:project_issue.project_issue_categ_act0 +msgid "" +"Issues such as system bugs, customer complaints, and material breakdowns are " +"collected here. You can define the stages assigned when solving the project " +"issue (analysis, development, done). With the mailgateway module, issues can " +"be integrated through an email address (example: support@mycompany.com)" +msgstr "" + +#. module: project_issue +#: view:board.board:0 view:project.issue:0 +msgid "Pending Issues" +msgstr "" + +#. module: project_issue +#: field:project.issue,name:0 +msgid "Issue" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Feature Tracker Search" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 field:project.issue,description:0 +msgid "Description" +msgstr "" + +#. module: project_issue +#: field:project.issue,section_id:0 +msgid "Sales Team" +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "May" +msgstr "" + +#. module: project_issue +#: view:project.issue.report:0 field:project.issue.report,email:0 +msgid "# Emails" +msgstr "" + +#. module: project_issue +#: help:project.issue,state:0 +msgid "" +"The state is set to 'Draft', when a case is created. " +" \n" +"If the case is in progress the state is set to 'Open'. " +" \n" +"When the case is over, the state is set to 'Done'. " +" \n" +"If the case needs to be reviewed then the state is set to 'Pending'." +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "February" +msgstr "" + +#. module: project_issue +#: code:addons/project_issue/project_issue.py:70 +#, python-format +msgid "Issue '%s' has been opened." +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Feature description" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "Edit" +msgstr "" + +#. module: project_issue +#: field:project.project,project_escalation_id:0 +msgid "Project Escalation" +msgstr "" + +#. module: project_issue +#: help:project.issue,section_id:0 +msgid "" +"Sales team to which Case belongs to. Define " +"Responsible user and Email account for mail gateway." +msgstr "" + +#. module: project_issue +#: view:project.issue.report:0 +msgid "Month-1" +msgstr "" + +#. module: project_issue +#: code:addons/project_issue/project_issue.py:85 +#, python-format +msgid "Issue '%s' has been closed." +msgstr "" + +#. module: project_issue +#: selection:project.issue.report,month:0 +msgid "April" +msgstr "" + +#. module: project_issue +#: view:project.issue:0 +msgid "References" +msgstr "" + +#. module: project_issue +#: field:project.issue,working_hours_close:0 +msgid "Working Hours to Close the Issue" +msgstr "" + +#. module: project_issue +#: field:project.issue,id:0 +msgid "ID" +msgstr "" + +#. module: project_issue +#: view:project.issue.report:0 +msgid "Current Year" +msgstr "" + +#. module: project_issue +#: code:addons/project_issue/project_issue.py:415 +#, python-format +msgid "No Title" +msgstr "" + +#. module: project_issue +#: help:project.issue.report,delay_close:0 +#: help:project.issue.report,delay_open:0 +msgid "Number of Days to close the project issue" +msgstr "" + +#. module: project_issue +#: view:project.issue.report:0 field:project.issue.report,section_id:0 +msgid "Sale Team" +msgstr "" + +#. module: project_issue +#: field:project.issue.report,working_hours_close:0 +msgid "Avg. Working Hours to Close" +msgstr "" + +#. module: project_issue +#: selection:project.issue,priority:0 +#: selection:project.issue.report,priority:0 +msgid "High" +msgstr "" + +#. module: project_issue +#: field:project.issue,date_deadline:0 +msgid "Deadline" +msgstr "" + +#. module: project_issue +#: field:project.issue,date_action_last:0 +msgid "Last Action" +msgstr "" + +#. module: project_issue +#: view:project.issue.report:0 field:project.issue.report,name:0 +msgid "Year" +msgstr "" + +#. module: project_issue +#: field:project.issue,duration:0 +msgid "Duration" +msgstr "" + +#. module: project_issue +#: view:board.board:0 +msgid "My Open Issues by Creation Date" +msgstr "" diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 176ffa61acd..ad6e7afdbcc 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -19,6 +19,7 @@ # ############################################################################## +from base_status.base_stage import base_stage from crm import crm from datetime import datetime from osv import fields,osv @@ -42,12 +43,62 @@ class project_issue_version(osv.osv): } project_issue_version() -class project_issue(crm.crm_case, osv.osv): +_ISSUE_STATE= [('draft', 'New'), ('open', 'In Progress'), ('cancel', 'Cancelled'), ('done', 'Done'),('pending', 'Pending')] + +class project_issue(base_stage, osv.osv): _name = "project.issue" _description = "Project Issue" _order = "priority, create_date desc" _inherit = ['ir.needaction_mixin', 'mail.thread'] + 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) + + def _get_default_stage_id(self, cr, uid, context=None): + """ Gives default stage_id """ + project_id = self._get_default_project_id(cr, uid, context=context) + return self.stage_find(cr, uid, [], project_id, [('state', '=', 'draft')], context=context) + + def _resolve_project_id_from_context(self, cr, uid, context=None): + """ Returns ID of project based on the value of 'default_project_id' + context key, or None if it cannot be resolved to a single + project. + """ + if context is None: + context = {} + if type(context.get('default_project_id')) in (int, long): + return context.get('default_project_id') + if isinstance(context.get('default_project_id'), basestring): + project_name = context['default_project_id'] + project_ids = self.pool.get('project.project').name_search(cr, uid, name=project_name, context=context) + if len(project_ids) == 1: + return int(project_ids[0][0]) + return None + + def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): + access_rights_uid = access_rights_uid or uid + stage_obj = self.pool.get('project.task.type') + order = stage_obj._order + # lame hack to allow reverting search, should just work in the trivial case + if read_group_order == 'stage_id desc': + order = "%s desc" % order + # retrieve section_id from the context and write the domain + # - ('id', 'in', 'ids'): add columns that should be present + # - OR ('case_default', '=', True), ('fold', '=', False): add default columns that are not folded + # - OR ('project_ids', 'in', project_id), ('fold', '=', False) if project_id: add project columns that are not folded + search_domain = [] + project_id = self._resolve_project_id_from_context(cr, uid, context=context) + if project_id: + search_domain += ['|', '&', ('project_ids', '=', project_id), ('fold', '=', False)] + search_domain += ['|', ('id', 'in', ids), '&', ('case_default', '=', True), ('fold', '=', False)] + # perform search + stage_ids = stage_obj._search(cr, uid, search_domain, order=order, access_rights_uid=access_rights_uid, context=context) + result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context) + # restore order of the search + result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0]))) + return result + def _compute_day(self, cr, uid, ids, fields, args, context=None): """ @param cr: the current row, from the database cursor, @@ -173,11 +224,13 @@ class project_issue(crm.crm_case, osv.osv): 'partner_id': fields.many2one('res.partner', 'Partner', select=1), 'company_id': fields.many2one('res.company', 'Company'), 'description': fields.text('Description'), - 'state': fields.selection([('draft', 'New'), ('cancel', 'Cancelled'), ('open', 'In Progress'),('pending', 'Pending'),('done', 'Done') ], 'Status', size=16, readonly=True, - help='The state is set to \'Draft\', when a case is created.\ - \nIf the case is in progress the state is set to \'Open\'.\ - \nWhen the case is over, the state is set to \'Done\'.\ - \nIf the case needs to be reviewed then the state is set to \'Pending\'.'), + 'state': fields.related('stage_id', 'state', type="selection", store=True, + selection=_ISSUE_STATE, string="State", readonly=True, + help='The state is set to \'Draft\', when a case is created.\ + If the case is in progress the state is set to \'Open\'.\ + When the case is over, the state is set to \'Done\'.\ + If the case needs to be reviewed then the state is \ + set to \'Pending\'.'), 'email_from': fields.char('Email', size=128, help="These people will receive email.", select=1), 'email_cc': fields.char('Watchers Emails', size=256, help="These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"), 'date_open': fields.datetime('Opened', readonly=True,select=True), @@ -188,7 +241,8 @@ class project_issue(crm.crm_case, osv.osv): 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('object_id.model', '=', 'crm.project.bug')]"), 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True), 'version_id': fields.many2one('project.issue.version', 'Version'), - 'type_id': fields.many2one ('project.task.type', 'Stages', domain="[('project_ids', '=', project_id)]"), + 'stage_id': fields.many2one ('project.task.type', 'Stages', + domain="['|', ('project_ids', '=', project_id), ('case_default', '=', True)]"), 'project_id':fields.many2one('project.project', 'Project'), 'duration': fields.float('Duration'), 'task_id': fields.many2one('project.task', 'Task', domain="[('project_id','=',project_id)]"), @@ -205,7 +259,6 @@ class project_issue(crm.crm_case, osv.osv): multi='compute_day', type="integer", help="Difference in days between last action and current date"), 'color': fields.integer('Color Index'), 'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True), - 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]), 'date_action_last': fields.datetime('Last Action', readonly=1), 'date_action_next': fields.datetime('Next Action', readonly=1), 'progress': fields.function(_hours_get, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.", @@ -221,15 +274,20 @@ class project_issue(crm.crm_case, osv.osv): _defaults = { 'active': 1, - 'partner_id': crm.crm_case._get_default_partner, - 'email_from': crm.crm_case._get_default_email, + '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), 'state': 'draft', - 'section_id': crm.crm_case._get_section, + '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.helpdesk', context=c), 'priority': crm.AVAILABLE_PRIORITIES[2][0], 'categ_id' : lambda *a: False, } + _group_by_full = { + 'stage_id': _read_group_stage_ids + } + def set_priority(self, cr, uid, ids, priority): """Set lead priority """ @@ -312,36 +370,20 @@ class project_issue(crm.crm_case, osv.osv): def convert_to_bug(self, cr, uid, ids, context=None): return self._convert(cr, uid, ids, 'bug_categ', context=context) - def next_type(self, cr, uid, ids, context=None): - for task in self.browse(cr, uid, ids): - typeid = task.type_id.id - types = map(lambda x:x.id, task.project_id.type_ids or []) - if types: - if not typeid: - self.write(cr, uid, [task.id], {'type_id': types[0]}) - elif typeid and typeid in types and types.index(typeid) != len(types)-1 : - index = types.index(typeid) - self.write(cr, uid, [task.id], {'type_id': types[index+1]}) - return True - - def prev_type(self, cr, uid, ids, context=None): - for task in self.browse(cr, uid, ids): - typeid = task.type_id.id - types = map(lambda x:x.id, task.project_id and task.project_id.type_ids or []) - if types: - if typeid and typeid in types: - index = types.index(typeid) - self.write(cr, uid, [task.id], {'type_id': index and types[index-1] or False}) - return True - + def copy(self, cr, uid, id, default=None, context=None): + issue = self.read(cr, uid, id, ['name'], context=context) + if not default: + default = {} + default = default.copy() + default['name'] = issue['name'] + _(' (copy)') + return super(project_issue, self).copy(cr, uid, id, default=default, + context=context) + def write(self, cr, uid, ids, vals, context=None): #Update last action date every time the user change the stage, the state or send a new email - logged_fields = ['type_id', 'state', 'message_ids'] + logged_fields = ['stage_id', 'state', 'message_ids'] if any([field in vals for field in logged_fields]): vals['date_action_last'] = time.strftime('%Y-%m-%d %H:%M:%S') - if vals.get('type_id', False): - stage = self.pool.get('project.task.type').browse(cr, uid, vals['type_id'], context=context) - self.message_append_note(cr, uid, ids, body=_("Stage changed to <b>%s</b>.") % stage.name, context=context) return super(project_issue, self).write(cr, uid, ids, vals, context) def onchange_task_id(self, cr, uid, ids, task_id, context=None): @@ -363,15 +405,51 @@ class project_issue(crm.crm_case, osv.osv): self.create_send_note(cr, uid, [obj_id], context=context) return obj_id - def case_open(self, cr, uid, ids, context=None): - res = super(project_issue, self).case_open(cr, uid, ids, context) - self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'), 'user_id' : uid}) - return res + # ------------------------------------------------------- + # Stage management + # ------------------------------------------------------- + + def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None): + """ Override of the base.stage method + Parameter of the stage search taken from the issue: + - type: stage type must be the same or 'both' + - section_id: if set, stages must belong to this section or + be a default case + """ + if isinstance(cases, (int, long)): + cases = self.browse(cr, uid, cases, context=context) + # collect all section_ids + section_ids = [] + if section_id: + section_ids.append(section_id) + for task in cases: + if task.project_id: + section_ids.append(task.project_id.id) + # OR all section_ids and OR with case_default + search_domain = [] + if section_ids: + search_domain += [('|')] * len(section_ids) + for section_id in section_ids: + search_domain.append(('project_ids', '=', section_id)) + search_domain.append(('case_default', '=', True)) + # AND with the domain in parameter + search_domain += list(domain) + # perform search, return the first found + stage_ids = self.pool.get('project.task.type').search(cr, uid, search_domain, order=order, context=context) + if stage_ids: + return stage_ids[0] + return False + + def case_cancel(self, cr, uid, ids, context=None): + """ Cancels case """ + self.case_set(cr, uid, ids, 'cancelled', {'active': True}, context=context) + self.case_cancel_send_note(cr, uid, ids, context=context) + return True def case_escalate(self, cr, uid, ids, context=None): cases = self.browse(cr, uid, ids) for case in cases: - data = {'state' : 'draft'} + data = {} if case.project_id.project_escalation_id: data['project_id'] = case.project_id.project_escalation_id.id if case.project_id.project_escalation_id.user_id: @@ -380,10 +458,14 @@ class project_issue(crm.crm_case, osv.osv): self.pool.get('project.task').write(cr, uid, [case.task_id.id], {'project_id': data['project_id'], 'user_id': False}) else: raise osv.except_osv(_('Warning !'), _('You cannot escalate this issue.\nThe relevant Project has not configured the Escalation Project!')) - self.write(cr, uid, [case.id], data) - self.case_escalate_send_note(cr, uid, [case.id], context) + self.case_set(cr, uid, ids, 'draft', data, context=context) + self.case_escalate_send_note(cr, uid, [case.id], context=context) return True + # ------------------------------------------------------- + # Mail gateway + # ------------------------------------------------------- + def message_new(self, cr, uid, msg, custom_values=None, context=None): """Automatically called when new email message arrives""" if context is None: @@ -434,7 +516,7 @@ class project_issue(crm.crm_case, osv.osv): # Reassign the 'open' state to the case if this one is in pending or done for record in self.browse(cr, uid, ids, context=context): if record.state in ('pending', 'done'): - record.write({'state' : 'open'}) + self.case_set(cr, uid, ids, 'open', {}, context=context) vls = { } for line in msg['body_text'].split('\n'): @@ -448,15 +530,6 @@ class project_issue(crm.crm_case, osv.osv): res = self.write(cr, uid, ids, vals) self.message_append_dict(cr, uid, ids, msg, context=context) return res - - def copy(self, cr, uid, id, default=None, context=None): - issue = self.read(cr, uid, id, ['name'], context=context) - if not default: - default = {} - default = default.copy() - default['name'] = issue['name'] + _(' (copy)') - return super(project_issue, self).copy(cr, uid, id, default=default, - context=context) # ------------------------------------------------------- # OpenChatter methods and notifications @@ -475,9 +548,15 @@ class project_issue(crm.crm_case, osv.osv): if obj.user_id: sub_ids.append(obj.user_id.id) return self.pool.get('res.users').read(cr, uid, sub_ids, context=context) - + + def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): + """ Override of the (void) default notification method. """ + stage_name = self.pool.get('project.task.type').name_get(cr, uid, [stage_id], context=context)[0][1] + return self.message_append_note(cr, uid, ids, body= _("Stage changed to <b>%s</b>.") % (stage_name), context=context) + def case_get_note_msg_prefix(self, cr, uid, id, context=None): - return 'Project issue ' + """ Override of default prefix for notifications. """ + return 'Project issue' def convert_to_task_send_note(self, cr, uid, ids, context=None): message = _("Project issue has been <b>converted</b> in to task.") diff --git a/addons/project_issue/project_issue_demo.xml b/addons/project_issue/project_issue_demo.xml index 358e9e55aa5..a213cb02c2e 100644 --- a/addons/project_issue/project_issue_demo.xml +++ b/addons/project_issue/project_issue_demo.xml @@ -7,7 +7,6 @@ <field eval=""5"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_agrolait"/> - <field eval=""open"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field name="categ_id" ref="bug_categ"/> @@ -15,7 +14,7 @@ <field eval="15.0" name="duration"/> <field eval=""Bug in Accounts module"" name="name"/> <field eval=""agr@agrolait.com"" name="email_from"/> - <field name="type_id" ref="project.project_tt_specification"/> + <field name="stage_id" ref="project.project_tt_specification"/> </record> <record id="crm_case_programnotgivingproperoutput0" model="project.issue"> @@ -23,28 +22,26 @@ <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_asus"/> - <field eval=""done"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="3.5" name="duration"/> <field name="categ_id" ref="bug_categ"/> <field eval=""Program not giving proper output"" name="name"/> <field name="project_id" ref="project.project_project_22"/> - <field name="type_id" ref="project.project_tt_specification"/> + <field name="stage_id" ref="project.project_tt_specification"/> </record> <record id="crm_case_outputincorrect0" model="project.issue"> <field eval="time.strftime('%Y-%m-18 14:30:00')" name="date"/> <field eval=""4"" name="priority"/> <field name="user_id" ref="base.user_demo"/> - <field eval=""cancel"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="2.3" name="duration"/> <field name="categ_id" ref="bug_categ"/> <field name="project_id" ref="project.project_project_23"/> <field eval=""Output incorrect"" name="name"/> - <field name="type_id" ref="project.project_tt_development"/> + <field name="stage_id" ref="project.project_tt_development"/> </record> <record id="crm_case_problemloadingpage0" model="project.issue"> @@ -52,14 +49,13 @@ <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_14"/> - <field eval=""cancel"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="4.0" name="duration"/> <field name="categ_id" ref="bug_categ"/> <field name="project_id" ref="project.project_project_22"/> <field eval=""Problem loading page"" name="name"/> - <field name="type_id" ref="project.project_tt_testing"/> + <field name="stage_id" ref="project.project_tt_testing"/> </record> <record id="crm_case_pagenotfound0" model="project.issue"> @@ -67,14 +63,13 @@ <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_desertic_hispafuentes"/> - <field eval=""draft"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="1.0" name="duration"/> <field name="categ_id" ref="bug_categ"/> <field name="project_id" ref="project.project_project_22"/> <field eval=""Page not Found"" name="name"/> - <field name="type_id" ref="project.project_tt_development"/> + <field name="stage_id" ref="project.project_tt_development"/> </record> <record id="crm_case_programmingerror0" model="project.issue"> @@ -82,14 +77,13 @@ <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_5"/> - <field eval=""pending"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="4.0" name="duration"/> <field name="categ_id" ref="bug_categ"/> <field name="project_id" ref="project.project_project_22"/> <field eval=""Programming Error"" name="name"/> - <field name="type_id" ref="project.project_tt_testing"/> + <field name="stage_id" ref="project.project_tt_testing"/> </record> <record id="crm_case_logicalerrorinprogram0" model="project.issue"> @@ -97,14 +91,13 @@ <field eval=""2"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_6"/> - <field eval=""pending"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="2.0" name="duration"/> <field name="categ_id" ref="bug_categ"/> <field name="project_id" ref="project.project_project_9"/> <field eval=""Logical Error in Program"" name="name"/> - <field name="type_id" ref="project.project_tt_testing"/> + <field name="stage_id" ref="project.project_tt_testing"/> </record> <record id="crm_case_constrainterror0" model="project.issue"> @@ -112,14 +105,13 @@ <field eval=""2"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_6"/> - <field eval=""pending"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="7.3" name="duration"/> <field name="categ_id" ref="bug_categ"/> <field name="project_id" ref="project.project_project_9"/> <field eval=""Constraint Error"" name="name"/> - <field name="type_id" ref="project.project_tt_testing"/> + <field name="stage_id" ref="project.project_tt_testing"/> </record> <record id="crm_case_errorinprogram0" model="project.issue"> @@ -127,13 +119,12 @@ <field eval=""2"" name="priority"/> <field name="user_id" ref="base.user_demo"/> <field name="partner_id" ref="base.res_partner_5"/> - <field eval=""open"" name="state"/> <field eval="1" name="active"/> <field eval="1.3" name="duration"/> <field name="categ_id" ref="feature_request_categ"/> <field name="project_id" ref="project.project_project_22"/> <field eval=""Error in Program"" name="name"/> - <field name="type_id" ref="project.project_tt_testing"/> + <field name="stage_id" ref="project.project_tt_testing"/> </record> <record id="crm_case_patcheserrorinprogram0" model="project.issue"> @@ -141,14 +132,13 @@ <field eval=""2"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_2"/> - <field eval=""open"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="13.0" name="duration"/> <field name="categ_id" ref="feature_request_categ"/> <field name="project_id" ref="project.project_project_9"/> <field eval=""Patches Error in Program"" name="name"/> - <field name="type_id" ref="project.project_tt_testing"/> + <field name="stage_id" ref="project.project_tt_testing"/> </record> <record id="crm_case_newfeaturestobeadded0" model="project.issue"> @@ -156,14 +146,13 @@ <field eval=""4"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_maxtor"/> - <field eval=""open"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="3.2" name="duration"/> <field name="categ_id" ref="feature_request_categ"/> <field name="project_id" ref="project.project_project_21"/> <field eval=""New Features To Be Added"" name="name"/> - <field name="type_id" ref="project.project_tt_merge"/> + <field name="stage_id" ref="project.project_tt_merge"/> </record> <record id="crm_case_addmenustothemodule0" model="project.issue"> @@ -171,7 +160,6 @@ <field eval=""1"" name="priority"/> <field name="user_id" ref="base.user_demo"/> <field name="partner_id" ref="base.res_partner_9"/> - <field eval=""done"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="3.0" name="duration"/> @@ -179,7 +167,7 @@ <field name="project_id" ref="project.project_project_21"/> <field eval=""Add menus to the module"" name="name"/> <field eval=""info@opensides.be"" name="email_from"/> - <field name="type_id" ref="project.project_tt_development"/> + <field name="stage_id" ref="project.project_tt_development"/> </record> <record id="crm_case_includeattendancesheetinproject0" model="project.issue"> @@ -187,7 +175,6 @@ <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_10"/> - <field eval=""cancel"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="2.0" name="duration"/> @@ -195,7 +182,7 @@ <field name="project_id" ref="project.project_project_9"/> <field eval=""Include Attendance sheet in Project"" name="name"/> <field eval=""contact@tecsas.fr"" name="email_from"/> - <field name="type_id" ref="project.project_tt_development"/> + <field name="stage_id" ref="project.project_tt_development"/> </record> <record id="crm_case_createnewobject0" model="project.issue"> @@ -203,14 +190,13 @@ <field eval=""3"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_6"/> - <field eval=""draft"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="2.45" name="duration"/> <field name="categ_id" ref="feature_request_categ"/> <field name="project_id" ref="project.project_project_22"/> <field eval=""Create new object"" name="name"/> - <field name="type_id" ref="project.project_tt_specification"/> + <field name="stage_id" ref="project.project_tt_specification"/> </record> <record id="crm_case_improvereportsinhrms0" model="project.issue"> @@ -218,14 +204,13 @@ <field eval=""4"" name="priority"/> <field name="user_id" ref="base.user_root"/> <field name="partner_id" ref="base.res_partner_11"/> - <field eval=""pending"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="15.0" name="duration"/> <field name="categ_id" ref="feature_request_categ"/> <field name="project_id" ref="project.project_project_22"/> <field eval=""Improve Reports in HRMS"" name="name"/> - <field name="type_id" ref="project.project_tt_development"/> + <field name="stage_id" ref="project.project_tt_development"/> </record> <record id="crm_case_improvereportsinpms0" model="project.issue"> @@ -233,14 +218,13 @@ <field eval=""2"" name="priority"/> <field name="user_id" ref="base.user_demo"/> <field name="partner_id" ref="base.res_partner_11"/> - <field eval=""pending"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="1" name="active"/> <field eval="06.15" name="duration"/> <field name="categ_id" ref="feature_request_categ"/> <field name="project_id" ref="project.project_project_22"/> <field eval=""Improve Reports in PMS"" name="name"/> - <field name="type_id" ref="project.project_tt_specification"/> + <field name="stage_id" ref="project.project_tt_specification"/> </record> </data> diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index 716a02f2f60..895b4594185 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -51,18 +51,27 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> - <button name="case_open" string="Open" states="draft,pending" type="object"/> - <button name="case_close" string="Done" states="open,draft,pending" type="object"/> - <button name="case_pending" string="Pending" states="draft,open" type="object"/> - <button name="case_reset" string="Reset to New" states="done,cancel" type="object"/> - <button name="case_escalate" string="Escalate" states="open,draft,pending" type="object"/> - <button name="case_cancel" string="Cancel" states="draft,open,pending" type="object"/> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <header> + <button name="case_open" string="Open" type="object" + states="draft,pending"/> + <button name="case_close" string="Done" type="object" + states="draft,open,pending"/> + <button name="case_pending" string="Pending" type="object" + states="draft,open"/> + <button name="case_escalate" string="Escalate" type="object" + states="draft,open,pending"/> + <button name="case_reset" string="Reset to New" type="object" + states="cancelled,done"/> + <button name="stage_previous" string="Previous Stage" type="object" + states="open,pending" icon="gtk-go-back" + attrs="{'invisible': [('stage_id','=', False)]}"/> + <button name="stage_next" string="Next Stage" type="object" + states="open,pending" icon="gtk-go-forward" + attrs="{'invisible': [('stage_id','=', False)]}"/> + <button name="case_cancel" string="Cancel" type="object" + states="draft,open,pending"/> + <field name="stage_id" widget="statusbar"/> + </header> <sheet string="Issue Tracker Form" layout="auto"> <group colspan="4" col="6"> <field name="name"/> @@ -75,11 +84,7 @@ </group> <field name="user_id"/> <field name="version_id" colspan="2" widget="selection"/> - <group colspan="2" col="4"> - <field name="type_id" string="Stages" /> - <button name="prev_type" string="Previous" type="object" icon="gtk-go-back" help="Change to Previous Stage"/> - <button name="next_type" string="Next" type="object" icon="gtk-go-forward" help="Change to Next Stage"/> - </group> + <field name="state" groups="base.group_no_one"/> </group> <notebook colspan="4"> <page string="General"> @@ -118,9 +123,9 @@ </page> </notebook> </sheet> - <div class="oe_form_sheet_width"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> - </div> + <div class="oe_form_sheet_width"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> + </div> </form> </field> </record> @@ -138,19 +143,11 @@ <field name="partner_id"/> <field name="project_id" /> <field name="priority" string="Priority"/> - <field name="type_id" widget="selection" readonly="1" string="Stages" /> - <button name="prev_type" string="Previous" type="object" icon="gtk-go-back" help="Change to Previous Stage"/> - <button name="next_type" string="Next" type="object" icon="gtk-go-forward" help="Change to Next Stage"/> <field name="version_id" widget="selection"/> <field name="user_id"/> <field name="progress" widget="progressbar" attrs="{'invisible':[('task_id','=',False)]}"/> - <field name="state"/> - <button name="case_cancel" string="Cancel" states="draft,open,pending" type="object" icon="gtk-cancel"/> - <button name="case_close" string="Done" states="open,draft,pending" type="object" icon="gtk-jump-to"/> - <button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward" help="To Do"/> - <button name="case_pending" string="Pending" states="draft,open" type="object" icon="gtk-media-pause"/> - <button name="case_escalate" string="Escalate" states="open,draft,pending" type="object" icon="gtk-go-up"/> - <button name="case_reset" string="Reset to New" states="done,cancel" type="object" icon="gtk-convert"/> + <field name="stage_id" widget="selection" readonly="1"/> + <field name="state" groups="base.group_no_one"/> <field name="categ_id" invisible="1"/> <field name="task_id" invisible="1"/> </tree> @@ -192,7 +189,7 @@ <filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" /> <filter string="Stage" icon="terp-stage" domain="[]" - context="{'group_by':'type_id'}" /> + context="{'group_by':'stage_id'}" /> <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}" /> <separator orientation="vertical" /> @@ -224,9 +221,9 @@ <field name="model">project.issue</field> <field name="type">kanban</field> <field name="arch" type="xml"> - <kanban default_group_by="type_id"> + <kanban default_group_by="stage_id"> <field name="color"/> - <field name="state"/> + <field name="state" groups="base.group_no_one"/> <field name="priority"/> <field name="user_email"/> <field name="user_id"/> @@ -270,8 +267,7 @@ <a string="Convert To Task" name="convert_issue_task" icon="gtk-index" type="object"/> </div> <div class="oe_kanban_right"> - <a name="case_open" string="Open" states="draft,pending" type="object" icon="kanban-apply" /> - <a name="case_pending" string="Pending" states="draft,open" type="object" icon="kanban-pause"/> + <a name="case_open" string="Open" states="draft,pending" type="object" icon="kanban-apply"/> <a name="case_close" string="Close" states="open,draft,pending" type="object" icon="kanban-stop"/> </div> <div class="oe_kanban_clear"/> @@ -304,18 +300,10 @@ <field name="name" string="Feature description"/> <field name="partner_id"/> <field name="priority" string="Priority"/> - <field name="type_id" widget="selection" readonly="1"/> - <button name="prev_type" string="Previous" type="object" icon="gtk-go-back" help="Change to Previous Stage"/> - <button name="next_type" string="Next" type="object" icon="gtk-go-forward" help="Change to Next Stage"/> <field name="version_id"/> <field name="user_id"/> - <field name="state"/> - <button name="case_cancel" string="Cancel" states="draft,open,pending" type="object" icon="gtk-cancel"/> - <button name="case_close" string="Done" states="open,draft,pending" type="object" icon="gtk-jump-to"/> - <button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward"/> - <button name="case_pending" string="Pending" states="draft,open" type="object" icon="gtk-media-pause"/> - <button name="case_escalate" string="Escalate" states="open,draft,pending" type="object" icon="gtk-go-up"/> - <button name="case_reset" string="Reset to New" states="done,cancel" type="object" icon="gtk-convert"/> + <field name="stage_id" widget="selection" readonly="1"/> + <field name="state" groups="base.group_no_one"/> </tree> </field> </record> @@ -326,13 +314,13 @@ <field name="type">search</field> <field name="arch" type="xml"> <search string="Feature Tracker Search"> - <filter icon="terp-go-today" string="Today" + <filter icon="terp-go-today" string="Today" domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]" help="Today's features"/> <separator orientation="vertical"/> <group> <field name="name" string="Feature description"/> <field name="user_id"/> - <field name="state"> + <field name="state" groups="base.group_no_one"> <filter icon="terp-check" domain="[('state','in',('open','draft'))]" help="Current Features" name="current_feature"/> <filter icon="terp-camera_test" domain="[('state','=','open')]" help="Open Features"/> </field> diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py index 7cc520308e8..be3309d7175 100644 --- a/addons/project_issue/report/project_issue_report.py +++ b/addons/project_issue/report/project_issue_report.py @@ -51,7 +51,7 @@ class project_issue_report(osv.osv): 'creation_date': fields.date('Creation Date', readonly=True), 'date_closed': fields.date('Date of Closing', readonly=True), 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'project.issue')]"), - 'type_id': fields.many2one('project.task.type', 'Stage'), + 'stage_id': fields.many2one('project.task.type', 'Stage'), 'nbr': fields.integer('# of Issues', readonly=True), 'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True), 'working_hours_close': fields.float('Avg. Working Hours to Close', readonly=True), @@ -87,7 +87,7 @@ class project_issue_report(osv.osv): c.working_hours_close, c.section_id, c.categ_id, - c.type_id, + c.stage_id, to_char(c.date_closed, 'YYYY-mm-dd') as date_closed, c.company_id as company_id, c.priority as priority, diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml index ee0a4fbd1ed..43a49abf2b8 100644 --- a/addons/project_issue/report/project_issue_report_view.xml +++ b/addons/project_issue/report/project_issue_report_view.xml @@ -11,7 +11,7 @@ <field name="name" invisible="1"/> <field name="month" invisible="1"/> <field name="project_id" invisible="1"/> - <field name="type_id" invisible="1"/> + <field name="stage_id" invisible="1"/> <field name="version_id" string="Version" invisible="1"/> <field name="priority" invisible="1"/> <field name="company_id" invisible="1" groups="base.group_multi_company"/> @@ -103,7 +103,7 @@ <filter string="Version" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'version_id'}"/> <separator orientation="vertical" /> <filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" /> - <filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'type_id'}"/> + <filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/> <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}" /> <separator orientation="vertical"/> diff --git a/addons/project_issue/test/cancel_issue.yml b/addons/project_issue/test/cancel_issue.yml index ff05d923ed0..76ffa212638 100644 --- a/addons/project_issue/test/cancel_issue.yml +++ b/addons/project_issue/test/cancel_issue.yml @@ -7,7 +7,7 @@ I check the issue is in cancel state. - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}: - - state == 'cancel' + - state == 'cancelled' - I re-open the Issue. - @@ -37,7 +37,7 @@ I check the issue is in cancel state. - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}: - - state == 'cancel' + - state == 'cancelled' - I close Issue. - @@ -57,4 +57,4 @@ I check the issue is in cancel state. - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}: - - state == 'cancel'
\ No newline at end of file + - state == 'cancelled' diff --git a/addons/project_issue_sheet/i18n/sv.po b/addons/project_issue_sheet/i18n/sv.po new file mode 100644 index 00000000000..f9b6304f43d --- /dev/null +++ b/addons/project_issue_sheet/i18n/sv.po @@ -0,0 +1,77 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:37+0000\n" +"PO-Revision-Date: 2012-06-04 10:33+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n" +"X-Generator: Launchpad (build 15353)\n" + +#. module: project_issue_sheet +#: model:ir.model,name:project_issue_sheet.model_account_analytic_line +msgid "Analytic Line" +msgstr "Objektrad" + +#. module: project_issue_sheet +#: code:addons/project_issue_sheet/project_issue_sheet.py:57 +#, python-format +msgid "The Analytic Account is in pending !" +msgstr "Objektkontot är väntande" + +#. module: project_issue_sheet +#: model:ir.model,name:project_issue_sheet.model_project_issue +msgid "Project Issue" +msgstr "Projektärenden" + +#. module: project_issue_sheet +#: model:ir.model,name:project_issue_sheet.model_hr_analytic_timesheet +msgid "Timesheet Line" +msgstr "Tidrapportrad" + +#. module: project_issue_sheet +#: code:addons/project_issue_sheet/project_issue_sheet.py:57 +#: field:project.issue,analytic_account_id:0 +#, python-format +msgid "Analytic Account" +msgstr "Objektkonto" + +#. module: project_issue_sheet +#: view:project.issue:0 +msgid "Worklogs" +msgstr "Arbetslogg" + +#. module: project_issue_sheet +#: field:account.analytic.line,create_date:0 +msgid "Create Date" +msgstr "Registreringsdatum" + +#. module: project_issue_sheet +#: view:project.issue:0 +#: field:project.issue,timesheet_ids:0 +msgid "Timesheets" +msgstr "Tidkort" + +#. module: project_issue_sheet +#: constraint:hr.analytic.timesheet:0 +msgid "You cannot modify an entry in a Confirmed/Done timesheet !." +msgstr "Du kan inte ändra en post i en bekräftad/färdig tidrapport !" + +#. module: project_issue_sheet +#: field:hr.analytic.timesheet,issue_id:0 +msgid "Issue" +msgstr "Ärende" + +#. module: project_issue_sheet +#: constraint:account.analytic.line:0 +msgid "You can not create analytic line on view account." +msgstr "Du kan inte skapa objekttransaktioner med rubrikkonton." diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml index 1e9f50cdd87..0c175a4ef7e 100644 --- a/addons/project_long_term/project_long_term_view.xml +++ b/addons/project_long_term/project_long_term_view.xml @@ -142,17 +142,14 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Start Phase" name="set_open" states="pending,draft"/> <button string="Done" name="set_done" states="pending,open"/> <button string="Pending" name="set_pending" states="open"/> <button string="Draft" name="set_draft" states="open"/> <button string="Cancel" name="set_cancel" states="draft,open,pending"/> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}' select="1"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/> + </header> <sheet string="Project Phase" layout="auto"> <group colspan="6" col="6"> <group colspan="6" col="7" > @@ -330,7 +327,7 @@ <field name="type">search</field> <field name="inherit_id" ref="project.view_task_search_form"/> <field name="arch" type="xml"> - <field name="project_id" position="after"> + <field name="user_id" position="before"> <field name="phase_id" select="1"/> </field> </field> diff --git a/addons/project_mailgate/__openerp__.py b/addons/project_mailgate/__openerp__.py index 4679f5b65ca..dad9fd09eae 100644 --- a/addons/project_mailgate/__openerp__.py +++ b/addons/project_mailgate/__openerp__.py @@ -45,7 +45,6 @@ There are two common alternatives to configure the mailbox integration: """, "init_xml": [], "update_xml": ["security/ir.model.access.csv", - "project_mailgate_view.xml", ], 'demo_xml': [ ], diff --git a/addons/project_mailgate/project_mailgate.py b/addons/project_mailgate/project_mailgate.py index 9715a32c151..a36366f450e 100644 --- a/addons/project_mailgate/project_mailgate.py +++ b/addons/project_mailgate/project_mailgate.py @@ -26,21 +26,14 @@ import binascii class project_tasks(osv.osv): - _name = "project.task" - _inherit = ['mail.thread','project.task'] - - _columns = { - 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)], readonly=True), - } + _inherit = 'project.task' def message_new(self, cr, uid, msg, custom_values=None, context=None): res_id = super(project_tasks,self).message_new(cr, uid, msg, custom_values=custom_values, context=context) subject = msg.get('subject') - body = msg.get('body_text') msg_from = msg.get('from') data = { 'name': subject, - 'description': body, 'planned_hours': 0.0, } data.update(self.message_partner_by_email(cr, uid, msg_from)) @@ -48,12 +41,9 @@ class project_tasks(osv.osv): return res_id def message_update(self, cr, uid, ids, msg, data={}, default_act='pending'): - data.update({ - 'description': msg['body_text'], - }) act = 'do_'+default_act - maps = { + maps = { 'cost':'planned_hours', } for line in msg['body_text'].split('\n'): @@ -73,7 +63,7 @@ class project_tasks(osv.osv): self.write(cr, uid, ids, data, context=context) getattr(self,act)(cr, uid, ids, context=context) - self.message_append_dict(cr, uid, [res_id], msg, context=context) + self.message_append_note(cr, uid, [res_id], body=msg, context=context) return True def message_thread_followers(self, cr, uid, ids, context=None): @@ -84,37 +74,5 @@ class project_tasks(osv.osv): followers[task.id] = filter(None, task_followers) return followers - def do_draft(self, cr, uid, ids, context=None): - res = super(project_tasks, self).do_draft(cr, uid, ids, context) - tasks = self.browse(cr, uid, ids, context=context) - self.message_append(cr, uid, tasks, _('Draft'), context=context) - return res - - def do_open(self, cr, uid, ids, context=None): - res = super(project_tasks, self).do_open(cr, uid, ids, context) - tasks = self.browse(cr, uid, ids, context=context) - self.message_append(cr, uid, tasks, _('Open'), context=context) - return res - - def do_pending(self, cr, uid, ids, context=None): - res = super(project_tasks, self).do_pending(cr, uid, ids, context) - tasks = self.browse(cr, uid, ids, context=context) - self.message_append(cr, uid, tasks, _('Pending'), context=context) - return res - - def do_close(self, cr, uid, ids, context=None): - res = super(project_tasks, self).do_close(cr, uid, ids, context) - tasks = self.browse(cr, uid, ids, context=context) - for task in tasks: - if task.state == 'done': - self.message_append(cr, uid, tasks, _('Done'), context=context) - return res - - def do_cancel(self, cr, uid, ids, context=None): - res = super(project_tasks, self).do_cancel(cr, uid, ids, context=context) - tasks = self.browse(cr, uid, ids, context=context) - self.message_append(cr, uid, tasks, _('Cancel'), context=context) - return res - project_tasks() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_mailgate/project_mailgate_view.xml b/addons/project_mailgate/project_mailgate_view.xml deleted file mode 100644 index ea9855e9ec1..00000000000 --- a/addons/project_mailgate/project_mailgate_view.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - <record id="view_task_mailgate_form" model="ir.ui.view"> - <field name="name">task.mailgate.form</field> - <field name="model">project.task</field> - <field name="type">form</field> - <field name="inherit_id" ref="project.view_task_form2"/> - <field name="arch" type="xml"> - <xpath expr="//notebook/page[@string='Extra Info']" position="before"> - <page string="History"> - <field name="message_ids" colspan="4" nolabel="1" mode="tree" readonly="1"> - <tree string="History"> - <field name="display_text" string="History Information"/> - </tree> - </field> - </page> - </xpath> - </field> - </record> - </data> -</openerp> diff --git a/addons/project_messages/i18n/sv.po b/addons/project_messages/i18n/sv.po new file mode 100644 index 00000000000..d298d5bcf8a --- /dev/null +++ b/addons/project_messages/i18n/sv.po @@ -0,0 +1,113 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:37+0000\n" +"PO-Revision-Date: 2012-06-04 10:37+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n" +"X-Generator: Launchpad (build 15353)\n" + +#. module: project_messages +#: field:project.messages,to_id:0 +msgid "To" +msgstr "Till" + +#. module: project_messages +#: model:ir.model,name:project_messages.model_project_messages +msgid "project.messages" +msgstr "project.messages" + +#. module: project_messages +#: field:project.messages,from_id:0 +msgid "From" +msgstr "Från" + +#. module: project_messages +#: view:project.messages:0 +msgid "Group By..." +msgstr "Gruppera på..." + +#. module: project_messages +#: field:project.messages,create_date:0 +msgid "Creation Date" +msgstr "Registeringsdatum" + +#. module: project_messages +#: help:project.messages,to_id:0 +msgid "Keep this empty to broadcast the message." +msgstr "Håll detta tomt för att sända meddelandet." + +#. module: project_messages +#: model:ir.actions.act_window,name:project_messages.act_project_messages +#: model:ir.actions.act_window,name:project_messages.action_view_project_editable_messages_tree +#: view:project.messages:0 +#: view:project.project:0 +#: field:project.project,message_ids:0 +msgid "Messages" +msgstr "Meddelanden" + +#. module: project_messages +#: model:ir.model,name:project_messages.model_project_project +#: view:project.messages:0 +#: field:project.messages,project_id:0 +msgid "Project" +msgstr "Projekt" + +#. module: project_messages +#: model:ir.actions.act_window,help:project_messages.messages_form +msgid "" +"An in-project messaging system allows for an efficient and trackable " +"communication between project members. The messages are stored in the system " +"and can be used for post analysis." +msgstr "" +"En inom-projektetmeddelandehanteringssystem möjliggör en effektiv och " +"spårbar kommunikation mellan projektmedlemmar. De meddelanden som lagras i " +"systemet och kan också användas för efter-analys." + +#. module: project_messages +#: view:project.messages:0 +msgid "Today" +msgstr "Idag" + +#. module: project_messages +#: view:project.messages:0 +msgid "Message To" +msgstr "Meddelande till" + +#. module: project_messages +#: constraint:project.project:0 +msgid "Error! You cannot assign escalation to the same project!" +msgstr "Fel! Du kan inte eskalera till samma projekt" + +#. module: project_messages +#: view:project.messages:0 +#: field:project.messages,message:0 +msgid "Message" +msgstr "Meddelande" + +#. module: project_messages +#: view:project.messages:0 +msgid "Message From" +msgstr "Meddelande från" + +#. module: project_messages +#: model:ir.actions.act_window,name:project_messages.messages_form +#: model:ir.ui.menu,name:project_messages.menu_messages_form +#: view:project.messages:0 +msgid "Project Messages" +msgstr "Projektmeddelanden" + +#. module: project_messages +#: constraint:project.project:0 +msgid "Error! project start-date must be lower then project end-date." +msgstr "Fel! projektets startdatum måste föregå projekets slutdatum." diff --git a/addons/project_mrp/project_procurement.py b/addons/project_mrp/project_procurement.py index 7d3045aede0..9252e3bbd11 100644 --- a/addons/project_mrp/project_procurement.py +++ b/addons/project_mrp/project_procurement.py @@ -81,6 +81,7 @@ class procurement_order(osv.osv): 'company_id': procurement.company_id.id, },context=context) self.write(cr, uid, [procurement.id], {'task_id': task_id, 'state': 'running'}, context=context) + self.running_send_note(cr, uid, ids, context=None) return task_id procurement_order() diff --git a/addons/project_planning/project_planning_view.xml b/addons/project_planning/project_planning_view.xml index 11e9b057c06..fd65ae61b88 100644 --- a/addons/project_planning/project_planning_view.xml +++ b/addons/project_planning/project_planning_view.xml @@ -27,16 +27,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="action_open" states="draft" string="Open" type="object" /> <button name="action_done" states="open" string="Done" type="object" /> <button name="action_draft" states="done,cancel" string="Reset to Draft" type="object" /> <button name="action_cancel" states="draft,open" string="Cancel" type="object" /> - <div class="oe_right"> - <field name="state" select="1" widget="statusbar" nolabel="1" statusbar_visible="draft,open"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,open"/> + </header> <sheet string="Planning by Account" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="name" select="1" /> @@ -129,7 +126,7 @@ <field name="sequence"/> </group> <separator string="Miscellaneous" colspan="4"/> - <field name="type_id"/> + <field name="stage_id"/> <field name="active"/> <field name="partner_id"/> <separator colspan="4" string="Notes"/> diff --git a/addons/project_scrum/board_project_scrum_view.xml b/addons/project_scrum/board_project_scrum_view.xml index 284208ee21f..08e3fd1bb25 100644 --- a/addons/project_scrum/board_project_scrum_view.xml +++ b/addons/project_scrum/board_project_scrum_view.xml @@ -16,12 +16,6 @@ <field name="effective_hours" sum="Effective hours" widget="float_time"/> <field name="expected_hours" sum="Expected hours" widget="float_time"/> <field name="state"/> - <button type="object" string="Open" name="button_open" states="draft,pending" icon="gtk-ok"/> - <button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/> - <button type="object" string="Close" name="button_close" states="open,pending" icon="terp-dialog-close"/> - <button type="object" string="Set to Draft" name="button_draft" states="cancel,done" icon="gtk-convert"/> - <button name="%(project_scrum.report_scrum_sprint_burndown_chart)d" states="open,draft,close,cancel" - string="Burndown Chart" type="action" icon="gtk-print"/> </tree> </field> </record> @@ -114,8 +108,6 @@ <field name="progress" widget="progressbar"/> <field name="effective_hours" widget="float_time"/> <field name="expected_hours" widget="float_time"/> - <button name="%(project_scrum.report_scrum_sprint_burndown_chart)d" - string="Burndown Chart" type="action" icon="gtk-print"/> </tree> </field> </record> diff --git a/addons/project_scrum/project_scrum.py b/addons/project_scrum/project_scrum.py index 22824ecc3fe..78907226010 100644 --- a/addons/project_scrum/project_scrum.py +++ b/addons/project_scrum/project_scrum.py @@ -44,6 +44,7 @@ class project_scrum_sprint(osv.osv): _name = 'project.scrum.sprint' _description = 'Project Scrum Sprint' _order = 'date_start desc' + _inherit = ['mail.thread'] def _compute(self, cr, uid, ids, fields, arg, context=None): res = {}.fromkeys(ids, 0.0) progress = {} @@ -71,28 +72,27 @@ class project_scrum_sprint(osv.osv): def button_cancel(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state':'cancel'}, context=context) + self.cancel_send_note(cr, uid, ids, context=None) return True def button_draft(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state':'draft'}, context=context) + self.draft_send_note(cr, uid, ids, context=None) return True def button_open(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state':'open'}, context=context) - for (id, name) in self.name_get(cr, uid, ids): - message = _("The sprint '%s' has been opened.") % (name,) - self.log(cr, uid, id, message) + self.open_send_note(cr, uid, ids, context=None) return True def button_close(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state':'done'}, context=context) - for (id, name) in self.name_get(cr, uid, ids): - message = _("The sprint '%s' has been closed.") % (name,) - self.log(cr, uid, id, message) + self.close_send_note(cr, uid, ids, context=None) return True def button_pending(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'state':'pending'}, context=context) + self.pending_send_note(cr, uid, ids, context=None) return True _columns = { @@ -138,6 +138,33 @@ class project_scrum_sprint(osv.osv): v['date_stop'] = (datetime.now() + relativedelta(days=int(proj.sprint_size or 14))).strftime('%Y-%m-%d') return {'value':v} + # ---------------------------------------- + # OpenChatter methods and notifications + # ---------------------------------------- + + def create(self, cr, uid, vals, context=None): + obj_id = super(project_scrum_sprint, self).create(cr, uid, vals, context) + self.create_send_note(cr, uid, [obj_id], context=context) + return obj_id + + def draft_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Sprint has been set to <b>draft</b>."), context=context) + + def create_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Sprint has been <b>created</b>."), context=context) + + def open_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Sprint has been <b>opened</b>."), context=context) + + def pending_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Sprint has been set to <b>pending</b>."), context=context) + + def cancel_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Sprint has been <b>cancelled</b>."), context=context) + + def close_send_note(self, cr, uid, ids, context=None): + self.message_append_note(cr, uid, ids, body=_("Sprint has been <b>closed</b>."), context=context) + project_scrum_sprint() class project_scrum_product_backlog(osv.osv): diff --git a/addons/project_scrum/project_scrum_demo.xml b/addons/project_scrum/project_scrum_demo.xml index 50c67146716..6e3de7665bd 100644 --- a/addons/project_scrum/project_scrum_demo.xml +++ b/addons/project_scrum/project_scrum_demo.xml @@ -265,7 +265,6 @@ <field model="res.users" name="user_id" search="[('login','=','demo')]"/> <field name="project_id" ref="project.project_project_9"/> <field name="name">Review all English Terms</field> - <field name="state">done</field> <field eval="time.strftime('%Y-%m-%d')" name="date_end"/> <field name="product_backlog_id" ref="scrum_product_backlog_3"/> </record> @@ -274,7 +273,6 @@ <field model="res.users" name="user_id" search="[('login','=','demo')]"/> <field name="project_id" ref="project.project_project_9"/> <field name="name">Review all french terms</field> - <field name="state">done</field> <field eval="time.strftime('%Y-%m-%d')" name="date_end"/> <field name="product_backlog_id" ref="scrum_product_backlog_3"/> </record> @@ -283,7 +281,6 @@ <field model="res.users" name="user_id" search="[('login','=','demo')]"/> <field name="project_id" ref="project.project_project_9"/> <field name="name">Analytic Accounting features</field> - <field name="state">done</field> <field eval="time.strftime('%Y-%m-%d')" name="date_end"/> <field name="product_backlog_id" ref="scrum_product_backlog_1"/> </record> @@ -292,7 +289,6 @@ <field model="res.users" name="user_id" search="[('login','=','demo')]"/> <field name="project_id" ref="project.project_project_9"/> <field name="name">Test and improve automatic migration system</field> - <field name="state">open</field> <field name="product_backlog_id" ref="scrum_product_backlog_0"/> </record> <record id="scrum_task_7" model="project.task"> @@ -300,7 +296,6 @@ <field model="res.users" name="user_id" search="[('login','=','demo')]"/> <field name="project_id" ref="project.project_project_9"/> <field name="name">General accounting features</field> - <field name="state">open</field> <field name="product_backlog_id" ref="scrum_product_backlog_1"/> </record> <record id="scrum_task_8" model="project.task"> @@ -316,7 +311,6 @@ <field name="project_id" ref="project.project_project_9"/> <field name="description">Cash book, general ledger, accounts list, aged trial balance</field> <field name="name">Accounting Report General</field> - <field name="state">open</field> <field eval="[(6,0,[ref('scrum_task_8')])]" name="child_ids"/> <field name="product_backlog_id" ref="scrum_product_backlog_1"/> </record> @@ -332,7 +326,6 @@ <field model="res.users" name="user_id" search="[('login','=','demo')]"/> <field name="project_id" ref="project.project_project_9"/> <field name="name">Accounting Report Analytic</field> - <field name="state">open</field> <field name="product_backlog_id" ref="scrum_product_backlog_1"/> </record> <record id="scrum_task_12" model="project.task"> @@ -340,7 +333,6 @@ <field model="res.users" name="user_id" search="[('login','=','demo')]"/> <field name="project_id" ref="project.project_project_9"/> <field name="name">Bugfix - memory leak</field> - <field name="state">done</field> <field eval="time.strftime('%Y-%m-%d')" name="date_end"/> <field name="product_backlog_id" ref="scrum_product_backlog_4"/> </record> @@ -349,7 +341,6 @@ <field model="res.users" name="user_id" search="[('login','=','demo')]"/> <field name="project_id" ref="project.project_project_9"/> <field name="name">Bugfix - Translations</field> - <field name="state">open</field> <field eval="[(6,0,[ref('scrum_task_12')])]" name="child_ids"/> <field name="product_backlog_id" ref="scrum_product_backlog_4"/> </record> @@ -358,7 +349,6 @@ <field model="res.users" name="user_id" search="[('login','=','demo')]"/> <field name="project_id" ref="project.project_project_9"/> <field name="name">Finish the automated plugin system</field> - <field name="state">pending</field> <field name="product_backlog_id" ref="scrum_product_backlog_2"/> </record> <record id="scrum_task_15" model="project.task"> @@ -373,7 +363,6 @@ <field model="res.users" name="user_id" search="[('login','=','demo')]"/> <field name="project_id" ref="project.project_project_9"/> <field name="name">Test 3.2.0 before releasing</field> - <field name="state">open</field> <field name="product_backlog_id" ref="scrum_product_backlog_5"/> </record> <record id="scrum_task_17" model="project.task"> @@ -382,7 +371,6 @@ <field name="project_id" ref="project.project_project_9"/> <field name="description">default values, onchange, required, add on top or bottom and shortcuts (Ctrl S, Ctrl X, ...)</field> <field name="name">Editable trees</field> - <field name="state">open</field> <field name="product_backlog_id" ref="scrum_product_backlog_7"/> </record> diff --git a/addons/project_scrum/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml index ef8a2681620..4e69dfd3550 100644 --- a/addons/project_scrum/project_scrum_view.xml +++ b/addons/project_scrum/project_scrum_view.xml @@ -43,10 +43,6 @@ <field name="expected_hours" sum="Planned hours" widget="float_time" string="Total Planned Hours"/> <field name="effective_hours" sum="Spent hours" widget="float_time" string="Total Spent Hours"/> <field name="state"/> - <button type="object" string="Open" name="button_open" states="draft,pending" icon="terp-camera_test"/> - <button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/> - <button type="action" string="Convert to Task" name="%(action_scrum_backlog_to_task)d" states="pending" icon="terp-stock_effects-object-colorize"/> - <button type="object" string="Close" name="button_close" states="open,pending" icon="terp-dialog-close"/> </tree> </field> </record> @@ -57,18 +53,15 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button type="object" string="Open" name="button_open" states="draft,pending"/> <button type="object" string="Close" name="button_close" states="open,pending"/> <button type="object" string="Pending" name="button_pending" states="open"/> <button type="action" string="Convert to Task" name="%(action_scrum_backlog_to_task)d" states="pending"/> <button type="object" string="Set to Draft" name="button_draft" states="cancel,done"/> <button type="object" string="Cancel" name="button_cancel" states="draft,open,pending"/> - <div class="oe_right"> - <field name="state" select="1" widget="statusbar" nolabel="1" statusbar_visible="draft,open"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,open"/> + </header> <sheet string="Product backlog" layout="auto"> <group colspan="4" col="8" class="oe_form_header"> <field name="name" select="1"/> @@ -106,7 +99,7 @@ <field name="type_id" invisible="context.get('set_visible',False)"/> <field name="date_start" invisible="1"/> <field name="date_end" invisible="1"/> - <button name="next_type" invisible="context.get('set_visible',False)" + <button name="stage_next" invisible="context.get('set_visible',False)" states="draft,open,pending" string="Change Stage" type="object" @@ -223,12 +216,6 @@ <field name="effective_hours" sum="Effective hours" widget="float_time"/> <field name="expected_hours" sum="Planned hours" widget="float_time"/> <field name="state"/> - <button type="object" string="Open" name="button_open" states="draft,pending" icon="terp-camera_test"/> - <button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/> - <button type="object" string="Close" name="button_close" states="open,pending" icon="terp-dialog-close"/> - <button type="object" string="Set to Draft" name="button_draft" states="cancel,done" icon="gtk-convert"/> - <button name="%(project_scrum.report_scrum_sprint_burndown_chart)d" states="open,draft,close,cancel" - string="Burndown Chart" type="action" icon="gtk-print"/> </tree> </field> </record> @@ -238,18 +225,15 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button type="object" string="Open" name="button_open" states="draft,pending"/> <button type="object" string="Close" name="button_close" states="open,pending"/> <button type="object" string="Pending" name="button_pending" states="open"/> <button name="%(project_scrum.report_scrum_sprint_burndown_chart)d" string="Burndown Chart" type="action"/> <button type="object" string="Set to Draft" name="button_draft" states="cancel,done"/> - <div class="oe_right"> - <field name="state" readonly="1" widget="statusbar" nolabel="1" statusbar_visible="draft,open"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" readonly="1" widget="statusbar" statusbar_visible="draft,open"/> + </header> <sheet string="Scrum Sprint" layout="auto"> <group colspan="4" col="6" class="oe_form_header"> <field name="name" select="1"/> @@ -317,6 +301,9 @@ </page> </notebook> </sheet> + <div class="oe_form_sheet_width"> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> + </div> </form> </field> </record> @@ -578,7 +565,7 @@ <field name="type">search</field> <field name="inherit_id" ref="project.view_task_search_form"/> <field name="arch" type="xml"> - <field name="project_id" position="after"> + <field name="user_id" position="before"> <field name="sprint_id" context="{'sprint_invisible':False}"> <filter icon="terp-check" context="{'sprint_invisible':False}" domain="[('sprint_id.state','in',('draft','open'))]" help="Current Sprints"/> <filter icon="gtk-find" context="{'sprint_invisible':False}" domain="[]" help="View Sprints"/> diff --git a/addons/project_scrum/wizard/project_scrum_backlog_sprint.py b/addons/project_scrum/wizard/project_scrum_backlog_sprint.py index 72b80a969fb..ab017231e89 100644 --- a/addons/project_scrum/wizard/project_scrum_backlog_sprint.py +++ b/addons/project_scrum/wizard/project_scrum_backlog_sprint.py @@ -24,6 +24,7 @@ from tools.translate import _ class backlog_sprint_assign(osv.osv_memory): _name = 'project.scrum.backlog.assign.sprint' _description = 'Assign sprint to backlogs' + _inherit = ['mail.thread'] _columns = { 'sprint_id': fields.many2one('project.scrum.sprint', 'Sprint', required=True, help="Select Sprint to assign backlog."), 'state_open': fields.boolean('Open Backlog', help="Change the state of product backlogs to open if its in draft state"), @@ -55,12 +56,12 @@ class backlog_sprint_assign(osv.osv_memory): 'remaining_hours':backlog.expected_hours, }) message = _("Product Backlog '%s' is converted into Task %d.") %(backlog.name, task_id) - self.log(cr, uid, backlog.id, message) + self.message_append_note(cr, uid, [backlog.id], body=message, context=context) if data.state_open and backlog.state == "draft": backlog_obj.write(cr, uid, backlog.id, {'state':'open'}) sprint = sprint_obj.browse(cr, uid, data.sprint_id.id, context=context) message = _("Product Backlog '%s' is assigned to sprint %s") %(backlog.name, sprint.name) - self.log(cr, uid, backlog.id, message) + self.message_append_note(cr, uid, [backlog.id], body=message, context=context) backlog_obj.write(cr, uid, backlog_ids, {'sprint_id': data.sprint_id.id}, context=context) return {'type': 'ir.actions.act_window_close'} diff --git a/addons/purchase/i18n/nl.po b/addons/purchase/i18n/nl.po index 40ad6f9c252..046e2a2a4e7 100644 --- a/addons/purchase/i18n/nl.po +++ b/addons/purchase/i18n/nl.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-02-08 01:37+0100\n" -"PO-Revision-Date: 2012-02-18 15:04+0000\n" +"PO-Revision-Date: 2012-06-01 08:41+0000\n" "Last-Translator: Erwin <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: 2012-05-11 04:40+0000\n" -"X-Generator: Launchpad (build 15225)\n" +"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n" +"X-Generator: Launchpad (build 15342)\n" #. module: purchase #: model:process.transition,note:purchase.process_transition_confirmingpurchaseorder0 @@ -113,7 +113,7 @@ msgstr "Te factureren" #. module: purchase #: view:purchase.order.line_invoice:0 msgid "Do you want to generate the supplier invoices?" -msgstr "" +msgstr "Wilt u de leveranciersfacturen genereren?" #. module: purchase #: model:ir.actions.act_window,help:purchase.purchase_form_action @@ -194,7 +194,7 @@ msgstr "Fouten in facturatie" #. module: purchase #: model:product.pricelist,name:purchase.list0 msgid "Default Purchase Pricelist" -msgstr "Standaard inkoopprijslijst" +msgstr "Inkoopprijslijst" #. module: purchase #: help:purchase.order,dest_address_id:0 @@ -1849,7 +1849,7 @@ msgstr "" #. module: purchase #: view:purchase.order.group:0 msgid "Are you sure you want to merge these orders?" -msgstr "" +msgstr "Weet u zeker dat u deze orders wilt samenvoegen?" #. module: purchase #: model:process.transition,name:purchase.process_transition_purchaseinvoice0 diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 125bb8ae77d..b6f06dfd4bf 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -371,8 +371,6 @@ class purchase_order(osv.osv): for line in po.order_line: if line.state=='draft': todo.append(line.id) - message = _("Purchase order '%s' is confirmed.") % (po.name,) - self.log(cr, uid, po.id, message) # current_name = self.name_get(cr, uid, ids)[0][1] self.pool.get('purchase.order.line').action_confirm(cr, uid, todo, context) for id in ids: @@ -399,7 +397,7 @@ class purchase_order(osv.osv): 'account_analytic_id': order_line.account_analytic_id.id or False, } - def action_cancel_draft(self, cr, uid, ids, *args): + def action_cancel_draft(self, cr, uid, ids, context=None): if not len(ids): return False self.write(cr, uid, ids, {'state':'draft','shipped':0}) @@ -408,9 +406,7 @@ class purchase_order(osv.osv): # Deleting the existing instance of workflow for PO wf_service.trg_delete(uid, 'purchase.order', p_id, cr) wf_service.trg_create(uid, 'purchase.order', p_id, cr) - for (id,name) in self.name_get(cr, uid, ids): - message = _("Purchase order '%s' has been set in draft state.") % name - self.log(cr, uid, id, message) + self.draft_send_note(cr, uid, ids, context=context) return True def action_invoice_create(self, cr, uid, ids, context=None): @@ -514,8 +510,7 @@ class purchase_order(osv.osv): for (id, name) in self.name_get(cr, uid, ids): wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr) - message = _("Purchase order '%s' is cancelled.") % name - self.log(cr, uid, id, message) + self.cancel_send_note(cr, uid, ids, context) return True def _prepare_order_picking(self, cr, uid, order, context=None): @@ -771,6 +766,9 @@ class purchase_order(osv.osv): def invoice_done_send_note(self, cr, uid, ids, context=None): self.message_append_note(cr, uid, ids, body=_("Invoice <b>paid</b>."), context=context) + + def draft_send_note(self, cr, uid, ids, context=None): + return self.message_append_note(cr, uid, ids, body=_("Purchase Order has been set to <b>draft</b>."), context=context) def cancel_send_note(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context): @@ -1076,6 +1074,7 @@ class procurement_order(osv.osv): } res[procurement.id] = self.create_procurement_purchase_order(cr, uid, procurement, po_vals, line_vals, context=context) self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': res[procurement.id]}) + self.running_send_note(cr, uid, [procurement.id], context=context) return res procurement_order() diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index c43b53ceb68..e561473363a 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -131,7 +131,7 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="purchase_confirm" states="draft,sent" string="Confirm Order" class="oe_form_button_hi"/> <button name="wkf_send_rfq" states="draft" string="Send RFQ" type="object" context="{'send_rfq':True}"/> <button name="wkf_send_rfq" states="confirmed" string="Resend Purchase Order" type="object"/> @@ -144,11 +144,8 @@ <button name="view_picking" string="Receive Products" type="object" attrs="{'invisible': ['|', ('shipped','=',True), ('state','!=', 'approved')]}"/> <button name="action_cancel_draft" states="cancel,sent,confirmed" string="Set to Draft" type="object"/> <button name="purchase_cancel" states="draft,confirmed,wait_auth,sent" string="Cancel"/> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,approved,done" statusbar_colors='{"except_picking":"red","except_invoice":"red","confirmed":"blue","wait":"blue"}' readonly="1"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,approved,done" statusbar_colors='{"except_picking":"red","except_invoice":"red","confirmed":"blue","wait":"blue"}' readonly="1"/> + </header> <sheet string="Purchase Order" layout="auto"> <group col="6" colspan="4"> <field name="name"/> @@ -212,7 +209,7 @@ </notebook> </sheet> <div class="oe_form_sheet_width"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> @@ -512,7 +509,7 @@ <field name="inherit_id" ref="procurement.procurement_form_view"/> <field name="type">form</field> <field name="arch" type="xml"> - <xpath expr="//field[@name='close_move']" position="before"> + <xpath expr="/form/sheet/notebook/page/field[@name='close_move']" position="before"> <field name="purchase_id"/> </xpath> </field> diff --git a/addons/purchase/res_config_view.xml b/addons/purchase/res_config_view.xml index 3d4c96b9587..575863fddc4 100644 --- a/addons/purchase/res_config_view.xml +++ b/addons/purchase/res_config_view.xml @@ -7,10 +7,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Configure Purchases" layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Apply" type="object" name="execute"/> <button string="Cancel" special="cancel"/> - </div> + </header> <sheet layout="auto"> <separator string="Invoicing" colspan="4"/> <field name="default_invoice_method"/> diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index 3f3afa47e3b..566497df729 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -259,7 +259,7 @@ class procurement_order(osv.osv): })], 'purchase_ids': [(6,0,[po_id])] }) - self.write(cr,uid,proc_id,{'requisition_id':requisition_id}) + self.write(cr,uid,[proc_id],{'requisition_id':requisition_id},context=context) return res procurement_order() diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml index 9a9d2bfa105..2b2323308b2 100644 --- a/addons/purchase_requisition/purchase_requisition_view.xml +++ b/addons/purchase_requisition/purchase_requisition_view.xml @@ -33,16 +33,13 @@ <field name="model">purchase.requisition</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="tender_in_progress" states="draft" string="Start" type="object" /> <button name="tender_reset" states="done,cancel" string="Reset to Draft" type="object" /> <button name="tender_done" states="in_progress" string="Done" type="object" /> <button name="tender_cancel" states="draft,in_progress" string="Cancel" type="object" /> - <div class="oe_right"> - <field name="state" nolabel="1" select="1" readonly ="1" widget="statusbar" statusbar_visible="draft,in_progress,done" statusbar_colors='{"in_progress":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" readonly="1" widget="statusbar" statusbar_visible="draft,in_progress,done" statusbar_colors='{"in_progress":"blue"}'/> + </header> <sheet string="Purchase Requisition" layout="auto"> <group colspan="4" col="6"> <field name="name"/> diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 73ed86b55e6..6c69dd38a75 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -97,7 +97,7 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="invoice_recreate" states="invoice_except" string="Recreate Invoice"/> <button name="invoice_corrected" states="invoice_except" string="Ignore Exception"/> <button name="ship_recreate" states="shipping_except" string="Recreate Delivery Order"/> @@ -118,11 +118,8 @@ <button name="action_cancel" states="manual,progress" string="Cancel" type="object"/> <button name="ship_cancel" states="shipping_except" string="Cancel"/> <button name="invoice_cancel" states="invoice_except" string="Cancel"/> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,sent,progress,invoiced,done" statusbar_colors='{"shipping_except":"red","invoice_except":"red","waiting_date":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,sent,progress,invoiced,done" statusbar_colors='{"shipping_except":"red","invoice_except":"red","waiting_date":"blue"}'/> + </header> <sheet string="Sales Order" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <group col="4" colspan="4"> @@ -153,8 +150,8 @@ context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" name="product_id" on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, True, parent.date_order, product_packaging, parent.fiscal_position, False, context)"/> - <field name="name"/> - + <field name="name" placeholder="Porduct/Service characteristics"/> + <field context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" name="product_uom_qty" @@ -230,7 +227,7 @@ <div class="oe_clear"/> <separator colspan="4" string="Notes"/> - <field colspan="4" name="note" nolabel="1"/> + <field colspan="4" name="note" nolabel="1" placeholder="Our quotation is valid for 30 days..."/> </page> <page string="Other Information"> <group colspan="2" col="2" name="logistics"> @@ -276,7 +273,7 @@ </notebook> </sheet> <div class="oe_form_bottom"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </form> </field> diff --git a/addons/sale_crm/sale_crm_view.xml b/addons/sale_crm/sale_crm_view.xml index 3151c910e2f..49e7686542c 100644 --- a/addons/sale_crm/sale_crm_view.xml +++ b/addons/sale_crm/sale_crm_view.xml @@ -9,9 +9,9 @@ <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> <field name="arch" type="xml"> <data> - <xpath expr="//div[contains(@class,'oe_form_topbar')]/div[contains(@class,'oe_right')]" position="before"> + <field name="state" position="before"> <button string="Convert to Quote" name="%(action_crm_make_sale)d" type="action"/> - </xpath> + </field> </data> </field> </record> diff --git a/addons/share/i18n/sv.po b/addons/share/i18n/sv.po new file mode 100644 index 00000000000..c704c8373eb --- /dev/null +++ b/addons/share/i18n/sv.po @@ -0,0 +1,521 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 01:37+0100\n" +"PO-Revision-Date: 2012-06-04 10:42+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n" +"X-Generator: Launchpad (build 15353)\n" + +#. module: share +#: field:share.wizard,embed_option_title:0 +msgid "Display title" +msgstr "Visningstitel" + +#. module: share +#: view:share.wizard:0 +msgid "Access granted!" +msgstr "Behörighet given!" + +#. module: share +#: field:share.wizard,user_type:0 +msgid "Sharing method" +msgstr "Delningsmetod" + +#. module: share +#: view:share.wizard:0 +msgid "Share with these People (one e-mail per line)" +msgstr "" + +#. module: share +#: field:share.wizard,name:0 +msgid "Share Title" +msgstr "Delningstitel" + +#. module: share +#: model:ir.module.category,name:share.module_category_share +msgid "Sharing" +msgstr "Delning" + +#. module: share +#: field:share.wizard,share_root_url:0 +msgid "Share Access URL" +msgstr "Delnings URL" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:782 +#, python-format +msgid "You may use your current login (%s) and password to view them.\n" +msgstr "" +"Du kan använda nuvarande inloggning (%s) och lösenord för att se dem.\n" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:601 +#, python-format +msgid "(Modified)" +msgstr "(Ändrad)" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:769 +#, python-format +msgid "" +"The documents are not attached, you can view them online directly on my " +"OpenERP server at:" +msgstr "" +"Dokumenten är inte bilagda, du kan se dem online direkt på vår OpenERP-" +"server på:" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:579 +#, python-format +msgid "Sharing filter created by user %s (%s) for group %s" +msgstr "" + +#. module: share +#: field:share.wizard,embed_url:0 field:share.wizard.result.line,share_url:0 +msgid "Share URL" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:776 +#, python-format +msgid "These are your credentials to access this protected area:\n" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:643 +#, python-format +msgid "You must be a member of the Share/User group to use the share wizard" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Access info" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Share" +msgstr "Utdelning" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:551 +#, python-format +msgid "(Duplicated for modified sharing permissions)" +msgstr "" + +#. module: share +#: help:share.wizard,domain:0 +msgid "Optional domain for further data filtering" +msgstr "" + +#. module: share +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "Du kan inte ha två användare med samma användarid !" + +#. module: share +#: model:ir.model,name:share.model_ir_model_access +msgid "ir.model.access" +msgstr "ir.model.access" + +#. module: share +#: view:share.wizard:0 +msgid "Next" +msgstr "Nästa" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:777 +#, python-format +msgid "Username" +msgstr "Användarnamn" + +#. module: share +#: view:share.wizard:0 +msgid "Sharing Options" +msgstr "Utdelningsalternativ" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:765 +#, python-format +msgid "Hello," +msgstr "Hej," + +#. module: share +#: view:share.wizard:0 +msgid "Close" +msgstr "Stäng" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:640 +#, python-format +msgid "Action and Access Mode are required to create a shared access" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "" +"Please select the action that opens the screen containing the data you want " +"to share." +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:781 +#, python-format +msgid "" +"The documents have been automatically added to your current OpenERP " +"documents.\n" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Cancel" +msgstr "Avbryt" + +#. module: share +#: field:res.groups,share:0 +msgid "Share Group" +msgstr "Delningsgrupp" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:763 +#, python-format +msgid "Email required" +msgstr "E-post krävs" + +#. module: share +#: view:share.wizard:0 +msgid "" +"Optionally, you may specify an additional domain restriction that will be " +"applied to the shared data." +msgstr "" + +#. module: share +#: help:share.wizard,name:0 +msgid "Title for the share (displayed to users as menu and shortcut name)" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Options" +msgstr "Alternativ" + +#. module: share +#: view:res.groups:0 +msgid "Regular groups only (no share groups" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:787 +#, python-format +msgid "" +"OpenERP is a powerful and user-friendly suite of Business Applications (CRM, " +"Sales, HR, etc.)\n" +"It is open source and can be found on http://www.openerp.com." +msgstr "" + +#. module: share +#: field:share.wizard,action_id:0 +msgid "Action to share" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Optional: include a personal message" +msgstr "" + +#. module: share +#: field:res.users,share:0 +msgid "Share User" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:647 +#, python-format +msgid "Please indicate the emails of the persons to share with, one per line" +msgstr "" + +#. module: share +#: field:share.wizard,embed_code:0 field:share.wizard.result.line,user_id:0 +msgid "unknown" +msgstr "okänd" + +#. module: share +#: help:res.groups,share:0 +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: share +#: help:share.wizard,action_id:0 +msgid "" +"The action that opens the screen containing the data you wish to share." +msgstr "" + +#. module: share +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "Detta bolag är inte tillåtet för den här användaren" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:526 +#, python-format +msgid "(Copy for sharing)" +msgstr "" + +#. module: share +#: field:share.wizard.result.line,newly_created:0 +msgid "Newly created" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:616 +#, python-format +msgid "Indirect sharing filter created by user %s (%s) for group %s" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:767 +#, python-format +msgid "I've shared %s with you!" +msgstr "" + +#. module: share +#: help:share.wizard,share_root_url:0 +msgid "Main access page for users that are granted shared access" +msgstr "" + +#. module: share +#: sql_constraint:res.groups:0 +msgid "The name of the group must be unique !" +msgstr "Gruppens namn måsta vara unikt !" + +#. module: share +#: model:res.groups,name:share.group_share_user +msgid "User" +msgstr "Användare" + +#. module: share +#: view:res.groups:0 +msgid "Groups" +msgstr "Grupper" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:636 +#, python-format +msgid "" +"Sorry, the current screen and filter you are trying to share are not " +"supported at the moment.\n" +"You may want to try a simpler filter." +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Use this Link" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:779 +#, python-format +msgid "Database" +msgstr "Databas" + +#. module: share +#: field:share.wizard,domain:0 +msgid "Domain" +msgstr "Domän" + +#. module: share +#: view:share.wizard:0 field:share.wizard,result_line_ids:0 +msgid "Summary" +msgstr "Sammandrag" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:493 +#, python-format +msgid "Copied access for sharing" +msgstr "" + +#. module: share +#: model:ir.actions.act_window,name:share.action_share_wizard_step1 +msgid "Share your documents" +msgstr "Dela dina dokument" + +#. module: share +#: view:share.wizard:0 +msgid "Or insert the following code where you want to embed your documents" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "" +"An e-mail notification with instructions has been sent to the following " +"people:" +msgstr "" + +#. module: share +#: model:ir.model,name:share.model_share_wizard_result_line +msgid "share.wizard.result.line" +msgstr "share.wizard.result.line" + +#. module: share +#: help:share.wizard,user_type:0 +msgid "Select the type of user(s) you would like to share data with." +msgstr "" + +#. module: share +#: field:share.wizard,view_type:0 +msgid "Current View Type" +msgstr "" + +#. module: share +#: selection:share.wizard,access_mode:0 +msgid "Can view" +msgstr "Kan se" + +#. module: share +#: selection:share.wizard,access_mode:0 +msgid "Can edit" +msgstr "Kan ändra" + +#. module: share +#: help:share.wizard,message:0 +msgid "" +"An optional personal message, to be included in the e-mail notification." +msgstr "" + +#. module: share +#: model:ir.model,name:share.model_res_users +msgid "res.users" +msgstr "res.users" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:60 +#: code:addons/share/wizard/share_wizard.py:635 +#, python-format +msgid "Sharing access could not be created" +msgstr "" + +#. module: share +#: help:res.users,share:0 +msgid "" +"External user with limited access, created only for the purpose of sharing " +"data." +msgstr "" + +#. module: share +#: model:ir.actions.act_window,name:share.action_share_wizard +#: model:ir.model,name:share.model_share_wizard +#: field:share.wizard.result.line,share_wizard_id:0 +msgid "Share Wizard" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:740 +#, python-format +msgid "Shared access created!" +msgstr "" + +#. module: share +#: model:res.groups,comment:share.group_share_user +msgid "" +"\n" +"Members of this groups have access to the sharing wizard, which allows them " +"to invite external users to view or edit some of their documents." +msgstr "" + +#. module: share +#: model:ir.model,name:share.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:778 +#: field:share.wizard.result.line,password:0 +#, python-format +msgid "Password" +msgstr "Lösenord" + +#. module: share +#: field:share.wizard,new_users:0 +msgid "Emails" +msgstr "E-post" + +#. module: share +#: field:share.wizard,embed_option_search:0 +msgid "Display search view" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:197 +#, python-format +msgid "No e-mail address configured" +msgstr "" + +#. module: share +#: field:share.wizard,message:0 +msgid "Personal Message" +msgstr "Personligt meddelande" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:763 +#, python-format +msgid "" +"The current user must have an email address configured in User Preferences " +"to be able to send outgoing emails." +msgstr "" + +#. module: share +#: field:share.wizard.result.line,login:0 +msgid "Login" +msgstr "Inloggning" + +#. module: share +#: view:res.users:0 +msgid "Regular users only (no share user)" +msgstr "" + +#. module: share +#: field:share.wizard,access_mode:0 +msgid "Access Mode" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Sharing: preparation" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:198 +#, python-format +msgid "" +"You must configure your e-mail address in the user preferences before using " +"the Share button." +msgstr "" + +#. module: share +#: help:share.wizard,access_mode:0 +msgid "Access rights to be granted on the shared documents." +msgstr "" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/share/static/src/xml/share.xml:8 +msgid "Link or embed..." +msgstr "" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/share/static/src/xml/share.xml:9 +msgid "Share with..." +msgstr "" + +#~ msgid "Share with these people (one e-mail per line)" +#~ msgstr "Dela med dessa personer (en e-post per rad)" diff --git a/addons/stock/res_config_view.xml b/addons/stock/res_config_view.xml index e760c453585..7d17d9eec50 100644 --- a/addons/stock/res_config_view.xml +++ b/addons/stock/res_config_view.xml @@ -8,10 +8,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string ="Configure Warehouse" layout="manual"> - <div class="oe_form_topbar"> + <header> <button string="Apply" type="object" name="execute"/> <button string="Cancel" special="cancel"/> - </div> + </header> <sheet layout="auto"> <separator string="Traceability" colspan="4"/> <field name="group_stock_production_lot"/> diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml index 1ba1e10ca5b..d9c8ccd8f39 100644 --- a/addons/stock/stock_view.xml +++ b/addons/stock/stock_view.xml @@ -109,19 +109,16 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="action_confirm" states="draft" string="Confirm Inventory" type="object"/> <button name="action_done" states="confirm" string="Validate Inventory" type="object"/> <button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object"/> <button name="action_cancel_inventory" states="draft,confirm,done" string="Cancel Inventory" type="object"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,confirm"/> + </header> <sheet string="Physical Inventory" layout="auto"> <group class="oe_form_header"> - <field name="name"/> + <field name="name" placeholder="Annual invetory 2013"/> <field name="date"/> <field name="company_id" groups="base.group_multi_company" widget="selection"/> <notebook colspan="4"> @@ -462,7 +459,7 @@ <field name="location_dest_id" groups="stock.group_locations"/> <field name="create_date" groups="base.group_no_one"/> <field name="date" string="Date" groups="base.group_no_one"/> - <field name="date_expected" string="Date Expected"/> + <field name="date_expected" string="Date Expected"/> <field name="state"/> </tree> </field> @@ -697,7 +694,6 @@ <field name="invoice_state"/> <field name="stock_journal_id" widget="selection"/> <field name="state"/> - <button name="action_process" states="assigned" groups="stock.group_stock_user" string="Process" type="object" icon="gtk-go-forward"/> </tree> </field> </record> @@ -709,7 +705,7 @@ <field eval="12" name="priority"/> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="draft_force_assign" states="draft" string="Confirm" type="object"/> <button name="draft_validate" states="draft" string="Confirm & Transfer" type="object"/> <!-- <button name="action_assign" states="confirmed" string="Check Availability" type="object"/> --> @@ -718,15 +714,13 @@ <button name="%(action_stock_invoice_onshipping)d" string="Create Invoice" attrs="{'invisible': ['|','|',('state','<>','done'),('invoice_state','=','invoiced'),('invoice_state','=','none')]}" type="action" /> <button name="%(act_stock_return_picking)d" string="Reverse Transfer" states="done" type="action" /> <button name="button_cancel" states="assigned,confirmed,draft" string="_Cancel"/> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,assigned,done" statusbar_colors='{"shipping_except":"red","invoice_except":"red","waiting_date":"blue"}'/> - </div> - </div> + <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,assigned,done" statusbar_colors='{"shipping_except":"red","invoice_except":"red","waiting_date":"blue"}'/> + </header> <sheet string="Internal Picking List" layout="auto"> <group colspan="4" col="6"> <group colspan="4" col="4"> <field name="name" readonly="1"/> - <field name="origin"/> + <field name="origin" placeholder="PO0032"/> <field name="partner_id" on_change="onchange_partner_in(partner_id)" colspan="4"/> <field name="invoice_state" string="Invoice Control"/> <field name="backorder_id" readonly="1"/> @@ -835,7 +829,7 @@ <field name="company_id" groups="base.group_multi_company" widget="selection"/> </page> <page string="Notes"> - <field colspan="4" name="note" nolabel="1"/> + <field colspan="4" name="note" nolabel="1" placeholder="Quality test ok..."/> </page> </notebook> </sheet> @@ -929,18 +923,18 @@ <field name="type">form</field> <field name="arch" type="xml"> <data> - <xpath expr="/form/div[@class='oe_form_topbar']/button[@name='%(act_stock_return_picking)d']" position="replace"> + <xpath expr="/form/header/button[@name='%(act_stock_return_picking)d']" position="replace"> <button name="%(report_picking_list_out)d" string="Print Delivery Slip" type="action" states="done"/> <button name="%(act_stock_return_picking)d" string="Return Products" states="done" type="action" /> </xpath> - <xpath expr="/form/div[@class='oe_form_topbar']/button[@name='draft_validate']" position="replace"> + <xpath expr="/form/header/button[@name='draft_validate']" position="replace"> <button name="draft_validate" states="draft" string="Confirm & Deliver" type="object"/> <button name="action_assign" states="confirmed" string="Check Availability" type="object"/> </xpath> - <xpath expr="/form/div[@class='oe_form_topbar']/button[@name='action_process']" position="replace"> + <xpath expr="/form/header/button[@name='action_process']" position="replace"> <button name="action_process" states="assigned" string="Deliver" type="object" icon="gtk-go-forward"/> </xpath> - <xpath expr="/form/div[@class='oe_form_topbar']/div[@class='oe_right']/field[@name='state']" position="replace"> + <xpath expr="/form/header/div[@class='oe_right']/field[@name='state']" position="replace"> <field name="state" nolabel="1" readonly="1" widget="statusbar" statusbar_visible="draft,confirmed,assigned,done" statusbar_colors='{"auto":"blue", "confirmed":"blue"}'/> </xpath> <xpath expr="/form/sheet/group/group/field[@name='partner_id']" position="replace"> @@ -948,7 +942,7 @@ </xpath> <xpath expr="/form/sheet" position="after"> <div class="oe_form_bottom"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </xpath> </data> @@ -1039,8 +1033,6 @@ <field name="invoice_state"/> <field name="stock_journal_id" widget="selection"/> <field name="state"/> - <button name="action_process" states="assigned" string="Process" type="object" icon="gtk-go-forward"/> - <button name="button_cancel" states="assigned,confirmed,draft" string="Cancel" icon="gtk-cancel" confirm="This operation will cancel the shipment. Do you want to continue?" /> </tree> </field> </record> @@ -1051,13 +1043,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <data> - <xpath expr="/form/div[@class='oe_form_topbar']/button[@name='%(act_stock_return_picking)d']" position="replace"> + <xpath expr="/form/header/button[@name='%(act_stock_return_picking)d']" position="replace"> <button name="%(act_stock_return_picking)d" string="Return Products" states="done" type="action" /> </xpath> - <xpath expr="/form/div[@class='oe_form_topbar']/button[@name='draft_validate']" position="replace"> + <xpath expr="/form/header/button[@name='draft_validate']" position="replace"> <button name="draft_validate" states="draft" string="Confirm & Receive" type="object"/> </xpath> - <xpath expr="/form/div[@class='oe_form_topbar']/button[@name='action_process']" position="replace"> + <xpath expr="/form/header/button[@name='action_process']" position="replace"> <button name="action_process" states="assigned" string="Receive" type="object"/> </xpath> <xpath expr="/form/sheet/group/group/field[@name='partner_id']" position="replace"> @@ -1065,13 +1057,12 @@ </xpath> <xpath expr="/form/sheet" position="after"> <div class="oe_form_bottom"> - <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/> + <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/> </div> </xpath> </data> </field> </record> - <record id="view_picking_in_search" model="ir.ui.view"> <field name="name">stock.picking.in.search</field> <field name="model">stock.picking.in</field> @@ -1191,16 +1182,13 @@ <field eval="4" name="priority"/> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="action_confirm" states="draft" string="Process Later" type="object"/> <button name="action_done" states="draft,assigned,confirmed" string="Process Now" type="object"/> <button name="force_assign" states="confirmed" string="Set Available" type="object"/> <button name="action_cancel" states="assigned,confirmed" string="_Cancel" type="object"/> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,confirmed,assigned,done" statusbar_colors='{"waiting":"blue","confirmed":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,confirmed,assigned,done" statusbar_colors='{"waiting":"blue","confirmed":"blue"}'/> + </header> <sheet string="Stock Moves" layout="auto"> <group colspan="4" col="7"> <field name="product_id" on_change="onchange_product_id(product_id,location_id,location_dest_id, False)"/> @@ -1349,8 +1337,6 @@ states="draft,assigned,confirmed,done"/> <field name="date" groups="base.group_no_one"/> <field name="state"/> - <button name="action_assign" states="confirmed" string="Set Available" type="object" icon="gtk-yes"/> - <button name="action_done" string="Process" type="object" states="confirmed,assigned" icon="gtk-go-forward"/> </tree> </field> </record> @@ -1367,7 +1353,6 @@ <field name="product_qty" /> <field name="product_uom" string="Unit of Measure" groups="product.group_uom"/> <field name="date" groups="base.group_no_one" /> - <button name="action_done" states="confirmed,assigned" string="Process" type="object" icon="gtk-go-forward"/> </tree> </field> </record> @@ -1380,16 +1365,13 @@ <field eval="6" name="priority"/> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="action_confirm" states="draft" string="Process Later" type="object"/> <button name="force_assign" states="confirmed" string="Set Available" type="object"/> <button name="%(action_partial_move_server)d" string="Process" type="action" states="assigned"/> <button name="action_cancel" states="assigned,confirmed" string="_Cancel" type="object"/> - <div class="oe_right"> - <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,confirmed,assigned,done" statusbar_colors='{"waiting":"blue","confirmed":"blue"}'/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,confirmed,assigned,done" statusbar_colors='{"waiting":"blue","confirmed":"blue"}'/> + </header> <sheet string="Receive Products" layout="auto"> <group colspan="4" col="7"> <field name="product_id" on_change="onchange_product_id(product_id,location_id,location_dest_id, False)"/> diff --git a/addons/stock_location/procurement_pull.py b/addons/stock_location/procurement_pull.py index 33168a53e20..ca397f7fa2d 100644 --- a/addons/stock_location/procurement_pull.py +++ b/addons/stock_location/procurement_pull.py @@ -115,7 +115,8 @@ class procurement_order(osv.osv): if proc.move_id: move_obj.write(cr, uid, [proc.move_id.id], {'location_id':proc.location_id.id}) - self.write(cr, uid, [proc.id], {'state':'running', 'message':_('Pulled from another location via procurement %d')%proc_id}) + self.write(cr, uid, [proc.id], {'state':'running', 'message':_('Pulled from another location via procurement %d') % proc_id}) + self.running_send_note(cr, uid, [proc.id], context=context) # trigger direct processing (the new procurement shares the same planned date as the original one, which is already being processed) wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr) diff --git a/addons/stock_location/stock_location_view.xml b/addons/stock_location/stock_location_view.xml index 94a9feb9d57..5f2bacd565f 100644 --- a/addons/stock_location/stock_location_view.xml +++ b/addons/stock_location/stock_location_view.xml @@ -51,7 +51,7 @@ </tree> <form string="Pulled Paths"> <separator string="Conditions" colspan="4"/> - <field name="name" colspan="4"/> + <field name="name" colspan="4" placeholder="Fulfill needs on location X from location Y "/> <field name="location_id"/> <separator string="Action Type" colspan="4"/> <field name="type_proc"/> @@ -81,7 +81,7 @@ </tree> <form string="Pushed flows"> <group colspan="4" col="6"> - <field name="name"/> + <field name="name" placeholder="When receiving at location X, move to location Y"/> <field name="location_from_id"/> <field name="location_dest_id"/> <field name="auto"/> diff --git a/addons/stock_planning/stock_planning_view.xml b/addons/stock_planning/stock_planning_view.xml index 7a4cef952bf..1b5cd953027 100644 --- a/addons/stock_planning/stock_planning_view.xml +++ b/addons/stock_planning/stock_planning_view.xml @@ -13,14 +13,11 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="button_open" string="Open" states="draft" type="object"/> <button name="button_close" string="Close" states="open" type="object"/> - <div class="oe_right"> - <field name="state" select="1" widget="statusbar" nolabel="1" statusbar_visible="draft,open"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,open"/> + </header> <sheet string="Stock Periods" layout="auto"> <group class="oe_form_header"> <field name="name" colspan="2"/> @@ -85,13 +82,10 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="action_validate" string="Approve" states="draft" type="object" /> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar"/> + </header> <sheet string="Stock and Sales Forecast" layout="auto"> <group colspan = "4" col = "4" class="oe_form_header"> <group colspan = "2" col="2" > diff --git a/addons/subscription/subscription_view.xml b/addons/subscription/subscription_view.xml index 13ebe096843..b4c992dcbc4 100644 --- a/addons/subscription/subscription_view.xml +++ b/addons/subscription/subscription_view.xml @@ -14,15 +14,12 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="set_process" states="draft" string="Process" type="object"/> <button name="set_done" states="running" string="Stop" type="object"/> <button name="set_draft" states="done" string="Set to Draft" type="object"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,running"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,running"/> + </header> <sheet string="Subscriptions" layout="auto"> <group col="6" colspan="4" class="oe_form_header"> <field name="name" select="1"/> @@ -67,9 +64,6 @@ <field name="active"/> <field name="user_id" select="1"/> <field name="state"/> - <button name="set_process" states="draft" string="Process" type="object" icon="terp-check"/> - <button name="set_done" states="running" string="Done" type="object" icon="terp-gtk-stop"/> - <button name="set_draft" states="done" string="Set to Draft" type="object" icon="terp-document-new"/> </tree> </field> </record> diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml index e8f02f6d3e0..96dc60ff447 100644 --- a/addons/survey/survey_view.xml +++ b/addons/survey/survey_view.xml @@ -19,15 +19,12 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="survey_open" string="Open" states="cancel,close" type="object"/> <button name="survey_close" string="Close" states="open" type="object"/> <button name="survey_cancel" string="Cancel" states="open" type="object"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="open,close"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="open,close"/> + </header> <sheet string="Survey" layout="auto"> <field name="title" select="1"/> <group col="6" colspan="6"> @@ -1060,16 +1057,13 @@ <field name="type">form</field> <field name="arch" type="xml"> <form layout="manual"> - <div class="oe_form_topbar"> + <header> <button name="survey_req_draft" string="Set to Draft" states="cancel,done" type="object"/> <button name="survey_req_waiting_answer" string="Waiting Answer" states="draft" type="object"/> <button name="survey_req_done" string="Done" states="waiting_answer" type="object"/> <button name="survey_req_cancel" string="Cancel" states="waiting_answer" type="object"/> - <div class="oe_right"> - <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,waiting_answer"/> - </div> - <div class="oe_clear"/> - </div> + <field name="state" widget="statusbar" statusbar_visible="draft,waiting_answer"/> + </header> <sheet string="Survey Request" layout="auto"> <group class="oe_form_header"> <field name="date_deadline"/> diff --git a/addons/web_livechat/i18n/sv.po b/addons/web_livechat/i18n/sv.po new file mode 100644 index 00000000000..dd3ae799443 --- /dev/null +++ b/addons/web_livechat/i18n/sv.po @@ -0,0 +1,28 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 01:37+0100\n" +"PO-Revision-Date: 2012-06-04 15:38+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n" +"X-Generator: Launchpad (build 15353)\n" + +#. module: web_livechat +#: sql_constraint:publisher_warranty.contract:0 +msgid "That contract is already registered in the system." +msgstr "Det kontraktet har redan registrerats i systemet." + +#. module: web_livechat +#: model:ir.model,name:web_livechat.model_publisher_warranty_contract +msgid "publisher_warranty.contract" +msgstr "publisher_warranty.contract" diff --git a/addons/web_uservoice/i18n/sv.po b/addons/web_uservoice/i18n/sv.po new file mode 100644 index 00000000000..cf2af514acf --- /dev/null +++ b/addons/web_uservoice/i18n/sv.po @@ -0,0 +1,23 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 01:37+0100\n" +"PO-Revision-Date: 2012-06-04 15:37+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n" +"X-Generator: Launchpad (build 15353)\n" + +#. openerp-web +#: /home/odo/repositories/addons/trunk/web_uservoice/static/src/xml/web_uservoice.xml:6 +msgid "feedback" +msgstr "återkoppling" |
