[MERGE] trunk

bzr revid: al@openerp.com-20120608170005-exk83se779u3py4x
This commit is contained in:
Antony Lesuisse
2012-06-08 19:00:05 +02:00
268 changed files with 36235 additions and 3904 deletions
+2 -1
View File
@@ -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):
+59 -10
View File
@@ -201,17 +201,18 @@ class account_invoice(osv.osv):
'state': fields.selection([
('draft','Draft'),
('cancel','Cancelled'),
('proforma','Pro-forma'),
('proforma2','Pro-forma'),
('open','Open'),
('paid','Paid')
],'Status', select=True, readonly=True,
('paid','Paid'),
('cancel','Cancelled'),
],'State', select=True, readonly=True,
help=' * The \'Draft\' state is used when a user is encoding a new and unconfirmed Invoice. \
\n* The \'Pro-forma\' when invoice is in Pro-forma state,invoice does not have an invoice number. \
\n* The \'Open\' state is used when user create invoice,a invoice number is generated.Its in open state till user does not pay invoice. \
\n* The \'Paid\' state is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled. \
\n* The \'Cancelled\' state is used when user cancel invoice.'),
'sent': fields.boolean('Sent', readonly=True, help="It indicates that the invoice has been sent."),
'date_invoice': fields.date('Invoice Date', readonly=True, states={'draft':[('readonly',False)]}, select=True, help="Keep empty to use the current date"),
'date_due': fields.date('Due Date', states={'paid':[('readonly',True)], 'open':[('readonly',True)], 'close':[('readonly',True)]}, select=True,
help="If you use payment terms, the due date will be computed automatically at the generation "\
@@ -286,6 +287,7 @@ class account_invoice(osv.osv):
'check_total': 0.0,
'internal_number': False,
'user_id': lambda s, cr, u, c: u,
'sent': False,
}
_sql_constraints = [
('number_uniq', 'unique(number, company_id, journal_id, type)', 'Invoice Number must be unique per Company!'),
@@ -366,6 +368,47 @@ class account_invoice(osv.osv):
else:
raise orm.except_orm(_('Unknown Error'), str(e))
def invoice_print(self, cr, uid, ids, context=None):
'''
This function prints the invoice and mark it as sent, so that we can see more easily the next step of the workflow
'''
assert len(ids) == 1, 'This option should only be used for a single id at a time'
self.write(cr, uid, ids, {'sent': True}, context=context)
datas = {
'ids': ids,
'model': 'account.invoice',
'form': self.read(cr, uid, ids[0], context=context)
}
return {
'type': 'ir.actions.report.xml',
'report_name': 'account.invoice',
'datas': datas,
'nodestroy' : True
}
def action_invoice_sent(self, cr, uid, ids, context=None):
'''
This function opens a window to compose an email, with the edi invoice template message loaded by default
'''
mod_obj = self.pool.get('ir.model.data')
template = mod_obj.get_object_reference(cr, uid, 'account', 'email_template_edi_invoice')
template_id = template and template[1] or False
res = mod_obj.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form')
res_id = res and res[1] or False
ctx = dict(context, active_model='account.invoice', active_id=ids[0])
ctx.update({'mail.compose.template_id': template_id})
return {
'view_type': 'form',
'view_mode': 'form',
'res_model': 'mail.compose.message',
'views': [(res_id, 'form')],
'view_id': res_id,
'type': 'ir.actions.act_window',
'target': 'new',
'context': ctx,
'nodestroy': True,
}
def confirm_paid(self, cr, uid, ids, context=None):
if context is None:
context = {}
@@ -604,6 +647,7 @@ class account_invoice(osv.osv):
'move_name':False,
'internal_number': False,
'period_id': False,
'sent': False,
})
if 'date_invoice' not in default:
default.update({
@@ -938,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):
@@ -1002,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):
@@ -1232,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
@@ -1256,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)
@@ -1669,4 +1708,14 @@ class res_partner(osv.osv):
res_partner()
class mail_message(osv.osv):
_name = 'mail.message'
_inherit = 'mail.message'
def _postprocess_sent_message(self, cr, uid, message, context=None):
if message.model == 'account.invoice':
self.pool.get('account.invoice').write(cr, uid, [message.res_id], {'sent':True}, context=context)
return super(mail_message, self)._postprocess_sent_message(cr, uid, message=message, context=context)
mail_message()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+31 -36
View File
@@ -37,7 +37,7 @@
<field name="name"/>
<field name="account_id" groups="account.group_account_user"/>
<field name="quantity"/>
<field name="uos_id"/>
<field name="uos_id" groups="product.group_uom"/>
<field name="price_unit"/>
<field name="discount"/>
<field name="price_subtotal"/>
@@ -56,10 +56,10 @@
<label string="Quantity" for="quantity" align="1.0"/>
<group colspan="1" col="2">
<field name="quantity" nolabel="1"/>
<field name="uos_id" on_change="uos_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)" nolabel="1"/>
<field name="uos_id" on_change="uos_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)" nolabel="1" groups="product.group_uom"/>
</group>
<field name="price_unit"/>
<field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '&lt;&gt;', 'view')]" name="account_id" on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/>
<field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '&lt;&gt;', 'view')]" name="account_id" on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)" groups="account.group_account_user"/>
<field name="discount"/>
<field domain="[('type','&lt;&gt;','view'), ('company_id', '=', parent.company_id), ('parent_id', '!=', False)]" name="account_analytic_id" groups="analytic.group_analytic_accounting"/>
<field name="company_id" groups="base.group_multi_company" readonly="1"/>
@@ -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">
<button name="invoice_open" states="draft,proforma2" string="Approve"/>
<button name="%(action_account_invoice_refund)d" type='action' string='Refund' states='open,paid'/>
<button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','&lt;&gt;','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."/>
<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"/>
<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>
<button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','&lt;&gt;','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."/>
<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,25 +256,24 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form layout="manual">
<div class="oe_form_topbar">
<button name="invoice_proforma2" states="draft" string="PRO-FORMA" groups="account.group_proforma_invoices"/>
<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"/>
<button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','&lt;&gt;','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"/>
<button name="%(action_account_invoice_refund)d" type='action' string='Refund' states='open,paid'/>
<button name="action_cancel_draft" states="cancel" string="Reset to Draft" type="object"/>
<button name="invoice_proforma2" states="draft" string="PRO-FORMA" groups="account.group_proforma_invoices"/>
<button name="%(action_account_invoice_refund)d" type='action' string='Refund Invoice' states='paid'/>
<button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" groups="base.group_no_one"/>
<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>
<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','&lt;&gt;','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"/-->
<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"/>
<field name="journal_id" groups="account.group_account_user" on_change="onchange_journal_id(journal_id, context)" widget="selection"/>
<field name="number"/>
<field name="type" invisible="1"/>
<field name="currency_id" width="50"/>
<field name="currency_id" width="50" groups="base.group_multi_company"/>
<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"/>
<newline/>
<field string="Customer" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" groups="base.group_user" context="{'search_default_customer': 1}" options='{"quick_create": false}' domain="[('customer', '=', True)]"/>
@@ -290,7 +284,8 @@
<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">
<page string="Invoice">
@@ -316,9 +311,9 @@
<field name="amount_untaxed"/>
<label string="" colspan="2"/>
<field name="amount_tax"/>
<field name="reconciled"/>
<field name="reconciled" groups="base.group_no_one"/>
<field name="amount_total"/>
<field name="residual"/>
<field name="residual" groups="account.group_account_user"/>
</group>
</page>
<page string="Other Info">
@@ -328,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"/>
@@ -351,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>
+1 -1
View File
@@ -21,7 +21,7 @@
string="Invoices"
attachment="(object.state in ('open','paid')) and ('INV'+(object.number or '').replace('/','')+'.pdf')"
usage="default"
multi="True"/>
/>
<report id="account_transfers" model="account.transfer" name="account.transfer" string="Transfers" xml="account/report/transfer.xml" xsl="account/report/transfer.xsl"/>
<report auto="False" id="account_intracom" menu="False" model="account.move.line" name="account.intracom" string="IntraCom"/>
+18 -44
View File
@@ -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"/>
+1 -1
View File
@@ -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>
+11
View File
@@ -21,6 +21,7 @@
from osv import fields, osv, orm
from edi import EDIMixin
from edi.models import edi
INVOICE_LINE_EDI_STRUCT = {
'name': True,
@@ -71,6 +72,16 @@ INVOICE_EDI_STRUCT = {
class account_invoice(osv.osv, EDIMixin):
_inherit = 'account.invoice'
def action_invoice_sent(self, cr, uid, ids, context=None):
""""Override this method to add a link to mail"""
if context is None:
context = {}
invoice_objs = self.browse(cr, uid, ids, context=context)
edi_token = self.pool.get('edi.document').export_edi(cr, uid, invoice_objs, context = context)[0]
web_root_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
ctx = dict(context, edi_web_url_view=edi.EDI_VIEW_WEB_URL % (web_root_url, cr.dbname, edi_token))
return super(account_invoice, self).action_invoice_sent(cr, uid, ids, context=ctx)
def edi_export(self, cr, uid, records, edi_struct=None, context=None):
"""Exports a supplier or customer invoice"""
edi_struct = dict(edi_struct or INVOICE_EDI_STRUCT)
+15 -11
View File
@@ -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:23+0000\n"
"Last-Translator: Raphael Collet (OpenERP) <Unknown>\n"
"PO-Revision-Date: 2012-06-06 10:35+0000\n"
"Last-Translator: Budi Iskandar <Unknown>\n"
"Language-Team: Indonesian <id@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 04:49+0000\n"
"X-Generator: Launchpad (build 15225)\n"
"X-Launchpad-Export-Date: 2012-06-07 04:41+0000\n"
"X-Generator: Launchpad (build 15353)\n"
#. module: account
#: view:account.invoice.report:0
@@ -1301,6 +1301,8 @@ msgid ""
"You can not use this general account in this journal, check the tab 'Entry "
"Controls' on the related journal !"
msgstr ""
"Anda tidak bisa menggunakan akun umum pada jurnal ini, cek tab \"Entry "
"Controls\" pada jurnal sesuai !"
#. module: account
#: field:account.move.line.reconcile,trans_nbr:0
@@ -1337,7 +1339,7 @@ msgstr "Lainnya"
#. module: account
#: view:account.subscription:0
msgid "Draft Subscription"
msgstr ""
msgstr "Draft Berlangganan"
#. module: account
#: view:account.account:0
@@ -1411,7 +1413,7 @@ msgstr "Pilih periode awal dan akhir"
#. module: account
#: model:account.financial.report,name:account.account_financial_report_profitandloss0
msgid "Profit and Loss"
msgstr ""
msgstr "Laba/Rugi"
#. module: account
#: model:ir.model,name:account.model_account_account_template
@@ -1558,7 +1560,7 @@ msgstr ""
#. module: account
#: view:account.entries.report:0
msgid "# of Entries "
msgstr ""
msgstr "# entris "
#. module: account
#: help:account.fiscal.position,active:0
@@ -1566,6 +1568,8 @@ msgid ""
"By unchecking the active field, you may hide a fiscal position without "
"deleting it."
msgstr ""
"Dengan me-unchek field Active, And a dapat menyembunyikan fiscal position "
"tampa menghapusnya."
#. module: account
#: model:ir.model,name:account.model_temp_range
@@ -1643,7 +1647,7 @@ msgstr "Pencarian statement Bank"
#. module: account
#: view:account.move.line:0
msgid "Unposted Journal Items"
msgstr ""
msgstr "Jurnal item belum di Post"
#. module: account
#: view:account.chart.template:0
@@ -1751,7 +1755,7 @@ msgstr "Penagihan"
#: code:addons/account/report/account_partner_balance.py:115
#, python-format
msgid "Unknown Partner"
msgstr ""
msgstr "Partner Lain-lain"
#. module: account
#: field:account.tax.code,sum:0
@@ -1763,7 +1767,7 @@ msgstr "Jumlah Setahun"
#, python-format
msgid ""
"You selected an Unit of Measure which is not compatible with the product."
msgstr ""
msgstr "Anda Memilih satuan yang tidak kompatibel dengan productnya"
#. module: account
#: view:account.change.currency:0
@@ -1784,7 +1788,7 @@ msgstr ""
#. module: account
#: view:account.analytic.account:0
msgid "Pending Accounts"
msgstr ""
msgstr "Akun Tunda"
#. module: account
#: view:account.tax.template:0
+65 -61
View File
@@ -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-15 06:17+0000\n"
"PO-Revision-Date: 2012-06-08 01:32+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-16 04:50+0000\n"
"X-Generator: Launchpad (build 15247)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:39+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: account
#: view:account.invoice.report:0
@@ -38,7 +38,7 @@ msgstr "その他の設定"
msgid ""
"Determine the display order in the report 'Accounting \\ Reporting \\ "
"Generic Reporting \\ Taxes \\ Taxes Report'"
msgstr "会計 \\ レポート \\ 一般的なレポート \\ 税金 \\ 税金レポート にあるレポートの表示順を決定して下さい。"
msgstr "会計 \\ レポート \\ 一般的なレポート \\ 税金 \\ 税金レポート にあるレポートの表示順を決定します。"
#. module: account
#: view:account.move.reconcile:0
@@ -201,8 +201,8 @@ msgid ""
"invoice) to create analytic entries, OpenERP will look for a matching "
"journal of the same type."
msgstr ""
"分析仕訳帳のタイプを与えて下さい。分析エントリーを作成するためのドキュメント(例えば請求書)のために必要な場合、OpenERPは同じタイプの一致する仕訳帳"
"を探します。"
"分析仕訳帳のタイプを与えます。分析エントリーを作成するためのドキュメント(例えば請求書)のために必要な場合、OpenERPは同じタイプの一致する仕訳帳を探"
"します。"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_tax_template_form
@@ -1086,7 +1086,7 @@ msgstr "並べ替え順"
#. module: account
#: help:account.fiscalyear.close,fy_id:0
msgid "Select a Fiscal year to close"
msgstr "閉じる会計年度を選択して下さい。"
msgstr "閉じるには会計年度を選択します。"
#. module: account
#: help:account.account.template,user_type:0
@@ -1476,7 +1476,7 @@ msgstr "桁数"
#. module: account
#: field:account.journal,entry_posted:0
msgid "Skip 'Draft' State for Manual Entries"
msgstr "手動入力のため、ドラフト状態をスキップして下さい。"
msgstr "手動入力のため、ドラフト状態をスキップします。"
#. 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
@@ -1674,12 +1674,12 @@ msgstr "アカウントタイプ別売上"
msgid ""
"Cancel Invoice: Creates the refund invoice, validate and reconcile it to "
"cancel the current invoice."
msgstr "請求書のキャンセル:現在の請求書をキャンセルするために返金請求書を作成、検証、消し込みして下さい。"
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
@@ -2425,7 +2425,7 @@ msgstr "基本コード"
#. module: account
#: help:account.invoice.tax,sequence:0
msgid "Gives the sequence order when displaying a list of invoice tax."
msgstr "請求書の税金のリストを表示する時に、並べ順を指定して下さい。"
msgstr "請求書の税金のリストを表示する時に、並べ順を与えます。"
#. module: account
#: field:account.tax,base_sign:0
@@ -2445,9 +2445,9 @@ msgid ""
"useful because it enables you to preview at any time the tax that you owe at "
"the start and end of the month or quarter."
msgstr ""
"このメニューは請求書または支払いに基づく消費税申告を印刷します。ひとつあるいは複数の会計年度を選択して下さい。税金申請のために要求される情報は請求書(また"
"は支払い、幾つかの国の)からOpenERPによって自動的に生成されます。このデータはリアルタイムで更新されます。月あるいは四半期の開始と終了において、支払"
"うべき税金をいつでもレビューできるため非常に便利です。"
"このメニューは請求書または支払いに基づく消費税申告を印刷します。ひとつあるいは複数の会計年度を選択します。税金申請のために要求される情報は請求書(または支"
"払い、幾つかの国の)からOpenERPによって自動的に生成されます。このデータはリアルタイムで更新されます。月あるいは四半期の開始と終了において、支払うべ"
"き税金をいつでもレビューできるため非常に便利です。"
#. module: account
#: selection:account.move.line,centralisation:0
@@ -2615,7 +2615,7 @@ msgstr "銀行消し込み"
#. module: account
#: report:account.invoice:0
msgid "Disc.(%)"
msgstr "ディスク(%)"
msgstr "割引(%)"
#. module: account
#: report:account.general.ledger:0
@@ -2722,8 +2722,7 @@ msgid ""
"Note that journal entries that are automatically created by the system are "
"always skipping that state."
msgstr ""
"新しい仕訳帳エントリーがドラフト状態を通り抜けて、代わりに手動での検証を行わず直接記帳状態に行くことを望まない場合は、このボックスをチェックして下さい。"
"\n"
"新しい仕訳帳エントリーがドラフト状態を通り抜けて、代わりに手動での検証を行わず直接記帳状態に行くことを望まない場合は、このボックスをチェックします。\n"
"システムにより自動的に作成された仕訳帳エントリーはいつもこの状態をスキップすることに注意して下さい。"
#. module: account
@@ -2847,7 +2846,7 @@ msgstr "費用勘定"
#. module: account
#: help:account.invoice,period_id:0
msgid "Keep empty to use the period of the validation(invoice) date."
msgstr "検証(請求書)日の期間を使うために空のままにして下さい。"
msgstr "検証(請求書)日の期間を使うために空のままにします。"
#. module: account
#: help:account.bank.statement,account_id:0
@@ -3162,7 +3161,7 @@ msgid ""
" 'Unreconciled' will copy only the journal items that were unreconciled on "
"the first day of the new fiscal year."
msgstr ""
"このタイプの全てのアカウントの年間の仕訳帳エントリーの終わりを生成するのに使用する方法を、ここで設定して下さい。\n"
"このタイプの全てのアカウントの年間の仕訳帳エントリーの終わりを生成するのに使用する方法を、ここで設定します。\n"
"\n"
" \"なし\" は何も行われないことを意味します。\n"
" \"残高\"は一般的には現金のアカウントのために使用されます。\n"
@@ -3179,7 +3178,7 @@ msgstr "その会計年度の終わりの仕訳帳が定義されていません
#: view:account.tax:0
#: view:account.tax.template:0
msgid "Keep empty to use the expense account"
msgstr "費用勘定を使うためには空のままとして下さい。"
msgstr "費用勘定を使うためには空のままとします。"
#. module: account
#: field:account.aged.trial.balance,journal_ids:0
@@ -4118,7 +4117,7 @@ msgstr "貸借対照表(負債勘定)"
#. module: account
#: help:account.invoice,date_invoice:0
msgid "Keep empty to use the current date"
msgstr "現在日付を利用するには空のままとして下さい。"
msgstr "現在日付を利用するには空のままとします。"
#. module: account
#: field:account.invoice,tax_line:0
@@ -4327,8 +4326,8 @@ msgid ""
"you want to generate accounts of this template only when loading its child "
"template."
msgstr ""
"テンプレートから勘定科目表を生成するウィザードの中でこのテンプレートを積極的に使わないのであれば、Falseを設定して下さい。これは子のテンプレートをロー"
"ドするときだけ、このテンプレートのアカウントを生成するときに役立ちます。"
"テンプレートから勘定科目表を生成するウィザードの中でこのテンプレートを積極的に使わないのであれば、Falseを設定します。これは子のテンプレートをロードし"
"た時のみでこのテンプレートのアカウントを生成したい時に役立ちます。"
#. module: account
#: view:account.use.model:0
@@ -4445,7 +4444,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
@@ -4792,7 +4791,7 @@ msgstr "会計士"
msgid ""
"From this view, have an analysis of your treasury. It sums the balance of "
"every accounting entries made on liquidity accounts per period."
msgstr "このビューから財務分析を行って下さい。これは期間毎に流動資産アカウント上に作られた全ての会計エントリーの残高を合計します。"
msgstr "このビューから財務分析を行います。これは期間毎に流動資産アカウント上に作られた全ての会計エントリーの残高を合計します。"
#. module: account
#: field:account.journal,group_invoice_lines:0
@@ -5172,7 +5171,7 @@ msgstr "取引"
#: help:account.tax.template,ref_tax_code_id:0
#: help:account.tax.template,tax_code_id:0
msgid "Use this code for the VAT declaration."
msgstr "消費税申請にこのコードを使って下さい。"
msgstr "消費税申請にこのコードを使います。"
#. module: account
#: field:account.partner.reconcile.process,progress:0
@@ -5220,7 +5219,7 @@ msgstr "エントリー制御"
#: view:account.analytic.chart:0
#: view:project.account.analytic.line:0
msgid "(Keep empty to open the current situation)"
msgstr "(現在の状態を開くために空のままとして下さい)"
msgstr "(現在の状態を開くために空のままとします)"
#. module: account
#: field:account.analytic.balance,date1:0
@@ -5300,7 +5299,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 +5591,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 +5887,7 @@ msgstr "サブスクリプション期間中"
#. module: account
#: report:account.invoice:0
msgid "Fiscal Position Remark :"
msgstr "会計ポジション注釈:"
msgstr "会計ポジションの注釈:"
#. module: account
#: view:analytic.entries.report:0
@@ -5954,7 +5953,7 @@ msgstr ""
#. module: account
#: view:account.invoice:0
msgid "(keep empty to use the current period)"
msgstr "(今期を使う場合は空のままとして下さい)"
msgstr "(現在の期間を使う場合は空のままとします)"
#. module: account
#: model:process.transition,note:account.process_transition_supplierreconcilepaid0
@@ -6465,7 +6464,7 @@ msgstr "エントリー: "
#. module: account
#: view:account.use.model:0
msgid "Create manual recurring entries in a chosen journal."
msgstr "選択された仕訳帳の中に手動で定期エントリーを作成して下さい。"
msgstr "選択された仕訳帳の中に手動の定期エントリーを作成します。"
#. module: account
#: help:res.partner.bank,currency_id:0
@@ -6941,8 +6940,8 @@ msgid ""
"accounting application of OpenERP, journals and accounts will be created "
"automatically based on these data."
msgstr ""
"会社の銀行口座を設定して、そしてレポートフッターに現れるべきそれを選択して下さい。リストビューの中の銀行を並べ替えることが出来ます。OpenERPの会計ア"
"プリケーションを使用する場合は、仕訳帳とアカウントはそれらのデータを基に自動的に作成されます。"
"会社の銀行口座を設定して、そしてレポートフッターに現れるべきそれを選択します。リストビューの中の銀行を並べ替えることが出来ます。OpenERPの会計アプリ"
"ケーションを使用する場合は、仕訳帳とアカウントはそれらのデータを基に自動的に作成されます。"
#. module: account
#: model:process.transition,note:account.process_transition_invoicemanually0
@@ -7001,7 +7000,7 @@ msgstr "税金:"
#. module: account
#: help:account.tax,amount:0
msgid "For taxes of type percentage, enter % ratio between 0-1."
msgstr "税金はパーセンテージタイプのため、0から1の間の%比率を入力して下さい。"
msgstr "税金はパーセンテージタイプのため、0から1の間の%比率を入力します。"
#. module: account
#: model:ir.actions.act_window,help:account.action_subscription_form
@@ -7024,7 +7023,7 @@ msgstr "財務レポートの階層"
#: view:analytic.entries.report:0
#: field:analytic.entries.report,product_uom_id:0
msgid "Product UOM"
msgstr "製品単位"
msgstr "製品の単位"
#. module: account
#: model:ir.actions.act_window,help:account.action_view_bank_statement_tree
@@ -7125,7 +7124,7 @@ msgid ""
"You can search for individual account entries through useful information. To "
"search for account entries, open a journal, then select a record line."
msgstr ""
"有益な情報を介して個別のアカウントエントリーのための検索ができます。アカウントエントリーの検索のためには仕訳帳を開き、そしてレコード行を選択して下さい。"
"有益な情報を介して個別のアカウントエントリーのための検索ができます。アカウントエントリーの検索のためには仕訳帳を開き、そしてレコード行を選択します。"
#. module: account
#: view:account.entries.report:0
@@ -7135,7 +7134,7 @@ msgstr "記帳済エントリー"
#. module: account
#: help:account.payment.term.line,value_amount:0
msgid "For percent enter a ratio between 0-1."
msgstr "パーセントは0から1までの比率を入力して下さい。"
msgstr "パーセントは0から1までの比率を入力します。"
#. module: account
#: report:account.invoice:0
@@ -7183,8 +7182,7 @@ msgid ""
"new counterpart but will share the same counterpart. This is used in fiscal "
"year closing."
msgstr ""
"この仕訳帳の各エントリーは新しい相手方を作成しないが、同じ相手方を共有することを決定するために、このボックスをチェックして下さい。これは会計年度決算時に使"
"われます。"
"この仕訳帳の各エントリーが新しい相手方を作成せずに同じ相手方を共有すると決めるには、このボックスをチェックします。これは会計年度決算時に使われます。"
#. module: account
#: field:account.bank.statement,closing_date:0
@@ -7328,14 +7326,14 @@ msgid ""
"Tax related to this account and the counter-part \"Account Payable\"."
msgstr ""
"このビューはOpenERPで大量のエントリーを記録するために会計士によって使用されます。仕入先請求書を記録することを望む場合、費用勘定の行を記録することに"
"より開始して下さい。OpenERPは自動的にこのアカウントと相手方の買掛金に関連した税金を提案します"
"より開始します。OpenERPは自動的にこのアカウントと相手方の買掛金に関連した税金を提案します。"
#. module: account
#: view:account.invoice.line:0
#: field:account.invoice.tax,invoice_id:0
#: model:ir.model,name:account.model_account_invoice_line
msgid "Invoice Line"
msgstr "請求行"
msgstr "請求書行"
#. module: account
#: view:account.invoice.report:0
@@ -7590,7 +7588,7 @@ msgstr "仕訳帳の仕訳帳エントリー記帳"
#. module: account
#: view:product.product:0
msgid "Sale Taxes"
msgstr "消費税(売上)"
msgstr "消費税"
#. module: account
#: field:account.financial.report,name:0
@@ -7727,7 +7725,7 @@ msgid ""
"it's based on the beginning of the month)."
msgstr ""
"月の日は、今月の最後の日とするには-"
"1を設定して下さい。もし正の値なら翌月のその日になります。正味日数の場合には0を設定して下さい(それ以外は月初日を基準とします)。"
"1を設定します。もし正の値なら翌月のその日になります。正味日数の場合には0を設定します(それ以外は月初日を基準とします)。"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_legal_statement
@@ -8067,7 +8065,7 @@ msgstr "仕入返金仕訳帳"
#. module: account
#: help:account.tax.template,amount:0
msgid "For Tax Type percent enter % ratio between 0-1."
msgstr "税金はパーセンテージタイプのため、0から1の間の%比率を入力して下さい。"
msgstr "税金はパーセンテージタイプのため、0から1の間の%比率を入力します。"
#. module: account
#: view:account.analytic.account:0
@@ -8156,7 +8154,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
@@ -8673,7 +8671,7 @@ msgstr "通貨"
#: help:account.bank.statement.line,sequence:0
msgid ""
"Gives the sequence order when displaying a list of bank statement lines."
msgstr "銀行取引明細書のリストを表示する時には、並び順を与えて下さい。"
msgstr "銀行取引明細書のリストを表示する時には並び順を与えます。"
#. module: account
#: model:process.transition,note:account.process_transition_validentries0
@@ -8691,9 +8689,9 @@ msgid ""
"would be referred to as FY 2011. You are not obliged to follow the actual "
"calendar year."
msgstr ""
"ニーズに応じて会社の会計年度を定義して下さい。会計年度は会社のアカウントを構成する(通常12ヶ月)終わりまでの期間です。会計年度は通常その終わりの日付まで"
"が当てはまります。例えば、会社の会計年度の終わりが2011年11月30日である場合、2010年12月1日から2011年11月30日の全てが2011年の会計"
"年度に当てはまります。実際の暦年に従う必要はありません。"
"ニーズに応じて会社の会計年度を定義します。会計年度は会社のアカウントを構成する(通常12ヶ月)終わりまでの期間です。会計年度は通常その終わりの日付までが当"
"てはまります。例えば、会社の会計年度の終わりが2011年11月30日である場合、2010年12月1日から2011年11月30日の全てが2011年の会計年度"
"に当てはまります。実際の暦年に従う必要はありません。"
#. module: account
#: view:account.entries.report:0
@@ -8798,7 +8796,7 @@ msgstr "期間原価元帳"
msgid ""
"Set if the tax computation is based on the computation of child taxes rather "
"than on the total amount."
msgstr "税金計算が合計金額よりむしろ子の税金の計算に基づく場合は設定して下さい。"
msgstr "税金計算が合計金額より、むしろ、子の税金の計算に基づく場合は設定して下さい。"
#. module: account
#: selection:account.tax,applicable_type:0
@@ -9149,7 +9147,7 @@ msgid ""
"related to this account and the counter-part \"Account receivable\"."
msgstr ""
"このビューはOpenERPに大量のエントリーを記録するために会計士によって使われます。顧客請求書を記録することを望む場合、検索ツールバーの仕訳帳と期間を選"
"択して下さい。それから、損益勘定のエントリー行を開始します。OpenERPはこのアカウントに関係する税金と相手方の売掛金を自動的に提案します。"
"択します。それから、損益勘定のエントリー行を開始します。OpenERPはこのアカウントに関係する税金と相手方の売掛金を自動的に提案します。"
#. module: account
#: code:addons/account/wizard/account_automatic_reconcile.py:152
@@ -9173,7 +9171,7 @@ msgid ""
"period."
msgstr ""
"会社の会計年度の時間間隔である会計期間をここで定義して下さい。会計期間は通常は1ヶ月あるいは3ヶ月です。これは、通常は税金申告の期間た対応します。ここから"
"期間を作成して管理して下さい。そして、期間は閉じられるべきなのか、特定の期間にわたる会社の活動に応じて開いたままにしておくのかを決めます。"
"期間を作成して管理します。そして、期間は閉じられるべきなのか、特定の期間にわたる会社の活動に応じて開いたままにしておくのかを決めます。"
#. module: account
#: report:account.third_party_ledger:0
@@ -9449,12 +9447,12 @@ msgid ""
msgstr ""
"期間は会計に関連する活動を記録すべき会計エントリーが含まれる会計期間のことです。月次期間が標準ですが、あなたの国あるいは会社のニーズに依存します。また、四"
"半期期間を持つこともできます。期間の閉鎖は新しい会計エントリーの記録を不可能にし、全ての新しいエントリーは次の開設期間でなされる必要があります。新しいエン"
"トリーを記録したくない場合、あるいは税金に関連する計算のためにこの期間をロックしたい場合は期間を閉じてください。"
"トリーを記録したくない場合、あるいは税金に関連する計算のためにこの期間をロックしたい場合は期間を閉じて下さい。"
#. module: account
#: view:account.analytic.account:0
msgid "Pending"
msgstr "保留"
msgstr "保留中"
#. module: account
#: model:process.transition,name:account.process_transition_analyticinvoice0
@@ -10259,8 +10257,8 @@ msgid ""
"may keep several types of specialized journals such as a cash journal, "
"purchase journal, sales journal..."
msgstr ""
"このメニューから会社の仕訳帳を作成し管理して下さい。仕訳帳は複式簿記システムを使って、会社の日々のビジネスに関連した全ての会計データの取引を記録するために"
"使用されます。その活動の性質と日常の取引の数に応じて、会社は現金仕訳帳、仕入仕訳帳、売上仕訳帳といった専門的な仕訳帳の幾つかのタイプを持ちます。"
"このメニューから会社の仕訳帳を作成し管理します。仕訳帳は複式簿記システムを使って、会社の日々のビジネスに関連した全ての会計データの取引を記録するために使用"
"されます。その活動の性質と日常の取引の数に応じて、会社は現金仕訳帳、仕入仕訳帳、売上仕訳帳といった専門的な仕訳帳の幾つかのタイプを持ちます。"
#. module: account
#: view:account.payment.term:0
@@ -10439,7 +10437,7 @@ msgstr ""
"${object.address_invoice_id.name and ' ' or "
"''}${object.address_invoice_id.name or ''}様,\n"
"\n"
"新しい請求書をお届けします。どうぞご確認ください。発行者: ${object.partner_id.name}:\n"
"新しい請求書をお届けします。どうぞご確認下さい。発行者: ${object.partner_id.name}:\n"
" | 請求書番号: *${object.number}*\n"
" | 請求金額合計: *${object.amount_total} ${object.currency_id.name}*\n"
" | 請求日: ${object.date_invoice}\n"
@@ -10473,10 +10471,10 @@ msgstr ""
" ${paypal_url}\n"
"% endif\n"
"\n"
"何かご質問等ございましたら、ご遠慮なく弊社までお問い合わせください。\n"
"何かご質問等ございましたら、ご遠慮なく弊社までお問い合わせ下さい。\n"
"\n"
"\n"
"弊社をご利用いただきありがとうございました。 ${object.company_id.name}\n"
"弊社をご利用いただき、ありがとうございました。 ${object.company_id.name}\n"
"\n"
"\n"
"--\n"
@@ -10758,3 +10756,9 @@ msgstr "仕訳帳エントリーの買掛金、または買掛金の残差金額
#~ msgid "Description On Invoices"
#~ msgstr "請求書説明"
#~ msgid "Write-Off journal"
#~ msgstr "償却仕訳帳"
#~ msgid "Full Payment"
#~ msgstr "全支払"
+51 -47
View File
@@ -7,20 +7,20 @@ 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-06-05 09:38+0000\n"
"Last-Translator: Tiago Rodrigues <tig.rodrigues@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-05-11 04:51+0000\n"
"X-Generator: Launchpad (build 15225)\n"
"X-Launchpad-Export-Date: 2012-06-06 04:37+0000\n"
"X-Generator: Launchpad (build 15353)\n"
#. module: account
#: view:account.invoice.report:0
#: view:analytic.entries.report:0
msgid "last month"
msgstr "mês anterior"
msgstr ""
#. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@@ -30,7 +30,7 @@ msgstr "Pagamento do sistema"
#. module: account
#: view:account.journal:0
msgid "Other Configuration"
msgstr "Outras configurações"
msgstr "Outras Configurações"
#. module: account
#: help:account.tax.code,sequence:0
@@ -57,7 +57,7 @@ msgstr "Estatisticas da Conta"
#. module: account
#: view:account.invoice:0
msgid "Proforma/Open/Paid Invoices"
msgstr "Proforma/ Abrir / Faturas Pagas"
msgstr "Proforma / Abrir / Faturas Pagas"
#. module: account
#: field:report.invoice.created,residual: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
+10 -10
View File
@@ -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-06 04:37+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
+2 -2
View File
@@ -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"/>
+70 -52
View File
@@ -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"
@@ -505,7 +515,15 @@ msgstr ""
#~ "Pode também ver o relatório sumário de contas analíticas\n"
#~ "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"
@@ -6,7 +6,7 @@
<field name="model">account.analytic.default</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Analytic Defaults" colors="grey:date_stop and (date_stop &lt; datetime.date.today().strftime('%%Y-%%m-%%d'))" >
<tree string="Analytic Defaults">
<field name="sequence"/>
<field name="analytic_id" required="0" domain="[('parent_id','!=',False)]" groups="analytic.group_analytic_accounting"/>
<field name="product_id"/>
+6 -6
View File
@@ -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-16 17:39+0000\n"
"PO-Revision-Date: 2012-06-08 01:35+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-04-17 04:51+0000\n"
"X-Generator: Launchpad (build 15099)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:40+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: account_analytic_default
#: help:account.analytic.default,partner_id:0
@@ -57,7 +57,7 @@ msgstr "この分析アカウントのデフォルト終了日"
#. module: account_analytic_default
#: model:ir.model,name:account_analytic_default.model_stock_picking
msgid "Picking List"
msgstr "集荷リスト"
msgstr "出庫票"
#. module: account_analytic_default
#: view:account.analytic.default:0
@@ -128,7 +128,7 @@ msgstr "分析デフォルト"
#. module: account_analytic_default
#: sql_constraint:stock.picking:0
msgid "Reference must be unique per Company!"
msgstr "参照は会社ごとにユニークでなければいけません。"
msgstr "参照は会社内で固有でなければいけません"
#. module: account_analytic_default
#: view:account.analytic.default:0
@@ -181,7 +181,7 @@ msgstr "開始日"
#: help:account.analytic.default,sequence:0
msgid ""
"Gives the sequence order when displaying a list of analytic distribution"
msgstr "分析ディストリビューションのリストを表示する時に、順序の並べ順を与えて下さい。"
msgstr "分析ディストリビューションのリストを表示する時に、順序の並びを与えます。"
#. module: account_analytic_default
#: model:ir.model,name:account_analytic_default.model_sale_order_line
+5 -5
View File
@@ -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-28 01:18+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-04-29 04:45+0000\n"
"X-Generator: Launchpad (build 15149)\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
@@ -87,7 +87,7 @@ msgstr "出庫票"
#. module: account_anglo_saxon
#: sql_constraint:account.invoice:0
msgid "Invoice Number must be unique per Company!"
msgstr "請求書番号は会社ごとにユニークでなければいけません。"
msgstr "請求書番号は会社ごとに固有である必要があります。"
#. module: account_anglo_saxon
#: help:product.category,property_account_creditor_price_difference_categ:0
+1 -4
View File
@@ -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">
+6 -6
View File
@@ -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
@@ -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
@@ -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')]}"/>
+5 -5
View File
@@ -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-13 19:58+0000\n"
"PO-Revision-Date: 2012-06-08 01:54+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-04-14 04:57+0000\n"
"X-Generator: Launchpad (build 15070)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:40+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: account_budget
#: field:crossovered.budget,creating_user_id:0
@@ -128,8 +128,8 @@ msgid ""
msgstr ""
"予算は将来の期間における、予想される会社の収入と支出です。予算に基づき、会社はその期間の間にどのくらいのお金を得るのかを注意深く見ることができます。そして"
"、さまざまな分類に分配する最適な方法を理解することができます。お金がどこに行くのかを追跡し続けることで、お金の使い過ぎの可能性を減らし、財務目標を達成しや"
"すくします。分析的なアカウントごとに期待される収入を詳細化することで予算を予測して下さい。そして、その期間中に実際にそれを実現することを基本にその展開を監"
"視して下さい。"
"すくします。分析的なアカウントごとに期待される収入を詳細化することで予算を予測します。そして、その期間中に実際にそれを実現することを基本にその展開を監視し"
"ます。"
#. module: account_budget
#: code:addons/account_budget/account_budget.py:119
+5 -5
View File
@@ -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
+7 -7
View File
@@ -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-11 23:57+0000\n"
"PO-Revision-Date: 2012-06-08 02:01+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-13 04:43+0000\n"
"X-Generator: Launchpad (build 15225)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:40+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_09_21
@@ -1150,7 +1150,7 @@ msgid ""
"CODA sequence number: %(coda)s\n"
"Paper Statement sequence number: %(paper)s"
msgstr ""
"CODA処理により生成される銀行取引明細書の名前を作成するためのルールを定義して下さい。\n"
"CODA処理により生成される銀行取引明細書の名前を作成するためのルールを定義します。\n"
"例えば、%(code)s%(y)s/%(paper)s\n"
"\n"
"変数:\n"
@@ -1408,7 +1408,7 @@ msgstr "パートナ"
#: model:account.coda.trans.code,comment:account_coda.actcc_80_37
msgid ""
"Fixed right, either one-off or periodical; for details, see \"categories\""
msgstr "右固定、1回限りまたは定期的の何れか;詳細については分類参照して下さい。"
msgstr "右固定、1回限りまたは定期的の何れか;詳細については分類を参照して下さい。"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_04_05
@@ -2482,7 +2482,7 @@ msgstr "保険や株式仲介といった専門家のため"
#: 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 "証券、金、銀行通帳などの収集物は保護預りされました。"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_09_19
@@ -3009,7 +3009,7 @@ msgid ""
msgstr ""
"\n"
" 銀行取引明細書t %s 行 %s:\n"
" 銀行口座 %s は、このパートナに定義されていません %s\n"
" 銀行口座 %s は、このパートナに定義されていません。 %s\n"
" 設定を訂正し再度インポートを実行するか、そうでない場合は生成された銀行取引明細書の対応するエントリーを変更して下さい。"
#. module: account_coda
+40 -20
View File
@@ -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
+5 -5
View File
@@ -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-12 05:34+0000\n"
"PO-Revision-Date: 2012-06-08 02:05+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-13 04:43+0000\n"
"X-Generator: Launchpad (build 15225)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:39+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: account_followup
#: view:account_followup.followup:0
@@ -243,7 +243,7 @@ msgstr "参照"
#. module: account_followup
#: help:account_followup.followup.line,sequence:0
msgid "Gives the sequence order when displaying a list of follow-up lines."
msgstr "フォローアップ行のリスト表示の際の並び順を与えて下さい。"
msgstr "フォローアップ行のリスト表示の際の並び順を与えます。"
#. module: account_followup
#: view:account.followup.print.all:0
@@ -346,7 +346,7 @@ msgstr ""
msgid ""
"Your description is invalid, use the right legend or %% if you want to use "
"the percent character."
msgstr "記述が無効です。正しい凡例またはパーセンテージ文字を使う場合は%%を使ってください。"
msgstr "記述が無効です。正しい凡例またはパーセンテージ文字を使う場合は%%を使って下さい。"
#. module: account_followup
#: constraint:account.move.line:0
@@ -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>
@@ -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>
+4 -4
View File
@@ -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-15 06:19+0000\n"
"PO-Revision-Date: 2012-06-08 02:11+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-16 04:50+0000\n"
"X-Generator: Launchpad (build 15247)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:40+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: account_payment
#: field:payment.order,date_scheduled:0
@@ -260,7 +260,7 @@ msgid ""
"by you.'Directly' stands for the direct execution.'Due date' stands for the "
"scheduled date of execution."
msgstr ""
"支払オーダーのオプションを選択して下さい:固定は指定した日付を意味します。直接は直ちに実行を意味します。期日は実行のスケジュールされた日付を意味します。"
"支払オーダーのオプション選択:固定は指定した日付を意味します。直接は直ちに実行を意味します。期日は実行のスケジュールされた日付を意味します。"
#. module: account_payment
#: code:addons/account_payment/account_move_line.py:110
+220
View File
@@ -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 ""
+1 -1
View File
@@ -780,7 +780,7 @@ class account_voucher(osv.osv):
def proforma_voucher(self, cr, uid, ids, context=None):
self.action_move_line_create(cr, uid, ids, context=context)
return True
return {'type': 'ir.actions.act_window_close'}
def action_cancel_draft(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
@@ -8,7 +8,7 @@
<field name="inherit_id" ref="account.invoice_form"/>
<field name="arch" type="xml">
<button name="invoice_open" position="after">
<button name="invoice_pay_customer" type="object" string="Payment" states="open" icon="gtk-go-forward"/>
<button name="invoice_pay_customer" type="object" string="Register Payment" states="open" icon="gtk-go-forward"/>
</button>
</field>
</record>
@@ -19,7 +19,7 @@
<field name="inherit_id" ref="account.invoice_supplier_form"/>
<field name="arch" type="xml">
<button name="invoice_open" position="after">
<button name="invoice_pay_customer" type="object" string="Pay Invoice" states="open" icon="gtk-go-forward"/>
<button name="invoice_pay_customer" type="object" string="Pay" states="open" icon="gtk-go-forward"/>
</button>
</field>
</record>
@@ -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" 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)"/>
+1 -1
View File
@@ -36,7 +36,7 @@ class invoice(osv.osv):
'res_model': 'account.voucher',
'type': 'ir.actions.act_window',
'nodestroy': True,
'target': 'current',
'target': 'new',
'domain': '[]',
'context': {
'default_partner_id': inv.partner_id.id,
@@ -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"
@@ -340,13 +334,13 @@
on_change="onchange_move_line_id(move_line_id)"
domain="[('account_id.type','in',('receivable','payable')), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
required="1"
/>
groups="account.group_account_user"/>
<field name="account_id" groups="base.group_no_one" domain="[('type','=','receivable')]"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
<field name="amount_original" readonly="1"/>
<field name="amount_unreconciled" readonly="1"/>
<field name="reconcile" on_change="onchange_reconcile(reconcile, amount, amount_unreconciled, context)"/>
<field name="amount_unreconciled" readonly="1" groups="account.group_account_user"/>
<field name="reconcile" on_change="onchange_reconcile(reconcile, amount, amount_unreconciled, context)" groups="account.group_account_user"/>
<field name="amount" sum="Total Allocation" on_change="onchange_amount(amount, amount_unreconciled, context)" string="Allocation"/>
</tree>
</field>
@@ -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">
@@ -0,0 +1,79 @@
# 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:35+0000\n"
"PO-Revision-Date: 2012-05-28 13:45+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-05-29 04:46+0000\n"
"X-Generator: Launchpad (build 15316)\n"
#. module: analytic_journal_billing_rate
#: sql_constraint:account.invoice:0
msgid "Invoice Number must be unique per Company!"
msgstr ""
#. module: analytic_journal_billing_rate
#: field:analytic_journal_rate_grid,journal_id:0
msgid "Analytic Journal"
msgstr ""
#. module: analytic_journal_billing_rate
#: constraint:account.invoice:0
msgid "Invalid BBA Structured Communication !"
msgstr ""
#. module: analytic_journal_billing_rate
#: view:analytic_journal_rate_grid:0
msgid "Billing Rate per Journal for this Analytic Account"
msgstr ""
#. module: analytic_journal_billing_rate
#: field:analytic_journal_rate_grid,account_id:0
#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account
msgid "Analytic Account"
msgstr ""
#. module: analytic_journal_billing_rate
#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid
msgid "Relation table between journals and billing rates"
msgstr ""
#. module: analytic_journal_billing_rate
#: field:account.analytic.account,journal_rate_ids:0
msgid "Invoicing Rate per Journal"
msgstr ""
#. module: analytic_journal_billing_rate
#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: analytic_journal_billing_rate
#: constraint:hr.analytic.timesheet:0
msgid "You cannot modify an entry in a Confirmed/Done timesheet !."
msgstr ""
#. module: analytic_journal_billing_rate
#: field:analytic_journal_rate_grid,rate_id:0
msgid "Invoicing Rate"
msgstr ""
#. module: analytic_journal_billing_rate
#: constraint:account.analytic.account:0
msgid "Error! You can not create recursive analytic accounts."
msgstr ""
#. module: analytic_journal_billing_rate
#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet
msgid "Timesheet Line"
msgstr ""
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+6 -4
View File
@@ -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-18 23:37+0000\n"
"PO-Revision-Date: 2012-06-08 02:18+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-20 04:38+0000\n"
"X-Generator: Launchpad (build 15259)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:40+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: audittrail
#: code:addons/audittrail/audittrail.py:75
@@ -39,7 +39,9 @@ msgstr "申込済"
msgid ""
"There is already a rule defined on this object\n"
" You cannot define another: please edit the existing one."
msgstr "このオブジェクトでは既にルールが定義されているので、他のルールの定義ができません:既存のルールを変更して下さい。"
msgstr ""
"このオブジェクトでは既にルールが定義されているので、\n"
" 他のルールの定義ができません:既存のルールを変更して下さい。"
#. module: audittrail
#: view:audittrail.rule:0
+112
View File
@@ -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 "વપરાશકર્તા નામ"
+20 -19
View File
@@ -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: 2012-02-09 11:49+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2012-06-05 09:43+0000\n"
"Last-Translator: Tiago Baptista <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-02-10 04:50+0000\n"
"X-Generator: Launchpad (build 14771)\n"
"X-Launchpad-Export-Date: 2012-06-06 04:37+0000\n"
"X-Generator: Launchpad (build 15353)\n"
#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-#
#. module: auth_openid
@@ -24,7 +24,7 @@ msgstr ""
#: view:res.users:0
#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:12
msgid "OpenID"
msgstr ""
msgstr "OpenID"
#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-#
#. module: auth_openid
@@ -33,7 +33,7 @@ msgstr ""
#: field:res.users,openid_url:0
#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:47
msgid "OpenID URL"
msgstr ""
msgstr "OpenID URL"
#. module: auth_openid
#: help:res.users,openid_email:0
@@ -43,70 +43,71 @@ msgstr ""
#. module: auth_openid
#: sql_constraint:res.users:0
msgid "You can not have two users with the same login !"
msgstr ""
msgstr "Não pode ter dois utilizadores com o mesmo login!"
#. module: auth_openid
#: field:res.users,openid_email:0
msgid "OpenID Email"
msgstr ""
msgstr "Email OpenID"
#. module: auth_openid
#: constraint:res.users:0
msgid "The chosen company is not in the allowed companies for this user"
msgstr ""
"A empresa escolhida não está entre as permitidas para este utilizador"
#. module: auth_openid
#: field:res.users,openid_key:0
msgid "OpenID Key"
msgstr ""
msgstr "OpenID Chave"
#. module: auth_openid
#: model:ir.model,name:auth_openid.model_res_users
msgid "res.users"
msgstr ""
msgstr "res.users"
#. openerp-web
#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:8
msgid "Password"
msgstr ""
msgstr "Password"
#. 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 ""
msgstr "Google"
#. openerp-web
#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10
msgid "Google Apps"
msgstr ""
msgstr "Google Apps"
#. openerp-web
#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:11
msgid "Launchpad"
msgstr ""
msgstr "Launchpad"
#. openerp-web
#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:20
msgid "Google Apps Domain:"
msgstr ""
msgstr "Domínio Google Apps:"
#. openerp-web
#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:24
msgid "Username:"
msgstr ""
msgstr "Nome de utilizador:"
#. openerp-web
#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:28
msgid "OpenID URL:"
msgstr ""
msgstr "OpenID URL:"
#. openerp-web
#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:35
msgid "Google Apps Domain"
msgstr ""
msgstr "Domínio Google Apps"
#. openerp-web
#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:41
msgid "Username"
msgstr ""
msgstr "Nome de utilizador"
+114
View File
@@ -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"
+8 -8
View File
@@ -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-19 02:19+0000\n"
"PO-Revision-Date: 2012-06-08 02: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-05-20 04:38+0000\n"
"X-Generator: Launchpad (build 15259)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:40+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: base_action_rule
#: help:base.action.rule,act_mail_to_user:0
@@ -26,7 +26,7 @@ msgstr "責任者にメールを送信するためのルールを望む場合は
#. module: base_action_rule
#: field:base.action.rule,act_remind_partner:0
msgid "Remind Partner"
msgstr "パートナを思い出して下さい。"
msgstr "パートナを思い出させる"
#. module: base_action_rule
#: field:base.action.rule,trg_partner_categ_id:0
@@ -120,7 +120,7 @@ msgstr "モデルパートナとしての条件"
#. module: base_action_rule
#: selection:base.action.rule,trg_date_type:0
msgid "Deadline"
msgstr "締切期限"
msgstr "期限"
#. module: base_action_rule
#: field:base.action.rule,trg_partner_id:0
@@ -155,8 +155,8 @@ msgid ""
"specific sales team, or an opportunity which still has status pending after "
"14 days might trigger an automatic reminder email."
msgstr ""
"多種の画面のために自動的なアクションを自動的にトリガー実行するために使って下さい。例えば、特定のユーザにより作成されたリードには自動的に特定の営業チームを"
"設定したり、オポチュニティが保留中になって14日を経過したので、自動的に通知Eメールの送信をトリガーしたりできます。"
"多種の画面のために自動的なアクションを自動的にトリガー実行するために使います。例えば、特定のユーザにより作成されたリードには自動的に特定の営業チームを設定"
"したり、オポチュニティが保留中になって14日を経過したので、自動的に通知Eメールの送信をトリガーしたりできます。"
#. module: base_action_rule
#: help:base.action.rule,act_mail_to_email:0
@@ -326,7 +326,7 @@ msgstr "責任者への通知"
#. module: base_action_rule
#: help:base.action.rule,sequence:0
msgid "Gives the sequence order when displaying a list of rules."
msgstr "ルールのリストを表示する時には、並び順を指定して下さい。"
msgstr "ルールのリストを表示する時には、並び順を指定します。"
#. module: base_action_rule
#: selection:base.action.rule,trg_date_range_type:0
+21 -20
View File
@@ -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 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)
# 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)
+6 -27
View File
@@ -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"
+17 -17
View File
@@ -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-23 06:06+0000\n"
"PO-Revision-Date: 2012-06-08 02:32+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-24 11:09+0000\n"
"X-Generator: Launchpad (build 15288)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:40+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: base_calendar
#: view:calendar.attendee:0
@@ -202,7 +202,7 @@ msgstr "イベント参照"
#. module: base_calendar
#: view:calendar.event:0
msgid "Show Time as"
msgstr "時間を示して下さい。"
msgstr "時間として表示"
#. module: base_calendar
#: field:calendar.event,tu:0
@@ -326,7 +326,7 @@ msgstr "コンタクトと関係あるパートナ"
#. module: base_calendar
#: help:calendar.attendee,cutype:0
msgid "Specify the type of Invitation"
msgstr "招待タイプを定義して下さい。"
msgstr "招待タイプを定義します。"
#. module: base_calendar
#: field:calendar.alarm,event_end_date:0
@@ -382,7 +382,7 @@ msgstr "主催者"
#: field:calendar.event,user_id:0
#: field:calendar.todo,user_id:0
msgid "Responsible"
msgstr "責任者"
msgstr "担当"
#. module: base_calendar
#: view:calendar.event:0
@@ -414,7 +414,7 @@ msgstr "出席者"
#: code:addons/base_calendar/base_calendar.py:1411
#, python-format
msgid "Group by date not supported, use the calendar view instead"
msgstr "日付のグループ化はサポートされませんが、代りにカレンダービューを使って下さい。"
msgstr "日付のグループ化はサポートされませんが、代りにカレンダービューを使います。"
#. module: base_calendar
#: view:calendar.event:0
@@ -505,7 +505,7 @@ msgstr "繰り返し(まで)"
msgid ""
"Create specific calendar alarms that may be assigned to calendar events or "
"meetings."
msgstr "カレンダーイベントまたはミーティングを割り当てられる特定のカレンダーアラームを作成して下さい。"
msgstr "カレンダーイベントまたはミーティングを割り当てられる特定のカレンダーアラームを作成します。"
#. module: base_calendar
#: field:calendar.event,show_as:0
@@ -995,7 +995,7 @@ msgstr "カレンダーの出席者は重複できません。"
#. module: base_calendar
#: view:calendar.event:0
msgid "Choose day in the month where repeat the meeting"
msgstr "ミーティングを定期的に行う場合は月の日を選択して下さい。"
msgstr "ミーティングを定期的に行う場合は月の日を選択します。"
#. module: base_calendar
#: field:calendar.alarm,action:0
@@ -1005,7 +1005,7 @@ msgstr "アクション"
#. module: base_calendar
#: help:base_calendar.invite.attendee,type:0
msgid "Select whom you want to Invite"
msgstr "招待したい人を選択して下さい。"
msgstr "招待したい人を選択します。"
#. module: base_calendar
#: help:calendar.alarm,duration:0
@@ -1034,7 +1034,7 @@ msgstr "委任先"
#. module: base_calendar
#: help:calendar.alarm,action:0
msgid "Defines the action to be invoked when an alarm is triggered"
msgstr "アラームが起動する時に発動するアクションを定義して下さい。"
msgstr "アラームが起動する時に発動するアクションを定義します。"
#. module: base_calendar
#: selection:calendar.event,end_type:0
@@ -1219,7 +1219,7 @@ msgstr "詳細"
msgid ""
"Defines a rule or repeating pattern of time to exclude from the recurring "
"rule."
msgstr "ルールまたは反復ルールから除外あうする時間の繰り返しパターンを定義して下さい。"
msgstr "ルールまたは反復ルールから除外する時間の繰り返しパターンを定義します。"
#. module: base_calendar
#: field:calendar.event,month_list:0
@@ -1306,7 +1306,7 @@ msgstr "土"
#. module: base_calendar
#: view:calendar.event:0
msgid "Choose day where repeat the meeting"
msgstr "定例ミーティングの日を選択して下さい。"
msgstr "定例ミーティングの日を選択します。"
#. module: base_calendar
#: field:calendar.alarm,trigger_related:0
@@ -1317,7 +1317,7 @@ msgstr "関連先"
#. module: base_calendar
#: help:calendar.attendee,sent_by:0
msgid "Specify the user that is acting on behalf of the calendar user"
msgstr "カレンダーユーザのために行動しているユーザを指定してして下さい。"
msgstr "カレンダーユーザのために行動しているユーザを指定します。"
#. module: base_calendar
#: view:calendar.event:0
@@ -1445,7 +1445,7 @@ msgstr "順序"
#: help:calendar.event,alarm_id:0
#: help:calendar.todo,alarm_id:0
msgid "Set an alarm at this time, before the event occurs"
msgstr "イベントが発生する前に今回アラームを設定して下さい。"
msgstr "イベントが発生する前に今回アラームを設定します。"
#. module: base_calendar
#: selection:base_calendar.invite.attendee,type:0
@@ -1512,9 +1512,9 @@ msgid ""
" * Points to a procedure resource, which is invoked when "
" the alarm is triggered for procedure."
msgstr ""
"・ アラームが起動する時に発せられる音のリソースを指定して下さい。\n"
"・ アラームが起動する時に発せられる音のリソースを指定します。\n"
" ・ ファイルはEメールにメッセージの添付として送信されます。\n"
" ・ アラームが起動された時に処理される手続きのリソースを指定して下さい。"
" ・ アラームが起動された時に処理される手続きのリソースを指定します。"
#. module: base_calendar
#: selection:calendar.event,byday:0
+2 -2
View File
@@ -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"/>
+282
View File
@@ -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 ""
+2 -2
View File
@@ -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"/>
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
# 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
@@ -15,11 +15,11 @@
# 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/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import delivery_sale_order
import base_state
import base_stage
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+42
View File
@@ -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:
+432
View File
@@ -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
+194
View File
@@ -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
+1 -1
View File
@@ -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",
+5 -5
View File
@@ -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-02-08 03:42+0000\n"
"Last-Translator: Wei \"oldrev\" Li <oldrev@gmail.com>\n"
"PO-Revision-Date: 2012-06-07 03:31+0000\n"
"Last-Translator: Jeff Wang <wjfonhand@hotmail.com>\n"
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-02-09 07:05+0000\n"
"X-Generator: Launchpad (build 14763)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:40+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: base_synchro
#: model:ir.actions.act_window,name:base_synchro.action_view_base_synchro
@@ -212,7 +212,7 @@ msgstr "同步"
#. module: base_synchro
#: field:base.synchro.obj,domain:0
msgid "Domain"
msgstr "域"
msgstr "过滤条件"
#. module: base_synchro
#: view:base.synchro:0
+2 -7
View File
@@ -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):
+1 -1
View File
@@ -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>
+348
View File
@@ -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 ""
+4 -4
View File
@@ -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-24 04:45+0000\n"
"PO-Revision-Date: 2012-06-08 02: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-05-24 11:09+0000\n"
"X-Generator: Launchpad (build 15288)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:40+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: board
#: view:res.log.report:0
@@ -224,7 +224,7 @@ msgstr "11月"
msgid ""
"Gives the sequence order when displaying a list of "
"board lines."
msgstr "ボード行のリストを表示する場合、並び順を指定して下さい。"
msgstr "ボード行のリストを表示する場合、並び順を指定します。"
#. module: board
#: selection:res.log.report,month:0
+8 -8
View File
@@ -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-24 17:42+0000\n"
"PO-Revision-Date: 2012-06-08 02:42+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-25 04:40+0000\n"
"X-Generator: Launchpad (build 15288)\n"
"X-Launchpad-Export-Date: 2012-06-08 04:40+0000\n"
"X-Generator: Launchpad (build 15376)\n"
#. module: caldav
#: view:basic.calendar:0
@@ -99,7 +99,7 @@ msgstr "遠隔カレンダーへの経路を指定して下さい。"
#. module: caldav
#: model:ir.actions.act_window,name:caldav.action_calendar_event_import_values
msgid "Import .ics File"
msgstr ".ics ファイルをインポートして下さい。"
msgstr ".ics ファイルのインポート"
#. module: caldav
#: view:caldav.browse:0
@@ -346,7 +346,7 @@ msgstr "タイプ"
#. module: caldav
#: help:calendar.event.export,name:0
msgid "Save in .ics format"
msgstr ".ics 形式で保存して下さい。"
msgstr ".ics 形式で保存"
#. module: caldav
#: code:addons/caldav/calendar.py:1293
@@ -424,7 +424,7 @@ msgstr "カレンダー"
msgid ""
"Please install python-vobject from http://vobject.skyhouseconsulting.com/"
msgstr ""
"http://vobject.skyhouseconsulting.com/ からpython-vobjectをダウンロードして、インストールしてください"
"http://vobject.skyhouseconsulting.com/ からpython-vobjectをダウンロードして、インストールして下さい。"
#. module: caldav
#: code:addons/caldav/wizard/calendar_event_import.py:63
@@ -493,7 +493,7 @@ msgstr "集合"
#. module: caldav
#: field:basic.calendar,write_date:0
msgid "Write Date"
msgstr "日付を入れて下さい。"
msgstr "記入日"
#. module: caldav
#: code:addons/caldav/wizard/caldav_browse.py:32
@@ -581,7 +581,7 @@ msgstr "basic.calendar.alias"
#: view:calendar.event.import:0
#: field:calendar.event.import,file_path:0
msgid "Select ICS File"
msgstr "ICS ファイルを選んで下さい。"
msgstr "ICS ファイルの選択"
#. module: caldav
#: field:user.preference,device:0
+5 -5
View File
@@ -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
+1 -1
View File
@@ -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',
+1 -18
View File
@@ -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>
+26 -434
View File
@@ -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"""
+150 -101
View File
@@ -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 crm
import time
from tools.translate import _
from crm import crm_case
import binascii
import tools
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
import tools
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
"""
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)])
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')))
if ids:
return ids[0]
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
"""
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]
+50 -16
View File
@@ -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">Qualification</field>
<field name="name">Opportunity</field>
<field eval="1" name="case_default"/>
<field name="state">open</field>
<field eval="'20'" name="probability"/>
<field eval="'12'" name="sequence"/>
<field eval="'11'" name="sequence"/>
<field name="type">lead</field>
</record>
<record model="crm.case.stage" id="stage_lead3">
<field name="name">Proposition</field>
<field name="name">Qualification</field>
<field eval="1" name="case_default"/>
<field eval="'40'" name="probability"/>
<field eval="'13'" name="sequence"/>
<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_lead4">
<field name="name">Negotiation</field>
<field name="name">Proposition</field>
<field eval="1" name="case_default"/>
<field eval="'60'" name="probability"/>
<field eval="'14'" name="sequence"/>
<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_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_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 -->
+67 -105
View File
@@ -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"/>
+266 -299
View File
@@ -1,35 +1,41 @@
<?xml version="1.0"?>
<openerp>
<data>
<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>
<!--
CRM CASE STAGE
-->
<!--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>
<!-- 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>
</record>
<!-- CRM Lead Tree 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_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>
<!-- 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 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"/>
<t t-if="record.planned_revenue.raw_value">
- <t t-esc="Math.round(record.planned_revenue.value)"/>
<field name="company_currency"/>
</t>
</h3>
<div>
<b> <field name="partner_address_name"/> </b>
<b><field name="name"/></b>
<t t-if="record.planned_revenue.raw_value">
- <b><t t-esc="Math.round(record.planned_revenue.value)"/>
<field name="company_currency"/></b>
</t>
</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,177 +370,173 @@
<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">
<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" />
<button name="case_escalate" string="Escalate" states="open,pending" type="object" />
<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">
<form string="Opportunities" validate="0">
<header>
<button name="case_mark_won" string="Mark Won" type="object"
states="draft,open,pending"/>
<button name="case_open" string="Open" type="object"
states="draft,pending"/>
<button name="case_escalate" string="Escalate" type="object"
states="open"/>
<button name="case_mark_lost" string="Mark Lost" type="object"
states="draft,open"/>
<button name="case_reset" string="Reset to Draft" type="object"
states="done,cancel"/>
<button name="case_cancel" string="Cancel" type="object"
states="draft"/>
<button name="stage_previous" string="Previous" type="object"
states="open" icon="gtk-go-back" context="{'stage_type': 'opportunity'}"/>
<button name="stage_next" string="Next" type="object"
states="open" icon="gtk-go-forward" context="{'stage_type': 'opportunity'}"/>
<field name="stage_id" nolabel="1" widget="statusbar"
on_change="onchange_stage_id(stage_id)"/>
</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"/>
<div class="oe_form_title">
<label for="name" class="oe_form_readonly_hidden"/>
<h1><field name="name"/></h1>
<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" />
</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'}"/>
<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>
<field name="priority" string="Priority"/>
<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>
<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')]" />
</group>
</group>
<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>
<!--<button string="Mail"
name="%(mail.action_email_compose_message_wizard)d"
context="{'mail':'new', 'model': 'crm.lead'}"
icon="terp-mail-message-new" type="action" />-->
<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>
<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"/>
<field name="state" groups="base.group_no_one"/>
<field name="type" invisible="1"/>
</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 &lt; current_date));gray:state in ('cancel', 'done');red:date_deadline and (date_deadline &lt; 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 &lt; current_date));gray:state in ('cancel', 'done');red:date_deadline and (date_deadline &lt; 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 +567,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 +597,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>
+29 -47
View File
@@ -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_meeting(crm_base, osv.osv):
""" CRM Meeting Cases """
class crm_lead(base_stage, osv.osv):
""" CRM Leads """
_name = 'crm.lead'
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 """
+17 -15
View File
@@ -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>
+28 -45
View File
@@ -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:
+20 -16
View File
@@ -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>
+5
View File
@@ -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"/>
+10 -10
View File
@@ -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
+6 -6
View File
@@ -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
+13 -21
View File
@@ -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!'
@@ -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.
-
@@ -96,6 +95,19 @@
assert opp.name == "Interest in Your New Product", "Opportunity name not correct"
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.
-
@@ -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>
+118 -36
View File
@@ -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 crm import crm
import time
from crm import wizard
from base_status.base_stage import base_stage
import binascii
from crm import crm
from crm import wizard
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 = {
+23 -11
View File
@@ -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.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>
<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>
</data>
</openerp>
-7
View File
@@ -12,7 +12,6 @@
<field eval="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
<field eval="&quot;Problem with the delivery of goods&quot;" name="name"/>
<field eval="&quot;open&quot;" 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="&quot;4&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
<field eval="&quot;Damaged Products&quot;" name="name"/>
<field eval="&quot;open&quot;" 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="&quot;2&quot;" name="priority"/>
<field name="user_id" ref="base.user_demo"/>
<field eval="&quot;Document related problems&quot;" name="name"/>
<field eval="&quot;done&quot;" 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="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
<field eval="&quot;Product quality not maintained&quot;" name="name"/>
<field eval="&quot;draft&quot;" 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="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
<field eval="&quot;Some products missing&quot;" name="name"/>
<field eval="&quot;pending&quot;" 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="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
<field eval="&quot;Problem with the delivery of assignments&quot;" name="name"/>
<field eval="&quot;cancel&quot;" 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="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
<field eval="&quot;Documents unclear&quot;" name="name"/>
<field eval="&quot;done&quot;" 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"/>
+5
View File
@@ -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>
+56 -51
View File
@@ -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 &amp; 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"
@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_crm_claim_manager crm.claim.manager model_crm_claim base.group_sale_manager 1 1 1 1
3 access_crm_claim_user crm.claim.user model_crm_claim base.group_sale_salesman 1 1 1 0
4 access_crm_claim_stage_user crm.claim.stage.user model_crm_claim_stage base.group_sale_salesman 1 1 1 1
5 access_crm_claim_report_manager crm.claim.report.manager model_crm_claim_report base.group_sale_manager 1 1 1 1
6 access_crm_claim_partner_manager crm.claim.partner.manager model_crm_claim base.group_partner_manager 1 0 0 0
+1 -1
View File
@@ -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.
-
+73 -21
View File
@@ -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:
@@ -9,7 +9,6 @@
<field name="partner_id" ref="base.res_partner_9"/>
<field eval="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_demo"/>
<field eval="&quot;open&quot;" 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="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
<field eval="&quot;draft&quot;" 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="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
<field eval="&quot;open&quot;" 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="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_demo"/>
<field eval="&quot;draft&quot;" 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="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
<field eval="&quot;open&quot;" 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="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
<field eval="&quot;done&quot;" 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="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_demo"/>
<field eval="&quot;draft&quot;" 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="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
<field eval="&quot;open&quot;" 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"/>
@@ -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 &amp; 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>
+26 -10
View File
@@ -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:
+18 -52
View File
@@ -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 &amp; 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>
+738
View File
@@ -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 ""
+6 -3
View File
@@ -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-04-23 20:45+0000\n"
"PO-Revision-Date: 2012-05-28 19:12+0000\n"
"Last-Translator: Masaki Yamaya <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-04-24 04:53+0000\n"
"X-Generator: Launchpad (build 15135)\n"
"X-Launchpad-Export-Date: 2012-05-29 04:46+0000\n"
"X-Generator: Launchpad (build 15316)\n"
#. module: crm_helpdesk
#: field:crm.helpdesk.report,delay_close:0
@@ -725,6 +725,9 @@ msgid ""
"gateway: new emails may create issues, each of them automatically gets the "
"history of the conversation with the customer."
msgstr ""
"ヘルプデスクとサポート機能を使って、あなたの介在を記録することができます。カスタマごとに注釈を加えたり、必要であればパートナとのやり取りを記録することがで"
"きます。また,優先レベルを割り当てることもできます。OpenERPの問題システムを使ってサポート活動を管理することができます。問題をEメールゲートウェイと"
"連動させて、新しいEメールが問題を作成して、カスタマとの対話の履歴を自動的に生成することができます。"
#. module: crm_helpdesk
#: view:crm.helpdesk.report:0
+21 -18
View File
@@ -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','&lt;&gt;',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','&lt;&gt;',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>
+3 -3
View File
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2012-05-25 02:34+0000\n"
"PO-Revision-Date: 2012-05-25 04:47+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-25 04:40+0000\n"
"X-Launchpad-Export-Date: 2012-05-26 05:07+0000\n"
"X-Generator: Launchpad (build 15288)\n"
#. module: crm_partner_assign
@@ -847,7 +847,7 @@ msgstr "CRMパートナ報告書"
#. module: crm_partner_assign
#: model:ir.model,name:crm_partner_assign.model_crm_lead_forward_to_partner
msgid "E-mail composition wizard"
msgstr "Eメール作成ツール"
msgstr "Eメール作成ウィザード"
#. module: crm_partner_assign
#: selection:crm.lead.report.assign,priority:0
+1 -1
View File
@@ -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">
-1
View File
@@ -21,7 +21,6 @@
import delivery
import partner
import wizard
import report
import sale
import stock
-1
View File
@@ -37,7 +37,6 @@ When creating invoices from picking, OpenERP is able to add and compute the ship
'init_xml': ['delivery_data.xml'],
'update_xml': [
'security/ir.model.access.csv',
'wizard/delivery_sale_order_view.xml',
'delivery_report.xml',
'delivery_view.xml',
'partner_view.xml'
+10 -19
View File
@@ -161,19 +161,6 @@
</field>
</record>
<record id="view_order_withcarrier_form" model="ir.ui.view">
<field name="name">delivery.sale.order_withcarrier.form.view</field>
<field name="type">form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<group name="logistics" position="inside">
<field name="id" invisible="True"/>
<field name="carrier_id" context="{'order_id':active_id or False}"/>
</group>
</field>
</record>
<record id="view_picking_withcarrier_out_form" model="ir.ui.view">
<field name="name">delivery.stock.picking_withcarrier.out.form.view</field>
<field name="type">form</field>
@@ -258,14 +245,18 @@
</field>
</record>
<record model="ir.ui.view" id="edit_project_multicompany">
<field name="name">sale.order.multicompany</field>
<record id="view_order_withcarrier_form" model="ir.ui.view">
<field name="name">delivery.sale.order_withcarrier.form.view</field>
<field name="type">form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='order_confirm']" position="after">
<button name="%(action_delivery_cost)d" states="draft" string="Delivery Costs" type="action" icon="gtk-add" context="{'order_id':active_id}"/>
</xpath>
<xpath expr="//group[@name='bellow_the_lines_hook']" position="inside">
<separator string="Delivery Costs" colspan="4"/>
<field name="carrier_id" context="{'order_id':active_id or False}" colspan="2"/>
<button name="delivery_set" states="draft" string="Add Now on the Sale Order" type="object" icon="gtk-add" colspan="2"/>
<label string="if you don't click on 'Add Now', the delivery cost won't be added on the Sale Order, but will be added on the Delivery Order only" colspan="4"/>
</xpath>
</field>
</record>
@@ -275,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>
+642
View File
@@ -0,0 +1,642 @@
# 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-05-28 08:36+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-05-29 04:45+0000\n"
"X-Generator: Launchpad (build 15316)\n"
#. module: delivery
#: report:sale.shipping:0
msgid "Order Ref."
msgstr ""
#. module: delivery
#: model:product.template,name:delivery.delivery_product_product_template
msgid "Delivery by Poste"
msgstr ""
#. module: delivery
#: view:delivery.carrier:0
#: view:delivery.grid:0
msgid "Destination"
msgstr ""
#. module: delivery
#: field:stock.move,weight_net:0
msgid "Net weight"
msgstr ""
#. module: delivery
#: view:stock.picking:0
msgid "Delivery Order"
msgstr ""
#. module: delivery
#: model:ir.model,name:delivery.model_delivery_grid_line
msgid "Delivery Grid Line"
msgstr ""
#. module: delivery
#: view:delivery.carrier:0
#: view:delivery.grid:0
msgid "Delivery grids"
msgstr ""
#. module: delivery
#: selection:delivery.grid.line,type:0
#: selection:delivery.grid.line,variable_factor:0
#: field:stock.picking,volume:0
msgid "Volume"
msgstr ""
#. module: delivery
#: field:delivery.grid,line_ids:0
msgid "Grid Line"
msgstr ""
#. module: delivery
#: help:delivery.carrier,partner_id:0
msgid "The partner that is doing the delivery service."
msgstr ""
#. module: delivery
#: model:ir.actions.report.xml,name:delivery.report_shipping
msgid "Delivery order"
msgstr ""
#. module: delivery
#: view:res.partner:0
msgid "Deliveries Properties"
msgstr ""
#. module: delivery
#: model:ir.actions.act_window,name:delivery.action_picking_tree4
msgid "Picking to be invoiced"
msgstr ""
#. module: delivery
#: field:delivery.carrier,pricelist_ids:0
msgid "Advanced Pricing"
msgstr ""
#. module: delivery
#: help:delivery.grid,sequence:0
msgid "Gives the sequence order when displaying a list of delivery grid."
msgstr ""
#. module: delivery
#: view:delivery.carrier:0
#: view:delivery.grid:0
#: field:delivery.grid,country_ids:0
msgid "Countries"
msgstr ""
#. module: delivery
#: report:sale.shipping:0
msgid "Delivery Order :"
msgstr ""
#. module: delivery
#: field:delivery.grid.line,variable_factor:0
msgid "Variable Factor"
msgstr ""
#. module: delivery
#: model:ir.actions.act_window,help:delivery.action_delivery_grid_form
msgid ""
"The delivery price list allows you to compute the cost and sales price of "
"the delivery according to the weight of the products and other criteria. You "
"can define several price lists for one delivery method, per country or a "
"zone in a specific country defined by a postal code range."
msgstr ""
#. module: delivery
#: field:delivery.carrier,amount:0
msgid "Amount"
msgstr ""
#. module: delivery
#: selection:delivery.grid.line,price_type:0
msgid "Fixed"
msgstr ""
#. module: delivery
#: field:delivery.carrier,name:0
#: view:delivery.sale.order:0
#: field:delivery.sale.order,carrier_id:0
#: model:ir.actions.act_window,name:delivery.action_delivery_carrier_form
#: model:ir.ui.menu,name:delivery.menu_action_delivery_carrier_form
#: field:res.partner,property_delivery_carrier:0
#: field:sale.order,carrier_id:0
msgid "Delivery Method"
msgstr ""
#. module: delivery
#: code:addons/delivery/delivery.py:213
#, python-format
msgid "No price available!"
msgstr ""
#. module: delivery
#: model:ir.model,name:delivery.model_stock_move
msgid "Stock Move"
msgstr ""
#. module: delivery
#: field:stock.picking,carrier_tracking_ref:0
msgid "Carrier Tracking Ref"
msgstr ""
#. module: delivery
#: field:stock.picking,weight_net:0
msgid "Net Weight"
msgstr ""
#. module: delivery
#: view:delivery.grid.line:0
msgid "Grid Lines"
msgstr ""
#. module: delivery
#: view:delivery.carrier:0
#: view:delivery.grid:0
msgid "Grid definition"
msgstr ""
#. module: delivery
#: view:delivery.sale.order:0
msgid "_Cancel"
msgstr ""
#. module: delivery
#: field:delivery.grid.line,operator:0
msgid "Operator"
msgstr ""
#. module: delivery
#: model:ir.model,name:delivery.model_res_partner
msgid "Partner"
msgstr ""
#. module: delivery
#: model:ir.model,name:delivery.model_sale_order
msgid "Sales Order"
msgstr ""
#. module: delivery
#: model:ir.actions.act_window,help:delivery.action_delivery_carrier_form1
msgid ""
"Define your delivery methods and their pricing. The delivery costs can be "
"added on the sale order form or in the invoice, based on the delivery orders."
msgstr ""
#. module: delivery
#: report:sale.shipping:0
msgid "Lot"
msgstr ""
#. module: delivery
#: field:delivery.carrier,partner_id:0
msgid "Transport Company"
msgstr ""
#. module: delivery
#: model:ir.model,name:delivery.model_delivery_grid
msgid "Delivery Grid"
msgstr ""
#. module: delivery
#: code:addons/delivery/delivery.py:213
#, python-format
msgid "No line matched this product or order in the choosed delivery grid."
msgstr ""
#. module: delivery
#: report:sale.shipping:0
msgid "Invoiced to"
msgstr ""
#. module: delivery
#: model:ir.model,name:delivery.model_stock_picking
msgid "Picking List"
msgstr ""
#. module: delivery
#: field:delivery.carrier,grids_id:0
msgid "Delivery Grids"
msgstr ""
#. module: delivery
#: model:ir.model,name:delivery.model_delivery_sale_order
msgid "Make Delievery"
msgstr ""
#. module: delivery
#: field:delivery.grid.line,name:0
msgid "Name"
msgstr ""
#. module: delivery
#: field:delivery.grid,zip_from:0
msgid "Start Zip"
msgstr ""
#. module: delivery
#: help:delivery.carrier,amount:0
msgid ""
"Amount of the order to benefit from a free shipping, expressed in the "
"company currency"
msgstr ""
#. module: delivery
#: code:addons/delivery/stock.py:89
#, python-format
msgid "Warning"
msgstr ""
#. module: delivery
#: field:delivery.grid.line,grid_id:0
msgid "Grid"
msgstr ""
#. module: delivery
#: help:delivery.grid,active:0
msgid ""
"If the active field is set to False, it will allow you to hide the delivery "
"grid without removing it."
msgstr ""
#. module: delivery
#: field:delivery.grid,zip_to:0
msgid "To Zip"
msgstr ""
#. module: delivery
#: code:addons/delivery/delivery.py:141
#, python-format
msgid "Default price"
msgstr ""
#. module: delivery
#: model:ir.model,name:delivery.model_delivery_define_delivery_steps_wizard
msgid "delivery.define.delivery.steps.wizard"
msgstr ""
#. module: delivery
#: field:delivery.carrier,normal_price:0
msgid "Normal Price"
msgstr ""
#. module: delivery
#: report:sale.shipping:0
msgid "Order Date"
msgstr ""
#. module: delivery
#: field:delivery.grid,name:0
msgid "Grid Name"
msgstr ""
#. module: delivery
#: view:stock.move:0
msgid "Weights"
msgstr ""
#. module: delivery
#: field:stock.picking,number_of_packages:0
msgid "Number of Packages"
msgstr ""
#. module: delivery
#: selection:delivery.grid.line,type:0
#: selection:delivery.grid.line,variable_factor:0
#: report:sale.shipping:0
#: field:stock.move,weight:0
#: field:stock.picking,weight:0
msgid "Weight"
msgstr ""
#. module: delivery
#: help:delivery.carrier,use_detailed_pricelist:0
msgid ""
"Check this box if you want to manage delivery prices that depends on the "
"destination, the weight, the total of the order, etc."
msgstr ""
#. module: delivery
#: help:delivery.carrier,normal_price:0
msgid ""
"Keep empty if the pricing depends on the advanced pricing per destination"
msgstr ""
#. module: delivery
#: constraint:stock.move:0
msgid "You can not move products from or to a location of the type view."
msgstr ""
#. module: delivery
#: code:addons/delivery/wizard/delivery_sale_order.py:70
#, python-format
msgid "No grid available !"
msgstr ""
#. module: delivery
#: selection:delivery.grid.line,operator:0
msgid ">="
msgstr ""
#. module: delivery
#: code:addons/delivery/wizard/delivery_sale_order.py:53
#: code:addons/delivery/wizard/delivery_sale_order.py:73
#, python-format
msgid "Order not in draft state !"
msgstr ""
#. module: delivery
#: view:delivery.define.delivery.steps.wizard:0
msgid "Choose Your Default Picking Policy"
msgstr ""
#. module: delivery
#: constraint:stock.move:0
msgid "You try to assign a lot which is not from the same product"
msgstr ""
#. module: delivery
#: field:delivery.carrier,active:0
#: field:delivery.grid,active:0
msgid "Active"
msgstr ""
#. module: delivery
#: report:sale.shipping:0
msgid "Shipping Date"
msgstr ""
#. module: delivery
#: field:delivery.carrier,product_id:0
msgid "Delivery Product"
msgstr ""
#. module: delivery
#: view:delivery.grid.line:0
msgid "Condition"
msgstr ""
#. module: delivery
#: field:delivery.grid.line,standard_price:0
msgid "Cost Price"
msgstr ""
#. module: delivery
#: field:delivery.define.delivery.steps.wizard,picking_policy:0
msgid "Picking Policy"
msgstr ""
#. module: delivery
#: selection:delivery.grid.line,price_type:0
#: field:delivery.grid.line,type:0
msgid "Variable"
msgstr ""
#. module: delivery
#: help:res.partner,property_delivery_carrier:0
msgid "This delivery method will be used when invoicing from picking."
msgstr ""
#. module: delivery
#: sql_constraint:stock.picking:0
msgid "Reference must be unique per Company!"
msgstr ""
#. module: delivery
#: field:delivery.grid.line,max_value:0
msgid "Maximum Value"
msgstr ""
#. module: delivery
#: report:sale.shipping:0
msgid "Quantity"
msgstr ""
#. module: delivery
#: view:delivery.define.delivery.steps.wizard:0
#: model:ir.actions.act_window,name:delivery.action_define_delivery_steps
msgid "Setup Your Picking Policy"
msgstr ""
#. module: delivery
#: model:ir.actions.act_window,name:delivery.action_delivery_carrier_form1
msgid "Define Delivery Methods"
msgstr ""
#. module: delivery
#: help:delivery.carrier,free_if_more_than:0
msgid ""
"If the order is more expensive than a certain amount, the customer can "
"benefit from a free shipping"
msgstr ""
#. module: delivery
#: help:sale.order,carrier_id:0
msgid ""
"Complete this field if you plan to invoice the shipping based on picking."
msgstr ""
#. module: delivery
#: view:delivery.define.delivery.steps.wizard:0
msgid "Cancel"
msgstr ""
#. module: delivery
#: code:addons/delivery/delivery.py:130
#, python-format
msgid "Free if more than %.2f"
msgstr ""
#. module: delivery
#: sql_constraint:sale.order:0
msgid "Order Reference must be unique per Company!"
msgstr ""
#. module: delivery
#: model:ir.actions.act_window,help:delivery.action_delivery_carrier_form
msgid ""
"Define the delivery methods you are using and their pricing in order to "
"reinvoice the delivery costs when you are doing invoicing based on delivery "
"orders"
msgstr ""
#. module: delivery
#: view:res.partner:0
msgid "Sales & Purchases"
msgstr ""
#. module: delivery
#: selection:delivery.grid.line,operator:0
msgid "<="
msgstr ""
#. module: delivery
#: constraint:stock.move:0
msgid "You must assign a production lot for this product"
msgstr ""
#. module: delivery
#: field:delivery.carrier,free_if_more_than:0
msgid "Free If More Than"
msgstr ""
#. module: delivery
#: view:delivery.sale.order:0
msgid "Create Deliveries"
msgstr ""
#. module: delivery
#: view:delivery.carrier:0
#: view:delivery.grid:0
#: field:delivery.grid,state_ids:0
msgid "States"
msgstr ""
#. module: delivery
#: report:sale.shipping:0
msgid "Description"
msgstr ""
#. module: delivery
#: help:delivery.carrier,active:0
msgid ""
"If the active field is set to False, it will allow you to hide the delivery "
"carrier without removing it."
msgstr ""
#. module: delivery
#: model:ir.actions.act_window,name:delivery.action_delivery_grid_form
#: model:ir.ui.menu,name:delivery.menu_action_delivery_grid_form
msgid "Delivery Pricelist"
msgstr ""
#. module: delivery
#: field:delivery.carrier,price:0
#: selection:delivery.grid.line,type:0
#: selection:delivery.grid.line,variable_factor:0
msgid "Price"
msgstr ""
#. module: delivery
#: code:addons/delivery/wizard/delivery_sale_order.py:70
#, python-format
msgid "No grid matching for this carrier !"
msgstr ""
#. module: delivery
#: model:ir.ui.menu,name:delivery.menu_delivery
msgid "Delivery"
msgstr ""
#. module: delivery
#: selection:delivery.grid.line,type:0
#: selection:delivery.grid.line,variable_factor:0
msgid "Weight * Volume"
msgstr ""
#. module: delivery
#: selection:delivery.grid.line,operator:0
msgid "="
msgstr ""
#. module: delivery
#: code:addons/delivery/stock.py:90
#, python-format
msgid "The carrier %s (id: %d) has no delivery grid!"
msgstr ""
#. module: delivery
#: view:delivery.carrier:0
msgid "Pricing Information"
msgstr ""
#. module: delivery
#: selection:delivery.define.delivery.steps.wizard,picking_policy:0
msgid "Deliver all products at once"
msgstr ""
#. module: delivery
#: field:delivery.carrier,use_detailed_pricelist:0
msgid "Advanced Pricing per Destination"
msgstr ""
#. module: delivery
#: view:delivery.carrier:0
#: field:delivery.grid,carrier_id:0
#: model:ir.model,name:delivery.model_delivery_carrier
#: report:sale.shipping:0
#: field:stock.picking,carrier_id:0
msgid "Carrier"
msgstr ""
#. module: delivery
#: view:delivery.sale.order:0
msgid "_Apply"
msgstr ""
#. module: delivery
#: field:sale.order,id:0
msgid "ID"
msgstr ""
#. module: delivery
#: code:addons/delivery/wizard/delivery_sale_order.py:53
#: code:addons/delivery/wizard/delivery_sale_order.py:73
#, python-format
msgid "The order state have to be draft to add delivery lines."
msgstr ""
#. module: delivery
#: constraint:res.partner:0
msgid "Error ! You cannot create recursive associated members."
msgstr ""
#. module: delivery
#: field:delivery.grid,sequence:0
msgid "Sequence"
msgstr ""
#. module: delivery
#: field:delivery.grid.line,list_price:0
msgid "Sale Price"
msgstr ""
#. module: delivery
#: model:ir.actions.act_window,name:delivery.action_delivery_cost
#: view:sale.order:0
msgid "Delivery Costs"
msgstr ""
#. module: delivery
#: selection:delivery.define.delivery.steps.wizard,picking_policy:0
msgid "Deliver each product when available"
msgstr ""
#. module: delivery
#: view:delivery.define.delivery.steps.wizard:0
msgid "Apply"
msgstr ""
#. module: delivery
#: field:delivery.grid.line,price_type:0
msgid "Price Type"
msgstr ""
+36 -1
View File
@@ -18,8 +18,10 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import fields,osv
import time
from osv import fields,osv
from tools.translate import _
# Overloaded sale_order to manage carriers :
class sale_order(osv.osv):
@@ -41,6 +43,39 @@ class sale_order(osv.osv):
result.update(carrier_id=order.carrier_id.id)
return result
def delivery_set(self, cr, uid, ids, context=None):
order_obj = self.pool.get('sale.order')
line_obj = self.pool.get('sale.order.line')
grid_obj = self.pool.get('delivery.grid')
carrier_obj = self.pool.get('delivery.carrier')
acc_fp_obj = self.pool.get('account.fiscal.position')
for order in self.browse(cr, uid, ids, context=context):
grid_id = carrier_obj.grid_get(cr, uid, [order.carrier_id.id], order.partner_shipping_id.id)
if not grid_id:
raise osv.except_osv(_('No grid available !'), _('No grid matching for this carrier !'))
if not order.state in ('draft'):
raise osv.except_osv(_('Order not in draft state !'), _('The order state have to be draft to add delivery lines.'))
grid = grid_obj.browse(cr, uid, grid_id, context=context)
taxes = grid.carrier_id.product_id.taxes_id
fpos = order.fiscal_position or False
taxes_ids = acc_fp_obj.map_tax(cr, uid, fpos, taxes)
#create the sale order line
line_obj.create(cr, uid, {
'order_id': order.id,
'name': grid.carrier_id.name,
'product_uom_qty': 1,
'product_uom': grid.carrier_id.product_id.uom_id.id,
'product_id': grid.carrier_id.product_id.id,
'price_unit': grid_obj.get_price(cr, uid, grid.id, order, time.strftime('%Y-%m-%d'), context),
'tax_id': [(6,0,taxes_ids)],
'type': 'make_to_stock'
})
#remove the value of the carrier_id field on the sale order
return self.write(cr, uid, ids, {'carrier_id': False}, context=context)
#return {'type': 'ir.actions.act_window_close'} action reload?
sale_order()

Some files were not shown because too many files have changed in this diff Show More