commit
882ead8b39
|
@ -111,7 +111,7 @@ class account_payment_term_line(osv.osv):
|
|||
'days': fields.integer('Number of Days', required=True, help="Number of days to add before computation of the day of month." \
|
||||
"If Date=15/01, Number of Days=22, Day of Month=-1, then the due date is 28/02."),
|
||||
'days2': fields.integer('Day of the Month', required=True, help="Day of the month, set -1 for the last day of the current month. If it's positive, it gives the day of the next month. Set 0 for net days (otherwise it's based on the beginning of the month)."),
|
||||
'payment_id': fields.many2one('account.payment.term', 'Payment Term', required=True, select=True),
|
||||
'payment_id': fields.many2one('account.payment.term', 'Payment Term', required=True, select=True, ondelete='cascade'),
|
||||
}
|
||||
_defaults = {
|
||||
'value': 'balance',
|
||||
|
@ -1375,7 +1375,7 @@ class account_move(osv.osv):
|
|||
balance = 0.0
|
||||
for line in line_ids:
|
||||
if line[2]:
|
||||
balance += (line[2]['debit'] or 0.00)- (line[2]['credit'] or 0.00)
|
||||
balance += (line[2].get('debit',0.00)- (line[2].get('credit',0.00)))
|
||||
return {'value': {'balance': balance}}
|
||||
|
||||
def write(self, cr, uid, ids, vals, context=None):
|
||||
|
@ -1398,7 +1398,7 @@ class account_move(osv.osv):
|
|||
if not l[0]:
|
||||
l[2].update({
|
||||
'reconcile_id':False,
|
||||
'reconcil_partial_id':False,
|
||||
'reconcile_partial_id':False,
|
||||
'analytic_lines':False,
|
||||
'invoice':False,
|
||||
'ref':False,
|
||||
|
@ -2516,22 +2516,25 @@ class account_account_template(osv.osv):
|
|||
'nocreate': False,
|
||||
}
|
||||
|
||||
def _check_type(self, cr, uid, ids, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
accounts = self.browse(cr, uid, ids, context=context)
|
||||
for account in accounts:
|
||||
if account.parent_id and account.parent_id.type != 'view':
|
||||
return False
|
||||
return True
|
||||
|
||||
_check_recursion = check_cycle
|
||||
_constraints = [
|
||||
(_check_recursion, 'Error!\nYou cannot create recursive account templates.', ['parent_id']),
|
||||
(_check_type, 'Configuration Error!\nYou cannot define children to an account that has internal type other than "View".', ['type']),
|
||||
|
||||
]
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
if 'parent_id' in vals:
|
||||
parent = self.read(cr, uid, [vals['parent_id']], ['type'])
|
||||
if parent and parent[0]['type'] != 'view':
|
||||
raise osv.except_osv(_('Warning!'), _("You may only select a parent account of type 'View'."))
|
||||
return super(account_account_template, self).create(cr, uid, vals, context=context)
|
||||
|
||||
def write(self, cr, uid, ids, vals, context=None):
|
||||
if 'parent_id' in vals:
|
||||
parent = self.read(cr, uid, [vals['parent_id']], ['type'])
|
||||
if parent and parent[0]['type'] != 'view':
|
||||
raise osv.except_osv(_('Warning!'), _("You may only select a parent account of type 'View'."))
|
||||
return super(account_account_template, self).write(cr, uid, ids, vals, context=context)
|
||||
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
if not ids:
|
||||
return []
|
||||
|
@ -2999,6 +3002,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
|
||||
_columns = {
|
||||
'company_id':fields.many2one('res.company', 'Company', required=True),
|
||||
'currency_id': fields.many2one('res.currency', 'Currency', help="Currency as per company's country."),
|
||||
'only_one_chart_template': fields.boolean('Only One Chart Template Available'),
|
||||
'chart_template_id': fields.many2one('account.chart.template', 'Chart Template', required=True),
|
||||
'bank_accounts_id': fields.one2many('account.bank.accounts.wizard', 'bank_account_id', 'Cash and Banks', required=True),
|
||||
|
@ -3009,6 +3013,13 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
'purchase_tax_rate': fields.float('Purchase Tax(%)'),
|
||||
'complete_tax_set': fields.boolean('Complete Set of Taxes', help='This boolean helps you to choose if you want to propose to the user to encode the sales and purchase rates or use the usual m2o fields. This last choice assumes that the set of tax defined for the chosen template is complete'),
|
||||
}
|
||||
|
||||
def onchange_company_id(self, cr, uid, ids, company_id, context=None):
|
||||
currency_id = False
|
||||
if company_id:
|
||||
currency_id = self.pool.get('res.company').browse(cr, uid, company_id, context=context).currency_id.id
|
||||
return {'value': {'currency_id': currency_id}}
|
||||
|
||||
def onchange_tax_rate(self, cr, uid, ids, rate=False, context=None):
|
||||
return {'value': {'purchase_tax_rate': rate or False}}
|
||||
|
||||
|
@ -3039,6 +3050,13 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
res.update({'bank_accounts_id': [{'acc_name': _('Cash'), 'account_type': 'cash'},{'acc_name': _('Bank'), 'account_type': 'bank'}]})
|
||||
if 'company_id' in fields:
|
||||
res.update({'company_id': self.pool.get('res.users').browse(cr, uid, [uid], context=context)[0].company_id.id})
|
||||
if 'currency_id' in fields:
|
||||
company_id = res.get('company_id') or False
|
||||
if company_id:
|
||||
company_obj = self.pool.get('res.company')
|
||||
country_id = company_obj.browse(cr, uid, company_id, context=context).country_id.id
|
||||
currency_id = company_obj.on_change_country(cr, uid, company_id, country_id, context=context)['value']['currency_id']
|
||||
res.update({'currency_id': currency_id})
|
||||
|
||||
ids = self.pool.get('account.chart.template').search(cr, uid, [('visible', '=', True)], context=context)
|
||||
if ids:
|
||||
|
@ -3343,6 +3361,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
ir_values_obj = self.pool.get('ir.values')
|
||||
obj_wizard = self.browse(cr, uid, ids[0])
|
||||
company_id = obj_wizard.company_id.id
|
||||
self.pool.get('res.company').write(cr, uid, [company_id], {'currency_id': obj_wizard.currency_id.id})
|
||||
# If the floats for sale/purchase rates have been filled, create templates from them
|
||||
self._create_tax_templates_from_rates(cr, uid, obj_wizard, company_id, context=context)
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<group name="accounting" col="2" colspan="2" attrs="{'invisible': [('company_id','=', False)]}">
|
||||
<separator string="Accounting Information" colspan="2"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
</group>
|
||||
</group>
|
||||
</field>
|
||||
|
@ -28,7 +28,7 @@
|
|||
<field name="inherit_id" ref="base.view_partner_bank_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="acc_number" position="after">
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -214,7 +214,7 @@ class account_invoice(osv.osv):
|
|||
\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,
|
||||
'date_due': fields.date('Due Date', readonly=True, states={'draft':[('readonly',False)]}, select=True,
|
||||
help="If you use payment terms, the due date will be computed automatically at the generation "\
|
||||
"of accounting entries. If you keep the payment term and the due date empty, it means direct payment. The payment term may compute several due dates, for example 50% now, 50% in one month."),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner', change_default=True, readonly=True, required=True, states={'draft':[('readonly',False)]}),
|
||||
|
@ -253,7 +253,7 @@ class account_invoice(osv.osv):
|
|||
'currency_id': fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'journal_id': fields.many2one('account.journal', 'Journal', required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True, change_default=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'check_total': fields.float('Verification Total', digits_compute=dp.get_precision('Account'), states={'open':[('readonly',True)],'close':[('readonly',True)]}),
|
||||
'check_total': fields.float('Verification Total', digits_compute=dp.get_precision('Account'), readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'reconciled': fields.function(_reconciled, string='Paid/Reconciled', type='boolean',
|
||||
store={
|
||||
'account.invoice': (lambda self, cr, uid, ids, c={}: ids, None, 50), # Check if we can remove ?
|
||||
|
@ -767,17 +767,20 @@ class account_invoice(osv.osv):
|
|||
if not key in tax_key:
|
||||
raise osv.except_osv(_('Warning!'), _('Taxes are missing!\nClick on compute button.'))
|
||||
|
||||
def compute_invoice_totals(self, cr, uid, inv, company_currency, ref, invoice_move_lines):
|
||||
def compute_invoice_totals(self, cr, uid, inv, company_currency, ref, invoice_move_lines, context=None):
|
||||
if context is None:
|
||||
context={}
|
||||
total = 0
|
||||
total_currency = 0
|
||||
cur_obj = self.pool.get('res.currency')
|
||||
for i in invoice_move_lines:
|
||||
if inv.currency_id.id != company_currency:
|
||||
context.update({'date': inv.date_invoice or time.strftime('%Y-%m-%d')})
|
||||
i['currency_id'] = inv.currency_id.id
|
||||
i['amount_currency'] = i['price']
|
||||
i['price'] = cur_obj.compute(cr, uid, inv.currency_id.id,
|
||||
company_currency, i['price'],
|
||||
context={'date': inv.date_invoice or time.strftime('%Y-%m-%d')})
|
||||
context=context)
|
||||
else:
|
||||
i['amount_currency'] = False
|
||||
i['currency_id'] = False
|
||||
|
@ -887,7 +890,7 @@ class account_invoice(osv.osv):
|
|||
# create one move line for the total and possibly adjust the other lines amount
|
||||
total = 0
|
||||
total_currency = 0
|
||||
total, total_currency, iml = self.compute_invoice_totals(cr, uid, inv, company_currency, ref, iml)
|
||||
total, total_currency, iml = self.compute_invoice_totals(cr, uid, inv, company_currency, ref, iml, context=ctx)
|
||||
acc_id = inv.account_id.id
|
||||
|
||||
name = inv['name'] or '/'
|
||||
|
|
|
@ -127,7 +127,7 @@
|
|||
<field name="user_id"/>
|
||||
<field name="date_due"/>
|
||||
<field name="origin"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
<field name="residual" sum="Residual Amount"/>
|
||||
<field name="amount_untaxed" sum="Untaxed Amount"/>
|
||||
<field name="amount_total" sum="Total Amount"/>
|
||||
|
@ -184,7 +184,7 @@
|
|||
name="account_id" groups="account.group_account_user"/>
|
||||
<field name="journal_id" groups="account.group_account_user"
|
||||
on_change="onchange_journal_id(journal_id, context)" widget="selection"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
|
@ -271,7 +271,7 @@
|
|||
<field name="debit"/>
|
||||
<field name="credit"/>
|
||||
<field name="amount_currency"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
|
@ -332,8 +332,8 @@
|
|||
<field domain="[('company_id', '=', company_id),('type','=', 'receivable')]"
|
||||
name="account_id" groups="account.group_account_user"/>
|
||||
|
||||
<label for="currency_id"/>
|
||||
<div>
|
||||
<label for="currency_id" groups="base.group_multi_currency"/>
|
||||
<div groups="base.group_multi_currency">
|
||||
<field name="currency_id" class="oe_inline"/>
|
||||
<!-- note fp: I don't think we need this feature ?
|
||||
<button name="%(action_account_change_currency)d" type="action"
|
||||
|
@ -429,8 +429,8 @@
|
|||
<field name="journal_id" groups="base.group_user"/>
|
||||
<field name="debit"/>
|
||||
<field name="credit"/>
|
||||
<field name="amount_currency"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="amount_currency" groups="base.group_multi_currency"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
<menuitem id="menu_finance_periodical_processing_billing" name="Billing" parent="menu_finance_periodical_processing" sequence="35"/>
|
||||
|
||||
<menuitem id="next_id_22" name="Partners" parent="menu_finance_generic_reporting" sequence="1"/>
|
||||
<menuitem id="menu_multi_currency" name="Multi-Currencies" parent="menu_finance_generic_reporting" sequence="10"/>
|
||||
<menuitem id="menu_multi_currency" name="Multi-Currencies" parent="menu_finance_generic_reporting" sequence="10" groups="base.group_multi_currency"/>
|
||||
<menuitem
|
||||
parent="account.menu_finance_legal_statement"
|
||||
id="final_accounting_reports"
|
||||
|
|
|
@ -204,7 +204,7 @@
|
|||
attrs="{'invisible':[('type','!=','consolidation')]}"
|
||||
widget="many2many_tags"/>
|
||||
</group>
|
||||
<group>
|
||||
<group groups="base.group_multi_currency">
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_mode" attrs="{'readonly': [('currency_id','=',False)]}"/>
|
||||
</group>
|
||||
|
@ -489,7 +489,7 @@
|
|||
<group>
|
||||
<field name="default_debit_account_id" attrs="{'required':[('type','in', ('cash', 'bank'))]}" domain="[('type','<>','view'),('type','<>','consolidation')]"/>
|
||||
<field name="default_credit_account_id" attrs="{'required':[('type','in',('cash', 'bank'))]}" domain="[('type','<>','view'),('type','<>','consolidation')]"/>
|
||||
<field name="currency"/>
|
||||
<field name="currency" groups="base.group_multi_currency"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
</group>
|
||||
|
@ -1068,7 +1068,7 @@
|
|||
<field name="account_tax_id"/>
|
||||
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('parent_id','!=',False)]"/>
|
||||
<field name="amount_currency" attrs="{'readonly':[('state','=','valid')]}"/>
|
||||
<field name="currency_id" attrs="{'readonly':[('state','=','valid')]}"/>
|
||||
<field name="currency_id" attrs="{'readonly':[('state','=','valid')]}" groups="base.group_multi_currency"/>
|
||||
<field name="reconcile_partial_id"/>
|
||||
<field name="reconcile_id"/>
|
||||
<field name="state"/>
|
||||
|
@ -1119,7 +1119,7 @@
|
|||
<field name="tax_amount"/>
|
||||
<field name="account_tax_id" domain="[('parent_id','=',False)]"/>
|
||||
</group>
|
||||
<group attrs="{'readonly':[('state','=','valid')]}" string="Currency">
|
||||
<group attrs="{'readonly':[('state','=','valid')]}" string="Currency" groups="base.group_multi_currency">
|
||||
<field name="currency_id"/>
|
||||
<field name="amount_currency"/>
|
||||
</group>
|
||||
|
@ -1167,8 +1167,8 @@
|
|||
<field name="credit"/>
|
||||
|
||||
<separator colspan="4" string="Optional Information"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="amount_currency"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
<field name="amount_currency" groups="base.group_multi_currency"/>
|
||||
<field name="quantity"/>
|
||||
<field name="move_id" required="False"/>
|
||||
<newline/>
|
||||
|
@ -1395,7 +1395,7 @@
|
|||
<field name="account_tax_id" domain="[('parent_id','=',False)]"/>
|
||||
</group>
|
||||
|
||||
<group string="Currency">
|
||||
<group string="Currency" groups="base.group_multi_currency">
|
||||
<field name="currency_id"/>
|
||||
<field name="amount_currency"/>
|
||||
</group>
|
||||
|
@ -1433,7 +1433,7 @@
|
|||
<field name="credit" sum="Total Credit"/>
|
||||
<field name="analytic_account_id" domain="[('parent_id','!=',False)]" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="amount_currency"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
<field name="tax_code_id"/>
|
||||
<field name="tax_amount"/>
|
||||
<field name="state"/>
|
||||
|
@ -2076,7 +2076,7 @@
|
|||
<field name="type"/>
|
||||
<field name="user_type"/>
|
||||
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
<field name="reconcile"/>
|
||||
<field name="chart_template_id"/>
|
||||
</group>
|
||||
|
@ -2369,20 +2369,15 @@
|
|||
<group string="res_config_contents" position="replace">
|
||||
<field name="only_one_chart_template" invisible="1"/>
|
||||
<field name="complete_tax_set" invisible="1"/>
|
||||
<div groups="base.group_multi_company">
|
||||
<label for="company_id"/>
|
||||
<field name="company_id" widget="selection"/> <!-- we assume that this wizard will be run only by administrators and as this field may cause problem if hidden (because of the default company of the user removed from the selection because already configured), we simply choosed to remove the group "multi company" of it -->
|
||||
</div>
|
||||
<group>
|
||||
<div attrs="{'invisible': [('only_one_chart_template','=',True)]}">
|
||||
<label for="chart_template_id"/>
|
||||
<group col="1">
|
||||
<group attrs="{'invisible': [('only_one_chart_template','=',True)]}">
|
||||
<field name="chart_template_id" widget="selection" on_change="onchange_chart_template_id(chart_template_id)" domain="[('visible','=', True)]"/>
|
||||
</div>
|
||||
<newline/>
|
||||
<group groups="account.group_account_user">
|
||||
<field name="code_digits"/>
|
||||
</group>
|
||||
<group groups="base.group_multi_company">
|
||||
<field name="company_id" widget="selection" on_change="onchange_company_id(company_id)"/> <!-- we assume that this wizard will be run only by administrators and as this field may cause problem if hidden (because of the default company of the user removed from the selection because already configured), we simply choosed to remove the group "multi company" of it -->
|
||||
</group>
|
||||
<group>
|
||||
<field name="currency_id" class="oe_inline"/>
|
||||
<field name="sale_tax" attrs="{'invisible': [('complete_tax_set', '!=', True)]}" domain="[('chart_template_id', '=', chart_template_id),('parent_id','=',False),('type_tax_use','in',('sale','all'))]"/>
|
||||
<label for="sale_tax_rate" string="Sale Tax" attrs="{'invisible': [('complete_tax_set', '=', True)]}"/>
|
||||
<div attrs="{'invisible': [('complete_tax_set', '=', True)]}">
|
||||
|
@ -2394,17 +2389,10 @@
|
|||
<field name="purchase_tax_rate" class="oe_inline"/> %%
|
||||
</div>
|
||||
</group>
|
||||
<group groups="account.group_account_user">
|
||||
<field name="code_digits"/>
|
||||
</group>
|
||||
</group>
|
||||
<div groups="account.group_account_user">
|
||||
<label for="bank_accounts_id" string="Bank Information"/>
|
||||
<field name="bank_accounts_id">
|
||||
<tree editable="bottom">
|
||||
<field name="acc_name"/>
|
||||
<field name="account_type"/>
|
||||
<field name="currency_id" widget="selection"/>
|
||||
</tree>
|
||||
</field>
|
||||
</div>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -2566,7 +2554,7 @@ action = pool.get('res.config').next(cr, uid, [], context)
|
|||
<field name="date" attrs="{'readonly':[('state','!=','draft')]}" on_change="onchange_date(date, company_id)"/>
|
||||
<field name="closing_date" readonly="1"/>
|
||||
<field name="period_id" class="oe_inline"/>
|
||||
<field name="currency" invisible="1"/>
|
||||
<field name="currency" invisible="1" groups="base.group_multi_currency"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
<form string="Account Board" version="7.0">
|
||||
<board style="2-1">
|
||||
<column>
|
||||
<action name="%(account.action_invoice_tree1)d" creatable="true" string="Draft Customer Invoices" domain="[('state','in',('draft','proforma2')), ('type','=','out_invoice')]"/>
|
||||
<action name="%(action_company_analysis_tree)d" string="Company Analysis"/>
|
||||
</column>
|
||||
<column>
|
||||
|
|
|
@ -45,7 +45,6 @@
|
|||
<record id="conf_chart0" model="account.account.template">
|
||||
<field name="code">0</field>
|
||||
<field name="name">Configurable Account Chart</field>
|
||||
<field eval="0" name="parent_id"/>
|
||||
<field name="type">view</field>
|
||||
<field name="user_type" ref="data_account_type_view"/>
|
||||
</record>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<record id="chart0" model="account.account">
|
||||
<field name="code">X0</field>
|
||||
<field name="name">Chart For Automated Tests</field>
|
||||
<field eval="0" name="parent_id"/>
|
||||
<field name="type">view</field>
|
||||
<field name="user_type" ref="data_account_type_view"/>
|
||||
</record>
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
<field name="credit"/>
|
||||
<field name="balance"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
<field name="date" invisible="1"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="partner_id" invisible="1"/>
|
||||
|
@ -137,8 +137,8 @@
|
|||
</group>
|
||||
<group string="Amount">
|
||||
<field name="amount"/>
|
||||
<label for="amount_currency"/>
|
||||
<div>
|
||||
<label for="amount_currency" groups="base.group_multi_currency"/>
|
||||
<div groups="base.group_multi_currency">
|
||||
<field name="amount_currency" class="oe_inline"/>
|
||||
<field name="currency_id" class="oe_inline"/>
|
||||
</div>
|
||||
|
@ -251,8 +251,8 @@
|
|||
</group>
|
||||
<group string="Amount">
|
||||
<field name="amount"/>
|
||||
<label for="amount_currency"/>
|
||||
<div>
|
||||
<label for="amount_currency" groups="base.group_multi_currency"/>
|
||||
<div groups="base.group_multi_currency">
|
||||
<field name="amount_currency" class="oe_inline"/>
|
||||
<field name="currency_id" class="oe_inline"/>
|
||||
</div>
|
||||
|
|
|
@ -43,8 +43,8 @@ class account_config_settings(osv.osv_memory):
|
|||
string='Default company currency', help="Main currency of the company."),
|
||||
'paypal_account': fields.related('company_id', 'paypal_account', type='char', size=128,
|
||||
string='Paypal account', help="Paypal account (email) for receiving online payments (credit card, etc.) If you set a paypal account, the customer will be able to pay your invoices or quotations with a button \"Pay with Paypal\" in automated emails or through the OpenERP portal."),
|
||||
'company_footer': fields.related('company_id', 'rml_footer2', type='char', size=250, readonly=True,
|
||||
string='Bank accounts on reports will display as followed', help="Bank accounts as printed in the footer of each customer document. This is for information purpose only, you should configure these bank accounts through the above button \"Configure Bank Accounts\"."),
|
||||
'company_footer': fields.related('company_id', 'rml_footer', type='text', readonly=True,
|
||||
string='Bank accounts footer preview', help="Bank accounts as printed in the footer of each printed document"),
|
||||
|
||||
'has_chart_of_accounts': fields.boolean('Company has a chart of accounts'),
|
||||
'chart_template_id': fields.many2one('account.chart.template', 'Template', domain="[('visible','=', True)]"),
|
||||
|
@ -114,6 +114,9 @@ class account_config_settings(osv.osv_memory):
|
|||
help="This purchase tax will be assigned by default on new products."),
|
||||
'decimal_precision': fields.integer('Decimal precision on journal entries',
|
||||
help="""As an example, a decimal precision of 2 will allow journal entries like: 9.99 EUR, whereas a decimal precision of 4 will allow journal entries like: 0.0231 EUR."""),
|
||||
'group_multi_currency': fields.boolean('allow multi currencies',
|
||||
implied_group='base.group_multi_currency',
|
||||
help="Allows you multi currency environment"),
|
||||
}
|
||||
|
||||
def _default_company(self, cr, uid, context=None):
|
||||
|
@ -145,42 +148,45 @@ class account_config_settings(osv.osv_memory):
|
|||
|
||||
def onchange_company_id(self, cr, uid, ids, company_id):
|
||||
# update related fields
|
||||
company = self.pool.get('res.company').browse(cr, uid, company_id)
|
||||
has_chart_of_accounts = company_id not in self.pool.get('account.installer').get_unconfigured_cmp(cr, uid)
|
||||
fiscalyear_count = self.pool.get('account.fiscalyear').search_count(cr, uid,
|
||||
[('date_start', '<=', time.strftime('%Y-%m-%d')), ('date_stop', '>=', time.strftime('%Y-%m-%d')),
|
||||
('company_id', '=', company_id)])
|
||||
values = {
|
||||
'expects_chart_of_accounts': company.expects_chart_of_accounts,
|
||||
'currency_id': company.currency_id.id,
|
||||
'paypal_account': company.paypal_account,
|
||||
'company_footer': company.rml_footer2,
|
||||
'has_chart_of_accounts': has_chart_of_accounts,
|
||||
'has_fiscal_year': bool(fiscalyear_count),
|
||||
'chart_template_id': False,
|
||||
'tax_calculation_rounding_method': company.tax_calculation_rounding_method,
|
||||
}
|
||||
# update journals and sequences
|
||||
for journal_type in ('sale', 'sale_refund', 'purchase', 'purchase_refund'):
|
||||
for suffix in ('_journal_id', '_sequence_prefix', '_sequence_next'):
|
||||
values[journal_type + suffix] = False
|
||||
journal_obj = self.pool.get('account.journal')
|
||||
journal_ids = journal_obj.search(cr, uid, [('company_id', '=', company_id)])
|
||||
for journal in journal_obj.browse(cr, uid, journal_ids):
|
||||
if journal.type in ('sale', 'sale_refund', 'purchase', 'purchase_refund'):
|
||||
values.update({
|
||||
journal.type + '_journal_id': journal.id,
|
||||
journal.type + '_sequence_prefix': journal.sequence_id.prefix,
|
||||
journal.type + '_sequence_next': journal.sequence_id.number_next,
|
||||
})
|
||||
# update taxes
|
||||
ir_values = self.pool.get('ir.values')
|
||||
taxes_id = ir_values.get_default(cr, uid, 'product.product', 'taxes_id', company_id=company_id)
|
||||
supplier_taxes_id = ir_values.get_default(cr, uid, 'product.product', 'supplier_taxes_id', company_id=company_id)
|
||||
values.update({
|
||||
'default_sale_tax': isinstance(taxes_id, list) and taxes_id[0] or taxes_id,
|
||||
'default_purchase_tax': isinstance(supplier_taxes_id, list) and supplier_taxes_id[0] or supplier_taxes_id,
|
||||
})
|
||||
values = {}
|
||||
values['currency_id'] = False
|
||||
if company_id:
|
||||
company = self.pool.get('res.company').browse(cr, uid, company_id)
|
||||
has_chart_of_accounts = company_id not in self.pool.get('account.installer').get_unconfigured_cmp(cr, uid)
|
||||
fiscalyear_count = self.pool.get('account.fiscalyear').search_count(cr, uid,
|
||||
[('date_start', '<=', time.strftime('%Y-%m-%d')), ('date_stop', '>=', time.strftime('%Y-%m-%d')),
|
||||
('company_id', '=', company_id)])
|
||||
values = {
|
||||
'expects_chart_of_accounts': company.expects_chart_of_accounts,
|
||||
'currency_id': company.currency_id.id,
|
||||
'paypal_account': company.paypal_account,
|
||||
'company_footer': company.rml_footer,
|
||||
'has_chart_of_accounts': has_chart_of_accounts,
|
||||
'has_fiscal_year': bool(fiscalyear_count),
|
||||
'chart_template_id': False,
|
||||
'tax_calculation_rounding_method': company.tax_calculation_rounding_method,
|
||||
}
|
||||
# update journals and sequences
|
||||
for journal_type in ('sale', 'sale_refund', 'purchase', 'purchase_refund'):
|
||||
for suffix in ('_journal_id', '_sequence_prefix', '_sequence_next'):
|
||||
values[journal_type + suffix] = False
|
||||
journal_obj = self.pool.get('account.journal')
|
||||
journal_ids = journal_obj.search(cr, uid, [('company_id', '=', company_id)])
|
||||
for journal in journal_obj.browse(cr, uid, journal_ids):
|
||||
if journal.type in ('sale', 'sale_refund', 'purchase', 'purchase_refund'):
|
||||
values.update({
|
||||
journal.type + '_journal_id': journal.id,
|
||||
journal.type + '_sequence_prefix': journal.sequence_id.prefix,
|
||||
journal.type + '_sequence_next': journal.sequence_id.number_next,
|
||||
})
|
||||
# update taxes
|
||||
ir_values = self.pool.get('ir.values')
|
||||
taxes_id = ir_values.get_default(cr, uid, 'product.product', 'taxes_id', company_id=company_id)
|
||||
supplier_taxes_id = ir_values.get_default(cr, uid, 'product.product', 'supplier_taxes_id', company_id=company_id)
|
||||
values.update({
|
||||
'default_sale_tax': isinstance(taxes_id, list) and taxes_id[0] or taxes_id,
|
||||
'default_purchase_tax': isinstance(supplier_taxes_id, list) and supplier_taxes_id[0] or supplier_taxes_id,
|
||||
})
|
||||
return {'value': values}
|
||||
|
||||
def onchange_chart_template_id(self, cr, uid, ids, chart_template_id, context=None):
|
||||
|
|
|
@ -121,6 +121,10 @@
|
|||
</div>
|
||||
<label for="id" string="Features"/>
|
||||
<div>
|
||||
<div>
|
||||
<field name="group_multi_currency" class="oe_inline"/>
|
||||
<label for="group_multi_currency"/>
|
||||
</div>
|
||||
<div>
|
||||
<field name="module_account_accountant" class="oe_inline"/>
|
||||
<label for="module_account_accountant"/>
|
||||
|
@ -219,12 +223,12 @@
|
|||
<label for="id" string="Configuration"/>
|
||||
<div>
|
||||
<div>
|
||||
<label for="company_footer"/>
|
||||
<button name="%(action_bank_tree)d"
|
||||
string="Configure your bank accounts"
|
||||
icon="gtk-go-forward"
|
||||
type="action"
|
||||
class="oe_inline oe_link"/>
|
||||
<label for="company_footer"/>
|
||||
<field name="company_footer"/>
|
||||
</div>
|
||||
<div>
|
||||
|
|
|
@ -30,9 +30,11 @@ class account_common_report(osv.osv_memory):
|
|||
_description = "Account Common Report"
|
||||
|
||||
def onchange_chart_id(self, cr, uid, ids, chart_account_id=False, context=None):
|
||||
res = {}
|
||||
if chart_account_id:
|
||||
company_id = self.pool.get('account.account').browse(cr, uid, chart_account_id, context=context).company_id.id
|
||||
return {'value': {'company_id': company_id}}
|
||||
res['value'] = {'company_id': company_id}
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'chart_account_id': fields.many2one('account.account', 'Chart of Account', help='Select Charts of Accounts', required=True, domain = [('parent_id','=',False)]),
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
</group>
|
||||
<group>
|
||||
<field name="purchase_date"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company" on_change="onchange_company_id(company_id)"/>
|
||||
</group>
|
||||
</group>
|
||||
|
@ -192,7 +192,7 @@
|
|||
<field name="partner_id"/>
|
||||
<field name="purchase_value"/>
|
||||
<field name="value_residual"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
|
@ -211,7 +211,7 @@
|
|||
<field name="purchase_date"/>
|
||||
<field name="purchase_value"/>
|
||||
<field name="value_residual"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
|
|
|
@ -0,0 +1,385 @@
|
|||
# Brazilian Portuguese 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-09-11 18:35+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Brazilian Portuguese <pt_BR@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-09-12 04:36+0000\n"
|
||||
"X-Generator: Launchpad (build 15930)\n"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Search Bank Transactions"
|
||||
msgstr "Procurar Transações Bancárias"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
#: selection:account.bank.statement.line,state:0
|
||||
msgid "Confirmed"
|
||||
msgstr "Confirmado"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement:0
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Glob. Id"
|
||||
msgstr "ID Global"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: selection:account.bank.statement.line.global,type:0
|
||||
msgid "CODA"
|
||||
msgstr "CODA"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,parent_id:0
|
||||
msgid "Parent Code"
|
||||
msgstr "Código da Conta-pai"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Debit"
|
||||
msgstr "Débito"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:cancel.statement.line:0
|
||||
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_cancel_statement_line
|
||||
#: model:ir.model,name:account_bank_statement_extensions.model_cancel_statement_line
|
||||
msgid "Cancel selected statement lines"
|
||||
msgstr "Cancelar linhas de instrução selecionadas"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: constraint:res.partner.bank:0
|
||||
msgid "The RIB and/or IBAN is not valid"
|
||||
msgstr "A RIB e/ ou IBAN não é válido."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Group By..."
|
||||
msgstr "Agrupar Por..."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,state:0
|
||||
msgid "State"
|
||||
msgstr "Situação"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
#: selection:account.bank.statement.line,state:0
|
||||
msgid "Draft"
|
||||
msgstr "Provisório"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Statement"
|
||||
msgstr "Demonstrativo"
|
||||
|
||||
#. 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 "Confirme as linhas do demonstrativo selecionadas"
|
||||
|
||||
#. 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 "Relatório de Balanço Bancário"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:cancel.statement.line:0
|
||||
msgid "Cancel Lines"
|
||||
msgstr "Cancelar Linhas"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line.global:0
|
||||
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement_line_global
|
||||
msgid "Batch Payment Info"
|
||||
msgstr "Informações de Pagamento em Lote"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:confirm.statement.line:0
|
||||
msgid "Confirm Lines"
|
||||
msgstr "Confirmar Linhas"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: code:addons/account_bank_statement_extensions/account_bank_statement.py:130
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Delete operation not allowed ! Please go to the associated bank "
|
||||
"statement in order to delete and/or modify this bank statement line"
|
||||
msgstr ""
|
||||
"Não é permitido excluir! Vá a linha do demonstrativo bancário associada para "
|
||||
"excluir ou modificar esta linha do demonstrativo"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,type:0
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
#: field:account.bank.statement.line,journal_id:0
|
||||
#: report:bank.statement.balance.report:0
|
||||
msgid "Journal"
|
||||
msgstr "Diário"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Confirmed Statement Lines."
|
||||
msgstr "Linhas do Demonstrativo Confirmadas."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Credit Transactions."
|
||||
msgstr "Transações de Crédito"
|
||||
|
||||
#. 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 "cancelar linhas do demonstrativo selecionadas."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,counterparty_number:0
|
||||
msgid "Counterparty Number"
|
||||
msgstr "Número da Contrapartida"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line.global:0
|
||||
msgid "Transactions"
|
||||
msgstr "Transações"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: code:addons/account_bank_statement_extensions/account_bank_statement.py:130
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr "Aviso"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: report:bank.statement.balance.report:0
|
||||
msgid "Closing Balance"
|
||||
msgstr "Saldo final"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: report:bank.statement.balance.report:0
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
#: field:account.bank.statement.line,globalisation_amount:0
|
||||
msgid "Glob. Amount"
|
||||
msgstr "Valor Global"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Debit Transactions."
|
||||
msgstr "Transações de Débito."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Extended Filters..."
|
||||
msgstr "Filtros Extendidos..."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:confirm.statement.line:0
|
||||
msgid "Confirmed lines cannot be changed anymore."
|
||||
msgstr "Linhas confirmadas não podem ser alteradas."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: constraint:res.partner.bank:0
|
||||
msgid ""
|
||||
"\n"
|
||||
"Please define BIC/Swift code on bank for bank type IBAN Account to make "
|
||||
"valid payments"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Por favor defina o BIC/Swift code no Banco para o tipo de conta IBAN para "
|
||||
"fazer pagamentos válidos"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,val_date:0
|
||||
msgid "Valuta Date"
|
||||
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 "Confirmar as linhas do demonstrativo."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:cancel.statement.line:0
|
||||
msgid "Are you sure you want to cancel the selected Bank Statement lines ?"
|
||||
msgstr ""
|
||||
"Você tem certeza de que deseja cancelar as Linhas de Demonstrativo Bancário "
|
||||
"selecionadas?"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: report:bank.statement.balance.report:0
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: selection:account.bank.statement.line.global,type:0
|
||||
msgid "ISO 20022"
|
||||
msgstr "ISO 20022"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Notes"
|
||||
msgstr "Notas"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: selection:account.bank.statement.line.global,type:0
|
||||
msgid "Manual"
|
||||
msgstr "Manual"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Credit"
|
||||
msgstr "Crédito"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,amount:0
|
||||
msgid "Amount"
|
||||
msgstr "Valor"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Fin.Account"
|
||||
msgstr "Fin.Account"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,counterparty_currency:0
|
||||
msgid "Counterparty Currency"
|
||||
msgstr "Moeda da Contrapartida"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,counterparty_bic:0
|
||||
msgid "Counterparty BIC"
|
||||
msgstr "BIC da Contrapartida"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,child_ids:0
|
||||
msgid "Child Codes"
|
||||
msgstr "Códigos derivados (sub-contas)"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:confirm.statement.line:0
|
||||
msgid "Are you sure you want to confirm the selected Bank Statement lines ?"
|
||||
msgstr ""
|
||||
"Você deseja confirmar as Linhas do Demonstrativo Bancário selecionadas?"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: constraint:account.bank.statement.line:0
|
||||
msgid ""
|
||||
"The amount of the voucher must be the same amount as the one on the "
|
||||
"statement line"
|
||||
msgstr ""
|
||||
"O valor do recibo deve ser o mesmo valor da linha equivalente no extrato"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: help:account.bank.statement.line,globalisation_id:0
|
||||
msgid ""
|
||||
"Code to identify transactions belonging to the same globalisation level "
|
||||
"within a batch payment"
|
||||
msgstr ""
|
||||
"Código para identificar transações que pertencem ao nível de globalização "
|
||||
"dentro de um mesmo lote de pagamento"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Draft Statement Lines."
|
||||
msgstr "Linhas de Demonstrativo Provisórias."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Glob. Am."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement_line
|
||||
msgid "Bank Statement Line"
|
||||
msgstr "Linha do Demonstrativo Bancário"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,code:0
|
||||
msgid "Code"
|
||||
msgstr "Código"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,counterparty_name:0
|
||||
msgid "Counterparty Name"
|
||||
msgstr "Nome da Contrapartida"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,name:0
|
||||
msgid "Communication"
|
||||
msgstr "Comunicação"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: model:ir.model,name:account_bank_statement_extensions.model_res_partner_bank
|
||||
msgid "Bank Accounts"
|
||||
msgstr "Contas Bancárias"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: constraint:account.bank.statement:0
|
||||
msgid "The journal and period chosen have to belong to the same company."
|
||||
msgstr "O diário e o período escolhido tem que pertencer à mesma empresa."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement
|
||||
msgid "Bank Statement"
|
||||
msgstr "Extrato Bancário"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Statement Line"
|
||||
msgstr "Linha do Demonstrativo"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: sql_constraint:account.bank.statement.line.global:0
|
||||
msgid "The code must be unique !"
|
||||
msgstr "O código precisa ser único!"
|
||||
|
||||
#. 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 "Linhas do Demonstrativo Bancário"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line.global:0
|
||||
msgid "Child Batch Payments"
|
||||
msgstr "Lote de Pagamentos Filho"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:cancel.statement.line:0
|
||||
#: view:confirm.statement.line:0
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Statement Lines"
|
||||
msgstr "Linhas do Demonstrativo"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Total Amount"
|
||||
msgstr "Valor Total"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,globalisation_id:0
|
||||
msgid "Globalisation ID"
|
||||
msgstr "ID Globalização"
|
|
@ -0,0 +1,207 @@
|
|||
# Spanish (Ecuador) 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-09-12 01:39+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Spanish (Ecuador) <es_EC@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-09-12 04:36+0000\n"
|
||||
"X-Generator: Launchpad (build 15930)\n"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: selection:res.company,check_layout:0
|
||||
msgid "Check on Top"
|
||||
msgstr "Cheque on Top"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.actions.act_window,help:account_check_writing.action_write_check
|
||||
msgid ""
|
||||
"The check payment form allows you to track the payment you do to your "
|
||||
"suppliers specially by check. When you select a supplier, the payment method "
|
||||
"and an amount for the payment, OpenERP will propose to reconcile your "
|
||||
"payment with the open supplier invoices or bills.You can print the check"
|
||||
msgstr ""
|
||||
"El pago de cheques permite rastrear el pago a sus proveedores. Cuando "
|
||||
"selecciona un proveedor, el método de pago y monto, OpenERP propondrá "
|
||||
"conciliarlo con tu factura, y podrá imprimir el cheque."
|
||||
|
||||
#. module: account_check_writing
|
||||
#: view:account.voucher:0
|
||||
#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_bottom
|
||||
#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_middle
|
||||
#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_top
|
||||
msgid "Print Check"
|
||||
msgstr "Imprimir Cheque"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: selection:res.company,check_layout:0
|
||||
msgid "Check in middle"
|
||||
msgstr "Cheque in middle"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: help:res.company,check_layout:0
|
||||
msgid ""
|
||||
"Check on top is compatible with Quicken, QuickBooks and Microsoft Money. "
|
||||
"Check in middle is compatible with Peachtree, ACCPAC and DacEasy. Check on "
|
||||
"bottom is compatible with Peachtree, ACCPAC and DacEasy only"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_check_writing
|
||||
#: selection:res.company,check_layout:0
|
||||
msgid "Check on bottom"
|
||||
msgstr "Cheque on bottom"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: constraint:res.company:0
|
||||
msgid "Error! You can not create recursive companies."
|
||||
msgstr "Error! No puede crear compañías recursivas."
|
||||
|
||||
#. module: account_check_writing
|
||||
#: help:account.journal,allow_check_writing:0
|
||||
msgid "Check this if the journal is to be used for writing checks."
|
||||
msgstr "Activar si este diario es usado para emitir cheques"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: field:account.journal,allow_check_writing:0
|
||||
msgid "Allow Check writing"
|
||||
msgstr "Permitir emisión de cheques"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Description"
|
||||
msgstr "Descripción"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.model,name:account_check_writing.model_account_journal
|
||||
msgid "Journal"
|
||||
msgstr "Diario"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.actions.act_window,name:account_check_writing.action_write_check
|
||||
#: model:ir.ui.menu,name:account_check_writing.menu_action_write_check
|
||||
msgid "Write Checks"
|
||||
msgstr "Escribir Cheque"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Discount"
|
||||
msgstr "Descuento"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Original Amount"
|
||||
msgstr "Monto Inicial"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: view:res.company:0
|
||||
msgid "Configuration"
|
||||
msgstr "Configuración"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: field:account.voucher,allow_check:0
|
||||
msgid "Allow Check Writing"
|
||||
msgstr "Permitir Emisión de Cheques"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Payment"
|
||||
msgstr "Pagos"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: field:account.journal,use_preprint_check:0
|
||||
msgid "Use Preprinted Check"
|
||||
msgstr "Usar cheque preimpreso"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: sql_constraint:res.company:0
|
||||
msgid "The company name must be unique !"
|
||||
msgstr "¡El nombre de la compañía debe ser único!"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Due Date"
|
||||
msgstr "Fecha de vencimiento"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.model,name:account_check_writing.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr "Compañias"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: view:res.company:0
|
||||
msgid "Default Check Layout"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_check_writing
|
||||
#: constraint:account.journal:0
|
||||
msgid ""
|
||||
"Configuration error! The currency chosen should be shared by the default "
|
||||
"accounts too."
|
||||
msgstr ""
|
||||
"Error de Configuración! La moneda seleccionada debe ser compartida por las "
|
||||
"cuentas por defecto tambíen"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
msgid "Balance Due"
|
||||
msgstr "Saldo Deudor"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Check Amount"
|
||||
msgstr "Monto Cheque"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.model,name:account_check_writing.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr "Comprobantes de Pago"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: sql_constraint:account.journal:0
|
||||
msgid "The name of the journal must be unique per company !"
|
||||
msgstr "El nombre del diaro debe ser único por compañía !"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: sql_constraint:account.journal:0
|
||||
msgid "The code of the journal must be unique per company !"
|
||||
msgstr "El código del diario debe ser único por compañía !"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: field:account.voucher,amount_in_word:0
|
||||
msgid "Amount in Word"
|
||||
msgstr "Monto en Letras"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Open Balance"
|
||||
msgstr "Saldo Inicial"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: field:res.company,check_layout:0
|
||||
msgid "Choose Check layout"
|
||||
msgstr "Elegir diseño de cheque"
|
||||
|
||||
#~ msgid "Default Check layout"
|
||||
#~ msgstr "Diseño de cheque por defecto"
|
|
@ -16,11 +16,11 @@
|
|||
<filter string="Info" domain="[('state','=','info')]" icon="terp-folder-yellow"/>
|
||||
<field name="bank_id"/>
|
||||
<field name="journal"/>
|
||||
<field name="currency"/>
|
||||
<field name="currency" groups="base.group_multi_currency"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Bank Account" icon="terp-folder-yellow" domain="[]" context="{'group_by':'bank_id'}"/>
|
||||
<filter string="Currency" icon="terp-dolar" domain="[]" context="{'group_by':'currency'}"/>
|
||||
<filter string="Currency" icon="terp-dolar" domain="[]" context="{'group_by':'currency'}" groups="base.group_multi_currency"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
@ -32,7 +32,7 @@
|
|||
<tree string="CODA Bank Account Configuration">
|
||||
<field name="name"/>
|
||||
<field name="bank_id"/>
|
||||
<field name="currency"/>
|
||||
<field name="currency" groups="base.group_multi_currency"/>
|
||||
<field name="description1"/>
|
||||
<field name="journal"/>
|
||||
<field name="state"/>
|
||||
|
@ -48,7 +48,7 @@
|
|||
<field name="name" colspan="4"/>
|
||||
<field name="bank_id" domain="[('partner_id.ref_companies', 'in', [company_id])]"/>
|
||||
<field name="description1"/>
|
||||
<field name="currency"/>
|
||||
<field name="currency" groups="base.group_multi_currency"/>
|
||||
<field name="description2"/>
|
||||
<field name="coda_st_naming"/>
|
||||
<field name="state" on_change="onchange_state(state)"/>
|
||||
|
@ -305,7 +305,7 @@
|
|||
<field name="name"/>
|
||||
<field name="date"/>
|
||||
<field name="coda_bank_account_id"/>
|
||||
<field name="currency"/>
|
||||
<field name="currency" groups="base.group_multi_currency"/>
|
||||
<field name="period_id"/>
|
||||
<field name="type"/>
|
||||
<newline/>
|
||||
|
|
|
@ -30,8 +30,8 @@
|
|||
<field name="debit" sum="Total debit"/>
|
||||
<field name="credit" sum="Total credit"/>
|
||||
<field name="amount_to_pay"/>
|
||||
<field name="amount_currency"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="amount_currency" groups="base.group_multi_currency"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
<field name="period_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
@ -131,8 +131,8 @@
|
|||
<field name="move_line_id" on_change="onchange_move_line(move_line_id,parent.mode,parent.date_prefered,parent.date_scheduled,currency,company_currency)" domain="[('reconcile_id','=', False), ('credit', '>',0),('amount_to_pay','>',0)] "/>
|
||||
<separator colspan="4" string="Transaction Information"/>
|
||||
<field name="date"/>
|
||||
<label for="amount_currency"/>
|
||||
<div>
|
||||
<label for="amount_currency" groups="base.group_multi_currency"/>
|
||||
<div groups="base.group_multi_currency">
|
||||
<field name="amount_currency" on_change="onchange_amount(amount_currency,currency,company_currency)" class="oe_inline"/>
|
||||
<field name="currency" nolabel="1" class="oe_inline"/>
|
||||
</div>
|
||||
|
@ -151,8 +151,8 @@
|
|||
</page>
|
||||
<page string="Information">
|
||||
<group col="4" string="General Information">
|
||||
<label for="amount"/>
|
||||
<div>
|
||||
<label for="amount" groups="base.group_multi_currency"/>
|
||||
<div groups="base.group_multi_currency">
|
||||
<field name="amount" class="oe_inline"/>
|
||||
<field name="company_currency" class="oe_inline"/>
|
||||
</div>
|
||||
|
@ -171,8 +171,8 @@
|
|||
<field name="bank_id" domain="[('partner_id', '=', partner_id)]"/>
|
||||
<field name="ml_maturity_date"/>
|
||||
<field name="date"/>
|
||||
<field name="amount_currency" string="Amount"/>
|
||||
<field name="currency"/>
|
||||
<field name="amount_currency" string="Amount" groups="base.group_multi_currency"/>
|
||||
<field name="currency" groups="base.group_multi_currency"/>
|
||||
<field name="name"/>
|
||||
<field name="amount" sum="Total in Company Currency" invisible="1"/>
|
||||
</tree>
|
||||
|
@ -257,8 +257,8 @@
|
|||
<field name="move_line_id" on_change="onchange_move_line(move_line_id, False, currency, company_currency)" domain="[('reconcile_id','=', False), ('credit', '>',0),('amount_to_pay','>',0)]"/>
|
||||
<separator colspan="4" string="Transaction Information"/>
|
||||
<field name="date"/>
|
||||
<label for="amount_currency"/>
|
||||
<div>
|
||||
<label for="amount_currency" groups="base.group_multi_currency"/>
|
||||
<div groups="base.group_multi_currency">
|
||||
<field name="amount_currency" on_change="onchange_amount(amount_currency,currency,company_currency)" class="oe_inline"/>
|
||||
<field name="currency" class="oe_inline"/>
|
||||
</div>
|
||||
|
@ -277,8 +277,11 @@
|
|||
</page>
|
||||
<page string="Information">
|
||||
<group col="4" string="General Information">
|
||||
<field name="amount"/>
|
||||
<field name="company_currency" nolabel="1"/>
|
||||
<label for="amoun"/>
|
||||
<div>
|
||||
<field name="amount" class="oe_inline"/>
|
||||
<field name="company_currency" class="oe_inline"/>
|
||||
</div>
|
||||
</group>
|
||||
<group col="4" string="Entry Information">
|
||||
<field name="create_date"/>
|
||||
|
@ -302,8 +305,8 @@
|
|||
<field name="partner_id"/>
|
||||
<field name="communication"/>
|
||||
<field name="amount" sum="Amount Total"/>
|
||||
<field name="amount_currency" sum="Currency Amount Total"/>
|
||||
<field name="currency"/>
|
||||
<field name="amount_currency" sum="Currency Amount Total" groups="base.group_multi_currency"/>
|
||||
<field name="currency" groups="base.group_multi_currency"/>
|
||||
<field name="bank_id" domain="[('partner_id', '=', partner_id)]"/>
|
||||
<field name="move_line_id" on_change="onchange_move_line(move_line_id,parent.mode)"/>
|
||||
<field name="create_date"/>
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
</group>
|
||||
<group string="Other Information">
|
||||
<field name="number"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
</group>
|
||||
<group col="4" attrs="{'invisible':[('type','in',['payment', 'receipt', False])]}">
|
||||
<separator string="Total" colspan="4"/>
|
||||
|
|
|
@ -102,9 +102,9 @@
|
|||
<field name="narration" nolabel="1" colspan="2"/>
|
||||
</group>
|
||||
<group string="Other Information" col="4">
|
||||
<field name="currency_id" colspan="4"/>
|
||||
<field name="currency_id" colspan="4" groups="base.group_multi_currency"/>
|
||||
<field name="payment_rate" required="1" on_change="onchange_rate(payment_rate, amount, currency_id, payment_rate_currency_id, company_id, context)" colspan="3"/>
|
||||
<field name="payment_rate_currency_id" colspan="1" nolabel="1" on_change="onchange_payment_rate_currency(currency_id, payment_rate, payment_rate_currency_id, date, amount, company_id, context)"/>
|
||||
<field name="payment_rate_currency_id" colspan="1" nolabel="1" on_change="onchange_payment_rate_currency(currency_id, payment_rate, payment_rate_currency_id, date, amount, company_id, context)" groups="base.group_multi_currency"/>
|
||||
<field name="paid_amount_in_company_currency" colspan="4" invisible="1"/>
|
||||
<field name="number" colspan="4"/>
|
||||
</group>
|
||||
|
@ -194,7 +194,7 @@
|
|||
<separator string="Currency Options" colspan="4"/>
|
||||
<field name="is_multi_currency" invisible="1"/>
|
||||
<field name="payment_rate" required="1" on_change="onchange_rate(payment_rate, amount, currency_id, payment_rate_currency_id, company_id, context)" colspan="3"/>
|
||||
<field name="payment_rate_currency_id" colspan="1" nolabel="1" on_change="onchange_payment_rate_currency(currency_id, payment_rate, payment_rate_currency_id, date, amount, company_id, context)"/>
|
||||
<field name="payment_rate_currency_id" colspan="1" nolabel="1" on_change="onchange_payment_rate_currency(currency_id, payment_rate, payment_rate_currency_id, date, amount, company_id, context)" groups="base.group_multi_currency"/>
|
||||
<field name="paid_amount_in_company_currency" colspan="4" invisible="1"/>
|
||||
</group>
|
||||
<group col="2">
|
||||
|
@ -231,8 +231,8 @@
|
|||
<field name="credit"/>
|
||||
<field name="state"/>
|
||||
<field name="reconcile_id"/>
|
||||
<field name="amount_currency"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="amount_currency" groups="base.group_multi_currency"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
|
@ -366,7 +366,7 @@
|
|||
<group col="4" attrs="{'invisible':[('currency_id','=',False),('is_multi_currency','=',False)]}">
|
||||
<field name="is_multi_currency" invisible="1"/>
|
||||
<field name="payment_rate" required="1" on_change="onchange_rate(payment_rate, amount, currency_id, payment_rate_currency_id, company_id, context)" colspan="3"/>
|
||||
<field name="payment_rate_currency_id" colspan="1" nolabel="1" on_change="onchange_payment_rate_currency(currency_id, payment_rate, payment_rate_currency_id, date, amount, company_id, context)"/>
|
||||
<field name="payment_rate_currency_id" colspan="1" nolabel="1" on_change="onchange_payment_rate_currency(currency_id, payment_rate, payment_rate_currency_id, date, amount, company_id, context)" groups="base.group_multi_currency"/>
|
||||
<field name="paid_amount_in_company_currency" colspan="4" invisible="1"/>
|
||||
</group>
|
||||
<group>
|
||||
|
@ -401,7 +401,7 @@
|
|||
<field name="state"/>
|
||||
<field name="reconcile_id"/>
|
||||
<field name="amount_currency"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
import controllers
|
||||
import models
|
||||
import test_models
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
'name': 'Base import',
|
||||
'description': """
|
||||
New extensible file import for OpenERP
|
||||
======================================
|
||||
|
||||
Re-implement openerp's file import system:
|
||||
|
||||
* Server side, the previous system forces most of the logic into the
|
||||
client which duplicates the effort (between clients), makes the
|
||||
import system much harder to use without a client (direct RPC or
|
||||
other forms of automation) and makes knowledge about the
|
||||
import/export system much harder to gather as it is spread over
|
||||
3+ different projects.
|
||||
|
||||
* In a more extensible manner, so users and partners can build their
|
||||
own front-end to import from other file formats (e.g. OpenDocument
|
||||
files) which may be simpler to handle in their work flow or from
|
||||
their data production sources.
|
||||
|
||||
* In a module, so that administrators and users of OpenERP who do not
|
||||
need or want an online import can avoid it being available to users.
|
||||
""",
|
||||
'category': 'Uncategorized',
|
||||
'website': 'http://www.openerp.com',
|
||||
'author': 'OpenERP SA',
|
||||
'depends': ['base'],
|
||||
'installable': True,
|
||||
'auto_install': False, # set to true and allow uninstall?
|
||||
'css': [
|
||||
'static/lib/select2/select2.css',
|
||||
'static/src/css/import.css',
|
||||
],
|
||||
'js': [
|
||||
'static/lib/select2/select2.js',
|
||||
'static/src/js/import.js',
|
||||
],
|
||||
'qweb': ['static/src/xml/import.xml'],
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import simplejson
|
||||
|
||||
try:
|
||||
import openerp.addons.web.common.http as openerpweb
|
||||
except ImportError:
|
||||
import web.common.http as openerpweb
|
||||
|
||||
class ImportController(openerpweb.Controller):
|
||||
_cp_path = '/base_import'
|
||||
|
||||
@openerpweb.httprequest
|
||||
def set_file(self, req, file, import_id, jsonp='callback'):
|
||||
import_id = int(import_id)
|
||||
|
||||
written = req.session.model('base_import.import').write(import_id, {
|
||||
'file': file.read(),
|
||||
'file_name': file.filename,
|
||||
'file_type': file.content_type,
|
||||
}, req.session.eval_context(req.context))
|
||||
|
||||
return 'window.top.%s(%s)' % (
|
||||
jsonp, simplejson.dumps({'result': written}))
|
|
@ -0,0 +1,352 @@
|
|||
import csv
|
||||
import itertools
|
||||
import logging
|
||||
import operator
|
||||
|
||||
try:
|
||||
from cStringIO import StringIO
|
||||
except ImportError:
|
||||
from StringIO import StringIO
|
||||
|
||||
import psycopg2
|
||||
|
||||
from openerp.osv import orm, fields
|
||||
from openerp.tools.translate import _
|
||||
|
||||
FIELDS_RECURSION_LIMIT = 2
|
||||
ERROR_PREVIEW_BYTES = 200
|
||||
_logger = logging.getLogger(__name__)
|
||||
class ir_import(orm.TransientModel):
|
||||
_name = 'base_import.import'
|
||||
# allow imports to survive for 12h in case user is slow
|
||||
_transient_max_hours = 12.0
|
||||
|
||||
_columns = {
|
||||
'res_model': fields.char('Model', size=64),
|
||||
'file': fields.binary(
|
||||
'File', help="File to check and/or import, raw binary (not base64)"),
|
||||
'file_name': fields.char('File Name', size=None),
|
||||
'file_type': fields.char('File Type', size=None),
|
||||
}
|
||||
|
||||
def get_fields(self, cr, uid, model, context=None,
|
||||
depth=FIELDS_RECURSION_LIMIT):
|
||||
""" Recursively get fields for the provided model (through
|
||||
fields_get) and filter them according to importability
|
||||
|
||||
The output format is a list of ``Field``, with ``Field``
|
||||
defined as:
|
||||
|
||||
.. class:: Field
|
||||
|
||||
.. attribute:: id (str)
|
||||
|
||||
A non-unique identifier for the field, used to compute
|
||||
the span of the ``required`` attribute: if multiple
|
||||
``required`` fields have the same id, only one of them
|
||||
is necessary.
|
||||
|
||||
.. attribute:: name (str)
|
||||
|
||||
The field's logical (OpenERP) name within the scope of
|
||||
its parent.
|
||||
|
||||
.. attribute:: string (str)
|
||||
|
||||
The field's human-readable name (``@string``)
|
||||
|
||||
.. attribute:: required (bool)
|
||||
|
||||
Whether the field is marked as required in the
|
||||
model. Clients must provide non-empty import values
|
||||
for all required fields or the import will error out.
|
||||
|
||||
.. attribute:: fields (list(Field))
|
||||
|
||||
The current field's subfields. The database and
|
||||
external identifiers for m2o and m2m fields; a
|
||||
filtered and transformed fields_get for o2m fields (to
|
||||
a variable depth defined by ``depth``).
|
||||
|
||||
Fields with no sub-fields will have an empty list of
|
||||
sub-fields.
|
||||
|
||||
:param str model: name of the model to get fields form
|
||||
:param int landing: depth of recursion into o2m fields
|
||||
"""
|
||||
fields = [{
|
||||
'id': 'id',
|
||||
'name': 'id',
|
||||
'string': _("External ID"),
|
||||
'required': False,
|
||||
'fields': [],
|
||||
}]
|
||||
fields_got = self.pool[model].fields_get(cr, uid, context=context)
|
||||
for name, field in fields_got.iteritems():
|
||||
if field.get('readonly'):
|
||||
states = field.get('states')
|
||||
if not states:
|
||||
continue
|
||||
# states = {state: [(attr, value), (attr2, value2)], state2:...}
|
||||
if not any(attr == 'readonly' and value is False
|
||||
for attr, value in itertools.chain.from_iterable(
|
||||
states.itervalues())):
|
||||
continue
|
||||
|
||||
f = {
|
||||
'id': name,
|
||||
'name': name,
|
||||
'string': field['string'],
|
||||
# Y U NO ALWAYS HAVE REQUIRED
|
||||
'required': bool(field.get('required')),
|
||||
'fields': [],
|
||||
}
|
||||
|
||||
if field['type'] in ('many2many', 'many2one'):
|
||||
f['fields'] = [
|
||||
dict(f, name='id', string=_("External ID")),
|
||||
dict(f, name='.id', string=_("Database ID")),
|
||||
]
|
||||
elif field['type'] == 'one2many' and depth:
|
||||
f['fields'] = self.get_fields(
|
||||
cr, uid, field['relation'], context=context, depth=depth-1)
|
||||
|
||||
fields.append(f)
|
||||
|
||||
# TODO: cache on model?
|
||||
return fields
|
||||
|
||||
def _read_csv(self, record, options):
|
||||
""" Returns a CSV-parsed iterator of all empty lines in the file
|
||||
|
||||
:throws csv.Error: if an error is detected during CSV parsing
|
||||
:throws UnicodeDecodeError: if ``options.encoding`` is incorrect
|
||||
"""
|
||||
csv_iterator = csv.reader(
|
||||
StringIO(record.file),
|
||||
quotechar=options['quoting'],
|
||||
delimiter=options['separator'])
|
||||
csv_nonempty = itertools.ifilter(None, csv_iterator)
|
||||
# TODO: guess encoding with chardet? Or https://github.com/aadsm/jschardet
|
||||
encoding = options.get('encoding', 'utf-8')
|
||||
return itertools.imap(
|
||||
lambda row: [item.decode(encoding) for item in row],
|
||||
csv_nonempty)
|
||||
|
||||
def _match_header(self, header, fields, options):
|
||||
""" Attempts to match a given header to a field of the
|
||||
imported model.
|
||||
|
||||
:param str header: header name from the CSV file
|
||||
:param fields:
|
||||
:param dict options:
|
||||
:returns: an empty list if the header couldn't be matched, or
|
||||
all the fields to traverse
|
||||
:rtype: list(Field)
|
||||
"""
|
||||
for field in fields:
|
||||
# FIXME: should match all translations & original
|
||||
# TODO: use string distance (levenshtein? hamming?)
|
||||
if header == field['name'] \
|
||||
or header.lower() == field['string'].lower():
|
||||
return [field]
|
||||
|
||||
if '/' not in header:
|
||||
return []
|
||||
|
||||
# relational field path
|
||||
traversal = []
|
||||
subfields = fields
|
||||
# Iteratively dive into fields tree
|
||||
for section in header.split('/'):
|
||||
# Strip section in case spaces are added around '/' for
|
||||
# readability of paths
|
||||
match = self._match_header(section.strip(), subfields, options)
|
||||
# Any match failure, exit
|
||||
if not match: return []
|
||||
# prep subfields for next iteration within match[0]
|
||||
field = match[0]
|
||||
subfields = field['fields']
|
||||
traversal.append(field)
|
||||
return traversal
|
||||
|
||||
def _match_headers(self, rows, fields, options):
|
||||
""" Attempts to match the imported model's fields to the
|
||||
titles of the parsed CSV file, if the file is supposed to have
|
||||
headers.
|
||||
|
||||
Will consume the first line of the ``rows`` iterator.
|
||||
|
||||
Returns a pair of (None, None) if headers were not requested
|
||||
or the list of headers and a dict mapping cell indices
|
||||
to key paths in the ``fields`` tree
|
||||
|
||||
:param Iterator rows:
|
||||
:param dict fields:
|
||||
:param dict options:
|
||||
:rtype: (None, None) | (list(str), dict(int: list(str)))
|
||||
"""
|
||||
if not options.get('headers'):
|
||||
return None, None
|
||||
|
||||
headers = next(rows)
|
||||
return headers, dict(
|
||||
(index, [field['name'] for field in self._match_header(header, fields, options)] or None)
|
||||
for index, header in enumerate(headers)
|
||||
)
|
||||
|
||||
def parse_preview(self, cr, uid, id, options, count=10, context=None):
|
||||
""" Generates a preview of the uploaded files, and performs
|
||||
fields-matching between the import's file data and the model's
|
||||
columns.
|
||||
|
||||
If the headers are not requested (not options.headers),
|
||||
``matches`` and ``headers`` are both ``False``.
|
||||
|
||||
:param id: identifier of the import
|
||||
:param int count: number of preview lines to generate
|
||||
:param options: format-specific options.
|
||||
CSV: {encoding, quoting, separator, headers}
|
||||
:type options: {str, str, str, bool}
|
||||
:returns: {fields, matches, headers, preview} | {error, preview}
|
||||
:rtype: {dict(str: dict(...)), dict(int, list(str)), list(str), list(list(str))} | {str, str}
|
||||
"""
|
||||
(record,) = self.browse(cr, uid, [id], context=context)
|
||||
fields = self.get_fields(cr, uid, record.res_model, context=context)
|
||||
|
||||
try:
|
||||
rows = self._read_csv(record, options)
|
||||
|
||||
headers, matches = self._match_headers(rows, fields, options)
|
||||
# Match should have consumed the first row (iif headers), get
|
||||
# the ``count`` next rows for preview
|
||||
preview = itertools.islice(rows, count)
|
||||
return {
|
||||
'fields': fields,
|
||||
'matches': matches or False,
|
||||
'headers': headers or False,
|
||||
'preview': list(preview),
|
||||
}
|
||||
except Exception, e:
|
||||
# Due to lazy generators, UnicodeDecodeError (for
|
||||
# instance) may only be raised when serializing the
|
||||
# preview to a list in the return.
|
||||
_logger.debug("Error during CSV parsing preview", exc_info=True)
|
||||
return {
|
||||
'error': str(e),
|
||||
# iso-8859-1 ensures decoding will always succeed,
|
||||
# even if it yields non-printable characters. This is
|
||||
# in case of UnicodeDecodeError (or csv.Error
|
||||
# compounded with UnicodeDecodeError)
|
||||
'preview': record.file[:ERROR_PREVIEW_BYTES]
|
||||
.decode( 'iso-8859-1'),
|
||||
}
|
||||
|
||||
def _convert_import_data(self, record, fields, options, context=None):
|
||||
""" Extracts the input browse_record and fields list (with
|
||||
``False``-y placeholders for fields to *not* import) into a
|
||||
format Model.import_data can use: a fields list without holes
|
||||
and the precisely matching data matrix
|
||||
|
||||
:param browse_record record:
|
||||
:param list(str|bool): fields
|
||||
:returns: (data, fields)
|
||||
:rtype: (list(list(str)), list(str))
|
||||
:raises ValueError: in case the import data could not be converted
|
||||
"""
|
||||
# Get indices for non-empty fields
|
||||
indices = [index for index, field in enumerate(fields) if field]
|
||||
if not indices:
|
||||
raise ValueError(_("You must configure at least one field to import"))
|
||||
# If only one index, itemgetter will return an atom rather
|
||||
# than a 1-tuple
|
||||
if len(indices) == 1: mapper = lambda row: [row[indices[0]]]
|
||||
else: mapper = operator.itemgetter(*indices)
|
||||
# Get only list of actually imported fields
|
||||
import_fields = filter(None, fields)
|
||||
|
||||
rows_to_import = self._read_csv(record, options)
|
||||
if options.get('headers'):
|
||||
rows_to_import = itertools.islice(
|
||||
rows_to_import, 1, None)
|
||||
data = [
|
||||
row for row in itertools.imap(mapper, rows_to_import)
|
||||
# don't try inserting completely empty rows (e.g. from
|
||||
# filtering out o2m fields)
|
||||
if any(row)
|
||||
]
|
||||
|
||||
return data, import_fields
|
||||
|
||||
def do(self, cr, uid, id, fields, options, dryrun=False, context=None):
|
||||
""" Actual execution of the import
|
||||
|
||||
:param fields: import mapping: maps each column to a field,
|
||||
``False`` for the columns to ignore
|
||||
:type fields: list(str|bool)
|
||||
:param dict options:
|
||||
:param bool dryrun: performs all import operations (and
|
||||
validations) but rollbacks writes, allows
|
||||
getting as much errors as possible without
|
||||
the risk of clobbering the database.
|
||||
:returns: A list of errors. If the list is empty the import
|
||||
executed fully and correctly. If the list is
|
||||
non-empty it contains dicts with 3 keys ``type`` the
|
||||
type of error (``error|warning``); ``message`` the
|
||||
error message associated with the error (a string)
|
||||
and ``record`` the data which failed to import (or
|
||||
``false`` if that data isn't available or provided)
|
||||
:rtype: list({type, message, record})
|
||||
"""
|
||||
cr.execute('SAVEPOINT import')
|
||||
|
||||
(record,) = self.browse(cr, uid, [id], context=context)
|
||||
try:
|
||||
data, import_fields = self._convert_import_data(
|
||||
record, fields, options, context=context)
|
||||
except ValueError, e:
|
||||
return [{
|
||||
'type': 'error',
|
||||
'message': str(e),
|
||||
'record': False,
|
||||
}]
|
||||
|
||||
try:
|
||||
_logger.info('importing %d rows...', len(data))
|
||||
(code, record, message, _wat) = self.pool[record.res_model].import_data(
|
||||
cr, uid, import_fields, data, context=context)
|
||||
_logger.info('done')
|
||||
|
||||
except Exception, e:
|
||||
_logger.exception("Import failed")
|
||||
# TODO: remove when exceptions stop being an "expected"
|
||||
# behavior of import_data on some (most) invalid
|
||||
# input.
|
||||
code, record, message = -1, None, str(e)
|
||||
|
||||
# If transaction aborted, RELEASE SAVEPOINT is going to raise
|
||||
# an InternalError (ROLLBACK should work, maybe). Ignore that.
|
||||
# TODO: to handle multiple errors, create savepoint around
|
||||
# write and release it in case of write error (after
|
||||
# adding error to errors array) => can keep on trying to
|
||||
# import stuff, and rollback at the end if there is any
|
||||
# error in the results.
|
||||
try:
|
||||
if dryrun:
|
||||
cr.execute('ROLLBACK TO SAVEPOINT import')
|
||||
else:
|
||||
cr.execute('RELEASE SAVEPOINT import')
|
||||
except psycopg2.InternalError:
|
||||
pass
|
||||
|
||||
if code != -1:
|
||||
return []
|
||||
|
||||
# TODO: add key for error location?
|
||||
# TODO: error not within normal preview, how to display? Re-preview
|
||||
# with higher ``count``?
|
||||
return [{
|
||||
'type': 'error',
|
||||
'message': message,
|
||||
'record': record or False
|
||||
}]
|
|
@ -0,0 +1,12 @@
|
|||
Copyright 2012 Igor Vaynberg
|
||||
|
||||
Version: @@ver@@ Timestamp: @@timestamp@@
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in
|
||||
compliance with the License. You may obtain a copy of the License in the LICENSE file, or at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the License is
|
||||
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and limitations under the License.
|
|
@ -0,0 +1,68 @@
|
|||
Select2
|
||||
=================
|
||||
|
||||
Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results. Look and feel of Select2 is based on the excellent [Chosen](http://harvesthq.github.com/chosen/) library.
|
||||
|
||||
To get started -- checkout http://ivaynberg.github.com/select2!
|
||||
|
||||
What Does Select2 Support That Chosen Does Not?
|
||||
-------------------------------------------------
|
||||
|
||||
* Working with large datasets: Chosen requires the entire dataset to be loaded as `option` tags in the DOM, which limits
|
||||
it to working with small-ish datasets. Select2 uses a function to find results on-the-fly, which allows it to partially
|
||||
load results.
|
||||
* Paging of results: Since Select2 works with large datasets and only loads a small amount of matching results at a time
|
||||
it has to support paging. Select2 will call the search function when the user scrolls to the bottom of currently loaded
|
||||
result set allowing for the 'infinite scrolling' of results.
|
||||
* Custom markup for results: Chosen only supports rendering text results because that is the only markup supported by
|
||||
`option` tags. Select2 provides an extension point which can be used to produce any kind of markup to represent results.
|
||||
* Ability to add results on the fly: Select2 provides the ability to add results from the search term entered by the user, which allows it to be used for
|
||||
tagging.
|
||||
|
||||
Browser Compatibility
|
||||
--------------------
|
||||
* IE 8+ (7 mostly works except for [issue with z-index](https://github.com/ivaynberg/select2/issues/37))
|
||||
* Chrome 8+
|
||||
* Firefox 3.5+
|
||||
* Safari 3+
|
||||
* Opera 10.6+
|
||||
|
||||
Integrations
|
||||
------------
|
||||
|
||||
* [Wicket-Select2](https://github.com/ivaynberg/wicket-select2) (Java / Apache Wicket)
|
||||
* [select2-rails](https://github.com/argerim/select2-rails) (Ruby on Rails)
|
||||
* [AngularUI](http://angular-ui.github.com/#directives-select2) ([AngularJS](angularjs.org))
|
||||
* [Django](https://github.com/applegrew/django-select2)
|
||||
|
||||
Bug tracker
|
||||
-----------
|
||||
|
||||
Have a bug? Please create an issue here on GitHub!
|
||||
|
||||
https://github.com/ivaynberg/select2/issues
|
||||
|
||||
|
||||
Mailing list
|
||||
------------
|
||||
|
||||
Have a question? Ask on our mailing list!
|
||||
|
||||
select2@googlegroups.com
|
||||
|
||||
https://groups.google.com/d/forum/select2
|
||||
|
||||
|
||||
Copyright and License
|
||||
---------------------
|
||||
|
||||
Copyright 2012 Igor Vaynberg
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in
|
||||
compliance with the License. You may obtain a copy of the License in the LICENSE file, or at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the License is
|
||||
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and limitations under the License.
|
|
@ -0,0 +1,77 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo -n "Enter the version for this release: "
|
||||
|
||||
read ver
|
||||
|
||||
if [ ! $ver ]; then
|
||||
echo "Invalid version."
|
||||
exit
|
||||
fi
|
||||
|
||||
name="select2"
|
||||
js="$name.js"
|
||||
mini="$name.min.js"
|
||||
css="$name.css"
|
||||
release="$name-$ver"
|
||||
releasedir="/tmp/$release"
|
||||
tag="release-$ver"
|
||||
branch="build-$ver"
|
||||
curbranch=`git branch | grep "*" | sed "s/* //"`
|
||||
timestamp=$(date)
|
||||
tokens="s/@@ver@@/$ver/g;s/\@@timestamp@@/$timestamp/g"
|
||||
remote="github"
|
||||
|
||||
git branch "$branch"
|
||||
git checkout "$branch"
|
||||
|
||||
echo "Tokenizing..."
|
||||
|
||||
find . -name "$js" | xargs sed -i -e "$tokens"
|
||||
find . -name "$css" | xargs sed -i -e "$tokens"
|
||||
|
||||
git add "$js"
|
||||
git add "$css"
|
||||
|
||||
echo "Minifying..."
|
||||
|
||||
echo "/*" > "$mini"
|
||||
cat LICENSE | sed "$tokens" >> "$mini"
|
||||
echo "*/" >> "$mini"
|
||||
|
||||
curl -s \
|
||||
-d compilation_level=SIMPLE_OPTIMIZATIONS \
|
||||
-d output_format=text \
|
||||
-d output_info=compiled_code \
|
||||
--data-urlencode "js_code@$js" \
|
||||
http://closure-compiler.appspot.com/compile \
|
||||
>> "$mini"
|
||||
|
||||
git add "$mini"
|
||||
|
||||
git commit -m "release $ver"
|
||||
|
||||
echo "Tagging..."
|
||||
|
||||
git tag -a "$tag" -m "tagged version $ver"
|
||||
git push "$remote" --tags
|
||||
|
||||
echo "Archiving..."
|
||||
|
||||
rm -rf "$releasedir"
|
||||
mkdir "$releasedir"
|
||||
|
||||
cp $name.* "$releasedir"
|
||||
cp spinner.gif "$releasedir"
|
||||
cp README.* "$releasedir"
|
||||
|
||||
zip -r "$releasedir.zip" "$releasedir"
|
||||
rm -rf "$releasedir"
|
||||
|
||||
echo "Cleaning Up..."
|
||||
|
||||
git checkout "$curbranch"
|
||||
git branch -D "$branch"
|
||||
|
||||
echo "Done. Release archive created: $releasedir.zip"
|
|
@ -0,0 +1,524 @@
|
|||
/*
|
||||
Version: @@ver@@ Timestamp: @@timestamp@@
|
||||
*/
|
||||
.select2-container {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
/* inline-block for ie7 */
|
||||
zoom: 1;
|
||||
*display: inline;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.select2-container,
|
||||
.select2-drop,
|
||||
.select2-search,
|
||||
.select2-search input{
|
||||
/*
|
||||
Force border-box so that % widths fit the parent
|
||||
container without overlap because of margin/padding.
|
||||
|
||||
More Info : http://www.quirksmode.org/css/box.html
|
||||
*/
|
||||
-moz-box-sizing: border-box; /* firefox */
|
||||
-ms-box-sizing: border-box; /* ie */
|
||||
-webkit-box-sizing: border-box; /* webkit */
|
||||
-khtml-box-sizing: border-box; /* konqueror */
|
||||
box-sizing: border-box; /* css3 */
|
||||
}
|
||||
|
||||
.select2-container .select2-choice {
|
||||
background-color: #fff;
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.5, white));
|
||||
background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 50%);
|
||||
background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 50%);
|
||||
background-image: -o-linear-gradient(bottom, #eeeeee 0%, #ffffff 50%);
|
||||
background-image: -ms-linear-gradient(top, #eeeeee 0%, #ffffff 50%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#ffffff', GradientType = 0);
|
||||
background-image: linear-gradient(top, #eeeeee 0%, #ffffff 50%);
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
-moz-background-clip: padding;
|
||||
-webkit-background-clip: padding-box;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #aaa;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
position: relative;
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
padding: 0 0 0 8px;
|
||||
color: #444;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.select2-container.select2-drop-above .select2-choice
|
||||
{
|
||||
border-bottom-color: #aaa;
|
||||
-webkit-border-radius:0px 0px 4px 4px;
|
||||
-moz-border-radius:0px 0px 4px 4px;
|
||||
border-radius:0px 0px 4px 4px;
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.9, white));
|
||||
background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 90%);
|
||||
background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 90%);
|
||||
background-image: -o-linear-gradient(bottom, #eeeeee 0%, white 90%);
|
||||
background-image: -ms-linear-gradient(top, #eeeeee 0%,#ffffff 90%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff',GradientType=0 );
|
||||
background-image: linear-gradient(top, #eeeeee 0%,#ffffff 90%);
|
||||
}
|
||||
|
||||
.select2-container .select2-choice span {
|
||||
margin-right: 26px;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
-o-text-overflow: ellipsis;
|
||||
-ms-text-overflow: ellipsis;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice abbr {
|
||||
display: block;
|
||||
position: absolute;
|
||||
right: 26px;
|
||||
top: 8px;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
font-size: 1px;
|
||||
background: url('select2.png') right top no-repeat;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
border:0;
|
||||
outline: 0;
|
||||
}
|
||||
.select2-container .select2-choice abbr:hover {
|
||||
background-position: right -11px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.select2-drop {
|
||||
background: #fff;
|
||||
color: #000;
|
||||
border: 1px solid #aaa;
|
||||
border-top: 0;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
-webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||
-moz-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||
-o-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||
box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||
z-index: 9999;
|
||||
width:100%;
|
||||
margin-top:-1px;
|
||||
|
||||
-webkit-border-radius: 0 0 4px 4px;
|
||||
-moz-border-radius: 0 0 4px 4px;
|
||||
border-radius: 0 0 4px 4px;
|
||||
}
|
||||
|
||||
.select2-drop.select2-drop-above {
|
||||
-webkit-border-radius: 4px 4px 0px 0px;
|
||||
-moz-border-radius: 4px 4px 0px 0px;
|
||||
border-radius: 4px 4px 0px 0px;
|
||||
margin-top:1px;
|
||||
border-top: 1px solid #aaa;
|
||||
border-bottom: 0;
|
||||
|
||||
-webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||
-moz-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||
-o-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||
box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||
}
|
||||
|
||||
.select2-container .select2-choice div {
|
||||
-webkit-border-radius: 0 4px 4px 0;
|
||||
-moz-border-radius: 0 4px 4px 0;
|
||||
border-radius: 0 4px 4px 0;
|
||||
-moz-background-clip: padding;
|
||||
-webkit-background-clip: padding-box;
|
||||
background-clip: padding-box;
|
||||
background: #ccc;
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
|
||||
background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
||||
background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
||||
background-image: -o-linear-gradient(bottom, #ccc 0%, #eee 60%);
|
||||
background-image: -ms-linear-gradient(top, #cccccc 0%, #eeeeee 60%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#cccccc', endColorstr = '#eeeeee', GradientType = 0);
|
||||
background-image: linear-gradient(top, #cccccc 0%, #eeeeee 60%);
|
||||
border-left: 1px solid #aaa;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
display: block;
|
||||
height: 100%;
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice div b {
|
||||
background: url('select2.png') no-repeat 0 1px;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.select2-search {
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
z-index: 10000;
|
||||
min-height: 26px;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
}
|
||||
|
||||
.select2-search-hidden {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: -10000px;
|
||||
}
|
||||
|
||||
.select2-search input {
|
||||
background: #fff url('select2.png') no-repeat 100% -22px;
|
||||
background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
|
||||
background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);
|
||||
background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
|
||||
background: url('select2.png') no-repeat 100% -22px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
|
||||
background: url('select2.png') no-repeat 100% -22px, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%);
|
||||
background: url('select2.png') no-repeat 100% -22px, linear-gradient(top, #ffffff 85%, #eeeeee 99%);
|
||||
padding: 4px 20px 4px 5px;
|
||||
outline: 0;
|
||||
border: 1px solid #aaa;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
width:100%;
|
||||
margin:0;
|
||||
height:auto !important;
|
||||
min-height: 26px;
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
border-radius: 0;
|
||||
-moz-border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
}
|
||||
|
||||
.select2-drop.select2-drop-above .select2-search input
|
||||
{
|
||||
margin-top:4px;
|
||||
}
|
||||
|
||||
.select2-search input.select2-active {
|
||||
background: #fff url('spinner.gif') no-repeat 100%;
|
||||
background: url('spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
|
||||
background: url('spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);
|
||||
background: url('spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
|
||||
background: url('spinner.gif') no-repeat 100%, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
|
||||
background: url('spinner.gif') no-repeat 100%, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%);
|
||||
background: url('spinner.gif') no-repeat 100%, linear-gradient(top, #ffffff 85%, #eeeeee 99%);
|
||||
}
|
||||
|
||||
|
||||
.select2-container-active .select2-choice,
|
||||
.select2-container-active .select2-choices {
|
||||
-webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);
|
||||
-moz-box-shadow : 0 0 5px rgba(0,0,0,.3);
|
||||
-o-box-shadow : 0 0 5px rgba(0,0,0,.3);
|
||||
box-shadow : 0 0 5px rgba(0,0,0,.3);
|
||||
border: 1px solid #5897fb;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.select2-dropdown-open .select2-choice {
|
||||
border: 1px solid #aaa;
|
||||
border-bottom-color: transparent;
|
||||
-webkit-box-shadow: 0 1px 0 #fff inset;
|
||||
-moz-box-shadow : 0 1px 0 #fff inset;
|
||||
-o-box-shadow : 0 1px 0 #fff inset;
|
||||
box-shadow : 0 1px 0 #fff inset;
|
||||
background-color: #eee;
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, white), color-stop(0.5, #eeeeee));
|
||||
background-image: -webkit-linear-gradient(center bottom, white 0%, #eeeeee 50%);
|
||||
background-image: -moz-linear-gradient(center bottom, white 0%, #eeeeee 50%);
|
||||
background-image: -o-linear-gradient(bottom, white 0%, #eeeeee 50%);
|
||||
background-image: -ms-linear-gradient(top, #ffffff 0%,#eeeeee 50%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee',GradientType=0 );
|
||||
background-image: linear-gradient(top, #ffffff 0%,#eeeeee 50%);
|
||||
-webkit-border-bottom-left-radius : 0;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-moz-border-radius-bottomleft : 0;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
border-bottom-left-radius : 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.select2-dropdown-open .select2-choice div {
|
||||
background: transparent;
|
||||
border-left: none;
|
||||
}
|
||||
.select2-dropdown-open .select2-choice div b {
|
||||
background-position: -18px 1px;
|
||||
}
|
||||
|
||||
/* results */
|
||||
.select2-results {
|
||||
margin: 4px 4px 4px 0;
|
||||
padding: 0 0 0 4px;
|
||||
position: relative;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
max-height: 200px;
|
||||
}
|
||||
|
||||
.select2-results ul.select2-result-sub {
|
||||
margin: 0 0 0 0;
|
||||
}
|
||||
|
||||
.select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 40px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 60px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 80px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 100px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 110px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px }
|
||||
|
||||
.select2-results li {
|
||||
list-style: none;
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
.select2-results li.select2-result-with-children > .select2-result-label {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.select2-results .select2-result-label {
|
||||
padding: 3px 7px 4px;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.select2-results .select2-highlighted {
|
||||
background: #3875d7;
|
||||
color: #fff;
|
||||
}
|
||||
.select2-results li em {
|
||||
background: #feffde;
|
||||
font-style: normal;
|
||||
}
|
||||
.select2-results .select2-highlighted em {
|
||||
background: transparent;
|
||||
}
|
||||
.select2-results .select2-no-results,
|
||||
.select2-results .select2-searching,
|
||||
.select2-results .select2-selection-limit {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/*
|
||||
disabled look for already selected choices in the results dropdown
|
||||
.select2-results .select2-disabled.select2-highlighted {
|
||||
color: #666;
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
cursor: default;
|
||||
}
|
||||
.select2-results .select2-disabled {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
cursor: default;
|
||||
}
|
||||
*/
|
||||
.select2-results .select2-disabled {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.select2-more-results.select2-active {
|
||||
background: #f4f4f4 url('spinner.gif') no-repeat 100%;
|
||||
}
|
||||
|
||||
.select2-more-results {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/* disabled styles */
|
||||
|
||||
.select2-container.select2-container-disabled .select2-choice {
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border: 1px solid #ddd;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.select2-container.select2-container-disabled .select2-choice div {
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border-left: 0;
|
||||
}
|
||||
|
||||
|
||||
/* multiselect */
|
||||
|
||||
.select2-container-multi .select2-choices {
|
||||
background-color: #fff;
|
||||
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
|
||||
background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
|
||||
background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
|
||||
background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
|
||||
background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
|
||||
background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%);
|
||||
border: 1px solid #aaa;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
cursor: text;
|
||||
overflow: hidden;
|
||||
height: auto !important;
|
||||
height: 1%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices {
|
||||
min-height: 26px;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-active .select2-choices {
|
||||
-webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);
|
||||
-moz-box-shadow : 0 0 5px rgba(0,0,0,.3);
|
||||
-o-box-shadow : 0 0 5px rgba(0,0,0,.3);
|
||||
box-shadow : 0 0 5px rgba(0,0,0,.3);
|
||||
border: 1px solid #5897fb;
|
||||
outline: none;
|
||||
}
|
||||
.select2-container-multi .select2-choices li {
|
||||
float: left;
|
||||
list-style: none;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-field {
|
||||
white-space: nowrap;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-field input {
|
||||
color: #666;
|
||||
background: transparent !important;
|
||||
font-family: sans-serif;
|
||||
font-size: 100%;
|
||||
height: 15px;
|
||||
padding: 5px;
|
||||
margin: 1px 0;
|
||||
outline: 0;
|
||||
border: 0;
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow : none;
|
||||
-o-box-shadow : none;
|
||||
box-shadow : none;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
|
||||
background: #fff url('spinner.gif') no-repeat 100% !important;
|
||||
}
|
||||
|
||||
.select2-default {
|
||||
color: #999 !important;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-choice {
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius : 3px;
|
||||
border-radius : 3px;
|
||||
-moz-background-clip : padding;
|
||||
-webkit-background-clip: padding-box;
|
||||
background-clip : padding-box;
|
||||
background-color: #e4e4e4;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0 );
|
||||
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
|
||||
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
-webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
|
||||
-moz-box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
|
||||
box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
|
||||
color: #333;
|
||||
border: 1px solid #aaaaaa;
|
||||
line-height: 13px;
|
||||
padding: 3px 5px 3px 18px;
|
||||
margin: 3px 0 3px 5px;
|
||||
position: relative;
|
||||
cursor: default;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice span {
|
||||
cursor: default;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice-focus {
|
||||
background: #d4d4d4;
|
||||
}
|
||||
|
||||
.select2-search-choice-close {
|
||||
display: block;
|
||||
position: absolute;
|
||||
right: 3px;
|
||||
top: 4px;
|
||||
width: 12px;
|
||||
height: 13px;
|
||||
font-size: 1px;
|
||||
background: url('select2.png') right top no-repeat;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-search-choice-close {
|
||||
left: 3px;
|
||||
}
|
||||
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
|
||||
background-position: right -11px;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
|
||||
background-position: right -11px;
|
||||
}
|
||||
|
||||
/* disabled styles */
|
||||
|
||||
.select2-container-multi.select2-container-disabled .select2-choices{
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border: 1px solid #ddd;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
|
||||
background-image: none;
|
||||
background-color: #f4f4f4;
|
||||
border: 1px solid #ddd;
|
||||
padding: 3px 5px 3px 5px;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close {
|
||||
display: none;
|
||||
}
|
||||
/* end multiselect */
|
||||
|
||||
.select2-result-selectable .select2-match,
|
||||
.select2-result-unselectable .select2-result-selectable .select2-match { text-decoration: underline; }
|
||||
.select2-result-unselectable .select2-match { text-decoration: none; }
|
||||
|
||||
.select2-offscreen { position: absolute; left: -10000px; }
|
||||
|
||||
/* Retina-ize icons */
|
||||
|
||||
@media only screen and (-webkit-min-device-pixel-ratio: 1.5) {
|
||||
.select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice div b {
|
||||
background-image: url(select2x2.png) !important;
|
||||
background-repeat: no-repeat !important;
|
||||
background-size: 60px 40px !important;
|
||||
}
|
||||
.select2-search input {
|
||||
background-position: 100% -21px !important;
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
After Width: | Height: | Size: 613 B |
Binary file not shown.
After Width: | Height: | Size: 845 B |
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
|
@ -0,0 +1,57 @@
|
|||
.openerp .oe_list_buttons .oe_alternative {
|
||||
visibility: visible;
|
||||
}
|
||||
.openerp .oe_list_buttons.oe_editing .oe_list_button_import {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.oe_import dd,
|
||||
.oe_import .oe_import_toggled,
|
||||
.oe_import .oe_import_grid,
|
||||
.oe_import .oe_import_error_report,
|
||||
.oe_import .oe_import_with_file,
|
||||
.oe_import .oe_import_noheaders {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.oe_import.oe_import_preview .oe_import_grid {
|
||||
display: table;
|
||||
}
|
||||
.oe_import.oe_import_error .oe_import_error_report,
|
||||
.oe_import.oe_import_with_file .oe_import_with_file,
|
||||
.oe_import.oe_import_noheaders .oe_import_noheaders {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.oe_import .oe_import_error_report ul .oe_import_report_error {
|
||||
background-color: #FFD9DB;
|
||||
}
|
||||
.oe_import .oe_import_error_report ul .oe_import_report_warning {
|
||||
background-color: #FEFFD9;
|
||||
}
|
||||
|
||||
.oe_import .oe_import_noheaders {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.oe_import a.oe_import_toggle {
|
||||
display: block;
|
||||
}
|
||||
.oe_import a.oe_import_toggle:before {
|
||||
content: '> '
|
||||
}
|
||||
|
||||
.oe_import .oe_import_options p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.oe_import .oe_import_options label {
|
||||
display: inline-block;
|
||||
width: 10em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.oe_import_selector ul,
|
||||
.oe_import_selector li {
|
||||
margin: 0; padding: 0;
|
||||
}
|
|
@ -0,0 +1,291 @@
|
|||
openerp.base_import = function (instance) {
|
||||
var QWeb = instance.web.qweb;
|
||||
var _t = instance.web._t;
|
||||
var _lt = instance.web._lt;
|
||||
|
||||
/**
|
||||
* Safari does not deal well at all with raw JSON data being
|
||||
* returned. As a result, we're going to cheat by using a
|
||||
* pseudo-jsonp: instead of getting JSON data in the iframe, we're
|
||||
* getting a ``script`` tag which consists of a function call and
|
||||
* the returned data (the json dump).
|
||||
*
|
||||
* The function is an auto-generated name bound to ``window``,
|
||||
* which calls back into the callback provided here.
|
||||
*
|
||||
* @param {Object} form the form element (DOM or jQuery) to use in the call
|
||||
* @param {Object} attributes jquery.form attributes object
|
||||
* @param {Function} callback function to call with the returned data
|
||||
*/
|
||||
function jsonp(form, attributes, callback) {
|
||||
attributes = attributes || {};
|
||||
var options = {jsonp: _.uniqueId('import_callback_')};
|
||||
window[options.jsonp] = function () {
|
||||
delete window[options.jsonp];
|
||||
callback.apply(null, arguments);
|
||||
};
|
||||
if ('data' in attributes) {
|
||||
_.extend(attributes.data, options);
|
||||
} else {
|
||||
_.extend(attributes, {data: options});
|
||||
}
|
||||
_.extend(attributes, {
|
||||
dataType: 'script',
|
||||
});
|
||||
$(form).ajaxSubmit(attributes);
|
||||
}
|
||||
|
||||
// if true, the 'Import', 'Export', etc... buttons will be shown
|
||||
instance.web.ListView.prototype.defaults.import_enabled = true;
|
||||
instance.web.ListView.include({
|
||||
on_loaded: function () {
|
||||
var self = this;
|
||||
var add_button = false;
|
||||
if (!this.$buttons) {
|
||||
add_button = true;
|
||||
}
|
||||
this._super.apply(this, arguments);
|
||||
if(add_button) {
|
||||
this.$buttons.on('click', '.oe_list_button_import', function() {
|
||||
new instance.web.DataImport(self, self.dataset).open();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
instance.web.DataImport = instance.web.Dialog.extend({
|
||||
template: 'ImportView',
|
||||
dialog_title: _lt("Import Data"),
|
||||
opts: [
|
||||
{name: 'encoding', label: _lt("Encoding:"), value: 'utf-8'},
|
||||
{name: 'separator', label: _lt("Separator:"), value: ','},
|
||||
{name: 'quoting', label: _lt("Quoting:"), value: '"'}
|
||||
],
|
||||
events: {
|
||||
'change .oe_import_grid input': 'import_dryrun',
|
||||
'change input.oe_import_file': 'file_update',
|
||||
'change input.oe_import_has_header, .oe_import_options input': 'settings_updated',
|
||||
'click a.oe_import_csv': function (e) {
|
||||
e.preventDefault();
|
||||
},
|
||||
'click a.oe_import_export': function (e) {
|
||||
e.preventDefault();
|
||||
},
|
||||
'click a.oe_import_toggle': function (e) {
|
||||
e.preventDefault();
|
||||
var $el = $(e.target);
|
||||
($el.next().length
|
||||
? $el.next()
|
||||
: $el.parent().next())
|
||||
.toggle();
|
||||
}
|
||||
},
|
||||
init: function (parent, dataset) {
|
||||
var self = this;
|
||||
this._super(parent, {
|
||||
buttons: [
|
||||
{text: _t("Import File"), click: function () {
|
||||
self.do_import();
|
||||
}, 'class': 'oe_import_dialog_button'}
|
||||
]
|
||||
});
|
||||
this.res_model = parent.model;
|
||||
// import object id
|
||||
this.id = null;
|
||||
this.Import = new instance.web.Model('base_import.import');
|
||||
},
|
||||
start: function () {
|
||||
var self = this;
|
||||
return this.Import.call('create', [{
|
||||
'res_model': this.res_model
|
||||
}]).then(function (id) {
|
||||
self.id = id;
|
||||
self.$('input[name=import_id]').val(id);
|
||||
});
|
||||
},
|
||||
|
||||
import_options: function () {
|
||||
var self = this;
|
||||
var options = {
|
||||
headers: this.$('input.oe_import_has_header').prop('checked')
|
||||
};
|
||||
_(this.opts).each(function (opt) {
|
||||
options[opt.name] =
|
||||
self.$('input.oe_import_' + opt.name).val();
|
||||
});
|
||||
return options;
|
||||
},
|
||||
|
||||
//- File & settings change section
|
||||
file_update: function (e) {
|
||||
if (!this.$('input.oe_import_file').val()) { return; }
|
||||
|
||||
this.$el.removeClass('oe_import_preview oe_import_error');
|
||||
jsonp(this.$el, {
|
||||
url: '/base_import/set_file'
|
||||
}, this.proxy('settings_updated'));
|
||||
},
|
||||
settings_updated: function () {
|
||||
this.$el.addClass('oe_import_with_file');
|
||||
// TODO: test that write // succeeded?
|
||||
this.Import.call(
|
||||
'parse_preview', [this.id, this.import_options()])
|
||||
.then(this.proxy('preview'));
|
||||
},
|
||||
preview: function (result) {
|
||||
this.$el.toggleClass(
|
||||
'oe_import_noheaders',
|
||||
!this.$('input.oe_import_has_header').prop('checked'));
|
||||
if (result.error) {
|
||||
this.$el.addClass('oe_import_error');
|
||||
this.$('.oe_import_error_report').html(
|
||||
QWeb.render('ImportView.preview.error', result));
|
||||
return;
|
||||
}
|
||||
this.$el.addClass('oe_import_preview');
|
||||
this.$('table').html(QWeb.render('ImportView.preview', result));
|
||||
|
||||
var $fields = this.$('.oe_import_fields input');
|
||||
this.render_fields_matches(result, $fields);
|
||||
var data = this.generate_fields_completion(result);
|
||||
var item_finder = function (id, items) {
|
||||
items = items || data;
|
||||
for (var i=0; i < items.length; ++i) {
|
||||
var item = items[i];
|
||||
if (item.id === id) {
|
||||
return item;
|
||||
}
|
||||
var val;
|
||||
if (item.children && (val = item_finder(id, item.children))) {
|
||||
return val;
|
||||
}
|
||||
}
|
||||
return '';
|
||||
};
|
||||
$fields.select2({
|
||||
allowClear: true,
|
||||
minimumInputLength: 0,
|
||||
data: data,
|
||||
initSelection: function (element, callback) {
|
||||
var default_value = element.val();
|
||||
if (!default_value) {
|
||||
callback('');
|
||||
return;
|
||||
}
|
||||
|
||||
callback(item_finder(default_value));
|
||||
},
|
||||
|
||||
width: 'resolve',
|
||||
dropdownCssClass: 'oe_import_selector'
|
||||
});
|
||||
this.import_dryrun();
|
||||
},
|
||||
generate_fields_completion: function (root) {
|
||||
var basic = [];
|
||||
var regulars = [];
|
||||
var o2m = [];
|
||||
function traverse(field, ancestors, collection) {
|
||||
var subfields = field.fields;
|
||||
var field_path = ancestors.concat(field);
|
||||
var label = _(field_path).pluck('string').join(' / ');
|
||||
var id = _(field_path).pluck('name').join('/');
|
||||
|
||||
// If non-relational, m2o or m2m, collection is regulars
|
||||
if (!collection) {
|
||||
if (field.name === 'id') {
|
||||
collection = basic
|
||||
} else if (_.isEmpty(subfields)
|
||||
|| _.isEqual(_.pluck(subfields, 'name'), ['id', '.id'])) {
|
||||
collection = regulars;
|
||||
} else {
|
||||
collection = o2m;
|
||||
}
|
||||
}
|
||||
|
||||
collection.push({
|
||||
id: id,
|
||||
text: label,
|
||||
required: field.required
|
||||
});
|
||||
|
||||
for(var i=0, end=subfields.length; i<end; ++i) {
|
||||
traverse(subfields[i], field_path, collection);
|
||||
}
|
||||
}
|
||||
_(root.fields).each(function (field) {
|
||||
traverse(field, []);
|
||||
});
|
||||
|
||||
var cmp = function (field1, field2) {
|
||||
return field1.text.localeCompare(field2.text);
|
||||
|
||||
};
|
||||
regulars.sort(cmp);
|
||||
o2m.sort(cmp);
|
||||
return basic.concat([
|
||||
{ text: _t("Normal Fields"), children: regulars },
|
||||
{ text: _t("Relation Fields"), children: o2m }
|
||||
]);
|
||||
},
|
||||
render_fields_matches: function (result, $fields) {
|
||||
if (_(result.matches).isEmpty()) { return; }
|
||||
$fields.each(function (index, input) {
|
||||
var match = result.matches[index];
|
||||
if (!match) { return; }
|
||||
|
||||
var current_field = result;
|
||||
input.value = _(match).chain()
|
||||
.map(function (name) {
|
||||
// WARNING: does both mapping and folding (over the
|
||||
// ``field`` iterator variable)
|
||||
return current_field = _(current_field.fields).find(function (subfield) {
|
||||
return subfield.name === name;
|
||||
});
|
||||
})
|
||||
.pluck('name')
|
||||
.value()
|
||||
.join('/');
|
||||
});
|
||||
},
|
||||
|
||||
//- import itself
|
||||
call_import: function (options) {
|
||||
var self = this;
|
||||
var fields = this.$('.oe_import_fields input.oe_import_match_field').map(function (index, el) {
|
||||
return $(el).select2('val') || false;
|
||||
}).get();
|
||||
return this.Import.call(
|
||||
'do', [this.id, fields, this.import_options()], options);
|
||||
},
|
||||
import_dryrun: function () {
|
||||
// this.call_import({ dryrun: true })
|
||||
// .then(this.proxy('render_import_errors'));
|
||||
},
|
||||
do_import: function () {
|
||||
var self = this;
|
||||
this.call_import({ dryrun: false }).then(function (errors) {
|
||||
if (_.isEmpty(errors)) {
|
||||
if (self.getParent().reload_content) {
|
||||
self.getParent().reload_content();
|
||||
}
|
||||
self.close();
|
||||
return;
|
||||
}
|
||||
self.render_import_errors(errors);
|
||||
});
|
||||
},
|
||||
render_import_errors: function (errors) {
|
||||
if (_.isEmpty(errors)) {
|
||||
this.$el.removeClass('oe_import_error');
|
||||
return;
|
||||
}
|
||||
// import failed (or maybe just warnings, if we ever get
|
||||
// warnings?)
|
||||
this.$el.addClass('oe_import_error');
|
||||
this.$('.oe_import_error_report').html(
|
||||
QWeb.render('ImportView.error', {errors: errors}));
|
||||
},
|
||||
});
|
||||
};
|
|
@ -0,0 +1,103 @@
|
|||
<templates>
|
||||
<t t-name="ImportView">
|
||||
<t t-set="_id" t-value="_.uniqueId('export')"/>
|
||||
<form action="" method="post" enctype="multipart/form-data" class="oe_import">
|
||||
<input type="hidden" name="session_id"
|
||||
t-att-value="widget.session.session_id"/>
|
||||
<input type="hidden" name="import_id"/>
|
||||
<h2>Upload your file</h2>
|
||||
<p>Select the <a href="#" class="oe_import_csv">.CSV</a>
|
||||
file to import. If you need a sample importable file, you
|
||||
can use <a href="#" class="oe_import_export">the export
|
||||
tool</a> to generate one.</p>
|
||||
<label t-attf-for="file_#{_id}" autofocus="autofocus">CSV File:</label>
|
||||
<input type="file" id-attf-id="file_#{_id}"
|
||||
name="file" class="oe_import_file"/>
|
||||
|
||||
<div class="oe_import_with_file">
|
||||
<h2>Map your data to OpenERP</h2>
|
||||
<input type="checkbox" class="oe_import_has_header"
|
||||
id="oe_import_has_header" checked="checked"/>
|
||||
<label for="oe_import_has_header">The first row of the
|
||||
file contains the label of the column</label>
|
||||
<p class="oe_import_noheaders">If the file contains
|
||||
the column names, OpenERP can try auto-detecting the
|
||||
field corresponding to the column. This makes imports
|
||||
simpler especially when the file has many columns.</p>
|
||||
|
||||
<div class="oe_import_error_report"></div>
|
||||
<table class="oe_import_grid" width="100%"/>
|
||||
<a href="#" class="oe_import_toggle">
|
||||
File Format Options…</a>
|
||||
<div class="oe_import_toggled oe_import_options">
|
||||
<p t-foreach="widget.opts" t-as="option">
|
||||
<!-- no @name, avoid submission when file_update called -->
|
||||
<label t-attf-for="#{option.name}_#{_id}">
|
||||
<t t-esc="option.label"/></label>
|
||||
<input t-attf-id="#{option.name}_#{_id}"
|
||||
t-attf-class="oe_import_#{option.name}"
|
||||
t-att-value="option.value"/>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h2>Frequently Asked Questions</h2>
|
||||
<dl>
|
||||
<dt><a href="#" class="oe_import_toggle">
|
||||
Need to import data from an other application?</a></dt>
|
||||
<dd>
|
||||
<p>In order to re-create relationships between
|
||||
different records, you should use the unique
|
||||
identifier from the original application and
|
||||
map it to the <abbr title="External ID">ID</abbr>
|
||||
column in OpenERP. When you
|
||||
import an other record that links to the first
|
||||
one, use <abbr title="XXX/External ID">XXX/ID</abbr>
|
||||
to the original unique identifier.</p>
|
||||
<p>The <abbr title="External ID">ID</abbr>
|
||||
will also be used to update the original
|
||||
import if you need to re-import modified data
|
||||
later, it's thus good practice to specify it
|
||||
whenever possible</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</form>
|
||||
</t>
|
||||
<t t-name="ImportView.preview">
|
||||
<tr t-if="headers" class="oe_import_grid-header">
|
||||
<td t-foreach="headers" t-as="header" class="oe_import_grid-cell"
|
||||
><t t-esc="header"/></td>
|
||||
</tr>
|
||||
<tr class="oe_import_fields">
|
||||
<!-- Iterate on first row to ensure we have all columns -->
|
||||
<td t-foreach="preview[0]" t-as="column">
|
||||
<input placeholder="Don't Import"
|
||||
class="oe_import_match_field"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr t-foreach="preview" t-as="row" class="oe_import_grid-row">
|
||||
<td t-foreach="row" t-as="cell" class="oe_import_grid-cell"
|
||||
><t t-esc="cell"/></td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-name="ImportView.preview.error">
|
||||
<p>Import preview failed due to: <t t-esc="error"/></p>
|
||||
<p>Here is the start of the file we could not import:</p>
|
||||
<pre><t t-esc="preview"/></pre>
|
||||
</t>
|
||||
<ul t-name="ImportView.error">
|
||||
<li t-foreach="errors" t-as="error" t-attf-class="oe_import_report_#{error.type}">
|
||||
<!-- can also have error.record, but may be *huge* if
|
||||
e.g. has image fields -->
|
||||
<t t-esc="error.message"/>
|
||||
</li>
|
||||
</ul>
|
||||
<t t-extend="ListView.buttons">
|
||||
<t t-jquery="span.oe_alternative">
|
||||
this.attr('t-if', 'widget.options.import_enabled');
|
||||
</t>
|
||||
<t t-jquery="span.oe_alternative" t-operation="append">
|
||||
<a href="#" class="oe_bold oe_list_button_import">Import</a>
|
||||
</t>
|
||||
</t>
|
||||
</templates>
|
|
@ -0,0 +1,101 @@
|
|||
from openerp.osv import orm, fields
|
||||
|
||||
def name(n): return 'base_import.tests.models.%s' % n
|
||||
|
||||
class char(orm.Model):
|
||||
_name = name('char')
|
||||
|
||||
_columns = {
|
||||
'value': fields.char('unknown', size=None)
|
||||
}
|
||||
|
||||
class char_required(orm.Model):
|
||||
_name = name('char.required')
|
||||
|
||||
_columns = {
|
||||
'value': fields.char('unknown', size=None, required=True)
|
||||
}
|
||||
|
||||
class char_readonly(orm.Model):
|
||||
_name = name('char.readonly')
|
||||
|
||||
_columns = {
|
||||
'value': fields.char('unknown', size=None, readonly=True)
|
||||
}
|
||||
|
||||
class char_states(orm.Model):
|
||||
_name = name('char.states')
|
||||
|
||||
_columns = {
|
||||
'value': fields.char('unknown', size=None, readonly=True, states={'draft': [('readonly', False)]})
|
||||
}
|
||||
|
||||
class char_noreadonly(orm.Model):
|
||||
_name = name('char.noreadonly')
|
||||
|
||||
_columns = {
|
||||
'value': fields.char('unknown', size=None, readonly=True, states={'draft': [('invisible', True)]})
|
||||
}
|
||||
|
||||
class char_stillreadonly(orm.Model):
|
||||
_name = name('char.stillreadonly')
|
||||
|
||||
_columns = {
|
||||
'value': fields.char('unknown', size=None, readonly=True, states={'draft': [('readonly', True)]})
|
||||
}
|
||||
|
||||
# TODO: complex field (m2m, o2m, m2o)
|
||||
class m2o(orm.Model):
|
||||
_name = name('m2o')
|
||||
|
||||
_columns = {
|
||||
'value': fields.many2one(name('m2o.related'))
|
||||
}
|
||||
class m2o_related(orm.Model):
|
||||
_name = name('m2o.related')
|
||||
|
||||
_columns = {
|
||||
'value': fields.integer()
|
||||
}
|
||||
_defaults = {
|
||||
'value': 42
|
||||
}
|
||||
|
||||
class m2o_required(orm.Model):
|
||||
_name = name('m2o.required')
|
||||
|
||||
_columns = {
|
||||
'value': fields.many2one(name('m2o.required.related'), required=True)
|
||||
}
|
||||
class m2o_required_related(orm.Model):
|
||||
_name = name('m2o.required.related')
|
||||
|
||||
_columns = {
|
||||
'value': fields.integer()
|
||||
}
|
||||
_defaults = {
|
||||
'value': 42
|
||||
}
|
||||
|
||||
class o2m(orm.Model):
|
||||
_name = name('o2m')
|
||||
|
||||
_columns = {
|
||||
'value': fields.one2many(name('o2m.child'), 'parent_id')
|
||||
}
|
||||
class o2m_child(orm.Model):
|
||||
_name = name('o2m.child')
|
||||
|
||||
_columns = {
|
||||
'parent_id': fields.many2one(name('o2m')),
|
||||
'value': fields.integer()
|
||||
}
|
||||
|
||||
class preview_model(orm.Model):
|
||||
_name = name('preview')
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Name', size=None),
|
||||
'somevalue': fields.integer('Some Value', required=True),
|
||||
'othervalue': fields.integer('Other Variable'),
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
from . import test_cases
|
||||
|
||||
checks = [test_cases]
|
|
@ -0,0 +1,342 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
import unittest2
|
||||
from openerp.tests.common import TransactionCase
|
||||
|
||||
from .. import models
|
||||
|
||||
ID_FIELD = {'id': 'id', 'name': 'id', 'string': "External ID", 'required': False, 'fields': []}
|
||||
def make_field(name='value', string='unknown', required=False, fields=[]):
|
||||
return [
|
||||
ID_FIELD,
|
||||
{'id': name, 'name': name, 'string': string, 'required': required, 'fields': fields},
|
||||
]
|
||||
|
||||
class test_basic_fields(TransactionCase):
|
||||
def get_fields(self, field):
|
||||
return self.registry('base_import.import')\
|
||||
.get_fields(self.cr, self.uid, 'base_import.tests.models.' + field)
|
||||
|
||||
def test_base(self):
|
||||
""" A basic field is not required """
|
||||
self.assertEqual(self.get_fields('char'), make_field())
|
||||
|
||||
def test_required(self):
|
||||
""" Required fields should be flagged (so they can be fill-required) """
|
||||
self.assertEqual(self.get_fields('char.required'), make_field(required=True))
|
||||
|
||||
def test_readonly(self):
|
||||
""" Readonly fields should be filtered out"""
|
||||
self.assertEqual(self.get_fields('char.readonly'), [ID_FIELD])
|
||||
|
||||
def test_readonly_states(self):
|
||||
""" Readonly fields with states should not be filtered out"""
|
||||
self.assertEqual(self.get_fields('char.states'), make_field())
|
||||
|
||||
def test_readonly_states_noreadonly(self):
|
||||
""" Readonly fields with states having nothing to do with
|
||||
readonly should still be filtered out"""
|
||||
self.assertEqual(self.get_fields('char.noreadonly'), [ID_FIELD])
|
||||
|
||||
def test_readonly_states_stillreadonly(self):
|
||||
""" Readonly fields with readonly states leaving them readonly
|
||||
always... filtered out"""
|
||||
self.assertEqual(self.get_fields('char.stillreadonly'), [ID_FIELD])
|
||||
|
||||
def test_m2o(self):
|
||||
""" M2O fields should allow import of themselves (name_get),
|
||||
their id and their xid"""
|
||||
self.assertEqual(self.get_fields('m2o'), make_field(fields=[
|
||||
{'id': 'value', 'name': 'id', 'string': 'External ID', 'required': False, 'fields': []},
|
||||
{'id': 'value', 'name': '.id', 'string': 'Database ID', 'required': False, 'fields': []},
|
||||
]))
|
||||
|
||||
def test_m2o_required(self):
|
||||
""" If an m2o field is required, its three sub-fields are
|
||||
required as well (the client has to handle that: requiredness
|
||||
is id-based)
|
||||
"""
|
||||
self.assertEqual(self.get_fields('m2o.required'), make_field(required=True, fields=[
|
||||
{'id': 'value', 'name': 'id', 'string': 'External ID', 'required': True, 'fields': []},
|
||||
{'id': 'value', 'name': '.id', 'string': 'Database ID', 'required': True, 'fields': []},
|
||||
]))
|
||||
|
||||
class test_o2m(TransactionCase):
|
||||
def get_fields(self, field):
|
||||
return self.registry('base_import.import')\
|
||||
.get_fields(self.cr, self.uid, 'base_import.tests.models.' + field)
|
||||
|
||||
def test_shallow(self):
|
||||
self.assertEqual(self.get_fields('o2m'), make_field(fields=[
|
||||
{'id': 'id', 'name': 'id', 'string': 'External ID', 'required': False, 'fields': []},
|
||||
# FIXME: should reverse field be ignored?
|
||||
{'id': 'parent_id', 'name': 'parent_id', 'string': 'unknown', 'required': False, 'fields': [
|
||||
{'id': 'parent_id', 'name': 'id', 'string': 'External ID', 'required': False, 'fields': []},
|
||||
{'id': 'parent_id', 'name': '.id', 'string': 'Database ID', 'required': False, 'fields': []},
|
||||
]},
|
||||
{'id': 'value', 'name': 'value', 'string': 'unknown', 'required': False, 'fields': []},
|
||||
]))
|
||||
|
||||
class test_match_headers_single(TransactionCase):
|
||||
def test_match_by_name(self):
|
||||
match = self.registry('base_import.import')._match_header(
|
||||
'f0', [{'name': 'f0'}], {})
|
||||
|
||||
self.assertEqual(match, [{'name': 'f0'}])
|
||||
|
||||
def test_match_by_string(self):
|
||||
match = self.registry('base_import.import')._match_header(
|
||||
'some field', [{'name': 'bob', 'string': "Some Field"}], {})
|
||||
|
||||
self.assertEqual(match, [{'name': 'bob', 'string': "Some Field"}])
|
||||
|
||||
def test_nomatch(self):
|
||||
match = self.registry('base_import.import')._match_header(
|
||||
'should not be', [{'name': 'bob', 'string': "wheee"}], {})
|
||||
|
||||
self.assertEqual(match, [])
|
||||
|
||||
def test_recursive_match(self):
|
||||
f = {
|
||||
'name': 'f0',
|
||||
'string': "My Field",
|
||||
'fields': [
|
||||
{'name': 'f0', 'string': "Sub field 0", 'fields': []},
|
||||
{'name': 'f1', 'string': "Sub field 2", 'fields': []},
|
||||
]
|
||||
}
|
||||
match = self.registry('base_import.import')._match_header(
|
||||
'f0/f1', [f], {})
|
||||
|
||||
self.assertEqual(match, [f, f['fields'][1]])
|
||||
|
||||
def test_recursive_nomatch(self):
|
||||
""" Match first level, fail to match second level
|
||||
"""
|
||||
f = {
|
||||
'name': 'f0',
|
||||
'string': "My Field",
|
||||
'fields': [
|
||||
{'name': 'f0', 'string': "Sub field 0", 'fields': []},
|
||||
{'name': 'f1', 'string': "Sub field 2", 'fields': []},
|
||||
]
|
||||
}
|
||||
match = self.registry('base_import.import')._match_header(
|
||||
'f0/f2', [f], {})
|
||||
|
||||
self.assertEqual(match, [])
|
||||
|
||||
class test_match_headers_multiple(TransactionCase):
|
||||
def test_noheaders(self):
|
||||
self.assertEqual(
|
||||
self.registry('base_import.import')._match_headers(
|
||||
[], [], {}),
|
||||
(None, None)
|
||||
)
|
||||
def test_nomatch(self):
|
||||
self.assertEqual(
|
||||
self.registry('base_import.import')._match_headers(
|
||||
iter([
|
||||
['foo', 'bar', 'baz', 'qux'],
|
||||
['v1', 'v2', 'v3', 'v4'],
|
||||
]),
|
||||
[],
|
||||
{'headers': True}),
|
||||
(
|
||||
['foo', 'bar', 'baz', 'qux'],
|
||||
dict.fromkeys(range(4))
|
||||
)
|
||||
)
|
||||
|
||||
def test_mixed(self):
|
||||
self.assertEqual(
|
||||
self.registry('base_import.import')._match_headers(
|
||||
iter(['foo bar baz qux/corge'.split()]),
|
||||
[
|
||||
{'name': 'bar', 'string': 'Bar'},
|
||||
{'name': 'bob', 'string': 'Baz'},
|
||||
{'name': 'qux', 'string': 'Qux', 'fields': [
|
||||
{'name': 'corge', 'fields': []},
|
||||
]}
|
||||
],
|
||||
{'headers': True}),
|
||||
(['foo', 'bar', 'baz', 'qux/corge'], {
|
||||
0: None,
|
||||
1: ['bar'],
|
||||
2: ['bob'],
|
||||
3: ['qux', 'corge'],
|
||||
})
|
||||
)
|
||||
|
||||
class test_preview(TransactionCase):
|
||||
def make_import(self):
|
||||
Import = self.registry('base_import.import')
|
||||
id = Import.create(self.cr, self.uid, {
|
||||
'res_model': 'res.users',
|
||||
'file': u"로그인,언어\nbob,1\n".encode('euc_kr'),
|
||||
})
|
||||
return Import, id
|
||||
|
||||
def test_encoding(self):
|
||||
Import, id = self.make_import()
|
||||
result = Import.parse_preview(self.cr, self.uid, id, {
|
||||
'quoting': '"',
|
||||
'separator': ',',
|
||||
})
|
||||
self.assertTrue('error' in result)
|
||||
|
||||
def test_csv_errors(self):
|
||||
Import, id = self.make_import()
|
||||
|
||||
result = Import.parse_preview(self.cr, self.uid, id, {
|
||||
'quoting': 'foo',
|
||||
'separator': ',',
|
||||
'encoding': 'euc_kr',
|
||||
})
|
||||
self.assertTrue('error' in result)
|
||||
|
||||
def test_csv_errors(self):
|
||||
Import, id = self.make_import()
|
||||
|
||||
result = Import.parse_preview(self.cr, self.uid, id, {
|
||||
'quoting': '"',
|
||||
'separator': 'bob',
|
||||
'encoding': 'euc_kr',
|
||||
})
|
||||
self.assertTrue('error' in result)
|
||||
|
||||
def test_success(self):
|
||||
Import = self.registry('base_import.import')
|
||||
id = Import.create(self.cr, self.uid, {
|
||||
'res_model': 'base_import.tests.models.preview',
|
||||
'file': 'name,Some Value,Counter\n'
|
||||
'foo,1,2\n'
|
||||
'bar,3,4\n'
|
||||
'qux,5,6\n'
|
||||
})
|
||||
|
||||
result = Import.parse_preview(self.cr, self.uid, id, {
|
||||
'quoting': '"',
|
||||
'separator': ',',
|
||||
'headers': True,
|
||||
})
|
||||
|
||||
self.assertEqual(result['matches'], {0: ['name'], 1: ['somevalue'], 2: None})
|
||||
self.assertEqual(result['headers'], ['name', 'Some Value', 'Counter'])
|
||||
# Order depends on iteration order of fields_get
|
||||
self.assertItemsEqual(result['fields'], [
|
||||
{'id': 'id', 'name': 'id', 'string': 'External ID', 'required':False, 'fields': []},
|
||||
{'id': 'name', 'name': 'name', 'string': 'Name', 'required':False, 'fields': []},
|
||||
{'id': 'somevalue', 'name': 'somevalue', 'string': 'Some Value', 'required':True, 'fields': []},
|
||||
{'id': 'othervalue', 'name': 'othervalue', 'string': 'Other Variable', 'required':False, 'fields': []},
|
||||
])
|
||||
self.assertEqual(result['preview'], [
|
||||
['foo', '1', '2'],
|
||||
['bar', '3', '4'],
|
||||
['qux', '5', '6'],
|
||||
])
|
||||
# Ensure we only have the response fields we expect
|
||||
self.assertItemsEqual(result.keys(), ['matches', 'headers', 'fields', 'preview'])
|
||||
|
||||
class test_convert_import_data(TransactionCase):
|
||||
""" Tests conversion of base_import.import input into data which
|
||||
can be fed to Model.import_data
|
||||
"""
|
||||
def test_all(self):
|
||||
Import = self.registry('base_import.import')
|
||||
id = Import.create(self.cr, self.uid, {
|
||||
'res_model': 'base_import.tests.models.preview',
|
||||
'file': 'name,Some Value,Counter\n'
|
||||
'foo,1,2\n'
|
||||
'bar,3,4\n'
|
||||
'qux,5,6\n'
|
||||
})
|
||||
record = Import.browse(self.cr, self.uid, id)
|
||||
data, fields = Import._convert_import_data(
|
||||
record, ['name', 'somevalue', 'othervalue'],
|
||||
{'quoting': '"', 'separator': ',', 'headers': True,})
|
||||
|
||||
self.assertItemsEqual(fields, ['name', 'somevalue', 'othervalue'])
|
||||
self.assertItemsEqual(data, [
|
||||
('foo', '1', '2'),
|
||||
('bar', '3', '4'),
|
||||
('qux', '5', '6'),
|
||||
])
|
||||
|
||||
def test_filtered(self):
|
||||
""" If ``False`` is provided as field mapping for a column,
|
||||
that column should be removed from importable data
|
||||
"""
|
||||
Import = self.registry('base_import.import')
|
||||
id = Import.create(self.cr, self.uid, {
|
||||
'res_model': 'base_import.tests.models.preview',
|
||||
'file': 'name,Some Value,Counter\n'
|
||||
'foo,1,2\n'
|
||||
'bar,3,4\n'
|
||||
'qux,5,6\n'
|
||||
})
|
||||
record = Import.browse(self.cr, self.uid, id)
|
||||
data, fields = Import._convert_import_data(
|
||||
record, ['name', False, 'othervalue'],
|
||||
{'quoting': '"', 'separator': ',', 'headers': True,})
|
||||
|
||||
self.assertItemsEqual(fields, ['name', 'othervalue'])
|
||||
self.assertItemsEqual(data, [
|
||||
('foo', '2'),
|
||||
('bar', '4'),
|
||||
('qux', '6'),
|
||||
])
|
||||
|
||||
def test_norow(self):
|
||||
""" If a row is composed only of empty values (due to having
|
||||
filtered out non-empty values from it), it should be removed
|
||||
"""
|
||||
Import = self.registry('base_import.import')
|
||||
id = Import.create(self.cr, self.uid, {
|
||||
'res_model': 'base_import.tests.models.preview',
|
||||
'file': 'name,Some Value,Counter\n'
|
||||
'foo,1,2\n'
|
||||
',3,\n'
|
||||
',5,6\n'
|
||||
})
|
||||
record = Import.browse(self.cr, self.uid, id)
|
||||
data, fields = Import._convert_import_data(
|
||||
record, ['name', False, 'othervalue'],
|
||||
{'quoting': '"', 'separator': ',', 'headers': True,})
|
||||
|
||||
self.assertItemsEqual(fields, ['name', 'othervalue'])
|
||||
self.assertItemsEqual(data, [
|
||||
('foo', '2'),
|
||||
('', '6'),
|
||||
])
|
||||
|
||||
def test_nofield(self):
|
||||
Import = self.registry('base_import.import')
|
||||
|
||||
id = Import.create(self.cr, self.uid, {
|
||||
'res_model': 'base_import.tests.models.preview',
|
||||
'file': 'name,Some Value,Counter\n'
|
||||
'foo,1,2\n'
|
||||
})
|
||||
|
||||
record = Import.browse(self.cr, self.uid, id)
|
||||
self.assertRaises(
|
||||
ValueError,
|
||||
Import._convert_import_data,
|
||||
record, [],
|
||||
{'quoting': '"', 'separator': ',', 'headers': True,})
|
||||
|
||||
def test_falsefields(self):
|
||||
Import = self.registry('base_import.import')
|
||||
|
||||
id = Import.create(self.cr, self.uid, {
|
||||
'res_model': 'base_import.tests.models.preview',
|
||||
'file': 'name,Some Value,Counter\n'
|
||||
'foo,1,2\n'
|
||||
})
|
||||
|
||||
record = Import.browse(self.cr, self.uid, id)
|
||||
self.assertRaises(
|
||||
ValueError,
|
||||
Import._convert_import_data,
|
||||
record, [False, False, False],
|
||||
{'quoting': '"', 'separator': ',', 'headers': True,})
|
|
@ -35,6 +35,7 @@ class base_config_settings(osv.osv_memory):
|
|||
'module_auth_anonymous': fields.boolean('activate the public portal',
|
||||
help="""Enable the public part of openerp, openerp becomes a public website."""),
|
||||
'module_auth_oauth': fields.boolean('use external authentication providers, sign in with google, facebook, ...'),
|
||||
'module_base_import': fields.boolean("Allow users to import data from CSV files"),
|
||||
}
|
||||
|
||||
def open_company(self, cr, uid, ids, context=None):
|
||||
|
|
|
@ -14,9 +14,10 @@
|
|||
</header>
|
||||
<separator string="General Settings"/>
|
||||
<div>
|
||||
<label string="You will also find several configuration options on your company data:
|
||||
address for the header and footer, overdue payments texts, etc."/>
|
||||
<button type="object" name="open_company" string="Configure Your Company Data" icon="gtk-execute" class="oe_inline oe_link"/>
|
||||
<p>
|
||||
<label string="You will find more options in your company details: address for the header and footer, overdue payments texts, etc."/>
|
||||
<button type="object" name="open_company" string="Configure Your Company Data" icon="gtk-execute" class="oe_inline oe_link"/>
|
||||
</p>
|
||||
</div>
|
||||
<group>
|
||||
<label for="id" string="Options"/>
|
||||
|
@ -59,6 +60,15 @@
|
|||
</div>
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<label for="id" string="Import / Export"/>
|
||||
<div>
|
||||
<div>
|
||||
<field name="module_base_import" class="oe_inline"/>
|
||||
<label for="module_base_import"/>
|
||||
</div>
|
||||
</div>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -1,70 +1,54 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * base_vat
|
||||
# Spanish (Mexico) 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: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2010-12-25 18:58+0000\n"
|
||||
"Last-Translator: Jordi Esteve (www.zikzakmedia.com) "
|
||||
"<jesteve@zikzakmedia.com>\n"
|
||||
"Language-Team: \n"
|
||||
"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-09-07 00:31+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Spanish (Mexico) <es_MX@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: 2011-09-05 05:10+0000\n"
|
||||
"X-Generator: Launchpad (build 13830)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-08 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: base_vat
|
||||
#: code:addons/base_vat/base_vat.py:87
|
||||
#: code:addons/base_vat/base_vat.py:141
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The Vat does not seems to be correct. You should have entered something like "
|
||||
"this %s"
|
||||
msgstr ""
|
||||
"El CIF/NIF parece que no sea correcto. Debería haber introducido algo como "
|
||||
"esto %s"
|
||||
"This VAT number does not seem to be valid.\n"
|
||||
"Note: the expected format is %s"
|
||||
msgstr "El RFC no es válido. El formato esperado es %s"
|
||||
|
||||
#. module: base_vat
|
||||
#: model:ir.module.module,description:base_vat.module_meta_information
|
||||
msgid ""
|
||||
"\n"
|
||||
" Enable the VAT Number for the partner. Check the validity of that VAT "
|
||||
"Number.\n"
|
||||
"\n"
|
||||
" This module follows the methods stated at http://sima-pc.com/nif.php "
|
||||
"for\n"
|
||||
" checking the validity of VAT Number assigned to partners in European "
|
||||
"countries.\n"
|
||||
" "
|
||||
#: sql_constraint:res.company:0
|
||||
msgid "The company name must be unique !"
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Permite la validación del CIF/NIF de las empresas. Comprueba si el "
|
||||
"CIF/NIF es un número válido.\n"
|
||||
"\n"
|
||||
" Este módulo usa los métodos especificados en http://sima-pc.com/nif.php "
|
||||
"para\n"
|
||||
" la validación del CIF/NIF asignado a las empresas de los países "
|
||||
"europeos.\n"
|
||||
" "
|
||||
|
||||
#. module: base_vat
|
||||
#: model:ir.module.module,shortdesc:base_vat.module_meta_information
|
||||
msgid "Base VAT - To check VAT number validity"
|
||||
msgstr "Base CIF/NIF - Para comprobar la validez de los CIF/NIF"
|
||||
|
||||
#. module: base_vat
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You can not create recursive associated members."
|
||||
msgstr "¡Error! No puede crear miembros asociados recursivos."
|
||||
msgid "Error ! You cannot create recursive associated members."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_vat
|
||||
#: code:addons/base_vat/base_vat.py:88
|
||||
#, python-format
|
||||
msgid "The VAT is invalid, It should begin with the country code"
|
||||
msgstr "El CIF/NIF no es válido, debería empezar con el código del país"
|
||||
#: field:res.company,vat_check_vies:0
|
||||
msgid "VIES VAT Check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_vat
|
||||
#: model:ir.model,name:base_vat.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_vat
|
||||
#: constraint:res.company:0
|
||||
msgid "Error! You can not create recursive companies."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_vat
|
||||
#: help:res.partner,vat_subjected:0
|
||||
|
@ -72,27 +56,20 @@ msgid ""
|
|||
"Check this box if the partner is subjected to the VAT. It will be used for "
|
||||
"the VAT legal statement."
|
||||
msgstr ""
|
||||
"Marque esta opción si la empresa está sujeta al IVA. Será utilizado para la "
|
||||
"declaración legal del IVA."
|
||||
|
||||
#. module: base_vat
|
||||
#: model:ir.model,name:base_vat.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr "Empresa"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_vat
|
||||
#: help:res.company,vat_check_vies:0
|
||||
msgid ""
|
||||
"If checked, Partners VAT numbers will be fully validated against EU's VIES "
|
||||
"service rather than via a simple format validation (checksum)."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_vat
|
||||
#: field:res.partner,vat_subjected:0
|
||||
msgid "VAT Legal Statement"
|
||||
msgstr "Sujeto a IVA"
|
||||
|
||||
#~ msgid "Invalid XML for View Architecture!"
|
||||
#~ msgstr "¡XML inválido para la definición de la vista!"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Enable the VAT Number for the partner. Check the validity of that VAT Number."
|
||||
#~ msgstr ""
|
||||
#~ "Activa el IVA (Impuesto Valor Añadido) para la empresa. Comprueba la validez "
|
||||
#~ "del CIF/NIF."
|
||||
|
||||
#~ msgid "VAT"
|
||||
#~ msgstr "IVA"
|
||||
msgstr ""
|
||||
|
|
|
@ -28,9 +28,7 @@
|
|||
Lets the user create a custom dashboard.
|
||||
========================================
|
||||
|
||||
This module also creates the Administration Dashboard.
|
||||
|
||||
The user can also publish notes.
|
||||
Allows users to create custom dashboard.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'depends': ['base'],
|
||||
|
|
|
@ -0,0 +1,348 @@
|
|||
# Norwegian Bokmal 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-09-06 14:01+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Norwegian Bokmal <nb@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-09-07 04:58+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
msgid " Year "
|
||||
msgstr " År "
|
||||
|
||||
#. module: board
|
||||
#: model:ir.model,name:board.model_board_menu_create
|
||||
msgid "Menu Create"
|
||||
msgstr "Meny laget"
|
||||
|
||||
#. module: board
|
||||
#: view:board.menu.create:0
|
||||
msgid "Menu Information"
|
||||
msgstr "Meny informasjon"
|
||||
|
||||
#. module: board
|
||||
#: view:res.users:0
|
||||
msgid "Latest Connections"
|
||||
msgstr "Siste Tilkoblinger"
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
msgid "Log created in last month"
|
||||
msgstr "Logg opprettet i forrige måned"
|
||||
|
||||
#. module: board
|
||||
#: view:board.board:0
|
||||
#: model:ir.actions.act_window,name:board.open_board_administration_form
|
||||
msgid "Administration Dashboard"
|
||||
msgstr "Administrasjon kontrollpanel"
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
msgid "Group By..."
|
||||
msgstr "Grupper etter ..."
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
msgid "Log created in current year"
|
||||
msgstr "Logg opprettet i gjeldende år."
|
||||
|
||||
#. module: board
|
||||
#: model:ir.model,name:board.model_board_board
|
||||
msgid "Board"
|
||||
msgstr "Brett"
|
||||
|
||||
#. module: board
|
||||
#: field:board.menu.create,menu_name:0
|
||||
msgid "Menu Name"
|
||||
msgstr "Menynavn"
|
||||
|
||||
#. 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 "Ukentlig global aktivitet"
|
||||
|
||||
#. module: board
|
||||
#: field:board.board.line,name:0
|
||||
msgid "Title"
|
||||
msgstr "Tittel"
|
||||
|
||||
#. module: board
|
||||
#: field:res.log.report,nbr:0
|
||||
msgid "# of Entries"
|
||||
msgstr "# av oppføringer"
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
#: field:res.log.report,month:0
|
||||
msgid "Month"
|
||||
msgstr "Måned"
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
msgid "Log created in current month"
|
||||
msgstr "Logg opprettet i gjeldende måned."
|
||||
|
||||
#. 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 "Månedlig aktivitet per dokument"
|
||||
|
||||
#. module: board
|
||||
#: view:board.board:0
|
||||
msgid "Configuration Overview"
|
||||
msgstr "Konfigurasjonsoversikt"
|
||||
|
||||
#. 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 "Kontrollpanel Definisjon"
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "March"
|
||||
msgstr "Mars"
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "August"
|
||||
msgstr "August"
|
||||
|
||||
#. module: board
|
||||
#: model:ir.actions.act_window,name:board.action_user_connection_tree
|
||||
msgid "User Connections"
|
||||
msgstr "Brukertilkoblinger"
|
||||
|
||||
#. module: board
|
||||
#: field:res.log.report,creation_date:0
|
||||
msgid "Creation Date"
|
||||
msgstr "Opprettelsesdato"
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
msgid "Log Analysis"
|
||||
msgstr "Logg analyse"
|
||||
|
||||
#. module: board
|
||||
#: field:res.log.report,res_model:0
|
||||
msgid "Object"
|
||||
msgstr "Objekt"
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "June"
|
||||
msgstr "Juni"
|
||||
|
||||
#. module: board
|
||||
#: field:board.board,line_ids:0
|
||||
msgid "Action Views"
|
||||
msgstr "Handling Visninger"
|
||||
|
||||
#. module: board
|
||||
#: model:ir.model,name:board.model_res_log_report
|
||||
msgid "Log Report"
|
||||
msgstr "Logg rapport"
|
||||
|
||||
#. module: board
|
||||
#: code:addons/board/wizard/board_menu_create.py:46
|
||||
#, python-format
|
||||
msgid "Please Insert Dashboard View(s) !"
|
||||
msgstr "Vennligst Sett Kontrollpanel Vinsning (er)!"
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "July"
|
||||
msgstr "juli"
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
#: field:res.log.report,day:0
|
||||
msgid "Day"
|
||||
msgstr "Dag"
|
||||
|
||||
#. module: board
|
||||
#: view:board.menu.create:0
|
||||
msgid "Create Menu For Dashboard"
|
||||
msgstr "Opprett meny for Kontrollpanel."
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "February"
|
||||
msgstr "Februar"
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "October"
|
||||
msgstr "Oktober"
|
||||
|
||||
#. module: board
|
||||
#: model:ir.model,name:board.model_board_board_line
|
||||
msgid "Board Line"
|
||||
msgstr "bord Linje"
|
||||
|
||||
#. module: board
|
||||
#: field:board.menu.create,menu_parent_id:0
|
||||
msgid "Parent Menu"
|
||||
msgstr "Overordnet meny"
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
msgid " Month-1 "
|
||||
msgstr " Måned-1 "
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "January"
|
||||
msgstr "Januar"
|
||||
|
||||
#. module: board
|
||||
#: view:board.board:0
|
||||
msgid "Users"
|
||||
msgstr "Brukere"
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "November"
|
||||
msgstr "November"
|
||||
|
||||
#. module: board
|
||||
#: help:board.board.line,sequence:0
|
||||
msgid ""
|
||||
"Gives the sequence order when displaying a list of "
|
||||
"board lines."
|
||||
msgstr "Gir rekkefølgen av når du viser en liste over bord linjer."
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "April"
|
||||
msgstr "April"
|
||||
|
||||
#. 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 "Kontrollpanel"
|
||||
|
||||
#. module: board
|
||||
#: code:addons/board/wizard/board_menu_create.py:45
|
||||
#, python-format
|
||||
msgid "User Error!"
|
||||
msgstr "Bruker feil!"
|
||||
|
||||
#. module: board
|
||||
#: field:board.board.line,action_id:0
|
||||
msgid "Action"
|
||||
msgstr "Handling"
|
||||
|
||||
#. module: board
|
||||
#: field:board.board.line,position:0
|
||||
msgid "Position"
|
||||
msgstr "Posisjon"
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
msgid "Model"
|
||||
msgstr "Modell"
|
||||
|
||||
#. module: board
|
||||
#: model:ir.actions.act_window,name:board.board_homepage_action
|
||||
msgid "Home Page"
|
||||
msgstr "Hjemmeside"
|
||||
|
||||
#. module: board
|
||||
#: model:ir.actions.act_window,name:board.action_latest_activities_tree
|
||||
msgid "Latest Activities"
|
||||
msgstr "Senest aktiveter"
|
||||
|
||||
#. module: board
|
||||
#: selection:board.board.line,position:0
|
||||
msgid "Left"
|
||||
msgstr "Venstre"
|
||||
|
||||
#. module: board
|
||||
#: field:board.board,view_id:0
|
||||
msgid "Board View"
|
||||
msgstr "Bord visning"
|
||||
|
||||
#. module: board
|
||||
#: selection:board.board.line,position:0
|
||||
msgid "Right"
|
||||
msgstr "Høyre"
|
||||
|
||||
#. module: board
|
||||
#: field:board.board.line,width:0
|
||||
msgid "Width"
|
||||
msgstr "Bredde"
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
msgid " Month "
|
||||
msgstr " Måned "
|
||||
|
||||
#. module: board
|
||||
#: field:board.board.line,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr "Sekvens"
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "September"
|
||||
msgstr "September"
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "December"
|
||||
msgstr "Desember"
|
||||
|
||||
#. module: board
|
||||
#: view:board.board:0
|
||||
#: view:board.menu.create:0
|
||||
msgid "Create Menu"
|
||||
msgstr "Opprett meny"
|
||||
|
||||
#. module: board
|
||||
#: field:board.board.line,height:0
|
||||
msgid "Height"
|
||||
msgstr "Høyde"
|
||||
|
||||
#. module: board
|
||||
#: model:ir.actions.act_window,name:board.action_board_menu_create
|
||||
msgid "Create Board Menu"
|
||||
msgstr "Opprett bord meny"
|
||||
|
||||
#. module: board
|
||||
#: selection:res.log.report,month:0
|
||||
msgid "May"
|
||||
msgstr "Mai"
|
||||
|
||||
#. module: board
|
||||
#: view:res.log.report:0
|
||||
#: field:res.log.report,name:0
|
||||
msgid "Year"
|
||||
msgstr "År"
|
||||
|
||||
#. module: board
|
||||
#: view:board.menu.create:0
|
||||
msgid "Cancel"
|
||||
msgstr "Kanseller"
|
||||
|
||||
#. module: board
|
||||
#: view:board.board:0
|
||||
msgid "Dashboard View"
|
||||
msgstr "Kontrollpanel visning"
|
|
@ -0,0 +1,3 @@
|
|||
dashboard.css: dashboard.sass
|
||||
sass --trace -t expanded dashboard.sass dashboard.css
|
||||
|
|
@ -1,3 +1,17 @@
|
|||
.openerp .oe_dashboard_layout_selector ul {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.openerp .oe_dashboard_layout_selector li {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
float: left;
|
||||
}
|
||||
.openerp .oe_dashboard_layout_selector li .oe_dashboard_selected_layout {
|
||||
margin-left: -30px;
|
||||
vertical-align: bottom;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.openerp .oe_dashboard_links {
|
||||
text-align: right;
|
||||
margin: 0 4px 6px 0;
|
||||
|
|
|
@ -9,6 +9,18 @@
|
|||
box-shadow: $bsval
|
||||
|
||||
.openerp
|
||||
.oe_dashboard_layout_selector
|
||||
ul
|
||||
white-space: nowrap
|
||||
li
|
||||
margin: 0
|
||||
padding: 0
|
||||
list-style-type: none
|
||||
float: left
|
||||
.oe_dashboard_selected_layout
|
||||
margin-left: -30px
|
||||
vertical-align: bottom
|
||||
margin-bottom: 10px
|
||||
.oe_dashboard_links
|
||||
text-align: right
|
||||
margin: 0 4px 6px 0
|
||||
|
|
|
@ -220,36 +220,40 @@ instance.web.form.DashBoard = instance.web.form.FormWidget.extend({
|
|||
am.do_action = function (action) {
|
||||
self.do_action(action);
|
||||
};
|
||||
if (action_attrs.creatable && action_attrs.creatable !== 'false') {
|
||||
var action_id = parseInt(action_attrs.creatable, 10);
|
||||
$action.parent().find('button.oe_dashboard_button_create').click(function() {
|
||||
if (isNaN(action_id)) {
|
||||
action_orig.flags.default_view = 'form';
|
||||
self.do_action(action_orig);
|
||||
} else {
|
||||
self.rpc('/web/action/load', {
|
||||
action_id: action_id
|
||||
}, function(result) {
|
||||
result.result.flags = result.result.flags || {};
|
||||
result.result.flags.default_view = 'form';
|
||||
self.do_action(result.result);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
if (am.inner_widget) {
|
||||
am.inner_widget.on_mode_switch.add(function(mode) {
|
||||
var new_form_action = function(id, editable) {
|
||||
var new_views = [];
|
||||
_.each(action_orig.views, function(view) {
|
||||
new_views[view[1] === mode ? 'unshift' : 'push'](view);
|
||||
new_views[view[1] === 'form' ? 'unshift' : 'push'](view);
|
||||
});
|
||||
if (!new_views.length || new_views[0][1] !== mode) {
|
||||
new_views.unshift([false, mode]);
|
||||
if (!new_views.length || new_views[0][1] !== 'form') {
|
||||
new_views.unshift([false, 'form']);
|
||||
}
|
||||
action_orig.views = new_views;
|
||||
action_orig.res_id = am.inner_widget.dataset.ids[am.inner_widget.dataset.index];
|
||||
action_orig.res_id = id;
|
||||
action_orig.flags = {
|
||||
form: {
|
||||
"initial_mode": editable ? "edit" : "view",
|
||||
}
|
||||
};
|
||||
self.do_action(action_orig);
|
||||
});
|
||||
};
|
||||
var list = am.inner_widget.views.list;
|
||||
if (list) {
|
||||
list.deferred.then(function() {
|
||||
$(list.controller.groups).off('row_link').on('row_link', function(e, id) {
|
||||
new_form_action(id);
|
||||
});
|
||||
});
|
||||
}
|
||||
var kanban = am.inner_widget.views.kanban;
|
||||
if (kanban) {
|
||||
kanban.deferred.then(function() {
|
||||
kanban.controller.open_record = function(id, editable) {
|
||||
new_form_action(id, editable);
|
||||
};
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
renderElement: function() {
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
<span class="oe_header_txt"> <t t-esc="action.attrs.string"/> </span>
|
||||
<input class = "oe_header_text" type="text"/>
|
||||
<t t-if="!action.attrs.string">&nbsp;</t>
|
||||
<button t-if="action.attrs.creatable and action.attrs.creatable !== 'false'" class="oe_button oe_button_create">Create</button>
|
||||
<span class='oe_icon oe_close'></span>
|
||||
<span class='oe_icon oe_minimize oe_fold' t-if="!action.attrs.fold"></span>
|
||||
<span class='oe_icon oe_maximize oe_fold' t-if="action.attrs.fold"></span>
|
||||
|
@ -36,7 +35,7 @@
|
|||
</div>
|
||||
</t>
|
||||
<t t-name="DashBoard.layouts">
|
||||
<div class="oe_dashboard_layout_selector oe_semantic_html_override">
|
||||
<div class="oe_dashboard_layout_selector">
|
||||
<p>
|
||||
<strong>Choose dashboard layout</strong>
|
||||
</p>
|
||||
|
|
|
@ -2,22 +2,6 @@
|
|||
<openerp>
|
||||
<data>
|
||||
<!-- CRM dashboard -->
|
||||
<record model="ir.actions.act_window" id="act_my_oppor">
|
||||
<field name="name">My Opportunities</field>
|
||||
<field name="res_model">crm.lead</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain">[('user_id','=',uid),('type', '=', 'opportunity'),('state','not in',('cancel','done'))]</field>
|
||||
<field name="view_id" ref="crm.crm_case_tree_view_oppor"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="act_crm_tag_tree_view_leads_all">
|
||||
<field name="name">New Leads</field>
|
||||
<field name="res_model">crm.lead</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain">[('user_id','=',uid),('state','=','draft'),('type','=','lead')]</field>
|
||||
<field name="view_id" ref="crm.crm_case_tree_view_leads"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_crm_opportunity_stage_graph">
|
||||
<field name="name">Opportunities By Stage - Graph</field>
|
||||
<field name="model">crm.lead.report</field>
|
||||
|
@ -70,11 +54,9 @@
|
|||
<form string="Statistics Dashboard" version="7.0">
|
||||
<board style="1-1">
|
||||
<column>
|
||||
<action string="New Leads" name="%(act_crm_tag_tree_view_leads_all)d"/>
|
||||
<action string="My Opportunities" name="%(act_my_oppor)d"/>
|
||||
<action string="Planned Revenue by Stage and User" name="%(act_oppor_stage_user)d"/>
|
||||
</column>
|
||||
<column>
|
||||
<action string="Planned Revenue by Stage and User" name="%(act_oppor_stage_user)d"/>
|
||||
<action string="Opportunities by Stage" name="%(act_opportunity_stage)d"/>
|
||||
</column>
|
||||
</board>
|
||||
|
|
|
@ -87,8 +87,8 @@ class crm_lead(base_stage, osv.osv):
|
|||
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)]
|
||||
search_domain += ['|', ('section_ids', '=', section_id)]
|
||||
search_domain += ['|', ('id', 'in', ids), ('case_default', '=', True)]
|
||||
# retrieve type from the context (if set: choose 'type' or 'both')
|
||||
type = self._resolve_type_from_context(cr, uid, context=context)
|
||||
if type:
|
||||
|
@ -98,7 +98,12 @@ class crm_lead(base_stage, osv.osv):
|
|||
result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context)
|
||||
# restore order of the search
|
||||
result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
|
||||
return result
|
||||
|
||||
fold = {}
|
||||
for stage in stage_obj.browse(cr, access_rights_uid, stage_ids, context=context):
|
||||
fold[stage.id] = stage.fold or False
|
||||
|
||||
return result, fold
|
||||
|
||||
_group_by_full = {
|
||||
'stage_id': _read_group_stage_ids
|
||||
|
@ -200,7 +205,7 @@ class crm_lead(base_stage, osv.osv):
|
|||
'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), ('case_default', '=', True), '|', ('type', '=', type), ('type', '=', 'both')]"),
|
||||
domain="['&', ('fold', '=', False), '&', '|', ('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),
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
<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 eval="False" name="fold"/>
|
||||
<field name="state">cancel</field>
|
||||
<field eval="'0'" name="probability"/>
|
||||
<field eval="'16'" name="sequence"/>
|
||||
|
|
|
@ -257,7 +257,7 @@
|
|||
<field name="stage_id"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="section_id" invisible="context.get('invisible_section', True)" />
|
||||
<field name="state" groups="base.group_no_one"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="type_id" invisible="1"/>
|
||||
<field name="referred" invisible="1"/>
|
||||
<field name="channel_id" invisible="1"/>
|
||||
|
@ -297,17 +297,10 @@
|
|||
<field name="message_summary"/>
|
||||
<field name="message_unread"/>
|
||||
<templates>
|
||||
<t t-name="lead_details">
|
||||
<ul class="oe_kanban_tooltip oe_semantic_html_override">
|
||||
<li t-if="record.phone.raw_value"><b>Phone:</b> <field name="phone"/></li>
|
||||
<li><b>Probability:</b> <field name="probability"/>%%</li>
|
||||
<li><b>Creation date:</b> <field name="create_date"/></li>
|
||||
<li t-if="record.date_deadline.raw_value"><b>Date Deadline:</b> <field name="date_deadline"/></li>
|
||||
</ul>
|
||||
</t>
|
||||
<field name="date_deadline"/>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
|
||||
<div class="oe_dropdown_toggle oe_dropdown_kanban oe_semantic_html_override">
|
||||
<div class="oe_dropdown_toggle oe_dropdown_kanban">
|
||||
<span class="oe_e">í</span>
|
||||
<ul class="oe_dropdown_menu">
|
||||
<t t-if="widget.view.is_action_enabled('edit')"><li><a type="edit">Edit...</a></li></t>
|
||||
|
@ -382,7 +375,6 @@
|
|||
<filter string="Channel" icon="terp-call-start" domain="[]" context="{'group_by':'channel_id'}" />
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<filter string="Creation" help="Create date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" groups="base.group_no_one"/>
|
||||
</group>
|
||||
<group string="Display">
|
||||
|
@ -431,7 +423,7 @@
|
|||
<label for="planned_revenue" class="oe_edit_only"/>
|
||||
<h2>
|
||||
<field name="planned_revenue" class="oe_inline"/>
|
||||
<field name="company_currency" class="oe_inline"/> at
|
||||
<field name="company_currency" class="oe_inline" groups="base.group_multi_currency"/> at
|
||||
<field name="probability" class="oe_inline" widget="integer"/>%% success rate
|
||||
</h2>
|
||||
</div>
|
||||
|
@ -511,7 +503,7 @@
|
|||
<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="state" invisible="1"/>
|
||||
<field name="type" invisible="1"/>
|
||||
</group>
|
||||
<group string="References">
|
||||
|
@ -595,7 +587,6 @@
|
|||
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
||||
<filter string="Campaign" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'type_id'}"/>
|
||||
<filter string="Channel" icon="terp-call-start" domain="[]" context="{'group_by':'channel_id'}" />
|
||||
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<filter string="Creation" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" groups="base.group_no_one"/>
|
||||
<filter string="Exp.Closing" icon="terp-go-month" help="Expected Closing" domain="[]" context="{'group_by':'date_deadline'}" />
|
||||
</group>
|
||||
|
|
|
@ -105,21 +105,11 @@
|
|||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<filter string="Stage" name="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
||||
<filter string="Campaign" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'type_id'}" />
|
||||
<filter string="Channel" icon="terp-call-start" domain="[]" context="{'group_by':'channel_id'}" />
|
||||
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}" />
|
||||
<filter string="Year" icon="terp-go-year" domain="[]" context="{'group_by':'creation_year'}"/>
|
||||
<filter string="Month" icon="terp-go-month" domain="[]" context="{'group_by':'creation_month'}"/>
|
||||
<filter string="Day" icon="terp-go-today" domain="[]" context="{'group_by':'creation_day'}"/>
|
||||
<filter string="Exp. Closing" icon="terp-go-month" domain="[]" context="{'group_by':'deadline_month'}"/>
|
||||
<filter string="Campaign" icon="terp-gtk-jump-to-rtl"
|
||||
domain="[]" context="{'group_by':'type_id'}" />
|
||||
<filter string="Channel" icon="terp-call-start"
|
||||
domain="[]" context="{'group_by':'channel_id'}" />
|
||||
<separator orientation="vertical" />
|
||||
<filter string="Status" icon="terp-stock_effects-object-colorize"
|
||||
domain="[]" context="{'group_by':'state'}" />
|
||||
<separator orientation="vertical" />
|
||||
<filter string="Year" icon="terp-go-year"
|
||||
domain="[]" context="{'group_by':'creation_year'}"/>
|
||||
<filter string="Month" icon="terp-go-month"
|
||||
|
|
|
@ -50,9 +50,9 @@
|
|||
parent="base.menu_aftersale" action="crm_case_categ_claim0" sequence="1"/>
|
||||
|
||||
<!-- Claim Stages -->
|
||||
<menuitem id="base.menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
|
||||
<menuitem id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1"/>
|
||||
<menuitem id="menu_claim_stage_view" name="Claim Stages" action="crm_claim_stage_act" parent="base.menu_project_config_project" sequence="20"/>
|
||||
<menuitem id="base.menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:39+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "التمركز الجغرافي"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -134,7 +134,7 @@ msgid "Highest"
|
|||
msgstr "أعلى"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:39+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr ""
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr "Най-висок"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Geo localitzar"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "El més alt"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr ""
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr ""
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Geogr. Lokalisierung"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "Text Version der Mitteilung"
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "Sehr Hoch"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "Text Inhalt"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr ""
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr "Υψηλότερο"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Geo localizar"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "Más alta"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
"Language: es\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
|
@ -75,7 +75,7 @@ msgid "Geo Localize"
|
|||
msgstr "Geo localizar"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "Versión en texto plano del mensaje"
|
||||
|
||||
|
@ -136,7 +136,7 @@ msgid "Highest"
|
|||
msgstr "Más alta"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "Contenido del Texto"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Geo localizar"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "Muy alto"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Alueellista"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr "Korkein"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -15,8 +15,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -75,7 +75,7 @@ msgid "Geo Localize"
|
|||
msgstr "Géolocalisation"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "Version plein texte du message"
|
||||
|
||||
|
@ -136,7 +136,7 @@ msgid "Highest"
|
|||
msgstr "La Plus haute"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "Contenu du texte"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Xeolocalizar"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "A máis alta"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr ""
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr "Najviši"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Földrajzi fekvés meghatározása"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr "Legmagasabb"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Geo localizzazione"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "Maggiore"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "ジオロカライゼーション"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "メッセージのテキスト版"
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr "最高"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "テキストの内容"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr ""
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr ""
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Ģeo. lokalizācija"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr "Augstākā"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Geo lokaliseren"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "Platte tekst versie van het bericht"
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "Hoogste"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "Tekst inhoud"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Lokalizacja geograficzna"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "Najwyższy"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Localizar Geograficamente"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "Formatação do texto da versão da mensagem"
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "Maior"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "Conteúdos do texto"
|
||||
|
||||
|
|
|
@ -15,8 +15,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -75,7 +75,7 @@ msgid "Geo Localize"
|
|||
msgstr "Localização Geográfica"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "Versão em texto"
|
||||
|
||||
|
@ -136,7 +136,7 @@ msgid "Highest"
|
|||
msgstr "Mais Alta"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "Conteúdo"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Localizare Geo"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "Versiune text-simplu a mesajului"
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "Cel mai ridicat (cea mai ridicata)"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "Cuprins text"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Геолоцировать"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "Высший"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:39+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr ""
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr ""
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr ""
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr ""
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr ""
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Geoplacering"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "Textversion av meddelandet"
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "Högsta"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "Textinnehåll"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Coğrafi konumlama"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "Mesajın düz-metin versiyonu"
|
||||
|
||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
|||
msgstr "En yüksek"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "Metin içeriği"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "geolocalization定位"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "内容的纯文本版本"
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr "最高"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "文本内容"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
|||
msgstr "Geo 定位"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
#: help:crm.lead.forward.to.partner,body:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "內容的純文字版本"
|
||||
|
||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
|||
msgstr "最高"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
#: field:crm.lead.forward.to.partner,body:0
|
||||
msgid "Text contents"
|
||||
msgstr "文本內容"
|
||||
|
||||
|
|
|
@ -0,0 +1,212 @@
|
|||
# Norwegian Bokmal 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-09-06 14:26+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Norwegian Bokmal <nb@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-09-07 04:58+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.questionnaire:0
|
||||
msgid "Questions List"
|
||||
msgstr "Spørsmål liste."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.actions.act_window,help:crm_profiling.open_questionnaires
|
||||
msgid ""
|
||||
"You can create specific topic-related questionnaires to guide your team(s) "
|
||||
"in the sales cycle by helping them to ask the right questions. The "
|
||||
"segmentation tool allows you to automatically assign a partner to a category "
|
||||
"according to his answers to the different questionnaires."
|
||||
msgstr ""
|
||||
"Du kan opprette spesifikke tema-relaterte spørreskjemaer for å styre lag (e) "
|
||||
"i salgsperioden ved å hjelpe dem til å stille de riktige spørsmålene. "
|
||||
"Segmentering verktøyet lar deg automatisk tildele en partner til en kategori "
|
||||
"i henhold til hans svar til de ulike spørreskjemaer."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm_profiling.answer,question_id:0
|
||||
#: field:crm_profiling.question,name:0
|
||||
#: model:ir.model,name:crm_profiling.model_crm_profiling_question
|
||||
#: field:open.questionnaire.line,question_id:0
|
||||
msgid "Question"
|
||||
msgstr "Spørsmål"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.actions.act_window,name:crm_profiling.action_open_questionnaire
|
||||
#: view:open.questionnaire:0
|
||||
msgid "Open Questionnaire"
|
||||
msgstr "åpen Spørreskjema"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,child_ids:0
|
||||
msgid "Child Profiles"
|
||||
msgstr "Barn profiler"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm.segmentation:0
|
||||
msgid "Partner Segmentations"
|
||||
msgstr "Partner segmenteringer"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm_profiling.answer,name:0
|
||||
#: model:ir.model,name:crm_profiling.model_crm_profiling_answer
|
||||
#: field:open.questionnaire.line,answer_id:0
|
||||
msgid "Answer"
|
||||
msgstr "Svar"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.model,name:crm_profiling.model_open_questionnaire_line
|
||||
msgid "open.questionnaire.line"
|
||||
msgstr "Åpen.Spørreskjema.Linje"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.model,name:crm_profiling.model_crm_segmentation
|
||||
msgid "Partner Segmentation"
|
||||
msgstr "Partnersegmentering"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:res.partner:0
|
||||
msgid "Profiling"
|
||||
msgstr "Profilering"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.questionnaire:0
|
||||
#: field:crm_profiling.questionnaire,description:0
|
||||
msgid "Description"
|
||||
msgstr "Beskrivelse:"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,answer_no:0
|
||||
msgid "Excluded Answers"
|
||||
msgstr "Ekskluderte svar"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.answer:0
|
||||
#: view:crm_profiling.question:0
|
||||
#: field:res.partner,answers_ids:0
|
||||
msgid "Answers"
|
||||
msgstr "Svar"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.model,name:crm_profiling.model_open_questionnaire
|
||||
msgid "open.questionnaire"
|
||||
msgstr "Åpen.Spørresjema"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:open.questionnaire,questionnaire_id:0
|
||||
msgid "Questionnaire name"
|
||||
msgstr "Spørresjema navn."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:res.partner:0
|
||||
msgid "Use a questionnaire"
|
||||
msgstr "Bruk et spørresjema."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:open.questionnaire:0
|
||||
msgid "_Cancel"
|
||||
msgstr "_Avbryt"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:open.questionnaire,question_ans_ids:0
|
||||
msgid "Question / Answers"
|
||||
msgstr "Spørsmål / Svar"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.questionnaire:0
|
||||
#: model:ir.actions.act_window,name:crm_profiling.open_questionnaires
|
||||
#: model:ir.ui.menu,name:crm_profiling.menu_segm_questionnaire
|
||||
#: view:open.questionnaire:0
|
||||
msgid "Questionnaires"
|
||||
msgstr "Spørreskjemaer"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: help:crm.segmentation,profiling_active:0
|
||||
msgid ""
|
||||
"Check this box if you want to use this tab as "
|
||||
"part of the segmentation rule. If not checked, "
|
||||
"the criteria beneath will be ignored"
|
||||
msgstr ""
|
||||
"Kryss av her hvis du ønsker å bruke denne kategorien som en del av "
|
||||
"segmentering regelen. Hvis det ikke er merket, vil kriteriene under bli "
|
||||
"ignorert."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: constraint:crm.segmentation:0
|
||||
msgid "Error ! You can not create recursive profiles."
|
||||
msgstr "Feil ! Du kan ikke lage rekursive profiler."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,profiling_active:0
|
||||
msgid "Use The Profiling Rules"
|
||||
msgstr "Bruk profileringen Regler"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You cannot create recursive associated members."
|
||||
msgstr "Feil! Du kan ikke opprette rekursive tilknyttede medlemmer."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.question:0
|
||||
#: field:crm_profiling.question,answers_ids:0
|
||||
msgid "Avalaible Answers"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,answer_yes:0
|
||||
msgid "Included Answers"
|
||||
msgstr "Inkluderte svar."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.question:0
|
||||
#: field:crm_profiling.questionnaire,questions_ids:0
|
||||
#: model:ir.actions.act_window,name:crm_profiling.open_questions
|
||||
#: model:ir.ui.menu,name:crm_profiling.menu_segm_answer
|
||||
msgid "Questions"
|
||||
msgstr "Spørsmål"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,parent_id:0
|
||||
msgid "Parent Profile"
|
||||
msgstr "Overordnede profil"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:open.questionnaire:0
|
||||
msgid "Cancel"
|
||||
msgstr "Kanseller"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.model,name:crm_profiling.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr "Partner"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: code:addons/crm_profiling/wizard/open_questionnaire.py:77
|
||||
#: field:crm_profiling.questionnaire,name:0
|
||||
#: model:ir.model,name:crm_profiling.model_crm_profiling_questionnaire
|
||||
#: view:open.questionnaire:0
|
||||
#: view:open.questionnaire.line:0
|
||||
#: field:open.questionnaire.line,wizard_id:0
|
||||
#, python-format
|
||||
msgid "Questionnaire"
|
||||
msgstr "Spørreskjemaet"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:open.questionnaire:0
|
||||
msgid "Save Data"
|
||||
msgstr "Lagre data"
|
||||
|
||||
#~ msgid "Avalaible answers"
|
||||
#~ msgstr "Tilgjengelige svar."
|
|
@ -8,9 +8,6 @@
|
|||
<form string="Document board" version="7.0">
|
||||
<board style="2-1" >
|
||||
<column>
|
||||
<action string="New Files"
|
||||
name="%(document.action_view_all_document_tree1)d"
|
||||
view_mode="tree,form"/>
|
||||
<action string="Files by Month"
|
||||
name="%(document.action_view_files_by_month_graph)d"
|
||||
view_mode="graph,tree"/>
|
||||
|
|
|
@ -0,0 +1,121 @@
|
|||
# Norwegian Bokmal 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-09-06 14:45+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Norwegian Bokmal <nb@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-09-07 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.model,name:document_ftp.model_document_ftp_configuration
|
||||
msgid "Auto Directory Configuration"
|
||||
msgstr "Automatisk Katalog Konfigurasjon."
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid ""
|
||||
"Indicate the network address on which your OpenERP server should be "
|
||||
"reachable for end-users. This depends on your network topology and "
|
||||
"configuration, and will only affect the links displayed to the users. The "
|
||||
"format is HOST:PORT and the default host (localhost) is only suitable for "
|
||||
"access from the server machine itself.."
|
||||
msgstr ""
|
||||
"Indikere nettverksadressen som din OpenERP server bør være tilgjengelige for "
|
||||
"sluttbrukerne. Dette avhenger av nettverkstopologi og konfigurasjon, og vil "
|
||||
"bare påvirke lenker som vises til brukerne. Formatet er HOST: PORT og "
|
||||
"standard verten (lokalhost) er bare egnet for tilgang fra serveren maskinen "
|
||||
"selv .."
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.actions.url,name:document_ftp.action_document_browse
|
||||
msgid "Browse Files"
|
||||
msgstr "Bla i filer"
|
||||
|
||||
#. module: document_ftp
|
||||
#: field:document.ftp.configuration,config_logo:0
|
||||
msgid "Image"
|
||||
msgstr "Bilde"
|
||||
|
||||
#. module: document_ftp
|
||||
#: field:document.ftp.configuration,host:0
|
||||
msgid "Address"
|
||||
msgstr "Adresse"
|
||||
|
||||
#. module: document_ftp
|
||||
#: field:document.ftp.browse,url:0
|
||||
msgid "FTP Server"
|
||||
msgstr "FTP-tjener"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory
|
||||
msgid "FTP Server Configuration"
|
||||
msgstr "FTP Serverkonfigurasjon"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.browse:0
|
||||
msgid "_Browse"
|
||||
msgstr "_Bla gjennom"
|
||||
|
||||
#. module: document_ftp
|
||||
#: help:document.ftp.configuration,host:0
|
||||
msgid ""
|
||||
"Server address or IP and port to which users should connect to for DMS access"
|
||||
msgstr ""
|
||||
"Server adresse eller IP og port til hvilke brukere som skal koble seg til "
|
||||
"for DMS tilgang"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.ui.menu,name:document_ftp.menu_document_browse
|
||||
msgid "Shared Repository (FTP)"
|
||||
msgstr "Wikimedia Commons (FTP)"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.browse:0
|
||||
msgid "_Cancel"
|
||||
msgstr "_Avbryt"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "Configure FTP Server"
|
||||
msgstr "Konfigurer FTP serveren"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "title"
|
||||
msgstr "tittel"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.model,name:document_ftp.model_document_ftp_browse
|
||||
msgid "Document FTP Browse"
|
||||
msgstr "Document FTP Bla i."
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "Knowledge Application Configuration"
|
||||
msgstr "Kunnskap Programkonfigurasjon"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse
|
||||
msgid "Document Browse"
|
||||
msgstr "Dokument Bla i."
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.browse:0
|
||||
msgid "Browse Document"
|
||||
msgstr "Bla igjennom dokument"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "res_config_contents"
|
||||
msgstr "res_konfig_innhold"
|
|
@ -29,11 +29,13 @@ class document_page(osv.osv):
|
|||
_description = "Document Page"
|
||||
_order = 'name'
|
||||
|
||||
def _get_page_index(self, cr, uid, page):
|
||||
def _get_page_index(self, cr, uid, page, link=True):
|
||||
index = []
|
||||
for subpage in page.child_ids:
|
||||
index += ["<li>"+ self._get_page_index(cr, uid, subpage) +"</li>"]
|
||||
r = '<a href="#id=%s">%s</a>'%(page.id,page.name)
|
||||
r = ''
|
||||
if link:
|
||||
r = '<a href="#id=%s">%s</a>'%(page.id,page.name)
|
||||
if index:
|
||||
r += "<ul>" + "".join(index) + "</ul>"
|
||||
return r
|
||||
|
@ -42,7 +44,7 @@ class document_page(osv.osv):
|
|||
res = {}
|
||||
for page in self.browse(cr, uid, ids, context=context):
|
||||
if page.type == "category":
|
||||
content = self._get_page_index(cr, uid, page)
|
||||
content = self._get_page_index(cr, uid, page, link=False)
|
||||
else:
|
||||
content = page.content
|
||||
res[page.id] = content
|
||||
|
@ -120,12 +122,12 @@ class document_page_history(osv.osv):
|
|||
text2 = history_pool.read(cr, uid, [v2], ['content'])[0]['content']
|
||||
line1 = line2 = ''
|
||||
if text1:
|
||||
line1 = tools.ustr(text1.splitlines(1))
|
||||
line1 = text1.splitlines(1)
|
||||
if text2:
|
||||
line2=tools.ustr(text2.splitlines(1))
|
||||
line2 = text2.splitlines(1)
|
||||
if (not line1 and not line2) or (line1 == line2):
|
||||
raise osv.except_osv(_('Warning!'), _('There are no changes in revisions.'))
|
||||
diff = difflib.HtmlDiff()
|
||||
return diff.make_file(line1, line2, "Revision-%s" % (v1), "Revision-%s" % (v2), context=False)
|
||||
return diff.make_table(line1, line2, "Revision-%s" % (v1), "Revision-%s" % (v2), context=True)
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -78,17 +78,6 @@
|
|||
</field>
|
||||
</record>
|
||||
<!-- page action -->
|
||||
<record id="action_category" model="ir.actions.act_window">
|
||||
<field name="name">Category</field>
|
||||
<field name="res_model">document.page</field>
|
||||
<field name="domain">[('type','=','category')]</field>
|
||||
<field name="context">{'default_type': 'category'}</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_wiki_tree"/>
|
||||
<field name="search_view_id" ref="view_wiki_filter"/>
|
||||
</record>
|
||||
<menuitem id="menu_category" parent="menu_wiki" name="Categories" action="action_category" sequence="10"/>
|
||||
<record id="action_page" model="ir.actions.act_window">
|
||||
<field name="name">Pages</field>
|
||||
<field name="res_model">document.page</field>
|
||||
|
@ -100,7 +89,18 @@
|
|||
<field name="search_view_id" ref="view_wiki_filter"/>
|
||||
<field name="help">Create web pages</field>
|
||||
</record>
|
||||
<menuitem id="menu_page" parent="menu_wiki" name="Pages" action="action_page" sequence="20"/>
|
||||
<menuitem id="menu_page" parent="menu_wiki" name="Pages" action="action_page" sequence="10"/>
|
||||
<record id="action_category" model="ir.actions.act_window">
|
||||
<field name="name">Category</field>
|
||||
<field name="res_model">document.page</field>
|
||||
<field name="domain">[('type','=','category')]</field>
|
||||
<field name="context">{'default_type': 'category'}</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_wiki_tree"/>
|
||||
<field name="search_view_id" ref="view_wiki_filter"/>
|
||||
</record>
|
||||
<menuitem id="menu_category" parent="menu_wiki" name="Categories" action="action_category" sequence="20"/>
|
||||
|
||||
<!-- History Tree view -->
|
||||
<record model="ir.ui.view" id="view_wiki_history_tree">
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
.oe_document_page ul, .oe_document_page li {
|
||||
padding: 2px 8px;
|
||||
margin: 2px 8px;
|
||||
list-style-type: circle;
|
||||
}
|
||||
|
||||
.oe_form_editable .oe_document_page {
|
||||
display: none;
|
||||
}
|
||||
|
||||
table.diff {font-family:Courier; border:medium;}
|
||||
.diff_header {background-color:#e0e0e0}
|
||||
td.diff_header {text-align:right}
|
||||
.diff_next {background-color:#c0c0c0}
|
||||
.diff_add {background-color:#aaffaa}
|
||||
.diff_chg {background-color:#ffff77}
|
||||
.diff_sub {background-color:#ffaaaa}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<field name="model">wizard.document.page.history.show_diff</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Difference" version="7.0">
|
||||
<field name="diff"/>
|
||||
<field name="diff" widget="html" options='{"safe": true}'/>
|
||||
<footer>
|
||||
<button string="Cancel" class="oe_link" special="cancel" />
|
||||
</footer>
|
||||
|
|
|
@ -0,0 +1,197 @@
|
|||
# Norwegian Bokmal 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-09-07 17:44+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Norwegian Bokmal <nb@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-09-08 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,create_date:0
|
||||
#: field:document.webdav.file.property,create_date:0
|
||||
msgid "Date Created"
|
||||
msgstr "Dato opprettet"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.ui.menu,name:document_webdav.menu_document_props
|
||||
msgid "Documents"
|
||||
msgstr "Dokumenter"
|
||||
|
||||
#. module: document_webdav
|
||||
#: constraint:document.directory:0
|
||||
msgid "Error! You can not create recursive Directories."
|
||||
msgstr "Feil! Du kan opprette rekursive kataloger."
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: view:document.webdav.file.property:0
|
||||
msgid "Search Document properties"
|
||||
msgstr "Søk Dokumentegenskaper."
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: field:document.webdav.dir.property,namespace:0
|
||||
#: view:document.webdav.file.property:0
|
||||
#: field:document.webdav.file.property,namespace:0
|
||||
msgid "Namespace"
|
||||
msgstr "Navnerom"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.directory,dav_prop_ids:0
|
||||
msgid "DAV properties"
|
||||
msgstr "DAV egenskaper"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.model,name:document_webdav.model_document_webdav_file_property
|
||||
msgid "document.webdav.file.property"
|
||||
msgstr "Dokumentet.WebDAV.fil.egenskap"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: view:document.webdav.file.property:0
|
||||
msgid "Group By..."
|
||||
msgstr "Grupper etter ..."
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
msgid "These properties will be added to WebDAV requests"
|
||||
msgstr "Disse egenskapene vil bli lagt til WebDAV-forespørsler"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.actions.act_window,name:document_webdav.action_file_props_form
|
||||
msgid "DAV Properties for Documents"
|
||||
msgstr "DAV Eiendommer for Dokumenter."
|
||||
|
||||
#. module: document_webdav
|
||||
#: code:addons/document_webdav/webdav.py:37
|
||||
#, python-format
|
||||
msgid "PyWebDAV Import Error!"
|
||||
msgstr "PyWebDAV importere Feil!"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.file.property:0
|
||||
#: field:document.webdav.file.property,file_id:0
|
||||
msgid "Document"
|
||||
msgstr "Dokument"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.ui.menu,name:document_webdav.menu_folder_props
|
||||
msgid "Folders"
|
||||
msgstr "Mapper"
|
||||
|
||||
#. module: document_webdav
|
||||
#: sql_constraint:document.directory:0
|
||||
msgid "Directory cannot be parent of itself!"
|
||||
msgstr "Katalogen kan ikke være overordnede av seg selv!"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
msgid "Dynamic context"
|
||||
msgstr "Dynamisk sammenheng"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
msgid "WebDAV properties"
|
||||
msgstr "WebDAV egenskaper."
|
||||
|
||||
#. module: document_webdav
|
||||
#: sql_constraint:document.directory:0
|
||||
msgid "The directory name must be unique !"
|
||||
msgstr "Katalogen Navnet må være unikt!"
|
||||
|
||||
#. module: document_webdav
|
||||
#: code:addons/document_webdav/webdav.py:37
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please install PyWebDAV from "
|
||||
"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-"
|
||||
"0.9.4.tar.gz&can=2&q=/"
|
||||
msgstr ""
|
||||
"Vennligst installer PyWebDAV fra "
|
||||
"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-"
|
||||
"0.9.4.tar.gz&can=2&q=/"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form
|
||||
msgid "DAV Properties for Folders"
|
||||
msgstr "DAV egenskaper for mapper."
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: view:document.webdav.file.property:0
|
||||
msgid "Properties"
|
||||
msgstr "Egenskaper"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,name:0
|
||||
#: field:document.webdav.file.property,name:0
|
||||
msgid "Name"
|
||||
msgstr "Navn"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.model,name:document_webdav.model_document_webdav_dir_property
|
||||
msgid "document.webdav.dir.property"
|
||||
msgstr "Dokumentet.WebDAV.dir.eiendom"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,value:0
|
||||
#: field:document.webdav.file.property,value:0
|
||||
msgid "Value"
|
||||
msgstr "Verdi"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,dir_id:0
|
||||
#: model:ir.model,name:document_webdav.model_document_directory
|
||||
msgid "Directory"
|
||||
msgstr "Katalog"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,write_uid:0
|
||||
#: field:document.webdav.file.property,write_uid:0
|
||||
msgid "Last Modification User"
|
||||
msgstr "Siste endring Bruker"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
msgid "Dir"
|
||||
msgstr "Retn"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,write_date:0
|
||||
#: field:document.webdav.file.property,write_date:0
|
||||
msgid "Date Modified"
|
||||
msgstr "Dato endret"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,create_uid:0
|
||||
#: field:document.webdav.file.property,create_uid:0
|
||||
msgid "Creator"
|
||||
msgstr "Opprettet av"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.ui.menu,name:document_webdav.menu_properties
|
||||
msgid "DAV Properties"
|
||||
msgstr "DAV Egenskaper."
|
||||
|
||||
#. module: document_webdav
|
||||
#: sql_constraint:document.directory:0
|
||||
msgid "Directory must have a parent or a storage"
|
||||
msgstr "Katalog må ha en overordnede eller en lagringsplass."
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,do_subst:0
|
||||
#: field:document.webdav.file.property,do_subst:0
|
||||
msgid "Substitute"
|
||||
msgstr "Erstatte"
|
|
@ -0,0 +1,411 @@
|
|||
# Norwegian Bokmal 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-09-08 19:13+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Norwegian Bokmal <nb@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-09-09 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: edi
|
||||
#: sql_constraint:res.currency:0
|
||||
msgid "The currency code must be unique per company!"
|
||||
msgstr "Valutakode må være unik pr. firma!"
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_partner_address
|
||||
msgid "Partner Addresses"
|
||||
msgstr "Partner adresser"
|
||||
|
||||
#. module: edi
|
||||
#: sql_constraint:res.company:0
|
||||
msgid "The company name must be unique !"
|
||||
msgstr "Firmanavn må være unikt !"
|
||||
|
||||
#. module: edi
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You cannot create recursive associated members."
|
||||
msgstr "Feil! Du kan ikke opprette rekursive tilknyttede medlemmer."
|
||||
|
||||
#. module: edi
|
||||
#: field:edi.document,name:0
|
||||
msgid "EDI token"
|
||||
msgstr "EDI tegn."
|
||||
|
||||
#. module: edi
|
||||
#: help:edi.document,name:0
|
||||
msgid "Unique identifier for retrieving an EDI document."
|
||||
msgstr "Unik identifikator for å hente en EDI dokument."
|
||||
|
||||
#. module: edi
|
||||
#: constraint:res.company:0
|
||||
msgid "Error! You can not create recursive companies."
|
||||
msgstr "Feil ! Du kan ikke lage rekursive firmaer."
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr "Firmaer"
|
||||
|
||||
#. module: edi
|
||||
#: sql_constraint:edi.document:0
|
||||
msgid "EDI Tokens must be unique!"
|
||||
msgstr "EDI tegnet må være unikt!"
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_currency
|
||||
msgid "Currency"
|
||||
msgstr "Valuta"
|
||||
|
||||
#. module: edi
|
||||
#: code:addons/edi/models/edi.py:153
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The document you are trying to import requires the OpenERP `%s` application. "
|
||||
"You can install it by connecting as the administrator and opening the "
|
||||
"configuration assistant."
|
||||
msgstr ""
|
||||
"Dokumentet du prøver å importere krever OpenERP `% s` søknad. Du kan "
|
||||
"installere det ved å koble som administrator og åpne konfigurasjonen "
|
||||
"assistent."
|
||||
|
||||
#. module: edi
|
||||
#: help:edi.document,document:0
|
||||
msgid "EDI document content"
|
||||
msgstr "EDI dokumentinnhold"
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_edi_document
|
||||
msgid "EDI Document"
|
||||
msgstr "EDI dokument."
|
||||
|
||||
#. module: edi
|
||||
#: code:addons/edi/models/edi.py:48
|
||||
#, python-format
|
||||
msgid "'%s' is an invalid external ID"
|
||||
msgstr "'% s' er en ugyldig ekstern ID."
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr "Partner"
|
||||
|
||||
#. module: edi
|
||||
#: code:addons/edi/models/edi.py:152
|
||||
#, python-format
|
||||
msgid "Missing Application"
|
||||
msgstr "Manglende Søknad."
|
||||
|
||||
#. module: edi
|
||||
#: field:edi.document,document:0
|
||||
msgid "Document"
|
||||
msgstr "Dokument"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:23
|
||||
msgid "View/Print"
|
||||
msgstr "Vis / Skriv ut"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:28
|
||||
msgid "Import this document"
|
||||
msgstr "Importer dette dokumentet."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:33
|
||||
msgid "Import it into an existing OpenERP instance"
|
||||
msgstr "Importere den inn i en eksisterende OpenERP eksempel."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:36
|
||||
msgid "OpenERP instance address:"
|
||||
msgstr "OpenERP eksempel adresse:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:39
|
||||
msgid "Import"
|
||||
msgstr "Import"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:44
|
||||
msgid "Import it into a new OpenERP Online instance"
|
||||
msgstr "Importere den til en ny OpenERP Online eksempel."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:47
|
||||
msgid "Create my new OpenERP instance"
|
||||
msgstr "Opprett min nye OpenERP eksempel."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:52
|
||||
msgid "Import into another application"
|
||||
msgstr "Importere til et annet program."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:54
|
||||
msgid ""
|
||||
"OpenERP's Electronic Data Interchange documents are based on a generic and "
|
||||
"language\n"
|
||||
" independent"
|
||||
msgstr ""
|
||||
"OpenERP's elektronisk Data utveksler dokumentene er basert på en generisk og "
|
||||
"språk.\n"
|
||||
" "
|
||||
" uavhengig."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:56
|
||||
msgid "JSON"
|
||||
msgstr "JSON"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:56
|
||||
msgid ""
|
||||
"serialization of the document's attribute.\n"
|
||||
" It is usually very quick and straightforward to "
|
||||
"create a small plug-in for your preferred\n"
|
||||
" application that will be capable of importing "
|
||||
"any OpenERP EDI document.\n"
|
||||
" You can find out more details about how to do "
|
||||
"this and what the content of OpenERP EDI documents\n"
|
||||
" is like in the"
|
||||
msgstr ""
|
||||
"Serialisering av dokumentets attributtet.\n"
|
||||
" Det er vanligvis svært rask og grei å lage en "
|
||||
"liten plug-in for din foretrukne.\n"
|
||||
" program som vil være i stand til å importere "
|
||||
"noen OpenERP EDI dokument.\n"
|
||||
" Du kan finne ut mer informasjon om hvordan du "
|
||||
"gjør dette og hva innholdet i OpenERP EDI dokumenter\n"
|
||||
" er som i."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:60
|
||||
msgid "OpenERP documentation"
|
||||
msgstr "OpenERP dokumentasjon."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:61
|
||||
msgid "To get started immediately,"
|
||||
msgstr "Å komme i gang umiddelbart,"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:62
|
||||
msgid "see is all it takes to use this EDI document in Python"
|
||||
msgstr "Se er alt som trengs for å bruke denne EDI dokumentet i Python."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:70
|
||||
msgid "You can download the raw EDI document here:"
|
||||
msgstr "Du kan laste ned den rå EDI dokumentet her:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:73
|
||||
msgid "Download"
|
||||
msgstr "Nedlastning"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:87
|
||||
msgid "Powered by"
|
||||
msgstr "Drevet av."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:87
|
||||
msgid "OpenERP"
|
||||
msgstr "OpenERP"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:34
|
||||
msgid "Invoice"
|
||||
msgstr "Faktura"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:37
|
||||
msgid "Description"
|
||||
msgstr "Beskrivelse:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:38
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:41
|
||||
msgid "Date"
|
||||
msgstr "Dato"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:39
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:40
|
||||
msgid "Your Reference"
|
||||
msgstr "Din referanse."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:50
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:57
|
||||
msgid "Product Description"
|
||||
msgstr "Produktbeskrivelse"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:51
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:58
|
||||
msgid "Quantity"
|
||||
msgstr "Antall"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:52
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:59
|
||||
msgid "Unit Price"
|
||||
msgstr "Enhetspris"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:53
|
||||
msgid "Discount"
|
||||
msgstr "Rabatt"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:54
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:61
|
||||
msgid "Price"
|
||||
msgstr "Pris"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:72
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:81
|
||||
msgid "Net Total:"
|
||||
msgstr "Netto total:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:83
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:92
|
||||
msgid "Taxes:"
|
||||
msgstr "Avgifter:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:94
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:103
|
||||
msgid "Total:"
|
||||
msgstr "Totalt:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:106
|
||||
msgid "Tax"
|
||||
msgstr "Skatt"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:107
|
||||
msgid "Base Amount"
|
||||
msgstr "Grunnbeløp"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:108
|
||||
msgid "Amount"
|
||||
msgstr "Beløp"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:121
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:113
|
||||
msgid "Notes:"
|
||||
msgstr "Notater:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:129
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:121
|
||||
msgid "Pay Online"
|
||||
msgstr "Betal online."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:133
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:125
|
||||
msgid "Paypal"
|
||||
msgstr "Paypal"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:135
|
||||
msgid ""
|
||||
"You may directly pay this invoice online via Paypal's secure payment gateway:"
|
||||
msgstr ""
|
||||
"Du kan betale direkte denne fakturaen online via Paypal er sikker betaling "
|
||||
"gateway:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:145
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:137
|
||||
msgid "Bank Wire Transfer"
|
||||
msgstr "Bank Tråd overføring."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:147
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:139
|
||||
msgid "Please transfer"
|
||||
msgstr "Vennligst overfør."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:148
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:140
|
||||
msgid "to"
|
||||
msgstr "til"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:149
|
||||
msgid ""
|
||||
"(postal address on the invoice header)\n"
|
||||
" using one of the following bank accounts. Be sure to "
|
||||
"mention the invoice\n"
|
||||
" reference"
|
||||
msgstr ""
|
||||
"(postadresse på fakturaen header)\n"
|
||||
"Ved hjelp av en av følgende bankkontoer. Sørg for å nevne faktura.\n"
|
||||
"Referanse."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:151
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:143
|
||||
msgid "on the transfer:"
|
||||
msgstr "På overføring:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:36
|
||||
msgid "Order"
|
||||
msgstr "Ordre"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:42
|
||||
msgid "Salesman"
|
||||
msgstr "Selger"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:43
|
||||
msgid "Payment terms"
|
||||
msgstr "Betalingsbetingelser"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:60
|
||||
msgid "Discount(%)"
|
||||
msgstr "Raball(%)"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:127
|
||||
msgid ""
|
||||
"You may directly pay this order online via Paypal's secure payment gateway:"
|
||||
msgstr ""
|
||||
"Du kan betale direkte i denne rekkefølgen online via Paypal's sikker "
|
||||
"betaling gateway."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:141
|
||||
msgid ""
|
||||
"(postal address on the order header)\n"
|
||||
" using one of the following bank accounts. Be sure to "
|
||||
"mention the document\n"
|
||||
" reference"
|
||||
msgstr ""
|
||||
"Ostal adresse på bestillingen topp)\n"
|
||||
"Ved hjelp av en av følgende bankkontoer. Sørg for å nevne dokumentet.\n"
|
||||
"Referanse."
|
|
@ -0,0 +1,390 @@
|
|||
# Russian 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-09-10 15:12+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: Russian <ru@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-09-11 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 15924)\n"
|
||||
|
||||
#. module: edi
|
||||
#: sql_constraint:res.currency:0
|
||||
msgid "The currency code must be unique per company!"
|
||||
msgstr "Код валюты должен быть уникальным в компании!"
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_partner_address
|
||||
msgid "Partner Addresses"
|
||||
msgstr "Адреса контрагентов"
|
||||
|
||||
#. module: edi
|
||||
#: sql_constraint:res.company:0
|
||||
msgid "The company name must be unique !"
|
||||
msgstr "Название компании должно быть уникальным!"
|
||||
|
||||
#. module: edi
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You cannot create recursive associated members."
|
||||
msgstr "Ошибка! Вы не можете создавать рекурсивные ссылки на участников."
|
||||
|
||||
#. module: edi
|
||||
#: field:edi.document,name:0
|
||||
msgid "EDI token"
|
||||
msgstr ""
|
||||
|
||||
#. module: edi
|
||||
#: help:edi.document,name:0
|
||||
msgid "Unique identifier for retrieving an EDI document."
|
||||
msgstr ""
|
||||
|
||||
#. module: edi
|
||||
#: constraint:res.company:0
|
||||
msgid "Error! You can not create recursive companies."
|
||||
msgstr "Ошибка ! Нельзя создать рекурсивные организации."
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr "Компании"
|
||||
|
||||
#. module: edi
|
||||
#: sql_constraint:edi.document:0
|
||||
msgid "EDI Tokens must be unique!"
|
||||
msgstr ""
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_currency
|
||||
msgid "Currency"
|
||||
msgstr "Валюта"
|
||||
|
||||
#. module: edi
|
||||
#: code:addons/edi/models/edi.py:153
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The document you are trying to import requires the OpenERP `%s` application. "
|
||||
"You can install it by connecting as the administrator and opening the "
|
||||
"configuration assistant."
|
||||
msgstr ""
|
||||
|
||||
#. module: edi
|
||||
#: help:edi.document,document:0
|
||||
msgid "EDI document content"
|
||||
msgstr ""
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_edi_document
|
||||
msgid "EDI Document"
|
||||
msgstr "EDI документ"
|
||||
|
||||
#. module: edi
|
||||
#: code:addons/edi/models/edi.py:48
|
||||
#, python-format
|
||||
msgid "'%s' is an invalid external ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr "Контрагент"
|
||||
|
||||
#. module: edi
|
||||
#: code:addons/edi/models/edi.py:152
|
||||
#, python-format
|
||||
msgid "Missing Application"
|
||||
msgstr "Отсутствие приложения"
|
||||
|
||||
#. module: edi
|
||||
#: field:edi.document,document:0
|
||||
msgid "Document"
|
||||
msgstr "Документ"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:23
|
||||
msgid "View/Print"
|
||||
msgstr "Просмотр/Печать"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:28
|
||||
msgid "Import this document"
|
||||
msgstr "Импорт этого документа"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:33
|
||||
msgid "Import it into an existing OpenERP instance"
|
||||
msgstr "Импорт в существующую OpenERP"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:36
|
||||
msgid "OpenERP instance address:"
|
||||
msgstr "Адрес этой OpenERP:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:39
|
||||
msgid "Import"
|
||||
msgstr "Импорт"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:44
|
||||
msgid "Import it into a new OpenERP Online instance"
|
||||
msgstr "Импорт в новый онлайн экземпляр OpenERP"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:47
|
||||
msgid "Create my new OpenERP instance"
|
||||
msgstr "Создать мой новый экземпляр OpenERP"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:52
|
||||
msgid "Import into another application"
|
||||
msgstr "Импорт в другое приложение"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:54
|
||||
msgid ""
|
||||
"OpenERP's Electronic Data Interchange documents are based on a generic and "
|
||||
"language\n"
|
||||
" independent"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:56
|
||||
msgid "JSON"
|
||||
msgstr "JSON"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:56
|
||||
msgid ""
|
||||
"serialization of the document's attribute.\n"
|
||||
" It is usually very quick and straightforward to "
|
||||
"create a small plug-in for your preferred\n"
|
||||
" application that will be capable of importing "
|
||||
"any OpenERP EDI document.\n"
|
||||
" You can find out more details about how to do "
|
||||
"this and what the content of OpenERP EDI documents\n"
|
||||
" is like in the"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:60
|
||||
msgid "OpenERP documentation"
|
||||
msgstr "OpenERP документация"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:61
|
||||
msgid "To get started immediately,"
|
||||
msgstr "Чтобы приступить к работе немедленно,"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:62
|
||||
msgid "see is all it takes to use this EDI document in Python"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:70
|
||||
msgid "You can download the raw EDI document here:"
|
||||
msgstr "Вы можете скачать исходный документ EDI здесь:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:73
|
||||
msgid "Download"
|
||||
msgstr "Скачать"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:87
|
||||
msgid "Powered by"
|
||||
msgstr "На базе"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:87
|
||||
msgid "OpenERP"
|
||||
msgstr "OpenERP"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:34
|
||||
msgid "Invoice"
|
||||
msgstr "Счет"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:37
|
||||
msgid "Description"
|
||||
msgstr "Описание"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:38
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:41
|
||||
msgid "Date"
|
||||
msgstr "Дата"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:39
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:40
|
||||
msgid "Your Reference"
|
||||
msgstr "Ваша ссылка"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:50
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:57
|
||||
msgid "Product Description"
|
||||
msgstr "Описание товара"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:51
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:58
|
||||
msgid "Quantity"
|
||||
msgstr "Количество"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:52
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:59
|
||||
msgid "Unit Price"
|
||||
msgstr "Цена за ед."
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:53
|
||||
msgid "Discount"
|
||||
msgstr "Скидка"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:54
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:61
|
||||
msgid "Price"
|
||||
msgstr "Цена"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:72
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:81
|
||||
msgid "Net Total:"
|
||||
msgstr "Чистый итог:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:83
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:92
|
||||
msgid "Taxes:"
|
||||
msgstr "Налоги:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:94
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:103
|
||||
msgid "Total:"
|
||||
msgstr "Итого:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:106
|
||||
msgid "Tax"
|
||||
msgstr "Налог"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:107
|
||||
msgid "Base Amount"
|
||||
msgstr "Базовая сумма"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:108
|
||||
msgid "Amount"
|
||||
msgstr "Сумма"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:121
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:113
|
||||
msgid "Notes:"
|
||||
msgstr "Примечания:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:129
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:121
|
||||
msgid "Pay Online"
|
||||
msgstr "Оплата онлайн"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:133
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:125
|
||||
msgid "Paypal"
|
||||
msgstr "Paypal"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:135
|
||||
msgid ""
|
||||
"You may directly pay this invoice online via Paypal's secure payment gateway:"
|
||||
msgstr ""
|
||||
"Вы можете напрямую оплатить этот счет в режиме онлайн через безопасный "
|
||||
"платежный шлюз PayPal:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:145
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:137
|
||||
msgid "Bank Wire Transfer"
|
||||
msgstr "Банковский перевод"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:147
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:139
|
||||
msgid "Please transfer"
|
||||
msgstr "Пожалуйста, переведите"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:148
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:140
|
||||
msgid "to"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:149
|
||||
msgid ""
|
||||
"(postal address on the invoice header)\n"
|
||||
" using one of the following bank accounts. Be sure to "
|
||||
"mention the invoice\n"
|
||||
" reference"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:151
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:143
|
||||
msgid "on the transfer:"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:36
|
||||
msgid "Order"
|
||||
msgstr "Заказ"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:42
|
||||
msgid "Salesman"
|
||||
msgstr "Менеджер продаж"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:43
|
||||
msgid "Payment terms"
|
||||
msgstr "Условия платежа"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:60
|
||||
msgid "Discount(%)"
|
||||
msgstr "Скидка ( %)"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:127
|
||||
msgid ""
|
||||
"You may directly pay this order online via Paypal's secure payment gateway:"
|
||||
msgstr ""
|
||||
"Вы можете напрямую оплатить этот заказ он-лайн через безопасный платежный "
|
||||
"шлюз PayPal:"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:141
|
||||
msgid ""
|
||||
"(postal address on the order header)\n"
|
||||
" using one of the following bank accounts. Be sure to "
|
||||
"mention the document\n"
|
||||
" reference"
|
||||
msgstr ""
|
|
@ -151,7 +151,7 @@
|
|||
reference <strong><t t-esc="doc.internal_number"/></strong> on the transfer:
|
||||
<br/><br/>
|
||||
</p>
|
||||
<ul class="oe_edi_nested_block_pay oe_edi_pay_wire_nested oe_semantic_html_override">
|
||||
<ul class="oe_edi_nested_block_pay oe_edi_pay_wire_nested">
|
||||
<t t-foreach="doc.company_address.bank_ids" t-as="bank_info">
|
||||
<li><t t-esc="bank_info[1]"/></li>
|
||||
</t>
|
||||
|
|
|
@ -151,7 +151,7 @@
|
|||
reference <strong><t t-esc="doc.name"/></strong> on the transfer:
|
||||
<br/><br/>
|
||||
</p>
|
||||
<ul class="oe_edi_nested_block_pay oe_edi_pay_wire_nested oe_semantic_html_override">
|
||||
<ul class="oe_edi_nested_block_pay oe_edi_pay_wire_nested">
|
||||
<t t-foreach="doc.company_address.bank_ids" t-as="bank_info">
|
||||
<li><t t-esc="bank_info[1]"/></li>
|
||||
</t>
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:34+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:58+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,subtype:0
|
||||
|
@ -316,8 +316,8 @@ msgid "Add Signature"
|
|||
msgstr "إضافة توقيع"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,body_text:0
|
||||
#: help:email_template.preview,body_text:0
|
||||
#: help:email.template,body:0
|
||||
#: help:email_template.preview,body:0
|
||||
msgid "Plaintext version of the message (placeholders may be used here)"
|
||||
msgstr "نص عادي نسخة من رسالة (ويمكن استخدام العناصر البديلة هنا)"
|
||||
|
||||
|
@ -460,8 +460,8 @@ msgid "Cc"
|
|||
msgstr "نسخة"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,body_text:0
|
||||
#: field:email_template.preview,body_text:0
|
||||
#: field:email.template,body:0
|
||||
#: field:email_template.preview,body:0
|
||||
msgid "Text Contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:34+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:58+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,subtype:0
|
||||
|
@ -303,8 +303,8 @@ msgid "Add Signature"
|
|||
msgstr ""
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,body_text:0
|
||||
#: help:email_template.preview,body_text:0
|
||||
#: help:email.template,body:0
|
||||
#: help:email_template.preview,body:0
|
||||
msgid "Plaintext version of the message (placeholders may be used here)"
|
||||
msgstr ""
|
||||
|
||||
|
@ -445,8 +445,8 @@ msgid "Cc"
|
|||
msgstr ""
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,body_text:0
|
||||
#: field:email_template.preview,body_text:0
|
||||
#: field:email.template,body:0
|
||||
#: field:email_template.preview,body:0
|
||||
msgid "Text Contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:35+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:58+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,subtype:0
|
||||
|
@ -307,8 +307,8 @@ msgid "Add Signature"
|
|||
msgstr ""
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,body_text:0
|
||||
#: help:email_template.preview,body_text:0
|
||||
#: help:email.template,body:0
|
||||
#: help:email_template.preview,body:0
|
||||
msgid "Plaintext version of the message (placeholders may be used here)"
|
||||
msgstr ""
|
||||
|
||||
|
@ -449,8 +449,8 @@ msgid "Cc"
|
|||
msgstr ""
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,body_text:0
|
||||
#: field:email_template.preview,body_text:0
|
||||
#: field:email.template,body:0
|
||||
#: field:email_template.preview,body:0
|
||||
msgid "Text Contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:35+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-09-07 04:58+0000\n"
|
||||
"X-Generator: Launchpad (build 15914)\n"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,subtype:0
|
||||
|
@ -303,8 +303,8 @@ msgid "Add Signature"
|
|||
msgstr ""
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,body_text:0
|
||||
#: help:email_template.preview,body_text:0
|
||||
#: help:email.template,body:0
|
||||
#: help:email_template.preview,body:0
|
||||
msgid "Plaintext version of the message (placeholders may be used here)"
|
||||
msgstr ""
|
||||
|
||||
|
@ -445,8 +445,8 @@ msgid "Cc"
|
|||
msgstr ""
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,body_text:0
|
||||
#: field:email_template.preview,body_text:0
|
||||
#: field:email.template,body:0
|
||||
#: field:email_template.preview,body:0
|
||||
msgid "Text Contents"
|
||||
msgstr ""
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue