diff options
| author | Harry (OpenERP) <hmo@tinyerp.com> | 2012-09-13 11:14:24 +0530 |
|---|---|---|
| committer | Harry (OpenERP) <hmo@tinyerp.com> | 2012-09-13 11:14:24 +0530 |
| commit | 635d3cf9649ca7b9fb27ec85eb0ddf6b3065802e (patch) | |
| tree | 9d4ba0d0fa1e4a064664b9f30115af41729498ee | |
| parent | ee061a25f1348ce6b5ea110e28125c74ed2a4653 (diff) | |
| parent | 74df8d0147b79a61fcf961231be8b82a5f86ef99 (diff) | |
[MERGE]
bzr revid: hmo@tinyerp.com-20120913054424-g3c2cykmxwhv34g3
274 files changed, 21076 insertions, 3954 deletions
diff --git a/addons/account/account.py b/addons/account/account.py index bfc16a4c419..e5e29f178a3 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -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) diff --git a/addons/account/account_bank_view.xml b/addons/account/account_bank_view.xml index 8ceb8a91885..ef793a1bef5 100644 --- a/addons/account/account_bank_view.xml +++ b/addons/account/account_bank_view.xml @@ -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> diff --git a/addons/account/account_installer.xml b/addons/account/account_installer.xml index c92d4eda602..58e824a6250 100644 --- a/addons/account/account_installer.xml +++ b/addons/account/account_installer.xml @@ -14,8 +14,12 @@ </footer> </footer> <separator string="title" position="replace"> + <p class="oe_grey"> + Select a configuration package to setup automatically your + taxes and chart of accounts. + </p> <group> - <field name="charts"/> + <field name="charts" class="oe_inline"/> </group> <group string="Configure your Fiscal Year" groups="account.group_account_user"> <field name="has_default_company" invisible="1" /> @@ -32,7 +36,7 @@ </record> <record id="action_account_configuration_installer" model="ir.actions.act_window"> - <field name="name">Configure your Chart of Accounts</field> + <field name="name">Configure Accounting Data</field> <field name="type">ir.actions.act_window</field> <field name="res_model">account.installer</field> <field name="view_id" ref="view_account_configuration_installer"/> diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 15027b7a8f6..bbcb25fefa9 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -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 ? @@ -395,18 +395,23 @@ class account_invoice(osv.osv): template_id = template and template[1] or False res = mod_obj.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form') res_id = res and res[1] or False - ctx = dict(context, active_model='account.invoice', active_id=ids[0]) - ctx.update({'mail.compose.template_id': template_id}) + ctx = dict(context) + ctx.update({ + 'default_model': 'account.invoice', + 'default_res_id': ids[0], + 'default_use_template': True, + 'default_template_id': template_id, + }) return { - 'view_type': 'form', - 'view_mode': 'form', - 'res_model': 'mail.compose.message', - 'views': [(res_id, 'form')], - 'view_id': res_id, - 'type': 'ir.actions.act_window', - 'target': 'new', - 'context': ctx, - 'nodestroy': True, + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'mail.compose.message', + 'views': [(res_id, 'form')], + 'view_id': res_id, + 'type': 'ir.actions.act_window', + 'target': 'new', + 'context': ctx, + 'nodestroy': True, } def confirm_paid(self, cr, uid, ids, context=None): @@ -767,17 +772,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 +895,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 '/' diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 610485ec3a0..1c4d83106ca 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -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> diff --git a/addons/account/account_menuitem.xml b/addons/account/account_menuitem.xml index 9ac6f98661c..480d5ec76a6 100644 --- a/addons/account/account_menuitem.xml +++ b/addons/account/account_menuitem.xml @@ -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" diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 81e683e1cfd..8c0de73ef8c 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -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> diff --git a/addons/account/data/configurable_account_chart.xml b/addons/account/data/configurable_account_chart.xml index 18e22a5e4f2..b8b23344ff3 100644 --- a/addons/account/data/configurable_account_chart.xml +++ b/addons/account/data/configurable_account_chart.xml @@ -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> diff --git a/addons/account/demo/account_minimal.xml b/addons/account/demo/account_minimal.xml index 94b3d2d4085..53f2b54e0ef 100644 --- a/addons/account/demo/account_minimal.xml +++ b/addons/account/demo/account_minimal.xml @@ -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> diff --git a/addons/account/installer.py b/addons/account/installer.py index 60a34628b1b..6173ea9213e 100644 --- a/addons/account/installer.py +++ b/addons/account/installer.py @@ -45,12 +45,12 @@ class account_installer(osv.osv_memory): sorted(((m.name, m.shortdesc) for m in modules.browse(cr, uid, ids, context=context)), key=itemgetter(1))) - charts.insert(0, ('configurable', 'Generic Chart Of Accounts')) + charts.insert(0, ('configurable', _('Custom'))) return charts _columns = { # Accounting - 'charts': fields.selection(_get_charts, 'Chart of Accounts', + 'charts': fields.selection(_get_charts, 'Accounting Package', required=True, help="Installs localized accounting charts to match as closely as " "possible the accounting needs of your company based on your " diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml index 77e987f24d4..da1a11b9cb6 100644 --- a/addons/account/project/project_view.xml +++ b/addons/account/project/project_view.xml @@ -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> diff --git a/addons/account/res_config.py b/addons/account/res_config.py index 658f87962ff..91f1068d166 100644 --- a/addons/account/res_config.py +++ b/addons/account/res_config.py @@ -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): diff --git a/addons/account/res_config_view.xml b/addons/account/res_config_view.xml index 79a65f70414..bc8ace5c262 100644 --- a/addons/account/res_config_view.xml +++ b/addons/account/res_config_view.xml @@ -122,6 +122,10 @@ <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"/> </div> @@ -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> diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml index c230f63e204..bb0222d5e4f 100644 --- a/addons/account_asset/account_asset_view.xml +++ b/addons/account_asset/account_asset_view.xml @@ -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> diff --git a/addons/account_bank_statement_extensions/i18n/pt_BR.po b/addons/account_bank_statement_extensions/i18n/pt_BR.po new file mode 100644 index 00000000000..ade94336f2a --- /dev/null +++ b/addons/account_bank_statement_extensions/i18n/pt_BR.po @@ -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" diff --git a/addons/account_check_writing/i18n/es_EC.po b/addons/account_check_writing/i18n/es_EC.po new file mode 100644 index 00000000000..4a0783d4648 --- /dev/null +++ b/addons/account_check_writing/i18n/es_EC.po @@ -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-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\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" diff --git a/addons/account_coda/account_coda_view.xml b/addons/account_coda/account_coda_view.xml index 0b42ad6352f..23e63b2a4a4 100644 --- a/addons/account_coda/account_coda_view.xml +++ b/addons/account_coda/account_coda_view.xml @@ -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/> diff --git a/addons/account_payment/account_payment_view.xml b/addons/account_payment/account_payment_view.xml index e3e9b2ae558..4d69c2d7315 100644 --- a/addons/account_payment/account_payment_view.xml +++ b/addons/account_payment/account_payment_view.xml @@ -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"/> diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index f75cda8cdde..c74ca5f833a 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -1045,6 +1045,8 @@ class account_voucher(osv.osv): # if the amount encoded in voucher is equal to the amount unreconciled, we need to compute the # currency rate difference if line.amount == line.amount_unreconciled: + if not line.move_line_id.amount_residual: + raise osv.except_osv(_('Wrong bank statement line'),_("You have to delete the bank statement line which the payment was reconciled to manually. Please check the payment of the partner %s by the amount of %s.")%(line.voucher_id.partner_id.name, line.voucher_id.amount)) currency_rate_difference = line.move_line_id.amount_residual - amount else: currency_rate_difference = 0.0 diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml index 64e1cf22156..ba9d6433888 100644 --- a/addons/account_voucher/account_voucher_view.xml +++ b/addons/account_voucher/account_voucher_view.xml @@ -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"/> diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index 503c3aeaa5e..c41ed6d5577 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -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> diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py index d90e2006a71..66a67ad4219 100644 --- a/addons/analytic/analytic.py +++ b/addons/analytic/analytic.py @@ -96,22 +96,6 @@ class account_analytic_account(osv.osv): res[row['id']][field] = row[field] return self._compute_level_tree(cr, uid, ids, child_ids, res, fields, context) - def name_get(self, cr, uid, ids, context=None): - if isinstance(ids, (int, long)): - ids=[ids] - if not ids: - return [] - res = [] - for account in self.browse(cr, uid, ids, context=context): - data = [] - acc = account - while acc: - data.insert(0, acc.name) - acc = acc.parent_id - data = ' / '.join(data) - res.append((account.id, data)) - return res - def _complete_name_calc(self, cr, uid, ids, prop, unknow_none, unknow_dict): res = self.name_get(cr, uid, ids) return dict(res) diff --git a/addons/base_import/__init__.py b/addons/base_import/__init__.py new file mode 100644 index 00000000000..939a8173e38 --- /dev/null +++ b/addons/base_import/__init__.py @@ -0,0 +1,3 @@ +import controllers +import models +import test_models diff --git a/addons/base_import/__openerp__.py b/addons/base_import/__openerp__.py new file mode 100644 index 00000000000..eff20bc90ab --- /dev/null +++ b/addons/base_import/__openerp__.py @@ -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'], +} diff --git a/addons/base_import/controllers.py b/addons/base_import/controllers.py new file mode 100644 index 00000000000..85ff993e92e --- /dev/null +++ b/addons/base_import/controllers.py @@ -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})) diff --git a/addons/base_import/models.py b/addons/base_import/models.py new file mode 100644 index 00000000000..1e5ad002b84 --- /dev/null +++ b/addons/base_import/models.py @@ -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 + }] diff --git a/addons/base_import/static/lib/select2/LICENSE b/addons/base_import/static/lib/select2/LICENSE new file mode 100644 index 00000000000..627fddef413 --- /dev/null +++ b/addons/base_import/static/lib/select2/LICENSE @@ -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.
\ No newline at end of file diff --git a/addons/base_import/static/lib/select2/README.md b/addons/base_import/static/lib/select2/README.md new file mode 100755 index 00000000000..3a6dcaf1ba4 --- /dev/null +++ b/addons/base_import/static/lib/select2/README.md @@ -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.
\ No newline at end of file diff --git a/addons/base_import/static/lib/select2/release.sh b/addons/base_import/static/lib/select2/release.sh new file mode 100755 index 00000000000..79eaabd621d --- /dev/null +++ b/addons/base_import/static/lib/select2/release.sh @@ -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" diff --git a/addons/base_import/static/lib/select2/select2.css b/addons/base_import/static/lib/select2/select2.css new file mode 100755 index 00000000000..f0bdfb82f04 --- /dev/null +++ b/addons/base_import/static/lib/select2/select2.css @@ -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; + } +}
\ No newline at end of file diff --git a/addons/base_import/static/lib/select2/select2.js b/addons/base_import/static/lib/select2/select2.js new file mode 100755 index 00000000000..42ce0a928b8 --- /dev/null +++ b/addons/base_import/static/lib/select2/select2.js @@ -0,0 +1,2407 @@ +/* + 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. + */ + (function ($) { + if(typeof $.fn.each2 == "undefined"){ + $.fn.extend({ + /* + * 4-10 times faster .each replacement + * use it carefully, as it overrides jQuery context of element on each iteration + */ + each2 : function (c) { + var j = $([0]), i = -1, l = this.length; + while ( + ++i < l + && (j.context = j[0] = this[i]) + && c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object + ); + return this; + } + }); + } +})(jQuery); + +(function ($, undefined) { + "use strict"; + /*global document, window, jQuery, console */ + + if (window.Select2 !== undefined) { + return; + } + + var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer; + + KEY = { + TAB: 9, + ENTER: 13, + ESC: 27, + SPACE: 32, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + SHIFT: 16, + CTRL: 17, + ALT: 18, + PAGE_UP: 33, + PAGE_DOWN: 34, + HOME: 36, + END: 35, + BACKSPACE: 8, + DELETE: 46, + isArrow: function (k) { + k = k.which ? k.which : k; + switch (k) { + case KEY.LEFT: + case KEY.RIGHT: + case KEY.UP: + case KEY.DOWN: + return true; + } + return false; + }, + isControl: function (e) { + var k = e.which; + switch (k) { + case KEY.SHIFT: + case KEY.CTRL: + case KEY.ALT: + return true; + } + + if (e.metaKey) return true; + + return false; + }, + isFunctionKey: function (k) { + k = k.which ? k.which : k; + return k >= 112 && k <= 123; + } + }; + + nextUid=(function() { var counter=1; return function() { return counter++; }; }()); + + function indexOf(value, array) { + var i = 0, l = array.length, v; + + if (typeof value === "undefined") { + return -1; + } + + if (value.constructor === String) { + for (; i < l; i = i + 1) if (value.localeCompare(array[i]) === 0) return i; + } else { + for (; i < l; i = i + 1) { + v = array[i]; + if (v.constructor === String) { + if (v.localeCompare(value) === 0) return i; + } else { + if (v === value) return i; + } + } + } + return -1; + } + + /** + * Compares equality of a and b taking into account that a and b may be strings, in which case localeCompare is used + * @param a + * @param b + */ + function equal(a, b) { + if (a === b) return true; + if (a === undefined || b === undefined) return false; + if (a === null || b === null) return false; + if (a.constructor === String) return a.localeCompare(b) === 0; + if (b.constructor === String) return b.localeCompare(a) === 0; + return false; + } + + /** + * Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty + * strings + * @param string + * @param separator + */ + function splitVal(string, separator) { + var val, i, l; + if (string === null || string.length < 1) return []; + val = string.split(separator); + for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]); + return val; + } + + function getSideBorderPadding(element) { + return element.outerWidth() - element.width(); + } + + function installKeyUpChangeEvent(element) { + var key="keyup-change-value"; + element.bind("keydown", function () { + if ($.data(element, key) === undefined) { + $.data(element, key, element.val()); + } + }); + element.bind("keyup", function () { + var val= $.data(element, key); + if (val !== undefined && element.val() !== val) { + $.removeData(element, key); + element.trigger("keyup-change"); + } + }); + } + + $(document).delegate("*", "mousemove", function (e) { + $.data(document, "select2-lastpos", {x: e.pageX, y: e.pageY}); + }); + + /** + * filters mouse events so an event is fired only if the mouse moved. + * + * filters out mouse events that occur when mouse is stationary but + * the elements under the pointer are scrolled. + */ + function installFilteredMouseMove(element) { + element.bind("mousemove", function (e) { + var lastpos = $.data(document, "select2-lastpos"); + if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) { + $(e.target).trigger("mousemove-filtered", e); + } + }); + } + + /** + * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made + * within the last quietMillis milliseconds. + * + * @param quietMillis number of milliseconds to wait before invoking fn + * @param fn function to be debounced + * @param ctx object to be used as this reference within fn + * @return debounced version of fn + */ + function debounce(quietMillis, fn, ctx) { + ctx = ctx || undefined; + var timeout; + return function () { + var args = arguments; + window.clearTimeout(timeout); + timeout = window.setTimeout(function() { + fn.apply(ctx, args); + }, quietMillis); + }; + } + + /** + * A simple implementation of a thunk + * @param formula function used to lazily initialize the thunk + * @return {Function} + */ + function thunk(formula) { + var evaluated = false, + value; + return function() { + if (evaluated === false) { value = formula(); evaluated = true; } + return value; + }; + }; + + function installDebouncedScroll(threshold, element) { + var notify = debounce(threshold, function (e) { element.trigger("scroll-debounced", e);}); + element.bind("scroll", function (e) { + if (indexOf(e.target, element.get()) >= 0) notify(e); + }); + } + + function killEvent(event) { + event.preventDefault(); + event.stopPropagation(); + } + + function measureTextWidth(e) { + if (!sizer){ + var style = e[0].currentStyle || window.getComputedStyle(e[0], null); + sizer = $("<div></div>").css({ + position: "absolute", + left: "-10000px", + top: "-10000px", + display: "none", + fontSize: style.fontSize, + fontFamily: style.fontFamily, + fontStyle: style.fontStyle, + fontWeight: style.fontWeight, + letterSpacing: style.letterSpacing, + textTransform: style.textTransform, + whiteSpace: "nowrap" + }); + $("body").append(sizer); + } + sizer.text(e.val()); + return sizer.width(); + } + + function markMatch(text, term, markup) { + var match=text.toUpperCase().indexOf(term.toUpperCase()), + tl=term.length; + + if (match<0) { + markup.push(text); + return; + } + + markup.push(text.substring(0, match)); + markup.push("<span class='select2-match'>"); + markup.push(text.substring(match, match + tl)); + markup.push("</span>"); + markup.push(text.substring(match + tl, text.length)); + } + + /** + * Produces an ajax-based query function + * + * @param options object containing configuration paramters + * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax + * @param options.url url for the data + * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url. + * @param options.dataType request data type: ajax, jsonp, other datatatypes supported by jQuery's $.ajax function or the transport function if specified + * @param options.traditional a boolean flag that should be true if you wish to use the traditional style of param serialization for the ajax request + * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often + * @param options.results a function(remoteData, pageNumber) that converts data returned form the remote request to the format expected by Select2. + * The expected format is an object containing the following keys: + * results array of objects that will be used as choices + * more (optional) boolean indicating whether there are more results available + * Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true} + */ + function ajax(options) { + var timeout, // current scheduled but not yet executed request + requestSequence = 0, // sequence used to drop out-of-order responses + handler = null, + quietMillis = options.quietMillis || 100; + + return function (query) { + window.clearTimeout(timeout); + timeout = window.setTimeout(function () { + requestSequence += 1; // increment the sequence + var requestNumber = requestSequence, // this request's sequence number + data = options.data, // ajax data function + transport = options.transport || $.ajax, + traditional = options.traditional || false, + type = options.type || 'GET'; // set type of request (GET or POST) + + data = data.call(this, query.term, query.page, query.context); + + if( null !== handler) { handler.abort(); } + + handler = transport.call(null, { + url: options.url, + dataType: options.dataType, + data: data, + type: type, + traditional: traditional, + success: function (data) { + if (requestNumber < requestSequence) { + return; + } + // TODO 3.0 - replace query.page with query so users have access to term, page, etc. + var results = options.results(data, query.page); + query.callback(results); + } + }); + }, quietMillis); + }; + } + + /** + * Produces a query function that works with a local array + * + * @param options object containing configuration parameters. The options parameter can either be an array or an + * object. + * + * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys. + * + * If the object form is used ti is assumed that it contains 'data' and 'text' keys. The 'data' key should contain + * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text' + * key can either be a String in which case it is expected that each element in the 'data' array has a key with the + * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract + * the text. + */ + function local(options) { + var data = options, // data elements + dataText, + text = function (item) { return ""+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search + + if (!$.isArray(data)) { + text = data.text; + // if text is not a function we assume it to be a key name + if (!$.isFunction(text)) { + dataText = data.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available + text = function (item) { return item[dataText]; }; + } + data = data.results; + } + + return function (query) { + var t = query.term, filtered = { results: [] }, process; + if (t === "") { + query.callback({results: data}); + return; + } + + process = function(datum, collection) { + var group, attr; + datum = datum[0]; + if (datum.children) { + group = {}; + for (attr in datum) { + if (datum.hasOwnProperty(attr)) group[attr]=datum[attr]; + } + group.children=[]; + $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); }); + if (group.children.length) { + collection.push(group); + } + } else { + if (query.matcher(t, text(datum))) { + collection.push(datum); + } + } + }; + + $(data).each2(function(i, datum) { process(datum, filtered.results); }); + query.callback(filtered); + }; + } + + // TODO javadoc + function tags(data) { + // TODO even for a function we should probably return a wrapper that does the same object/string check as + // the function for arrays. otherwise only functions that return objects are supported. + if ($.isFunction(data)) { + return data; + } + + // if not a function we assume it to be an array + + return function (query) { + var t = query.term, filtered = {results: []}; + $(data).each(function () { + var isObject = this.text !== undefined, + text = isObject ? this.text : this; + if (t === "" || query.matcher(t, text)) { + filtered.results.push(isObject ? this : {id: this, text: this}); + } + }); + query.callback(filtered); + }; + } + + /** + * Checks if the formatter function should be used. + * + * Throws an error if it is not a function. Returns true if it should be used, + * false if no formatting should be performed. + * + * @param formatter + */ + function checkFormatter(formatter, formatterName) { + if ($.isFunction(formatter)) return true; + if (!formatter) return false; + throw new Error("formatterName must be a function or a falsy value"); + } + + function evaluate(val) { + return $.isFunction(val) ? val() : val; + } + + function countResults(results) { + var count = 0; + $.each(results, function(i, item) { + if (item.children) { + count += countResults(item.children); + } else { + count++; + } + }); + return count; + } + + /** + * Default tokenizer. This function uses breaks the input on substring match of any string from the + * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those + * two options have to be defined in order for the tokenizer to work. + * + * @param input text user has typed so far or pasted into the search field + * @param selection currently selected choices + * @param selectCallback function(choice) callback tho add the choice to selection + * @param opts select2's opts + * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value + */ + function defaultTokenizer(input, selection, selectCallback, opts) { + var original = input, // store the original so we can compare and know if we need to tell the search to update its text + dupe = false, // check for whether a token we extracted represents a duplicate selected choice + token, // token + index, // position at which the separator was found + i, l, // looping variables + separator; // the matched separator + + if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined; + + while (true) { + index = -1; + + for (i = 0, l = opts.tokenSeparators.length; i < l; i++) { + separator = opts.tokenSeparators[i]; + index = input.indexOf(separator); + if (index >= 0) break; + } + + if (index < 0) break; // did not find any token separator in the input string, bail + + token = input.substring(0, index); + input = input.substring(index + separator.length); + + if (token.length > 0) { + token = opts.createSearchChoice(token, selection); + if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) { + dupe = false; + for (i = 0, l = selection.length; i < l; i++) { + if (equal(opts.id(token), opts.id(selection[i]))) { + dupe = true; break; + } + } + + if (!dupe) selectCallback(token); + } + } + } + + if (original.localeCompare(input) != 0) return input; + } + + /** + * blurs any Select2 container that has focus when an element outside them was clicked or received focus + * + * also takes care of clicks on label tags that point to the source element + */ + $(document).ready(function () { + $(document).delegate("*", "mousedown touchend", function (e) { + var target = $(e.target).closest("div.select2-container").get(0), attr; + if (target) { + $(document).find("div.select2-container-active").each(function () { + if (this !== target) $(this).data("select2").blur(); + }); + } else { + target = $(e.target).closest("div.select2-drop").get(0); + $(document).find("div.select2-drop-active").each(function () { + if (this !== target) $(this).data("select2").blur(); + }); + } + + target=$(e.target); + attr = target.attr("for"); + if ("LABEL" === e.target.tagName && attr && attr.length > 0) { + target = $("#"+attr); + target = target.data("select2"); + if (target !== undefined) { target.focus(); e.preventDefault();} + } + }); + }); + + /** + * Creates a new class + * + * @param superClass + * @param methods + */ + function clazz(SuperClass, methods) { + var constructor = function () {}; + constructor.prototype = new SuperClass; + constructor.prototype.constructor = constructor; + constructor.prototype.parent = SuperClass.prototype; + constructor.prototype = $.extend(constructor.prototype, methods); + return constructor; + } + + AbstractSelect2 = clazz(Object, { + + // abstract + bind: function (func) { + var self = this; + return function () { + func.apply(self, arguments); + }; + }, + + // abstract + init: function (opts) { + var results, search, resultsSelector = ".select2-results"; + + // prepare options + this.opts = opts = this.prepareOpts(opts); + + this.id=opts.id; + + // destroy if called on an existing component + if (opts.element.data("select2") !== undefined && + opts.element.data("select2") !== null) { + this.destroy(); + } + + this.enabled=true; + this.container = this.createContainer(); + + this.containerId="s2id_"+(opts.element.attr("id") || "autogen"+nextUid()); + this.containerSelector="#"+this.containerId.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1'); + this.container.attr("id", this.containerId); + + // cache the body so future lookups are cheap + this.body = thunk(function() { return opts.element.closest("body"); }); + + if (opts.element.attr("class") !== undefined) { + this.container.addClass(opts.element.attr("class").replace(/validate\[[\S ]+] ?/, '')); + } + + this.container.css(evaluate(opts.containerCss)); + this.container.addClass(evaluate(opts.containerCssClass)); + + // swap container for the element + this.opts.element + .data("select2", this) + .hide() + .before(this.container); + this.container.data("select2", this); + + this.dropdown = this.container.find(".select2-drop"); + this.dropdown.addClass(evaluate(opts.dropdownCssClass)); + this.dropdown.data("select2", this); + + this.results = results = this.container.find(resultsSelector); + this.search = search = this.container.find("input.select2-input"); + + search.attr("tabIndex", this.opts.element.attr("tabIndex")); + + this.resultsPage = 0; + this.context = null; + + // initialize the container + this.initContainer(); + this.initContainerWidth(); + + installFilteredMouseMove(this.results); + this.dropdown.delegate(resultsSelector, "mousemove-filtered", this.bind(this.highlightUnderEvent)); + + installDebouncedScroll(80, this.results); + this.dropdown.delegate(resultsSelector, "scroll-debounced", this.bind(this.loadMoreIfNeeded)); + + // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel + if ($.fn.mousewheel) { + results.mousewheel(function (e, delta, deltaX, deltaY) { + var top = results.scrollTop(), height; + if (deltaY > 0 && top - deltaY <= 0) { + results.scrollTop(0); + killEvent(e); + } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) { + results.scrollTop(results.get(0).scrollHeight - results.height()); + killEvent(e); + } + }); + } + + installKeyUpChangeEvent(search); + search.bind("keyup-change", this.bind(this.updateResults)); + search.bind("focus", function () { search.addClass("select2-focused"); if (search.val() === " ") search.val(""); }); + search.bind("blur", function () { search.removeClass("select2-focused");}); + + this.dropdown.delegate(resultsSelector, "mouseup", this.bind(function (e) { + if ($(e.target).closest(".select2-result-selectable:not(.select2-disabled)").length > 0) { + this.highlightUnderEvent(e); + this.selectHighlighted(e); + } else { + this.focusSearch(); + } + killEvent(e); + })); + + // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening + // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's + // dom it will trigger the popup close, which is not what we want + this.dropdown.bind("click mouseup mousedown", function (e) { e.stopPropagation(); }); + + if ($.isFunction(this.opts.initSelection)) { + // initialize selection based on the current value of the source element + this.initSelection(); + + // if the user has provided a function that can set selection based on the value of the source element + // we monitor the change event on the element and trigger it, allowing for two way synchronization + this.monitorSource(); + } + + if (opts.element.is(":disabled") || opts.element.is("[readonly='readonly']")) this.disable(); + }, + + // abstract + destroy: function () { + var select2 = this.opts.element.data("select2"); + if (select2 !== undefined) { + select2.container.remove(); + select2.dropdown.remove(); + select2.opts.element + .removeData("select2") + .unbind(".select2") + .show(); + } + }, + + // abstract + prepareOpts: function (opts) { + var element, select, idKey, ajaxUrl; + + element = opts.element; + + if (element.get(0).tagName.toLowerCase() === "select") { + this.select = select = opts.element; + } + + if (select) { + // these options are not allowed when attached to a select because they are picked up off the element itself + $.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function () { + if (this in opts) { + throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a <select> element."); + } + }); + } + + opts = $.extend({}, { + populateResults: function(container, results, query) { + var populate, data, result, children, id=this.opts.id, self=this; + + populate=function(results, container, depth) { + + var i, l, result, selectable, compound, node, label, innerContainer, formatted; + for (i = 0, l = results.length; i < l; i = i + 1) { + + result=results[i]; + selectable=id(result) !== undefined; + compound=("children" in result) && result.children.length > 0; + + node=$("<li></li>"); + node.addClass("select2-results-dept-"+depth); + node.addClass("select2-result"); + node.addClass(selectable ? "select2-result-selectable" : "select2-result-unselectable"); + if (compound) { node.addClass("select2-result-with-children"); } + node.addClass(self.opts.formatResultCssClass(result)); + + label=$("<div></div>"); + label.addClass("select2-result-label"); + + formatted=opts.formatResult(result, label, query); + if (formatted!==undefined) { + label.html(self.opts.escapeMarkup(formatted)); + } + + node.append(label); + + if (compound) { + + innerContainer=$("<ul></ul>"); + innerContainer.addClass("select2-result-sub"); + populate(result.children, innerContainer, depth+1); + node.append(innerContainer); + } + + node.data("select2-data", result); + container.append(node); + } + }; + + populate(results, container, 0); + } + }, $.fn.select2.defaults, opts); + + if (typeof(opts.id) !== "function") { + idKey = opts.id; + opts.id = function (e) { return e[idKey]; }; + } + + if (select) { + opts.query = this.bind(function (query) { + var data = { results: [], more: false }, + term = query.term, + children, firstChild, process; + + process=function(element, collection) { + var group; + if (element.is("option")) { + if (query.matcher(term, element.text(), element)) { + collection.push({id:element.attr("value"), text:element.text(), element: element.get(), css: element.attr("class")}); + } + } else if (element.is("optgroup")) { + group={text:element.attr("label"), children:[], element: element.get(), css: element.attr("class")}; + element.children().each2(function(i, elm) { process(elm, group.children); }); + if (group.children.length>0) { + collection.push(group); + } + } + }; + + children=element.children(); + + // ignore the placeholder option if there is one + if (this.getPlaceholder() !== undefined && children.length > 0) { + firstChild = children[0]; + if ($(firstChild).text() === "") { + children=children.not(firstChild); + } + } + + children.each2(function(i, elm) { process(elm, data.results); }); + + query.callback(data); + }); + // this is needed because inside val() we construct choices from options and there id is hardcoded + opts.id=function(e) { return e.id; }; + opts.formatResultCssClass = function(data) { return data.css; } + } else { + if (!("query" in opts)) { + if ("ajax" in opts) { + ajaxUrl = opts.element.data("ajax-url"); + if (ajaxUrl && ajaxUrl.length > 0) { + opts.ajax.url = ajaxUrl; + } + opts.query = ajax(opts.ajax); + } else if ("data" in opts) { + opts.query = local(opts.data); + } else if ("tags" in opts) { + opts.query = tags(opts.tags); + opts.createSearchChoice = function (term) { return {id: term, text: term}; }; + opts.initSelection = function (element, callback) { + var data = []; + $(splitVal(element.val(), opts.separator)).each(function () { + var id = this, text = this, tags=opts.tags; + if ($.isFunction(tags)) tags=tags(); + $(tags).each(function() { if (equal(this.id, id)) { text = this.text; return false; } }); + data.push({id: id, text: text}); + }); + + callback(data); + }; + } + } + } + if (typeof(opts.query) !== "function") { + throw "query function not defined for Select2 " + opts.element.attr("id"); + } + + return opts; + }, + + /** + * Monitor the original element for changes and update select2 accordingly + */ + // abstract + monitorSource: function () { + this.opts.element.bind("change.select2", this.bind(function (e) { + if (this.opts.element.data("select2-change-triggered") !== true) { + this.initSelection(); + } + })); + }, + + /** + * Triggers the change event on the source element + */ + // abstract + triggerChange: function (details) { + + details = details || {}; + details= $.extend({}, details, { type: "change", val: this.val() }); + // prevents recursive triggering + this.opts.element.data("select2-change-triggered", true); + this.opts.element.trigger(details); + this.opts.element.data("select2-change-triggered", false); + + // some validation frameworks ignore the change event and listen instead to keyup, click for selects + // so here we trigger the click event manually + this.opts.element.click(); + + // ValidationEngine ignorea the change event and listens instead to blur + // so here we trigger the blur event manually if so desired + if (this.opts.blurOnChange) + this.opts.element.blur(); + }, + + + // abstract + enable: function() { + if (this.enabled) return; + + this.enabled=true; + this.container.removeClass("select2-container-disabled"); + }, + + // abstract + disable: function() { + if (!this.enabled) return; + + this.close(); + + this.enabled=false; + this.container.addClass("select2-container-disabled"); + }, + + // abstract + opened: function () { + return this.container.hasClass("select2-dropdown-open"); + }, + + // abstract + positionDropdown: function() { + var offset = this.container.offset(), + height = this.container.outerHeight(), + width = this.container.outerWidth(), + dropHeight = this.dropdown.outerHeight(), + viewportBottom = $(window).scrollTop() + document.documentElement.clientHeight, + dropTop = offset.top + height, + dropLeft = offset.left, + enoughRoomBelow = dropTop + dropHeight <= viewportBottom, + enoughRoomAbove = (offset.top - dropHeight) >= this.body().scrollTop(), + aboveNow = this.dropdown.hasClass("select2-drop-above"), + bodyOffset, + above, + css; + + // console.log("below/ droptop:", dropTop, "dropHeight", dropHeight, "sum", (dropTop+dropHeight)+" viewport bottom", viewportBottom, "enough?", enoughRoomBelow); + // console.log("above/ offset.top", offset.top, "dropHeight", dropHeight, "top", (offset.top-dropHeight), "scrollTop", this.body().scrollTop(), "enough?", enoughRoomAbove); + + // fix positioning when body has an offset and is not position: static + + if (this.body().css('position') !== 'static') { + bodyOffset = this.body().offset(); + dropTop -= bodyOffset.top; + dropLeft -= bodyOffset.left; + } + + // always prefer the current above/below alignment, unless there is not enough room + + if (aboveNow) { + above = true; + if (!enoughRoomAbove && enoughRoomBelow) above = false; + } else { + above = false; + if (!enoughRoomBelow && enoughRoomAbove) above = true; + } + + if (above) { + dropTop = offset.top - dropHeight; + this.container.addClass("select2-drop-above"); + this.dropdown.addClass("select2-drop-above"); + } + else { + this.container.removeClass("select2-drop-above"); + this.dropdown.removeClass("select2-drop-above"); + } + + css = $.extend({ + top: dropTop, + left: dropLeft, + width: width + }, evaluate(this.opts.dropdownCss)); + + this.dropdown.css(css); + }, + + // abstract + shouldOpen: function() { + var event; + + if (this.opened()) return false; + + event = jQuery.Event("open"); + this.opts.element.trigger(event); + return !event.isDefaultPrevented(); + }, + + // abstract + clearDropdownAlignmentPreference: function() { + // clear the classes used to figure out the preference of where the dropdown should be opened + this.container.removeClass("select2-drop-above"); + this.dropdown.removeClass("select2-drop-above"); + }, + + /** + * Opens the dropdown + * + * @return {Boolean} whether or not dropdown was opened. This method will return false if, for example, + * the dropdown is already open, or if the 'open' event listener on the element called preventDefault(). + */ + // abstract + open: function () { + + if (!this.shouldOpen()) return false; + + window.setTimeout(this.bind(this.opening), 1); + + return true; + }, + + /** + * Performs the opening of the dropdown + */ + // abstract + opening: function() { + var cid = this.containerId, selector = this.containerSelector, + scroll = "scroll." + cid, resize = "resize." + cid; + + this.container.parents().each(function() { + $(this).bind(scroll, function() { + var s2 = $(selector); + if (s2.length == 0) { + $(this).unbind(scroll); + } + s2.select2("close"); + }); + }); + + $(window).bind(resize, function() { + var s2 = $(selector); + if (s2.length == 0) { + $(window).unbind(resize); + } + s2.select2("close"); + }); + + this.clearDropdownAlignmentPreference(); + + if (this.search.val() === " ") { this.search.val(""); } + + this.container.addClass("select2-dropdown-open").addClass("select2-container-active"); + + this.updateResults(true); + + if(this.dropdown[0] !== this.body().children().last()[0]) { + this.dropdown.detach().appendTo(this.body()); + } + + this.dropdown.show(); + + this.positionDropdown(); + this.dropdown.addClass("select2-drop-active"); + + this.ensureHighlightVisible(); + + this.focusSearch(); + }, + + // abstract + close: function () { + if (!this.opened()) return; + + var self = this; + + this.container.parents().each(function() { + $(this).unbind("scroll." + self.containerId); + }); + $(window).unbind("resize." + this.containerId); + + this.clearDropdownAlignmentPreference(); + + this.dropdown.hide(); + this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active"); + this.results.empty(); + this.clearSearch(); + + this.opts.element.trigger(jQuery.Event("close")); + }, + + // abstract + clearSearch: function () { + + }, + + // abstract + ensureHighlightVisible: function () { + var results = this.results, children, index, child, hb, rb, y, more; + + index = this.highlight(); + + if (index < 0) return; + + if (index == 0) { + + // if the first element is highlighted scroll all the way to the top, + // that way any unselectable headers above it will also be scrolled + // into view + + results.scrollTop(0); + return; + } + + children = results.find(".select2-result-selectable"); + + child = $(children[index]); + + hb = child.offset().top + child.outerHeight(); + + // if this is the last child lets also make sure select2-more-results is visible + if (index === children.length - 1) { + more = results.find("li.select2-more-results"); + if (more.length > 0) { + hb = more.offset().top + more.outerHeight(); + } + } + + rb = results.offset().top + results.outerHeight(); + if (hb > rb) { + results.scrollTop(results.scrollTop() + (hb - rb)); + } + y = child.offset().top - results.offset().top; + + // make sure the top of the element is visible + if (y < 0) { + results.scrollTop(results.scrollTop() + y); // y is negative + } + }, + + // abstract + moveHighlight: function (delta) { + var choices = this.results.find(".select2-result-selectable"), + index = this.highlight(); + + while (index > -1 && index < choices.length) { + index += delta; + var choice = $(choices[index]); + if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled")) { + this.highlight(index); + break; + } + } + }, + + // abstract + highlight: function (index) { + var choices = this.results.find(".select2-result-selectable").not(".select2-disabled"); + + if (arguments.length === 0) { + return indexOf(choices.filter(".select2-highlighted")[0], choices.get()); + } + + if (index >= choices.length) index = choices.length - 1; + if (index < 0) index = 0; + + choices.removeClass("select2-highlighted"); + + $(choices[index]).addClass("select2-highlighted"); + this.ensureHighlightVisible(); + + }, + + // abstract + countSelectableResults: function() { + return this.results.find(".select2-result-selectable").not(".select2-disabled").length; + }, + + // abstract + highlightUnderEvent: function (event) { + var el = $(event.target).closest(".select2-result-selectable"); + if (el.length > 0 && !el.is(".select2-highlighted")) { + var choices = this.results.find('.select2-result-selectable'); + this.highlight(choices.index(el)); + } else if (el.length == 0) { + // if we are over an unselectable item remove al highlights + this.results.find(".select2-highlighted").removeClass("select2-highlighted"); + } + }, + + // abstract + loadMoreIfNeeded: function () { + var results = this.results, + more = results.find("li.select2-more-results"), + below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible + offset = -1, // index of first element without data + page = this.resultsPage + 1, + self=this, + term=this.search.val(), + context=this.context; + + if (more.length === 0) return; + below = more.offset().top - results.offset().top - results.height(); + + if (below <= 0) { + more.addClass("select2-active"); + this.opts.query({ + term: term, + page: page, + context: context, + matcher: this.opts.matcher, + callback: this.bind(function (data) { + + // ignore a response if the select2 has been closed before it was received + if (!self.opened()) return; + + + self.opts.populateResults.call(this, results, data.results, {term: term, page: page, context:context}); + + if (data.more===true) { + more.detach().appendTo(results).text(self.opts.formatLoadMore(page+1)); + window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10); + } else { + more.remove(); + } + self.positionDropdown(); + self.resultsPage = page; + })}); + } + }, + + /** + * Default tokenizer function which does nothing + */ + tokenize: function() { + + }, + + /** + * @param initial whether or not this is the call to this method right after the dropdown has been opened + */ + // abstract + updateResults: function (initial) { + var search = this.search, results = this.results, opts = this.opts, data, self=this, input; + + // if the search is currently hidden we do not alter the results + if (initial !== true && (this.showSearchInput === false || !this.opened())) { + return; + } + + search.addClass("select2-active"); + + function postRender() { + results.scrollTop(0); + search.removeClass("select2-active"); + self.positionDropdown(); + } + + function render(html) { + results.html(self.opts.escapeMarkup(html)); + postRender(); + } + + if (opts.maximumSelectionSize >=1) { + data = this.data(); + if ($.isArray(data) && data.length >= opts.maximumSelectionSize && checkFormatter(opts.formatSelectionTooBig, "formatSelectionTooBig")) { + render("<li class='select2-selection-limit'>" + opts.formatSelectionTooBig(opts.maximumSelectionSize) + "</li>"); + return; + } + } + + if (search.val().length < opts.minimumInputLength && checkFormatter(opts.formatInputTooShort, "formatInputTooShort")) { + render("<li class='select2-no-results'>" + opts.formatInputTooShort(search.val(), opts.minimumInputLength) + "</li>"); + return; + } + else { + render("<li class='select2-searching'>" + opts.formatSearching() + "</li>"); + } + + // give the tokenizer a chance to pre-process the input + input = this.tokenize(); + if (input != undefined && input != null) { + search.val(input); + } + + this.resultsPage = 1; + opts.query({ + term: search.val(), + page: this.resultsPage, + context: null, + matcher: opts.matcher, + callback: this.bind(function (data) { + var def; // default choice + + // ignore a response if the select2 has been closed before it was received + if (!this.opened()) return; + + // save context, if any + this.context = (data.context===undefined) ? null : data.context; + + // create a default choice and prepend it to the list + if (this.opts.createSearchChoice && search.val() !== "") { + def = this.opts.createSearchChoice.call(null, search.val(), data.results); + if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) { + if ($(data.results).filter( + function () { + return equal(self.id(this), self.id(def)); + }).length === 0) { + data.results.unshift(def); + } + } + } + + if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, "formatNoMatches")) { + render("<li class='select2-no-results'>" + opts.formatNoMatches(search.val()) + "</li>"); + return; + } + + results.empty(); + self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null}); + + if (data.more === true && checkFormatter(opts.formatLoadMore, "formatLoadMore")) { + results.append("<li class='select2-more-results'>" + self.opts.escapeMarkup(opts.formatLoadMore(this.resultsPage)) + "</li>"); + window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10); + } + + this.postprocessResults(data, initial); + + postRender(); + })}); + }, + + // abstract + cancel: function () { + this.close(); + }, + + // abstract + blur: function () { + this.close(); + this.container.removeClass("select2-container-active"); + this.dropdown.removeClass("select2-drop-active"); + // synonymous to .is(':focus'), which is available in jquery >= 1.6 + if (this.search[0] === document.activeElement) { this.search.blur(); } + this.clearSearch(); + this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"); + }, + + // abstract + focusSearch: function () { + // need to do it here as well as in timeout so it works in IE + this.search.show(); + this.search.focus(); + + /* we do this in a timeout so that current event processing can complete before this code is executed. + this makes sure the search field is focussed even if the current event would blur it */ + window.setTimeout(this.bind(function () { + // reset the value so IE places the cursor at the end of the input box + this.search.show(); + this.search.focus(); + this.search.val(this.search.val()); + }), 10); + }, + + // abstract + selectHighlighted: function () { + var index=this.highlight(), + highlighted=this.results.find(".select2-highlighted").not(".select2-disabled"), + data = highlighted.closest('.select2-result-selectable').data("select2-data"); + if (data) { + highlighted.addClass("select2-disabled"); + this.highlight(index); + this.onSelect(data); + } + }, + + // abstract + getPlaceholder: function () { + return this.opts.element.attr("placeholder") || + this.opts.element.attr("data-placeholder") || // jquery 1.4 compat + this.opts.element.data("placeholder") || + this.opts.placeholder; + }, + + /** + * Get the desired width for the container element. This is + * derived first from option `width` passed to select2, then + * the inline 'style' on the original element, and finally + * falls back to the jQuery calculated element width. + */ + // abstract + initContainerWidth: function () { + function resolveContainerWidth() { + var style, attrs, matches, i, l; + + if (this.opts.width === "off") { + return null; + } else if (this.opts.width === "element"){ + return this.opts.element.outerWidth() === 0 ? 'auto' : this.opts.element.outerWidth() + 'px'; + } else if (this.opts.width === "copy" || this.opts.width === "resolve") { + // check if there is inline style on the element that contains width + style = this.opts.element.attr('style'); + if (style !== undefined) { + attrs = style.split(';'); + for (i = 0, l = attrs.length; i < l; i = i + 1) { + matches = attrs[i].replace(/\s/g, '') + .match(/width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/); + if (matches !== null && matches.length >= 1) + return matches[1]; + } + } + + if (this.opts.width === "resolve") { + // next check if css('width') can resolve a width that is percent based, this is sometimes possible + // when attached to input type=hidden or elements hidden via css + style = this.opts.element.css('width'); + if (style.indexOf("%") > 0) return style; + + // finally, fallback on the calculated width of the element + return (this.opts.element.outerWidth() === 0 ? 'auto' : this.opts.element.outerWidth() + 'px'); + } + + return null; + } else if ($.isFunction(this.opts.width)) { + return this.opts.width(); + } else { + return this.opts.width; + } + }; + + var width = resolveContainerWidth.call(this); + if (width !== null) { + this.container.attr("style", "width: "+width); + } + } + }); + + SingleSelect2 = clazz(AbstractSelect2, { + + // single + + createContainer: function () { + var container = $("<div></div>", { + "class": "select2-container" + }).html([ + " <a href='#' onclick='return false;' class='select2-choice'>", + " <span></span><abbr class='select2-search-choice-close' style='display:none;'></abbr>", + " <div><b></b></div>" , + "</a>", + " <div class='select2-drop select2-offscreen'>" , + " <div class='select2-search'>" , + " <input type='text' autocomplete='off' class='select2-input'/>" , + " </div>" , + " <ul class='select2-results'>" , + " </ul>" , + "</div>"].join("")); + return container; + }, + + // single + opening: function () { + this.search.show(); + this.parent.opening.apply(this, arguments); + this.dropdown.removeClass("select2-offscreen"); + }, + + // single + close: function () { + if (!this.opened()) return; + this.parent.close.apply(this, arguments); + this.dropdown.removeAttr("style").addClass("select2-offscreen").insertAfter(this.selection).show(); + }, + + // single + focus: function () { + this.close(); + this.selection.focus(); + }, + + // single + isFocused: function () { + return this.selection[0] === document.activeElement; + }, + + // single + cancel: function () { + this.parent.cancel.apply(this, arguments); + this.selection.focus(); + }, + + // single + initContainer: function () { + + var selection, + container = this.container, + dropdown = this.dropdown, + clickingInside = false; + + this.selection = selection = container.find(".select2-choice"); + + this.search.bind("keydown", this.bind(function (e) { + if (!this.enabled) return; + + if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { + // prevent the page from scrolling + killEvent(e); + return; + } + + if (this.opened()) { + switch (e.which) { + case KEY.UP: + case KEY.DOWN: + this.moveHighlight((e.which === KEY.UP) ? -1 : 1); + killEvent(e); + return; + case KEY.TAB: + case KEY.ENTER: + this.selectHighlighted(); + killEvent(e); + return; + case KEY.ESC: + this.cancel(e); + killEvent(e); + return; + } + } else { + + if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) { + return; + } + + if (this.opts.openOnEnter === false && e.which === KEY.ENTER) { + return; + } + + this.open(); + + if (e.which === KEY.ENTER) { + // do not propagate the event otherwise we open, and propagate enter which closes + return; + } + } + })); + + this.search.bind("focus", this.bind(function() { + this.selection.attr("tabIndex", "-1"); + })); + this.search.bind("blur", this.bind(function() { + if (!this.opened()) this.container.removeClass("select2-container-active"); + window.setTimeout(this.bind(function() { this.selection.attr("tabIndex", this.opts.element.attr("tabIndex")); }), 10); + })); + + selection.bind("mousedown", this.bind(function (e) { + clickingInside = true; + + if (this.opened()) { + this.close(); + this.selection.focus(); + } else if (this.enabled) { + this.open(); + } + + clickingInside = false; + })); + + dropdown.bind("mousedown", this.bind(function() { this.search.focus(); })); + + selection.bind("focus", this.bind(function() { + this.container.addClass("select2-container-active"); + // hide the search so the tab key does not focus on it + this.search.attr("tabIndex", "-1"); + })); + + selection.bind("blur", this.bind(function() { + if (!this.opened()) { + this.container.removeClass("select2-container-active"); + } + window.setTimeout(this.bind(function() { this.search.attr("tabIndex", this.opts.element.attr("tabIndex")); }), 10); + })); + + selection.bind("keydown", this.bind(function(e) { + if (!this.enabled) return; + + if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { + // prevent the page from scrolling + killEvent(e); + return; + } + + if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) + || e.which === KEY.ESC) { + return; + } + + if (this.opts.openOnEnter === false && e.which === KEY.ENTER) { + return; + } + + if (e.which == KEY.DELETE) { + if (this.opts.allowClear) { + this.clear(); + } + return; + } + + this.open(); + + if (e.which === KEY.ENTER) { + // do not propagate the event otherwise we open, and propagate enter which closes + killEvent(e); + return; + } + + // do not set the search input value for non-alpha-numeric keys + // otherwise pressing down results in a '(' being set in the search field + if (e.which < 48 ) { // '0' == 48 + killEvent(e); + return; + } + + var keyWritten = String.fromCharCode(e.which).toLowerCase(); + + if (e.shiftKey) { + keyWritten = keyWritten.toUpperCase(); + } + + // focus the field before calling val so the cursor ends up after the value instead of before + this.search.focus(); + this.search.val(keyWritten); + + // prevent event propagation so it doesnt replay on the now focussed search field and result in double key entry + killEvent(e); + })); + + selection.delegate("abbr", "mousedown", this.bind(function (e) { + if (!this.enabled) return; + this.clear(); + killEvent(e); + this.close(); + this.triggerChange(); + this.selection.focus(); + })); + + this.setPlaceholder(); + + this.search.bind("focus", this.bind(function() { + this.container.addClass("select2-container-active"); + })); + }, + + // single + clear: function() { + this.opts.element.val(""); + this.selection.find("span").empty(); + this.selection.removeData("select2-data"); + this.setPlaceholder(); + }, + + /** + * Sets selection based on source element's value + */ + // single + initSelection: function () { + var selected; + if (this.opts.element.val() === "") { + this.close(); + this.setPlaceholder(); + } else { + var self = this; + this.opts.initSelection.call(null, this.opts.element, function(selected){ + if (selected !== undefined && selected !== null) { + self.updateSelection(selected); + self.close(); + self.setPlaceholder(); + } + }); + } + }, + + // single + prepareOpts: function () { + var opts = this.parent.prepareOpts.apply(this, arguments); + + if (opts.element.get(0).tagName.toLowerCase() === "select") { + // install the selection initializer + opts.initSelection = function (element, callback) { + var selected = element.find(":selected"); + // a single select box always has a value, no need to null check 'selected' + if ($.isFunction(callback)) + callback({id: selected.attr("value"), text: selected.text()}); + }; + } + + return opts; + }, + + // single + setPlaceholder: function () { + var placeholder = this.getPlaceholder(); + + if (this.opts.element.val() === "" && placeholder !== undefined) { + + // check for a first blank option if attached to a select + if (this.select && this.select.find("option:first").text() !== "") return; + + this.selection.find("span").html(this.opts.escapeMarkup(placeholder)); + + this.selection.addClass("select2-default"); + + this.selection.find("abbr").hide(); + } + }, + + // single + postprocessResults: function (data, initial) { + var selected = 0, self = this, showSearchInput = true; + + // find the selected element in the result list + + this.results.find(".select2-result-selectable").each2(function (i, elm) { + if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) { + selected = i; + return false; + } + }); + + // and highlight it + + this.highlight(selected); + + // hide the search box if this is the first we got the results and there are a few of them + + if (initial === true) { + showSearchInput = this.showSearchInput = countResults(data.results) >= this.opts.minimumResultsForSearch; + this.dropdown.find(".select2-search")[showSearchInput ? "removeClass" : "addClass"]("select2-search-hidden"); + + //add "select2-with-searchbox" to the container if search box is shown + $(this.dropdown, this.container)[showSearchInput ? "addClass" : "removeClass"]("select2-with-searchbox"); + } + + }, + + // single + onSelect: function (data) { + var old = this.opts.element.val(); + + this.opts.element.val(this.id(data)); + this.updateSelection(data); + this.close(); + this.selection.focus(); + + if (!equal(old, this.id(data))) { this.triggerChange(); } + }, + + // single + updateSelection: function (data) { + + var container=this.selection.find("span"), formatted; + + this.selection.data("select2-data", data); + + container.empty(); + formatted=this.opts.formatSelection(data, container); + if (formatted !== undefined) { + container.append(this.opts.escapeMarkup(formatted)); + } + + this.selection.removeClass("select2-default"); + + if (this.opts.allowClear && this.getPlaceholder() !== undefined) { + this.selection.find("abbr").show(); + } + }, + + // single + val: function () { + var val, data = null, self = this; + + if (arguments.length === 0) { + return this.opts.element.val(); + } + + val = arguments[0]; + + if (this.select) { + this.select + .val(val) + .find(":selected").each2(function (i, elm) { + data = {id: elm.attr("value"), text: elm.text()}; + return false; + }); + this.updateSelection(data); + this.setPlaceholder(); + } else { + if (this.opts.initSelection === undefined) { + throw new Error("cannot call val() if initSelection() is not defined"); + } + // val is an id. !val is true for [undefined,null,''] + if (!val) { + this.clear(); + return; + } + this.opts.element.val(val); + this.opts.initSelection(this.opts.element, function(data){ + self.opts.element.val(!data ? "" : self.id(data)); + self.updateSelection(data); + self.setPlaceholder(); + }); + } + }, + + // single + clearSearch: function () { + this.search.val(""); + }, + + // single + data: function(value) { + var data; + + if (arguments.length === 0) { + data = this.selection.data("select2-data"); + if (data == undefined) data = null; + return data; + } else { + if (!value || value === "") { + this.clear(); + } else { + this.opts.element.val(!value ? "" : this.id(value)); + this.updateSelection(value); + } + } + } + }); + + MultiSelect2 = clazz(AbstractSelect2, { + + // multi + createContainer: function () { + var container = $("<div></div>", { + "class": "select2-container select2-container-multi" + }).html([ + " <ul class='select2-choices'>", + //"<li class='select2-search-choice'><span>California</span><a href="javascript:void(0)" class="select2-search-choice-close"></a></li>" , + " <li class='select2-search-field'>" , + " <input type='text' autocomplete='off' class='select2-input'>" , + " </li>" , + "</ul>" , + "<div class='select2-drop select2-drop-multi' style='display:none;'>" , + " <ul class='select2-results'>" , + " </ul>" , + "</div>"].join("")); + return container; + }, + + // multi + prepareOpts: function () { + var opts = this.parent.prepareOpts.apply(this, arguments); + + // TODO validate placeholder is a string if specified + + if (opts.element.get(0).tagName.toLowerCase() === "select") { + // install sthe selection initializer + opts.initSelection = function (element,callback) { + + var data = []; + element.find(":selected").each2(function (i, elm) { + data.push({id: elm.attr("value"), text: elm.text()}); + }); + + if ($.isFunction(callback)) + callback(data); + }; + } + + return opts; + }, + + // multi + initContainer: function () { + + var selector = ".select2-choices", selection; + + this.searchContainer = this.container.find(".select2-search-field"); + this.selection = selection = this.container.find(selector); + + this.search.bind("keydown", this.bind(function (e) { + if (!this.enabled) return; + + if (e.which === KEY.BACKSPACE && this.search.val() === "") { + this.close(); + + var choices, + selected = selection.find(".select2-search-choice-focus"); + if (selected.length > 0) { + this.unselect(selected.first()); + this.search.width(10); + killEvent(e); + return; + } + + choices = selection.find(".select2-search-choice"); + if (choices.length > 0) { + choices.last().addClass("select2-search-choice-focus"); + } + } else { + selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"); + } + + if (this.opened()) { + switch (e.which) { + case KEY.UP: + case KEY.DOWN: + this.moveHighlight((e.which === KEY.UP) ? -1 : 1); + killEvent(e); + return; + case KEY.ENTER: + case KEY.TAB: + this.selectHighlighted(); + killEvent(e); + return; + case KEY.ESC: + this.cancel(e); + killEvent(e); + return; + } + } + + if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) + || e.which === KEY.BACKSPACE || e.which === KEY.ESC) { + return; + } + + if (this.opts.openOnEnter === false && e.which === KEY.ENTER) { + return; + } + + this.open(); + + if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { + // prevent the page from scrolling + killEvent(e); + } + })); + + this.search.bind("keyup", this.bind(this.resizeSearch)); + + this.search.bind("blur", this.bind(function(e) { + this.container.removeClass("select2-container-active"); + this.search.removeClass("select2-focused"); + this.clearSearch(); + e.stopImmediatePropagation(); + })); + + this.container.delegate(selector, "mousedown", this.bind(function (e) { + if (!this.enabled) return; + if ($(e.target).closest(".select2-search-choice").length > 0) { + // clicked inside a select2 search choice, do not open + return; + } + this.clearPlaceholder(); + this.open(); + this.focusSearch(); + e.preventDefault(); + })); + + this.container.delegate(selector, "focus", this.bind(function () { + if (!this.enabled) return; + this.container.addClass("select2-container-active"); + this.dropdown.addClass("select2-drop-active"); + this.clearPlaceholder(); + })); + + // set the placeholder if necessary + this.clearSearch(); + }, + + // multi + enable: function() { + if (this.enabled) return; + + this.parent.enable.apply(this, arguments); + + this.search.removeAttr("disabled"); + }, + + // multi + disable: function() { + if (!this.enabled) return; + + this.parent.disable.apply(this, arguments); + + this.search.attr("disabled", true); + }, + + // multi + initSelection: function () { + var data; + if (this.opts.element.val() === "") { + this.updateSelection([]); + this.close(); + // set the placeholder if necessary + this.clearSearch(); + } + if (this.select || this.opts.element.val() !== "") { + var self = this; + this.opts.initSelection.call(null, this.opts.element, function(data){ + if (data !== undefined && data !== null) { + self.updateSelection(data); + self.close(); + // set the placeholder if necessary + self.clearSearch(); + } + }); + } + }, + + // multi + clearSearch: function () { + var placeholder = this.getPlaceholder(); + + if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass("select2-focused") === false) { + this.search.val(placeholder).addClass("select2-default"); + // stretch the search box to full width of the container so as much of the placeholder is visible as possible + this.resizeSearch(); + } else { + // we set this to " " instead of "" and later clear it on focus() because there is a firefox bug + // that does not properly render the caret when the field starts out blank + this.search.val(" ").width(10); + } + }, + + // multi + clearPlaceholder: function () { + if (this.search.hasClass("select2-default")) { + this.search.val("").removeClass("select2-default"); + } else { + // work around for the space character we set to avoid firefox caret bug + if (this.search.val() === " ") this.search.val(""); + } + }, + + // multi + opening: function () { + this.parent.opening.apply(this, arguments); + + this.clearPlaceholder(); + this.resizeSearch(); + this.focusSearch(); + }, + + // multi + close: function () { + if (!this.opened()) return; + this.parent.close.apply(this, arguments); + }, + + // multi + focus: function () { + this.close(); + this.search.focus(); + }, + + // multi + isFocused: function () { + return this.search.hasClass("select2-focused"); + }, + + // multi + updateSelection: function (data) { + var ids = [], filtered = [], self = this; + + // filter out duplicates + $(data).each(function () { + if (indexOf(self.id(this), ids) < 0) { + ids.push(self.id(this)); + filtered.push(this); + } + }); + data = filtered; + + this.selection.find(".select2-search-choice").remove(); + $(data).each(function () { + self.addSelectedChoice(this); + }); + self.postprocessResults(); + }, + + tokenize: function() { + var input = this.search.val(); + input = this.opts.tokenizer(input, this.data(), this.bind(this.onSelect), this.opts); + if (input != null && input != undefined) { + this.search.val(input); + if (input.length > 0) { + this.open(); + } + } + + }, + + // multi + onSelect: function (data) { + this.addSelectedChoice(data); + if (this.select) { this.postprocessResults(); } + + if (this.opts.closeOnSelect) { + this.close(); + this.search.width(10); + } else { + if (this.countSelectableResults()>0) { + this.search.width(10); + this.resizeSearch(); + this.positionDropdown(); + } else { + // if nothing left to select close + this.close(); + } + } + + // since its not possible to select an element that has already been + // added we do not need to check if this is a new element before firing change + this.triggerChange({ added: data }); + + this.focusSearch(); + }, + + // multi + cancel: function () { + this.close(); + this.focusSearch(); + }, + + // multi + addSelectedChoice: function (data) { + var choice=$( + "<li class='select2-search-choice'>" + + " <div></div>" + + " <a href='#' onclick='return false;' class='select2-search-choice-close' tabindex='-1'></a>" + + "</li>"), + id = this.id(data), + val = this.getVal(), + formatted; + + formatted=this.opts.formatSelection(data, choice); + choice.find("div").replaceWith("<div>"+this.opts.escapeMarkup(formatted)+"</div>"); + choice.find(".select2-search-choice-close") + .bind("mousedown", killEvent) + .bind("click dblclick", this.bind(function (e) { + if (!this.enabled) return; + + $(e.target).closest(".select2-search-choice").fadeOut('fast', this.bind(function(){ + this.unselect($(e.target)); + this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"); + this.close(); + this.focusSearch(); + })).dequeue(); + killEvent(e); + })).bind("focus", this.bind(function () { + if (!this.enabled) return; + this.container.addClass("select2-container-active"); + this.dropdown.addClass("select2-drop-active"); + })); + + choice.data("select2-data", data); + choice.insertBefore(this.searchContainer); + + val.push(id); + this.setVal(val); + }, + + // multi + unselect: function (selected) { + var val = this.getVal(), + data, + index; + + selected = selected.closest(".select2-search-choice"); + + if (selected.length === 0) { + throw "Invalid argument: " + selected + ". Must be .select2-search-choice"; + } + + data = selected.data("select2-data"); + + index = indexOf(this.id(data), val); + + if (index >= 0) { + val.splice(index, 1); + this.setVal(val); + if (this.select) this.postprocessResults(); + } + selected.remove(); + this.triggerChange({ removed: data }); + }, + + // multi + postprocessResults: function () { + var val = this.getVal(), + choices = this.results.find(".select2-result-selectable"), + compound = this.results.find(".select2-result-with-children"), + self = this; + + choices.each2(function (i, choice) { + var id = self.id(choice.data("select2-data")); + if (indexOf(id, val) >= 0) { + choice.addClass("select2-disabled").removeClass("select2-result-selectable"); + } else { + choice.removeClass("select2-disabled").addClass("select2-result-selectable"); + } + }); + + compound.each2(function(i, e) { + if (e.find(".select2-result-selectable").length==0) { + e.addClass("select2-disabled"); + } else { + e.removeClass("select2-disabled"); + } + }); + + choices.each2(function (i, choice) { + if (!choice.hasClass("select2-disabled") && choice.hasClass("select2-result-selectable")) { + self.highlight(0); + return false; + } + }); + + }, + + // multi + resizeSearch: function () { + + var minimumWidth, left, maxWidth, containerLeft, searchWidth, + sideBorderPadding = getSideBorderPadding(this.search); + + minimumWidth = measureTextWidth(this.search) + 10; + + left = this.search.offset().left; + + maxWidth = this.selection.width(); + containerLeft = this.selection.offset().left; + + searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding; + if (searchWidth < minimumWidth) { + searchWidth = maxWidth - sideBorderPadding; + } + + if (searchWidth < 40) { + searchWidth = maxWidth - sideBorderPadding; + } + this.search.width(searchWidth); + }, + + // multi + getVal: function () { + var val; + if (this.select) { + val = this.select.val(); + return val === null ? [] : val; + } else { + val = this.opts.element.val(); + return splitVal(val, this.opts.separator); + } + }, + + // multi + setVal: function (val) { + var unique; + if (this.select) { + this.select.val(val); + } else { + unique = []; + // filter out duplicates + $(val).each(function () { + if (indexOf(this, unique) < 0) unique.push(this); + }); + this.opts.element.val(unique.length === 0 ? "" : unique.join(this.opts.separator)); + } + }, + + // multi + val: function () { + var val, data = [], self=this; + + if (arguments.length === 0) { + return this.getVal(); + } + + val = arguments[0]; + + if (!val) { + this.opts.element.val(""); + this.updateSelection([]); + this.clearSearch(); + return; + } + + // val is a list of ids + this.setVal(val); + + if (this.select) { + this.select.find(":selected").each(function () { + data.push({id: $(this).attr("value"), text: $(this).text()}); + }); + this.updateSelection(data); + } else { + if (this.opts.initSelection === undefined) { + throw new Error("val() cannot be called if initSelection() is not defined") + } + + this.opts.initSelection(this.opts.element, function(data){ + var ids=$(data).map(self.id); + self.setVal(ids); + self.updateSelection(data); + self.clearSearch(); + }); + } + this.clearSearch(); + }, + + // multi + onSortStart: function() { + if (this.select) { + throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead."); + } + + // collapse search field into 0 width so its container can be collapsed as well + this.search.width(0); + // hide the container + this.searchContainer.hide(); + }, + + // multi + onSortEnd:function() { + + var val=[], self=this; + + // show search and move it to the end of the list + this.searchContainer.show(); + // make sure the search container is the last item in the list + this.searchContainer.appendTo(this.searchContainer.parent()); + // since we collapsed the width in dragStarted, we resize it here + this.resizeSearch(); + + // update selection + + this.selection.find(".select2-search-choice").each(function() { + val.push(self.opts.id($(this).data("select2-data"))); + }); + this.setVal(val); + this.triggerChange(); + }, + + // multi + data: function(values) { + var self=this, ids; + if (arguments.length === 0) { + return this.selection + .find(".select2-search-choice") + .map(function() { return $(this).data("select2-data"); }) + .get(); + } else { + if (!values) { values = []; } + ids = $.map(values, function(e) { return self.opts.id(e)}); + this.setVal(ids); + this.updateSelection(values); + this.clearSearch(); + } + } + }); + + $.fn.select2 = function () { + + var args = Array.prototype.slice.call(arguments, 0), + opts, + select2, + value, multiple, allowedMethods = ["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "onSortStart", "onSortEnd", "enable", "disable", "positionDropdown", "data"]; + + this.each(function () { + if (args.length === 0 || typeof(args[0]) === "object") { + opts = args.length === 0 ? {} : $.extend({}, args[0]); + opts.element = $(this); + + if (opts.element.get(0).tagName.toLowerCase() === "select") { + multiple = opts.element.attr("multiple"); + } else { + multiple = opts.multiple || false; + if ("tags" in opts) {opts.multiple = multiple = true;} + } + + select2 = multiple ? new MultiSelect2() : new SingleSelect2(); + select2.init(opts); + } else if (typeof(args[0]) === "string") { + + if (indexOf(args[0], allowedMethods) < 0) { + throw "Unknown method: " + args[0]; + } + + value = undefined; + select2 = $(this).data("select2"); + if (select2 === undefined) return; + if (args[0] === "container") { + value=select2.container; + } else { + value = select2[args[0]].apply(select2, args.slice(1)); + } + if (value !== undefined) {return false;} + } else { + throw "Invalid arguments to select2 plugin: " + args; + } + }); + return (value === undefined) ? this : value; + }; + + // plugin defaults, accessible to users + $.fn.select2.defaults = { + width: "copy", + closeOnSelect: true, + openOnEnter: true, + containerCss: {}, + dropdownCss: {}, + containerCssClass: "", + dropdownCssClass: "", + formatResult: function(result, container, query) { + var markup=[]; + markMatch(result.text, query.term, markup); + return markup.join(""); + }, + formatSelection: function (data, container) { + return data.text; + }, + formatResultCssClass: function(data) {return undefined;}, + formatNoMatches: function () { return "No matches found"; }, + formatInputTooShort: function (input, min) { return "Please enter " + (min - input.length) + " more characters"; }, + formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); }, + formatLoadMore: function (pageNumber) { return "Loading more results..."; }, + formatSearching: function () { return "Searching..."; }, + minimumResultsForSearch: 0, + minimumInputLength: 0, + maximumSelectionSize: 0, + id: function (e) { return e.id; }, + matcher: function(term, text) { + return text.toUpperCase().indexOf(term.toUpperCase()) >= 0; + }, + separator: ",", + tokenSeparators: [], + tokenizer: defaultTokenizer, + escapeMarkup: function (markup) { + if (markup && typeof(markup) === "string") { + return markup.replace(/&/g, "&"); + } + return markup; + }, + blurOnChange: false + }; + + // exports + window.Select2 = { + query: { + ajax: ajax, + local: local, + tags: tags + }, util: { + debounce: debounce, + markMatch: markMatch + }, "class": { + "abstract": AbstractSelect2, + "single": SingleSelect2, + "multi": MultiSelect2 + } + }; + +}(jQuery)); diff --git a/addons/base_import/static/lib/select2/select2.png b/addons/base_import/static/lib/select2/select2.png Binary files differnew file mode 100644 index 00000000000..1d804ffb996 --- /dev/null +++ b/addons/base_import/static/lib/select2/select2.png diff --git a/addons/base_import/static/lib/select2/select2x2.png b/addons/base_import/static/lib/select2/select2x2.png Binary files differnew file mode 100644 index 00000000000..4bdd5c961d4 --- /dev/null +++ b/addons/base_import/static/lib/select2/select2x2.png diff --git a/addons/base_import/static/lib/select2/spinner.gif b/addons/base_import/static/lib/select2/spinner.gif Binary files differnew file mode 100755 index 00000000000..5b33f7e54f4 --- /dev/null +++ b/addons/base_import/static/lib/select2/spinner.gif diff --git a/addons/base_import/static/src/css/import.css b/addons/base_import/static/src/css/import.css new file mode 100644 index 00000000000..f6258f5aa50 --- /dev/null +++ b/addons/base_import/static/src/css/import.css @@ -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; +} diff --git a/addons/base_import/static/src/js/import.js b/addons/base_import/static/src/js/import.js new file mode 100644 index 00000000000..c2deb660ff2 --- /dev/null +++ b/addons/base_import/static/src/js/import.js @@ -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})); + }, + }); +}; diff --git a/addons/base_import/static/src/xml/import.xml b/addons/base_import/static/src/xml/import.xml new file mode 100644 index 00000000000..386348bea4b --- /dev/null +++ b/addons/base_import/static/src/xml/import.xml @@ -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> diff --git a/addons/base_import/test_models.py b/addons/base_import/test_models.py new file mode 100644 index 00000000000..0720ae11eda --- /dev/null +++ b/addons/base_import/test_models.py @@ -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'), + } diff --git a/addons/base_import/tests/__init__.py b/addons/base_import/tests/__init__.py new file mode 100644 index 00000000000..abef28c8ca1 --- /dev/null +++ b/addons/base_import/tests/__init__.py @@ -0,0 +1,3 @@ +from . import test_cases + +checks = [test_cases] diff --git a/addons/base_import/tests/test_cases.py b/addons/base_import/tests/test_cases.py new file mode 100644 index 00000000000..5479ae94428 --- /dev/null +++ b/addons/base_import/tests/test_cases.py @@ -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,}) diff --git a/addons/base_setup/res_config.py b/addons/base_setup/res_config.py index 4826a50400d..e1920fc05d9 100644 --- a/addons/base_setup/res_config.py +++ b/addons/base_setup/res_config.py @@ -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): diff --git a/addons/base_setup/res_config_view.xml b/addons/base_setup/res_config_view.xml index 512c0a3f52e..2b717b6e0b1 100644 --- a/addons/base_setup/res_config_view.xml +++ b/addons/base_setup/res_config_view.xml @@ -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> diff --git a/addons/base_vat/i18n/es_MX.po b/addons/base_vat/i18n/es_MX.po index c3b0b12b4b7..cd511c528b0 100644 --- a/addons/base_vat/i18n/es_MX.po +++ b/addons/base_vat/i18n/es_MX.po @@ -14,7 +14,7 @@ msgstr "" "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:57+0000\n" +"X-Launchpad-Export-Date: 2012-09-08 04:54+0000\n" "X-Generator: Launchpad (build 15914)\n" #. module: base_vat diff --git a/addons/board/static/src/css/dashboard.css b/addons/board/static/src/css/dashboard.css index 38e224daf42..ed66e338c81 100644 --- a/addons/board/static/src/css/dashboard.css +++ b/addons/board/static/src/css/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; @@ -5,11 +19,6 @@ .openerp .oe_dashboard { width: 100%; } -.openerp .oe_dashboard .oe_dashboard_layout_selector ul, .openerp .oe_dashboard .oe_dashboard_layout_selector li { - margin: 0; - padding: 0; - list-style-type: none; -} .openerp .oe_dashboard .oe_action { margin: 0 8px 8px 0; background-color: white; diff --git a/addons/board/static/src/css/dashboard.sass b/addons/board/static/src/css/dashboard.sass index 1bfc01a3809..32f0e3b4f3a 100644 --- a/addons/board/static/src/css/dashboard.sass +++ b/addons/board/static/src/css/dashboard.sass @@ -9,16 +9,23 @@ 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 .oe_dashboard width: 100% - .oe_dashboard_layout_selector - ul, li - margin: 0 - padding: 0 - list-style-type: none .oe_action margin: 0 8px 8px 0 background-color: white diff --git a/addons/board/static/src/js/dashboard.js b/addons/board/static/src/js/dashboard.js index 0333690aa57..9c37924144d 100644 --- a/addons/board/static/src/js/dashboard.js +++ b/addons/board/static/src/js/dashboard.js @@ -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() { diff --git a/addons/board/static/src/xml/board.xml b/addons/board/static/src/xml/board.xml index b2363cafd53..e13fa707776 100644 --- a/addons/board/static/src/xml/board.xml +++ b/addons/board/static/src/xml/board.xml @@ -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> diff --git a/addons/crm/crm.py b/addons/crm/crm.py index b45b8ea8712..aff2bcb610b 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -75,7 +75,9 @@ class crm_case_stage(osv.osv): 'requirements': fields.text('Requirements'), 'section_ids':fields.many2many('crm.case.section', 'section_stage_rel', 'stage_id', 'section_id', string='Sections', help="Link between stages and sales teams. When set, this limitate the current stage to the selected sales teams."), - 'state': fields.selection(AVAILABLE_STATES, 'State', required=True, help="The related state for the stage. The state of your document will automatically change regarding the selected stage. For example, if a stage is related to the state 'Close', when your document reaches this stage, it will be automatically have the 'closed' state."), + 'state': fields.selection(AVAILABLE_STATES, 'Related Status', required=True, + help="The status of your document will automatically change regarding the selected stage. " \ + "For example, if a stage is related to the state 'Close', when your document reaches this stage, it is automatically closed."), 'case_default': fields.boolean('Common to All Teams', help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."), 'fold': fields.boolean('Hide in Views when Empty', diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index 29299373d91..f018a355579 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -423,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> diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml index b51f1288b95..4f4d73d5f43 100644 --- a/addons/crm/crm_view.xml +++ b/addons/crm/crm_view.xml @@ -183,7 +183,7 @@ <form string="Stage" version="7.0"> <group col="4"> <field name="name"/> - <field name="state" string="Related State" /> + <field name="state" /> <field name="probability"/> <field name="type"/> <field name="on_change"/> diff --git a/addons/crm/wizard/crm_lead_to_opportunity.py b/addons/crm/wizard/crm_lead_to_opportunity.py index e90303dda66..44ce73c23fe 100644 --- a/addons/crm/wizard/crm_lead_to_opportunity.py +++ b/addons/crm/wizard/crm_lead_to_opportunity.py @@ -30,10 +30,10 @@ class crm_lead2opportunity_partner(osv.osv_memory): _inherit = 'crm.lead2partner' _columns = { - 'action': fields.selection([('exist', 'Link to an existing partner'), \ - ('create', 'Create a new partner'), \ - ('nothing', 'Do not link to a partner')], \ - 'Related Partner', required=True), + 'action': fields.selection([('exist', 'Link to an existing customer'), \ + ('create', 'Create a new customer'), \ + ('nothing', 'Do not link to a customer')], \ + 'Related Customer', required=True), 'name': fields.selection([('convert', 'Convert to Opportunities'), ('merge', 'Merge with existing Opportunities')], 'Conversion Action', required=True), 'opportunity_ids': fields.many2many('crm.lead', string='Opportunities', domain=[('type', '=', 'opportunity')]), } diff --git a/addons/crm/wizard/crm_lead_to_opportunity_view.xml b/addons/crm/wizard/crm_lead_to_opportunity_view.xml index 6a826f7bc0e..ef8acf95b58 100644 --- a/addons/crm/wizard/crm_lead_to_opportunity_view.xml +++ b/addons/crm/wizard/crm_lead_to_opportunity_view.xml @@ -7,22 +7,23 @@ <field name="model">crm.lead2opportunity.partner</field> <field name="arch" type="xml"> <form string="Convert to Opportunity" version="7.0"> - <field name="action"/> - <group attrs="{'invisible':[('action','!=','exist')]}"> - <field name="partner_id" attrs="{'required': [('action', '=', 'exist')]}"/> + <group> + <field name="action" class="oe_inline"/> + <field name="partner_id" + attrs="{'required': [('action', '=', 'exist')], 'invisible':[('action','!=','exist')]}" + class="oe_inline"/> </group> - <group string="Convert to Opportunity"> - <field name="name" colspan="4"/> + <group> + <field name="name" class="oe_inline"/> + <field name="opportunity_ids" attrs="{'invisible': [('name', '=', 'convert')]}"> + <tree> + <field name="name"/> + <field name="partner_id"/> + <field name="user_id"/> + <field name="section_id"/> + </tree> + </field> </group> - <separator string="Select Opportunities" attrs="{'invisible': [('name', '=', 'convert')]}"/> - <field name="opportunity_ids" attrs="{'invisible': [('name', '=', 'convert')]}"> - <tree> - <field name="name"/> - <field name="partner_id"/> - <field name="user_id"/> - <field name="section_id"/> - </tree> - </field> <footer> <button name="action_apply" string="Create Opportunity" type="object" class="oe_highlight"/> or @@ -72,7 +73,7 @@ </record> <record id="action_crm_lead2opportunity_partner" model="ir.actions.act_window"> - <field name="name">Create a Partner</field> + <field name="name">Convert to opportunity</field> <field name="type">ir.actions.act_window</field> <field name="res_model">crm.lead2opportunity.partner</field> <field name="view_type">form</field> diff --git a/addons/crm/wizard/crm_lead_to_partner.py b/addons/crm/wizard/crm_lead_to_partner.py index 9b239bab7b9..a9e74f306e5 100644 --- a/addons/crm/wizard/crm_lead_to_partner.py +++ b/addons/crm/wizard/crm_lead_to_partner.py @@ -28,10 +28,10 @@ class crm_lead2partner(osv.osv_memory): _description = 'Lead to Partner' _columns = { - 'action': fields.selection([('exist', 'Link to an existing partner'), \ - ('create', 'Create a new partner')], \ + 'action': fields.selection([('exist', 'Link to an existing customer'), \ + ('create', 'Create a new customer')], \ 'Action', required=True), - 'partner_id': fields.many2one('res.partner', 'Partner'), + 'partner_id': fields.many2one('res.partner', 'Customer'), } def view_init(self, cr, uid, fields, context=None): """ diff --git a/addons/crm/wizard/crm_partner_to_opportunity.py b/addons/crm/wizard/crm_partner_to_opportunity.py index a1e1f0f2914..aa8f4a2a036 100644 --- a/addons/crm/wizard/crm_partner_to_opportunity.py +++ b/addons/crm/wizard/crm_partner_to_opportunity.py @@ -32,7 +32,7 @@ class crm_partner2opportunity(osv.osv_memory): 'name' : fields.char('Opportunity Name', size=64, required=True), 'planned_revenue': fields.float('Expected Revenue', digits=(16,2)), 'probability': fields.float('Success Probability', digits=(16,2)), - 'partner_id': fields.many2one('res.partner', 'Partner'), + 'partner_id': fields.many2one('res.partner', 'Customer'), } def action_cancel(self, cr, uid, ids, context=None): diff --git a/addons/crm/wizard/crm_phonecall_to_opportunity_view.xml b/addons/crm/wizard/crm_phonecall_to_opportunity_view.xml index 8ec4846733c..4b2ec725759 100644 --- a/addons/crm/wizard/crm_phonecall_to_opportunity_view.xml +++ b/addons/crm/wizard/crm_phonecall_to_opportunity_view.xml @@ -9,11 +9,14 @@ <field name="model">crm.phonecall2opportunity</field> <field name="arch" type="xml"> <form string="Convert To Opportunity " version="7.0"> - <group col="4"> + <group> <field name="name"/> <field name="partner_id" /> - <field name="planned_revenue"/> - <field name="probability"/> + <label for="planned_revenue"/> + <div> + <field name="planned_revenue" class="oe_inline"/> at + <field name="probability" class="oe_inline"/> %% + </div> </group> <footer> <button name="make_opportunity" type="object" string="_Convert" class="oe_highlight"/> @@ -27,7 +30,7 @@ <!-- Phonecall to Opportunity action --> <record model="ir.actions.act_window" id="phonecall2opportunity_act"> - <field name="name">Convert To Opportunity</field> + <field name="name">Convert to opportunity</field> <field name="res_model">crm.phonecall2opportunity</field> <field name="view_type">form</field> <field name="view_mode">form</field> diff --git a/addons/document_page/document_page.py b/addons/document_page/document_page.py index 7304e2e9075..092d39f22e9 100644 --- a/addons/document_page/document_page.py +++ b/addons/document_page/document_page.py @@ -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: diff --git a/addons/document_page/document_page_view.xml b/addons/document_page/document_page_view.xml index fc3bd86fdaf..23c4b8f29c8 100644 --- a/addons/document_page/document_page_view.xml +++ b/addons/document_page/document_page_view.xml @@ -78,29 +78,29 @@ </field> </record> <!-- page action --> - <record id="action_category" model="ir.actions.act_window"> - <field name="name">Category</field> + <record id="action_page" model="ir.actions.act_window"> + <field name="name">Pages</field> <field name="res_model">document.page</field> - <field name="domain">[('type','=','category')]</field> - <field name="context">{'default_type': 'category'}</field> + <field name="domain">[('type','=','content')]</field> + <field name="context">{'default_type': 'content'}</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"/> + <field name="help">Create web pages</field> </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> + <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','=','content')]</field> - <field name="context">{'default_type': 'content'}</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"/> - <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_category" parent="menu_wiki" name="Categories" action="action_category" sequence="20"/> <!-- History Tree view --> <record model="ir.ui.view" id="view_wiki_history_tree"> diff --git a/addons/document_page/static/src/css/document_page.css b/addons/document_page/static/src/css/document_page.css index 77597fb4281..ddbbcffd45b 100644 --- a/addons/document_page/static/src/css/document_page.css +++ b/addons/document_page/static/src/css/document_page.css @@ -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} diff --git a/addons/document_page/wizard/document_page_show_diff_view.xml b/addons/document_page/wizard/document_page_show_diff_view.xml index f268db7ad2e..b1dfb536853 100644 --- a/addons/document_page/wizard/document_page_show_diff_view.xml +++ b/addons/document_page/wizard/document_page_show_diff_view.xml @@ -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> diff --git a/addons/document_webdav/i18n/nb.po b/addons/document_webdav/i18n/nb.po new file mode 100644 index 00000000000..d51ade795b3 --- /dev/null +++ b/addons/document_webdav/i18n/nb.po @@ -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" diff --git a/addons/edi/i18n/nb.po b/addons/edi/i18n/nb.po new file mode 100644 index 00000000000..bc8add1e6e9 --- /dev/null +++ b/addons/edi/i18n/nb.po @@ -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." diff --git a/addons/edi/i18n/ru.po b/addons/edi/i18n/ru.po new file mode 100644 index 00000000000..92fba05f843 --- /dev/null +++ b/addons/edi/i18n/ru.po @@ -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 "" diff --git a/addons/email_template/wizard/email_template_preview_view.xml b/addons/email_template/wizard/email_template_preview_view.xml index f4f75567a42..5e8eaa3a836 100644 --- a/addons/email_template/wizard/email_template_preview_view.xml +++ b/addons/email_template/wizard/email_template_preview_view.xml @@ -20,7 +20,7 @@ <field name="email_cc" readonly="1" attrs="{'invisible':[('email_cc','=',False)]}"/> <field name="reply_to" readonly="1" attrs="{'invisible':[('reply_to','=',False)]}"/> <field name="subject" readonly="1"/> - <field name="body_html" widget="html" readonly="1"/> + <field name="body_html" widget="html" readonly="1" options='{"safe": true}'/> </group> </form> </field> diff --git a/addons/email_template/wizard/mail_compose_message.py b/addons/email_template/wizard/mail_compose_message.py index 2baef6e6c90..c0cb7fc92e5 100644 --- a/addons/email_template/wizard/mail_compose_message.py +++ b/addons/email_template/wizard/mail_compose_message.py @@ -51,9 +51,11 @@ class mail_compose_message(osv.osv_memory): context = {} result = super(mail_compose_message, self).default_get(cr, uid, fields, context=context) result['template_id'] = context.get('default_template_id', context.get('mail.compose.template_id', False)) - # force html when using templates + # pre-render the template if any if result.get('use_template'): - result['content_subtype'] = 'html' + onchange_res = self.onchange_use_template(cr, uid, [], result.get('use_template'), result.get('template_id'), + result.get('composition_mode'), result.get('model'), result.get('res_id'), context=context) + result.update(onchange_res['value']) return result _columns = { diff --git a/addons/email_template/wizard/mail_compose_message_view.xml b/addons/email_template/wizard/mail_compose_message_view.xml index 96aaa1cfaae..8d5bc26b213 100644 --- a/addons/email_template/wizard/mail_compose_message_view.xml +++ b/addons/email_template/wizard/mail_compose_message_view.xml @@ -11,14 +11,14 @@ <xpath expr="//form/footer/button" position="before"> <field name="use_template" invisible="1"/> <button icon="gtk-paste" type="object" name="toggle_template" - string="" help="Use a message template" /> + string="" help="Use a message template" invisible="1"/> <button icon="gtk-save" type="object" name="save_as_template" - string="" help="Save as a new template"/> + string="" help="Save as a new template" invisible="1"/> </xpath> <xpath expr="//form/notebook" position="after"> <group attrs="{'invisible':[('use_template','=',False)]}" colspan="4" col="4"> <field name="use_template" invisible="1"/> - <field name="template_id" colspan="3" + <field name="template_id" colspan="3" invisible="1" on_change="onchange_template_id(use_template, template_id, composition_mode, model, res_id, context)"/> </group> </xpath> diff --git a/addons/event_project/i18n/nb.po b/addons/event_project/i18n/nb.po new file mode 100644 index 00000000000..ea1485578a7 --- /dev/null +++ b/addons/event_project/i18n/nb.po @@ -0,0 +1,114 @@ +# 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:58+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: event_project +#: model:ir.model,name:event_project.model_event_project +msgid "Event Project" +msgstr "Arrangement Prosjekt" + +#. module: event_project +#: field:event.project,date:0 +msgid "Date End" +msgstr "Sluttdato" + +#. module: event_project +#: view:event.project:0 +msgid "Ok" +msgstr "Ok" + +#. module: event_project +#: help:event.project,project_id:0 +msgid "" +"This is Template Project. Project of event is a duplicate of this Template. " +"After click on 'Create Retro-planning', New Project will be duplicated from " +"this template project." +msgstr "" +"Dette er ett mal Prosjekt. Prosjektet av arrangementet er en dublett av " +"denne malen. Etter klikk på \"Create Retro-planlegging\", vil New Project " +"dupliseres fra denne malen prosjektet." + +#. module: event_project +#: view:event.project:0 +#: model:ir.actions.act_window,name:event_project.action_event_project +msgid "Retro-Planning" +msgstr "Retro-Planlegging" + +#. module: event_project +#: constraint:event.event:0 +msgid "Error ! Closing Date cannot be set before Beginning Date." +msgstr "Feil ! Sluttdato kan ikke settes før startdato." + +#. module: event_project +#: field:event.event,project_id:0 +msgid "Project" +msgstr "Prosjekt" + +#. module: event_project +#: field:event.project,project_id:0 +msgid "Template of Project" +msgstr "Mal av prosjekt" + +#. module: event_project +#: view:event.event:0 +msgid "All tasks" +msgstr "Alle oppgaver" + +#. module: event_project +#: view:event.event:0 +#: model:ir.actions.act_window,name:event_project.act_event_task +msgid "Tasks" +msgstr "Oppgaver" + +#. module: event_project +#: constraint:event.event:0 +msgid "Error ! You cannot create recursive event." +msgstr "Feil! Du kan ikke opprette rekursive hendelse." + +#. module: event_project +#: field:event.event,task_ids:0 +msgid "Project tasks" +msgstr "Prosjektoppgaver" + +#. module: event_project +#: view:event.project:0 +msgid "Close" +msgstr "Lukke" + +#. module: event_project +#: field:event.project,date_start:0 +msgid "Date Start" +msgstr "Startdato" + +#. module: event_project +#: view:event.event:0 +msgid "Create Retro-Planning" +msgstr "Opprett Retro - planlegging." + +#. module: event_project +#: model:ir.model,name:event_project.model_event_event +msgid "Event" +msgstr "Arrangement" + +#. module: event_project +#: view:event.event:0 +msgid "Tasks Management" +msgstr "" + +#~ msgid "Tasks management" +#~ msgstr "Oppgaver ledelse" diff --git a/addons/fetchmail/i18n/nb.po b/addons/fetchmail/i18n/nb.po new file mode 100644 index 00000000000..b5a6c409b79 --- /dev/null +++ b/addons/fetchmail/i18n/nb.po @@ -0,0 +1,335 @@ +# 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-08 18:59+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:52+0000\n" +"X-Generator: Launchpad (build 15914)\n" + +#. module: fetchmail +#: selection:fetchmail.server,state:0 +msgid "Confirmed" +msgstr "Bekreftet" + +#. module: fetchmail +#: field:fetchmail.server,server:0 +msgid "Server Name" +msgstr "Tjener navn" + +#. module: fetchmail +#: field:fetchmail.server,script:0 +msgid "Script" +msgstr "Manus" + +#. module: fetchmail +#: help:fetchmail.server,priority:0 +msgid "Defines the order of processing, lower values mean higher priority" +msgstr "" +"Definerer rekkefølgen av behandlingen, lavere verdier betyr høyere prioritet." + +#. module: fetchmail +#: help:fetchmail.server,is_ssl:0 +msgid "" +"Connections are encrypted with SSL/TLS through a dedicated port (default: " +"IMAPS=993, POP3S=995)" +msgstr "" +"Tilkoblinger er kryptert med SSL / TLS gjennom en egen port (standard: IMAPS " +"= 993, POP3S = 995)" + +#. module: fetchmail +#: field:fetchmail.server,attach:0 +msgid "Keep Attachments" +msgstr "Hold Vedlegg" + +#. module: fetchmail +#: help:fetchmail.server,original:0 +msgid "" +"Whether a full original copy of each email should be kept for referenceand " +"attached to each processed message. This will usually double the size of " +"your message database." +msgstr "" +"Om en full original kopi av hver e-post bør holdes for referenceand festet " +"til hver bearbeidet melding. Dette vil vanligvis doble størrelsen på " +"meldingen database." + +#. module: fetchmail +#: field:fetchmail.server,priority:0 +msgid "Server Priority" +msgstr "Tjener prioritet." + +#. module: fetchmail +#: field:fetchmail.server,state:0 +msgid "State" +msgstr "Stat" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "POP" +msgstr "POP" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Fetch Now" +msgstr "Hente nå." + +#. module: fetchmail +#: model:ir.actions.act_window,name:fetchmail.action_email_server_tree +#: model:ir.ui.menu,name:fetchmail.menu_action_fetchmail_server_tree +msgid "Incoming Mail Servers" +msgstr "Innkommende Mail Tjenere." + +#. module: fetchmail +#: field:fetchmail.server,port:0 +msgid "Port" +msgstr "Port" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "POP/IMAP Servers" +msgstr "POP/IMAP tjenere." + +#. module: fetchmail +#: selection:fetchmail.server,type:0 +msgid "Local Server" +msgstr "Lokal tjener." + +#. module: fetchmail +#: field:fetchmail.server,user:0 +msgid "Username" +msgstr "Brukernavn:" + +#. module: fetchmail +#: model:ir.model,name:fetchmail.model_fetchmail_server +msgid "POP/IMAP Server" +msgstr "POP/IMAP Tjener." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Reset Confirmation" +msgstr "Tilbakestille Bekreftelse." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "SSL" +msgstr "SSL" + +#. module: fetchmail +#: model:ir.model,name:fetchmail.model_mail_message +msgid "Email Message" +msgstr "E-post Melding." + +#. module: fetchmail +#: field:fetchmail.server,date:0 +msgid "Last Fetch Date" +msgstr "Siste Hente Dato." + +#. module: fetchmail +#: help:fetchmail.server,action_id:0 +msgid "" +"Optional custom server action to trigger for each incoming mail, on the " +"record that was created or updated by this mail" +msgstr "" +"Ekstra tilpasset server tiltak for å utløse for hver innkommende e-post, på " +"plata som ble opprettet eller oppdatert i denne posten." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "# of emails" +msgstr "# Av e-post." + +#. module: fetchmail +#: field:fetchmail.server,original:0 +msgid "Keep Original" +msgstr "Hold Original" + +#. module: fetchmail +#: code:addons/fetchmail/fetchmail.py:155 +#, python-format +msgid "" +"Here is what we got instead:\n" +" %s" +msgstr "" +"Her er hva vi fikk i stedet:\n" +" % s" + +#. module: fetchmail +#: view:fetchmail.server:0 +#: field:fetchmail.server,configuration:0 +msgid "Configuration" +msgstr "Konfigurasjon" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Incoming Mail Server" +msgstr "Innkommende E-post tjener." + +#. module: fetchmail +#: code:addons/fetchmail/fetchmail.py:155 +#, python-format +msgid "Connection test failed!" +msgstr "Tilkoblingen var mislykket!" + +#. module: fetchmail +#: help:fetchmail.server,server:0 +msgid "Hostname or IP of the mail server" +msgstr "Vertsnavn eller IP for e-postserveren." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server type IMAP." +msgstr "Tjener type IMAP." + +#. module: fetchmail +#: field:fetchmail.server,name:0 +msgid "Name" +msgstr "Navn" + +#. module: fetchmail +#: field:fetchmail.server,is_ssl:0 +msgid "SSL/TLS" +msgstr "SSL/TLS" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Test & Confirm" +msgstr "Test & Bekreft" + +#. module: fetchmail +#: field:fetchmail.server,action_id:0 +msgid "Server Action" +msgstr "Tjenerhandling" + +#. module: fetchmail +#: field:mail.message,fetchmail_server_id:0 +msgid "Inbound Mail Server" +msgstr "Inngående E-post tjener." + +#. module: fetchmail +#: field:fetchmail.server,message_ids:0 +#: model:ir.actions.act_window,name:fetchmail.act_server_history +msgid "Messages" +msgstr "Meldinger" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Search Incoming Mail Servers" +msgstr "Søk innkommende post tjenere." + +#. module: fetchmail +#: field:fetchmail.server,active:0 +msgid "Active" +msgstr "Aktiv" + +#. module: fetchmail +#: help:fetchmail.server,attach:0 +msgid "" +"Whether attachments should be downloaded. If not enabled, incoming emails " +"will be stripped of any attachments before being processed" +msgstr "" +"Om vedlegg skal lastes ned. Hvis ikke er aktivert, vil innkommende e-post " +"blir fratatt eventuelle vedlegg før de behandles." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Advanced Options" +msgstr "" + +#. module: fetchmail +#: selection:fetchmail.server,type:0 +msgid "IMAP Server" +msgstr "IMAP-tjener" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "IMAP" +msgstr "IMAP" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server type POP." +msgstr "Tjener type POP." + +#. module: fetchmail +#: field:fetchmail.server,password:0 +msgid "Password" +msgstr "Passord:" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Actions to Perform on Incoming Mails" +msgstr "Tiltak for å utføre på innkommende post." + +#. module: fetchmail +#: field:fetchmail.server,type:0 +msgid "Server Type" +msgstr "Tjener Type." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Login Information" +msgstr "Inn loggings informasjon." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server Information" +msgstr "Tjenerinformasjon" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "If SSL required." +msgstr "Hvis SSL nødvendig." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Advanced" +msgstr "Avansert" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server & Login" +msgstr "Tjener og Logg inn." + +#. module: fetchmail +#: help:fetchmail.server,object_id:0 +msgid "" +"Process each incoming mail as part of a conversation corresponding to this " +"document type. This will create new documents for new conversations, or " +"attach follow-up emails to the existing conversations (documents)." +msgstr "" +"Behandle hver innkommende post som del av en samtale tilsvarende denne " +"dokumenttypen. Dette vil skape nye dokumenter for nye samtaler, eller legge " +"oppfølging e-post til de eksisterende samtaler (dokumenter)." + +#. module: fetchmail +#: field:fetchmail.server,object_id:0 +msgid "Create a New Record" +msgstr "Oppretter en ny oppføring." + +#. module: fetchmail +#: selection:fetchmail.server,state:0 +msgid "Not Confirmed" +msgstr "Ikke bekreftet." + +#. module: fetchmail +#: selection:fetchmail.server,type:0 +msgid "POP Server" +msgstr "POP tjener." + +#. module: fetchmail +#: view:mail.message:0 +msgid "Mail Server" +msgstr "E-posttjener" + +#~ msgid "Advanced options" +#~ msgstr "Avanserte alternativer" diff --git a/addons/google_base_account/i18n/nb.po b/addons/google_base_account/i18n/nb.po new file mode 100644 index 00000000000..7b14c1d29b4 --- /dev/null +++ b/addons/google_base_account/i18n/nb.po @@ -0,0 +1,122 @@ +# 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 19:23+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: google_base_account +#: field:res.users,gmail_user:0 +msgid "Username" +msgstr "Brukernavn:" + +#. module: google_base_account +#: model:ir.actions.act_window,name:google_base_account.act_google_login_form +msgid "Google Login" +msgstr "Google Logg inn" + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:29 +#, python-format +msgid "Google Contacts Import Error!" +msgstr "Google kontakter Import Feil!" + +#. module: google_base_account +#: view:res.users:0 +msgid " Synchronization " +msgstr " Synkronisering " + +#. module: google_base_account +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "Du kan ikke ha to brukere med samme login!" + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:75 +#, python-format +msgid "Error" +msgstr "Feil" + +#. module: google_base_account +#: view:google.login:0 +msgid "Google login" +msgstr "Google Logg Inn." + +#. module: google_base_account +#: model:ir.model,name:google_base_account.model_res_users +msgid "res.users" +msgstr "res.Brukere." + +#. module: google_base_account +#: field:google.login,password:0 +msgid "Google Password" +msgstr "Google passord." + +#. module: google_base_account +#: view:google.login:0 +msgid "_Cancel" +msgstr "_Avbryt" + +#. module: google_base_account +#: view:res.users:0 +msgid "Google Account" +msgstr "Google-konto" + +#. module: google_base_account +#: field:google.login,user:0 +msgid "Google Username" +msgstr "Google Brukernavn." + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:29 +#, python-format +msgid "" +"Please install gdata-python-client from http://code.google.com/p/gdata-" +"python-client/downloads/list" +msgstr "" +"Vennligst Installer gdata-python-client from http://code.google.com/p/gdata-" +"python-client/downloads/list" + +#. module: google_base_account +#: model:ir.model,name:google_base_account.model_google_login +msgid "Google Contact" +msgstr "Google kontakt" + +#. module: google_base_account +#: view:google.login:0 +msgid "_Login" +msgstr "_Logg inn" + +#. module: google_base_account +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "" +"Det valgte firmaet er ikke i listen over tillatte firmaer for denne brukeren" + +#. module: google_base_account +#: field:res.users,gmail_password:0 +msgid "Password" +msgstr "Passord:" + +#. module: google_base_account +#: code:addons/google_base_account/wizard/google_login.py:75 +#, python-format +msgid "Authentication fail check the user and password !" +msgstr "Autentisering mislykkes sjekk brukernavn og passord!" + +#. module: google_base_account +#: view:google.login:0 +msgid "ex: user@gmail.com" +msgstr "Ex:Bruker@gmail.com" diff --git a/addons/hr/hr.py b/addons/hr/hr.py index 3c307b9fee8..90f967fb4b4 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -180,17 +180,16 @@ class hr_employee(osv.osv): 'resource_id': fields.many2one('resource.resource', 'Resource', ondelete='cascade', required=True), 'coach_id': fields.many2one('hr.employee', 'Coach'), 'job_id': fields.many2one('hr.job', 'Job'), + # image: all image fields are base64 encoded and PIL-supported 'image': fields.binary("Photo", - help="This field holds the image used as a photo for the "\ - "employee. The image is base64 encoded, and PIL-supported. "\ - "It is limited to a 1024x1024 px image."), + help="This field holds the image used as photo for the employee, limited to 1024x1024px."), 'image_medium': fields.function(_get_image, fnct_inv=_set_image, string="Medium-sized photo", type="binary", multi="_get_image", store = { 'hr.employee': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), }, help="Medium-sized photo of the employee. It is automatically "\ - "resized as a 180x180 px image, with aspect ratio preserved. "\ + "resized as a 128x128px image, with aspect ratio preserved. "\ "Use this field in form views or some kanban views."), 'image_small': fields.function(_get_image, fnct_inv=_set_image, string="Smal-sized photo", type="binary", multi="_get_image", @@ -198,7 +197,7 @@ class hr_employee(osv.osv): 'hr.employee': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), }, help="Small-sized photo of the employee. It is automatically "\ - "resized as a 50x50 px image, with aspect ratio preserved. "\ + "resized as a 64x64px image, with aspect ratio preserved. "\ "Use this field anywhere a small image is required."), 'passport_id':fields.char('Passport No', size=64), 'color': fields.integer('Color Index'), @@ -290,8 +289,12 @@ class hr_department(osv.osv): 'member_ids': fields.one2many('hr.employee', 'department_id', 'Members', readonly=True), } -hr_department() - + def copy(self, cr, uid, ids, default=None, context=None): + if default is None: + default = {} + default = default.copy() + default['member_ids'] = [] + return super(hr_department, self).copy(cr, uid, ids, default, context=context) class res_users(osv.osv): _name = 'res.users' diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml index e8ed1d61157..00ed2afbef2 100644 --- a/addons/hr/hr_view.xml +++ b/addons/hr/hr_view.xml @@ -20,16 +20,12 @@ <field name="arch" type="xml"> <form string="Employee" version="7.0"> <sheet> - <field name="image_medium" widget='image' class="oe_right oe_avatar"/> + <field name="image_medium" widget='image' class="oe_left oe_avatar"/> <div class="oe_title"> <label for="name" class="oe_edit_only"/> <h1> <field name="name"/> </h1> - <label for="job_id" class="oe_edit_only"/> - <h2> - <field name="job_id" options='{"no_open": true}' domain="[('state','!=','old')]" context="{'form_view_ref': 'hr.view_hr_job_employee_form'}"/> - </h2> <label for="category_ids" class="oe_edit_only"/> <field name="category_ids" widget="many2many_tags" placeholder="e.g. Part Time"/> </div> @@ -37,44 +33,55 @@ <!-- Put here related buttons --> </div> <notebook> - <page string="Information"> + <page string="Public Information"> <group> - <group> + <group string="Contact Information"> + <field name="work_email" widget="email"/> + <field name="work_phone"/> + <field name="mobile_phone"/> + </group> + <group string="Position"> <field name="department_id" on_change="onchange_department_id(department_id)"/> - <field name="company_id" groups="base.group_multi_company" on_change="onchange_company(company_id)"/> - <field name="user_id" on_change="onchange_user(user_id)"/> + <field name="job_id" options='{"no_open": true}' domain="[('state','!=','old')]" context="{'form_view_ref': 'hr.view_hr_job_employee_form'}"/> <field name="parent_id"/> <field name="coach_id"/> </group> <group> - <field name="work_email" widget="email"/> - <field name="work_phone"/> - <field name="address_id" on_change="onchange_address_id(address_id)"/> - <field name="mobile_phone"/> - <field name="identification_id" groups="base.group_hr_user"/> - <field name="passport_id" groups="base.group_hr_user"/> - <field name="otherid" groups="base.group_hr_user"/> - </group> - <group name="active_group"> - <field name="active"/> + <field name="company_id" groups="base.group_multi_company" on_change="onchange_company(company_id)"/> + <field name="user_id" on_change="onchange_user(user_id)" string="Related User"/> + <field name="address_id" on_change="onchange_address_id(address_id)" context="{'show_address': 1}" options='{"always_reload": true, "highlight_first_line": true}'/> </group> </group> <field name="notes" placeholder="Other Information ..." colspan="4"/> </page> <page string="Personal Information" groups="base.group_hr_user"> - <group col="4"> - <group> + <group> + <group string="Citizenship & Other Info"> <field name="country_id" options='{"no_open": true}'/> + <field name="identification_id" groups="base.group_hr_user"/> + <field name="passport_id" groups="base.group_hr_user"/> <field name="bank_account_id"/> - <field name="address_home_id"/> + <field name="otherid" groups="base.group_hr_user"/> </group> - <group> + <group string="Contact Information"> + <field name="address_home_id" context="{'show_address': 1}" options='{"always_reload": true, "highlight_first_line": true}'/> + </group> + <group string="Status"> <field name="gender"/> <field name="marital"/> + </group> + <group string="Birth"> <field name="birthday"/> </group> </group> </page> + <page string="HR Settings" groups="base.group_hr_user"> + <group> + <group string="Active" name="active_group"> + <field name="active"/> + </group> + </group> + </page> </notebook> </sheet> </form> diff --git a/addons/hr/security/hr_security.xml b/addons/hr/security/hr_security.xml index 5e4c3052858..d46a0f0ba19 100644 --- a/addons/hr/security/hr_security.xml +++ b/addons/hr/security/hr_security.xml @@ -2,13 +2,19 @@ <openerp> <data noupdate="1"> + <record model="res.groups" id="base.group_user"> + <field name="comment">the user will be able to manage his own human resources stuff (leave request, timesheets, ...), if he is linked to an employee in the system.</field> + </record> + <record id="base.group_hr_user" model="res.groups"> <field name="name">Officer</field> <field name="category_id" ref="base.module_category_human_resources"/> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> + <field name="comment">the user will be able to approve document created by employees.</field> </record> <record id="base.group_hr_manager" model="res.groups"> <field name="name">Manager</field> + <field name="comment">the user will have an access to the human resources configuration as well as statistic reports.</field> <field name="category_id" ref="base.module_category_human_resources"/> <field name="implied_ids" eval="[(4, ref('base.group_hr_user'))]"/> <field name="users" eval="[(4, ref('base.user_root'))]"/> diff --git a/addons/hr_attendance/hr_attendance.py b/addons/hr_attendance/hr_attendance.py index ae05a6143fd..d3bc79bda1a 100644 --- a/addons/hr_attendance/hr_attendance.py +++ b/addons/hr_attendance/hr_attendance.py @@ -112,9 +112,23 @@ class hr_employee(osv.osv): for res in cr.fetchall(): result[res[1]] = res[0] == 'sign_in' and 'present' or 'absent' return result + + def _last_sign(self, cr, uid, ids, name, args, context=None): + result = {} + if not ids: + return result + for id in ids: + result[id] = False + cr.execute("""select max(name) as name + from hr_attendance + where action in ('sign_in', 'sign_out') and employee_id = %s""",(id,)) + for res in cr.fetchall(): + result[id] = res[0] + return result _columns = { 'state': fields.function(_state, type='selection', selection=[('absent', 'Absent'), ('present', 'Present')], string='Attendance'), + 'last_sign': fields.function(_last_sign, type='datetime', string='Last Sign'), } def _action_check(self, cr, uid, emp_id, dt=False, context=None): diff --git a/addons/hr_attendance/hr_attendance_view.xml b/addons/hr_attendance/hr_attendance_view.xml index 097d7f32258..c686b4c1ff0 100644 --- a/addons/hr_attendance/hr_attendance_view.xml +++ b/addons/hr_attendance/hr_attendance_view.xml @@ -127,8 +127,8 @@ <label for="state"/> <div> <field name="state" class="oe_inline"/> - - <button class="oe_link" name="attendance_action_change" states="present" string="Sign Out" type="object" groups="base.group_hr_manager"/> - <button class="oe_link" name="attendance_action_change" states="absent" string="Sign In" type="object" groups="base.group_hr_manager"/> + <button class="oe_link" name="attendance_action_change" states="present" string="Sign Out" type="object" context="{'type':'sign_out'}" groups="base.group_hr_user"/> + <button class="oe_link" name="attendance_action_change" states="absent" string="Sign In" type="object" context="{'type':'sign_in'}" groups="base.group_hr_user"/> </div> </field> </field> diff --git a/addons/hr_attendance/i18n/nb.po b/addons/hr_attendance/i18n/nb.po new file mode 100644 index 00000000000..97c2618a419 --- /dev/null +++ b/addons/hr_attendance/i18n/nb.po @@ -0,0 +1,576 @@ +# 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-10 13:06+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-11 04:50+0000\n" +"X-Generator: Launchpad (build 15924)\n" + +#. module: hr_attendance +#: model:ir.ui.menu,name:hr_attendance.menu_hr_time_tracking +msgid "Time Tracking" +msgstr "Tid Sporing" + +#. module: hr_attendance +#: view:hr.attendance:0 +msgid "Group By..." +msgstr "Grupper etter ..." + +#. module: hr_attendance +#: view:hr.attendance:0 +msgid "Today" +msgstr "I dag" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "March" +msgstr "Mars" + +#. module: hr_attendance +#: view:hr.sign.in.out.ask:0 +msgid "" +"You did not sign out the last time. Please enter the date and time you " +"signed out." +msgstr "" +"Du logget ikke ut siste gang. Vennligst skriv inn datoen og klokkeslettet du " +"logget ut." + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Total period:" +msgstr "Total periode:" + +#. module: hr_attendance +#: field:hr.action.reason,name:0 +msgid "Reason" +msgstr "Grunn" + +#. module: hr_attendance +#: view:hr.attendance.error:0 +msgid "Print Attendance Report Error" +msgstr "Skriv ut Oppmøte Rapporter Feil." + +#. module: hr_attendance +#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:161 +#, python-format +msgid "The sign-out date must be in the past" +msgstr "Logg - ut må være i fortiden." + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Date Signed" +msgstr "Signeringsdato" + +#. module: hr_attendance +#: model:ir.actions.act_window,help:hr_attendance.open_view_attendance +msgid "" +"The Time Tracking functionality aims to manage employee attendances from " +"Sign in/Sign out actions. You can also link this feature to an attendance " +"device using OpenERP's web service features." +msgstr "" +"Tid Sporing funksjonalitet mål er å forvalte de ansattes tilskuertall fra " +"Logg inn / Logg ut handlinger. Du kan også koble denne funksjonen til en " +"frammøte enheten ved hjelp OpenERP web-service funksjoner." + +#. module: hr_attendance +#: view:hr.action.reason:0 +msgid "Attendance reasons" +msgstr "Oppmøte grunner" + +#. module: hr_attendance +#: view:hr.attendance:0 +#: field:hr.attendance,day:0 +msgid "Day" +msgstr "Dag" + +#. module: hr_attendance +#: selection:hr.employee,state:0 +msgid "Present" +msgstr "Presentere" + +#. module: hr_attendance +#: model:ir.model,name:hr_attendance.model_hr_sign_in_out_ask +msgid "Ask for Sign In Out" +msgstr "Spør for pålogging ut." + +#. module: hr_attendance +#: field:hr.attendance,action_desc:0 +#: model:ir.model,name:hr_attendance.model_hr_action_reason +msgid "Action Reason" +msgstr "Handling grunn." + +#. module: hr_attendance +#: view:hr.sign.in.out:0 +msgid "Ok" +msgstr "Ok" + +#. module: hr_attendance +#: view:hr.action.reason:0 +msgid "Define attendance reason" +msgstr "Definer frammøte grunn." + +#. module: hr_attendance +#: code:addons/hr_attendance/report/attendance_by_month.py:184 +#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_month +#, python-format +msgid "Attendances By Month" +msgstr "Tilskuertall Pr.mnd" + +#. module: hr_attendance +#: field:hr.sign.in.out,name:0 +#: field:hr.sign.in.out.ask,name:0 +msgid "Employees name" +msgstr "Ansattnavn" + +#. module: hr_attendance +#: model:ir.actions.act_window,name:hr_attendance.open_view_attendance_reason +#: model:ir.ui.menu,name:hr_attendance.menu_open_view_attendance_reason +msgid "Attendance Reasons" +msgstr "Oppmøte grunner" + +#. module: hr_attendance +#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:161 +#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:167 +#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:174 +#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:179 +#, python-format +msgid "UserError" +msgstr "Brukerfeil" + +#. module: hr_attendance +#: field:hr.attendance.error,end_date:0 +#: field:hr.attendance.week,end_date:0 +msgid "Ending Date" +msgstr "Sluttdato" + +#. module: hr_attendance +#: code:addons/hr_attendance/hr_attendance.py:140 +#, python-format +msgid "Warning" +msgstr "Advarsel" + +#. module: hr_attendance +#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:174 +#, python-format +msgid "The Sign-in date must be in the past" +msgstr "Logg inn dato må være i fortiden." + +#. module: hr_attendance +#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:167 +#, python-format +msgid "A sign-in must be right after a sign-out !" +msgstr "En pålogging må være rett etter en logg ut!" + +#. module: hr_attendance +#: field:hr.employee,state:0 +#: model:ir.model,name:hr_attendance.model_hr_attendance +msgid "Attendance" +msgstr "Oppmøte" + +#. module: hr_attendance +#: field:hr.attendance.error,max_delay:0 +msgid "Max. Delay (Min)" +msgstr "Maks. Forsinkelse (Min)" + +#. module: hr_attendance +#: view:hr.attendance.error:0 +#: view:hr.attendance.month:0 +#: view:hr.attendance.week:0 +msgid "Print" +msgstr "Skriv ut" + +#. module: hr_attendance +#: view:hr.attendance:0 +msgid "Hr Attendance Search" +msgstr "Hr Oppmøte Søk." + +#. module: hr_attendance +#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_week +msgid "Attendances By Week" +msgstr "Tilskuertall etter uke." + +#. module: hr_attendance +#: constraint:hr.attendance:0 +msgid "Error: Sign in (resp. Sign out) must follow Sign out (resp. Sign in)" +msgstr "Feil: Logg på (hhv. Logg ut) må følge Logg ut (hhv. Logg inn)" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "July" +msgstr "juli" + +#. module: hr_attendance +#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_error +#: model:ir.actions.report.xml,name:hr_attendance.attendance_error_report +msgid "Attendance Error Report" +msgstr "Oppmøte Feilrapport" + +#. module: hr_attendance +#: field:hr.attendance.error,init_date:0 +#: field:hr.attendance.week,init_date:0 +msgid "Starting Date" +msgstr "Startdato" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Min Delay" +msgstr "Minimum forsinkelse." + +#. module: hr_attendance +#: selection:hr.attendance,action:0 +#: view:hr.employee:0 +msgid "Sign In" +msgstr "Logg Inn" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Operation" +msgstr "Handling" + +#. module: hr_attendance +#: code:addons/hr_attendance/wizard/hr_attendance_error.py:49 +#, python-format +msgid "No Data Available" +msgstr "Ingen informasjon tilgjengelig" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "September" +msgstr "September" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "December" +msgstr "Desember" + +#. module: hr_attendance +#: field:hr.attendance.month,month:0 +msgid "Month" +msgstr "Måned" + +#. module: hr_attendance +#: field:hr.action.reason,action_type:0 +msgid "Action Type" +msgstr "Handlingstype" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "" +"(*) A negative delay means that the employee worked more than encoded." +msgstr "" +"(*) En negativ forsinkelse innebærer at arbeidstakeren jobbet mer enn kodet." + +#. module: hr_attendance +#: view:hr.attendance:0 +msgid "My Attendance" +msgstr "Min Oppmøte" + +#. module: hr_attendance +#: help:hr.attendance,action_desc:0 +msgid "" +"Specifies the reason for Signing In/Signing Out in case of extra hours." +msgstr "Angir årsaken til pålogging / logge ut I tilfelle ekstra timer." + +#. module: hr_attendance +#: model:ir.model,name:hr_attendance.model_hr_attendance_month +msgid "Print Monthly Attendance Report" +msgstr "Skriv ut månedlig Oppmøte Rapporter." + +#. module: hr_attendance +#: model:ir.model,name:hr_attendance.model_hr_sign_in_out +msgid "Sign In Sign Out" +msgstr "Logg inn - Logg ut" + +#. module: hr_attendance +#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:105 +#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:129 +#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:146 +#: view:hr.sign.in.out:0 +#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_sigh_in_out +#: model:ir.ui.menu,name:hr_attendance.menu_hr_attendance_sigh_in_out +#, python-format +msgid "Sign in / Sign out" +msgstr "Logg inn / Logg ut" + +#. module: hr_attendance +#: view:hr.sign.in.out.ask:0 +msgid "hr.sign.out.ask" +msgstr "hr.signere.ut.spør." + +#. module: hr_attendance +#: view:hr.attendance.week:0 +msgid "Print Attendance Report Weekly" +msgstr "Skriv ut Oppmøte Rapporter Ukentlig." + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "August" +msgstr "August" + +#. module: hr_attendance +#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:179 +#, python-format +msgid "A sign-out must be right after a sign-in !" +msgstr "Et logg-ut må være rett etter en logg - inn!" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "June" +msgstr "Juni" + +#. module: hr_attendance +#: model:ir.model,name:hr_attendance.model_hr_attendance_error +msgid "Print Error Attendance Report" +msgstr "Print Feil Oppmøte Rapporter." + +#. module: hr_attendance +#: field:hr.attendance,name:0 +msgid "Date" +msgstr "Dato" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "November" +msgstr "November" + +#. module: hr_attendance +#: constraint:hr.employee:0 +msgid "Error ! You cannot create recursive Hierarchy of Employees." +msgstr "Feil! Du kan ikke opprette rekursiv Hierarki av ansatte." + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "October" +msgstr "Oktober" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "January" +msgstr "Januar" + +#. module: hr_attendance +#: selection:hr.action.reason,action_type:0 +#: view:hr.sign.in.out:0 +#: view:hr.sign.in.out.ask:0 +msgid "Sign in" +msgstr "Logg inn" + +#. module: hr_attendance +#: view:hr.attendance.error:0 +msgid "Analysis Information" +msgstr "Analyse Informasjon." + +#. module: hr_attendance +#: view:hr.sign.in.out:0 +msgid "Sign-out Entry Must Follow Sign-in." +msgstr "" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Attendance Errors" +msgstr "Oppmøte feil" + +#. module: hr_attendance +#: field:hr.attendance,action:0 +#: selection:hr.attendance,action:0 +msgid "Action" +msgstr "Handling" + +#. module: hr_attendance +#: view:hr.sign.in.out:0 +msgid "" +"If you need your staff to sign in when they arrive at work and sign out " +"again at the end of the day, OpenERP allows you to manage this with this " +"tool. If each employee has been linked to a system user, then they can " +"encode their time with this action button." +msgstr "" +"Hvis du trenger dine ansatte til å logge på når de kommer på jobb og logge " +"ut igjen på slutten av dagen, kan OpenERP tillate deg å administrere dette " +"med dette verktøyet. Hvis hver ansatt har vært knyttet til et system bruker, " +"så de kan kode sin tid med denne handlingen knappen." + +#. module: hr_attendance +#: model:ir.model,name:hr_attendance.model_hr_attendance_week +msgid "Print Week Attendance Report" +msgstr "Skriv Ut Uke Oppmøte Rapporter." + +#. module: hr_attendance +#: field:hr.sign.in.out,emp_id:0 +#: field:hr.sign.in.out.ask,emp_id:0 +msgid "Empoyee ID" +msgstr "Ansatt ID" + +#. module: hr_attendance +#: view:hr.attendance.error:0 +#: view:hr.attendance.month:0 +#: view:hr.attendance.week:0 +#: view:hr.sign.in.out:0 +#: view:hr.sign.in.out.ask:0 +msgid "Cancel" +msgstr "Avbryt" + +#. module: hr_attendance +#: help:hr.action.reason,name:0 +msgid "Specifies the reason for Signing In/Signing Out." +msgstr "Angir årsaken til pålogging / logger av." + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "" +"(*) A positive delay means that the employee worked less than recorded." +msgstr "" +"(*) En positiv forsinkelse innebærer at arbeidstakeren jobbet mindre enn " +"registrert." + +#. module: hr_attendance +#: view:hr.attendance.month:0 +msgid "Print Attendance Report Monthly" +msgstr "Skriv ut Oppmøte Rapporter Månedlig." + +#. module: hr_attendance +#: selection:hr.action.reason,action_type:0 +#: view:hr.sign.in.out:0 +#: view:hr.sign.in.out.ask:0 +msgid "Sign out" +msgstr "Logg av" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Delay" +msgstr "Forsinkelse" + +#. module: hr_attendance +#: view:hr.attendance:0 +#: model:ir.model,name:hr_attendance.model_hr_employee +msgid "Employee" +msgstr "Ansatt" + +#. module: hr_attendance +#: code:addons/hr_attendance/hr_attendance.py:140 +#, python-format +msgid "" +"You tried to %s with a date anterior to another event !\n" +"Try to contact the administrator to correct attendances." +msgstr "" +"Du prøvde å% s med en dato fremre til en annen hendelse!\n" +"Prøv å kontakte administrator for å rette tilskuertall." + +#. module: hr_attendance +#: view:hr.sign.in.out.ask:0 +#: field:hr.sign.in.out.ask,last_time:0 +msgid "Your last sign out" +msgstr "Din siste Logg ut." + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Date Recorded" +msgstr "Dato Innspilt" + +#. module: hr_attendance +#: model:ir.actions.act_window,name:hr_attendance.open_view_attendance +#: model:ir.ui.menu,name:hr_attendance.menu_hr_attendance +#: model:ir.ui.menu,name:hr_attendance.menu_open_view_attendance +msgid "Attendances" +msgstr "Tilskuertall" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "May" +msgstr "Mai" + +#. module: hr_attendance +#: view:hr.sign.in.out.ask:0 +msgid "Your last sign in" +msgstr "Din siste logg inn." + +#. module: hr_attendance +#: selection:hr.attendance,action:0 +#: view:hr.employee:0 +msgid "Sign Out" +msgstr "Logg Ut" + +#. module: hr_attendance +#: model:ir.actions.act_window,help:hr_attendance.action_hr_attendance_sigh_in_out +msgid "" +"Sign in / Sign out. In some companies, staff have to sign in when they " +"arrive at work and sign out again at the end of the day. If each employee " +"has been linked to a system user, then they can encode their time with this " +"action button." +msgstr "" +"Logg inn / Logg ut. I noen bedrifter, ansatte må logge inn når de kommer på " +"jobb og Logg ut igjen på slutten av dagen. Hvis hver ansatt har vært knyttet " +"til et system bruker, så de kan kode sin tid med denne handlingen knappen." + +#. module: hr_attendance +#: field:hr.attendance,employee_id:0 +msgid "Employee's Name" +msgstr "Ansatte's navn." + +#. module: hr_attendance +#: selection:hr.employee,state:0 +msgid "Absent" +msgstr "Fraværende" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "February" +msgstr "Februar" + +#. module: hr_attendance +#: view:hr.attendance:0 +msgid "Employee attendances" +msgstr "Ansattes tilskuertall" + +#. module: hr_attendance +#: field:hr.sign.in.out,state:0 +msgid "Current state" +msgstr "Nåværende tilstand." + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "April" +msgstr "April" + +#. module: hr_attendance +#: view:hr.attendance.error:0 +msgid "Bellow this delay, the error is considered to be voluntary" +msgstr "Under denne forsinkelsen, er feilen anses å være frivillig." + +#. module: hr_attendance +#: code:addons/hr_attendance/wizard/hr_attendance_error.py:49 +#, python-format +msgid "No records found for your selection!" +msgstr "Ingen rader funnet med angitt utvalg!" + +#. module: hr_attendance +#: view:hr.sign.in.out.ask:0 +msgid "" +"You did not sign in the last time. Please enter the date and time you signed " +"in." +msgstr "" +"Du hadde ikke logget ut siste gang. Vennligst skriv inn datoen og " +"klokkeslettet du logget." + +#. module: hr_attendance +#: field:hr.attendance.month,year:0 +msgid "Year" +msgstr "År" + +#. module: hr_attendance +#: view:hr.sign.in.out.ask:0 +msgid "hr.sign.in.out.ask" +msgstr "hr.Logg.i.ut.spør" + +#~ msgid "Sign-Out Entry must follow Sign-In." +#~ msgstr "Logg ut Entry må følge pålogging." diff --git a/addons/hr_attendance/static/src/css/slider.css b/addons/hr_attendance/static/src/css/slider.css index 9e0252156b2..664d4f96e41 100644 --- a/addons/hr_attendance/static/src/css/slider.css +++ b/addons/hr_attendance/static/src/css/slider.css @@ -8,9 +8,12 @@ float:left; height: 32px; width: 32px; - background: url(/hr_attendance/static/src/img/emp-in32.png); + background: url(/hr_attendance/static/src/img/emp-out32.png); cursor: pointer; } +.openerp .oe_attendance_signin:hover { + background: url(/hr_attendance/static/src/img/emp-out-disable32.png); +} .openerp .oe_attendance_status.oe_attendance_signed .oe_attendance_signin { display: none; } @@ -19,9 +22,12 @@ float:right; height: 32px; width: 32px; - background: url(/hr_attendance/static/src/img/emp-out32.png); + background: url(/hr_attendance/static/src/img/emp-in32.png); cursor: pointer; } +.openerp .oe_attendance_signout:hover { + background: url(/hr_attendance/static/src/img/emp-in-disable32.png); +} .openerp .oe_attendance_status.oe_attendance_nosigned .oe_attendance_signout { display: none; } diff --git a/addons/hr_attendance/static/src/js/attendance.js b/addons/hr_attendance/static/src/js/attendance.js index f6a4c15268a..1b5e271b4ba 100644 --- a/addons/hr_attendance/static/src/js/attendance.js +++ b/addons/hr_attendance/static/src/js/attendance.js @@ -4,11 +4,6 @@ openerp.hr_attendance = function (instance) { var QWeb = instance.web.qweb; var _t = instance.web._t; var _lt = instance.web._lt; - - var tips = { - "true": _lt("You are currently signed in. Click here to sign out."), - "false": _lt("You are currently signed out. Click here to sign in."), - } instance.hr_attendance.AttendanceSlider = instance.web.Widget.extend({ template: 'AttendanceSlider', @@ -21,7 +16,6 @@ openerp.hr_attendance = function (instance) { var tmp = function() { this.$el.toggleClass("oe_attendance_nosigned", ! this.get("signed_in")); this.$el.toggleClass("oe_attendance_signed", this.get("signed_in")); - this.$el.attr("title", tips["" + this.get("signed_in")].toString()); }; this.on("change:signed_in", this, tmp); _.bind(tmp, this)(); @@ -31,6 +25,19 @@ openerp.hr_attendance = function (instance) { this.$(".oe_attendance_signout").click(function() { self.do_update_attendance(); }); + this.$el.tipsy({ + title: function() { + var last_text = instance.web.format_value(self.last_sign, {type: "datetime"}); + var current_text = instance.web.format_value(new Date(), {type: "datetime"}); + var duration = self.last_sign ? $.timeago(self.last_sign) : "none"; + if (self.get("signed_in")) { + return _.str.sprintf(_t("Last sign in: %s,<br />%s.<br />Click to sign out."), last_text, duration); + } else { + return _.str.sprintf(_t("Click to Sign In at %s."), current_text); + } + }, + html: true, + }); return this.check_attendance(); }, do_update_attendance: function () { @@ -39,6 +46,7 @@ openerp.hr_attendance = function (instance) { hr_employee.call('attendance_action_change', [ [self.employee.id] ]).done(function (result) { + self.last_sign = new Date(); self.set({"signed_in": ! self.get("signed_in")}); }); }, @@ -49,11 +57,12 @@ openerp.hr_attendance = function (instance) { var employee = new instance.web.DataSetSearch(self, 'hr.employee', self.session.user_context, [ ['user_id', '=', self.session.uid] ]); - return employee.read_slice(['id', 'name', 'state']).pipe(function (res) { + return employee.read_slice(['id', 'name', 'state', 'last_sign']).pipe(function (res) { if (_.isEmpty(res)) return; self.$el.show(); self.employee = res[0]; + self.last_sign = instance.web.str_to_datetime(self.employee.last_sign); self.set({"signed_in": self.employee.state !== "absent"}); }); }, diff --git a/addons/hr_attendance/static/src/xml/attendance.xml b/addons/hr_attendance/static/src/xml/attendance.xml index 6896086440f..3fd9bcf2798 100644 --- a/addons/hr_attendance/static/src/xml/attendance.xml +++ b/addons/hr_attendance/static/src/xml/attendance.xml @@ -1,6 +1,6 @@ <template> <t t-name="AttendanceSlider"> - <div class="oe_attendance_status oe_attendance_nosigned" title=" "> + <div class="oe_attendance_status oe_attendance_nosigned" data-tipsy="true"> <div class="oe_attendance_signin"></div> <div class="oe_attendance_signout"></div> </div> diff --git a/addons/hr_contract/hr_contract_view.xml b/addons/hr_contract/hr_contract_view.xml index 10620cb9a4b..92ae2524921 100644 --- a/addons/hr_contract/hr_contract_view.xml +++ b/addons/hr_contract/hr_contract_view.xml @@ -1,7 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> + + +<!-- Contracts Button on Employee Form --> + <act_window + context="{'search_default_employee_id': [active_id], 'default_employee_id': active_id}" + id="act_hr_employee_2_hr_contract" + name="Contracts" + res_model="hr.contract" + src_model="hr.employee" + groups="base.group_hr_manager"/> + <menuitem id="next_id_56" name="Contract" parent="hr.menu_hr_configuration" sequence="30" groups="base.group_no_one"/> <record id="hr_hr_employee_view_form2" model="ir.ui.view"> <field name="name">hr.hr.employee.view.form2</field> @@ -9,19 +20,20 @@ <field name="inherit_id" ref="hr.view_employee_form"/> <field name="arch" type="xml"> <data> - <xpath expr="//field[@name='parent_id']" position="before"> + <xpath expr="//div[@name='button_box']" position="inside"> + <button name="%(act_hr_employee_2_hr_contract)d" string="Contracts" type="action"/> + </xpath> + <xpath expr="//field[@name='coach_id']" position="after"> <field name="manager"/> </xpath> <xpath expr="//group[@name='active_group']" position="before"> - <group> + <group string="Contract"> + <field name="medic_exam" string="Medical Exam"/> <field name="vehicle"/> <field name="vehicle_distance"/> </group> </xpath> - <field name="active" position="before"> - <field name="medic_exam" string="Medical Exam"/> - </field> - <field name="birthday" position="before"> + <field name="marital" position="after"> <field name="children"/> </field> <field name="birthday" position="after"> @@ -177,15 +189,5 @@ <menuitem action="action_hr_contract_type" id="hr_menu_contract_type" parent="next_id_56" sequence="6" groups="base.group_no_one"/> <menuitem action="action_hr_contract" id="hr_menu_contract" parent="hr.menu_hr_main" name="Contracts" sequence="4" groups="base.group_hr_manager"/> - <!-- Contracts Button on Employee Form --> - - <act_window - context="{'search_default_employee_id': [active_id], 'default_employee_id': active_id}" - id="act_hr_employee_2_hr_contract" - name="Contracts" - res_model="hr.contract" - src_model="hr.employee" - groups="base.group_hr_manager"/> - </data> </openerp> diff --git a/addons/hr_contract/i18n/nb.po b/addons/hr_contract/i18n/nb.po new file mode 100644 index 00000000000..9d1886e3ed4 --- /dev/null +++ b/addons/hr_contract/i18n/nb.po @@ -0,0 +1,270 @@ +# 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-08 18:49+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:52+0000\n" +"X-Generator: Launchpad (build 15914)\n" + +#. module: hr_contract +#: field:hr.contract,wage:0 +msgid "Wage" +msgstr "Lønn" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Information" +msgstr "Informasjon" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Trial Period" +msgstr "Prøveperiode" + +#. module: hr_contract +#: field:hr.contract,trial_date_start:0 +msgid "Trial Start Date" +msgstr "Prøve Startdato" + +#. module: hr_contract +#: view:hr.employee:0 +msgid "Medical Examination" +msgstr "Legeundersøkelse" + +#. module: hr_contract +#: field:hr.employee,vehicle:0 +msgid "Company Vehicle" +msgstr "Selskapets Kjøretøy." + +#. module: hr_contract +#: view:hr.employee:0 +msgid "Miscellaneous" +msgstr "Diverse" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Current" +msgstr "Nåværende" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Group By..." +msgstr "Grupper etter ..." + +#. module: hr_contract +#: field:hr.contract,department_id:0 +msgid "Department" +msgstr "Avdeling" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Overpassed" +msgstr "Overpassert" + +#. module: hr_contract +#: view:hr.contract:0 +#: field:hr.contract,employee_id:0 +#: model:ir.model,name:hr_contract.model_hr_employee +msgid "Employee" +msgstr "Ansatt" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Search Contract" +msgstr "Søk Kontrakt" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Contracts in progress" +msgstr "Kontrakter i fremgang" + +#. module: hr_contract +#: field:hr.employee,vehicle_distance:0 +msgid "Home-Work Distance" +msgstr "Hjem-arbeid Avstand." + +#. module: hr_contract +#: view:hr.contract:0 +#: field:hr.employee,contract_ids:0 +#: model:ir.actions.act_window,name:hr_contract.act_hr_employee_2_hr_contract +#: model:ir.actions.act_window,name:hr_contract.action_hr_contract +#: model:ir.ui.menu,name:hr_contract.hr_menu_contract +msgid "Contracts" +msgstr "Kontrakter" + +#. module: hr_contract +#: view:hr.employee:0 +msgid "Personal Info" +msgstr "Personlig Info" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Contracts whose end date already passed" +msgstr "Kontrakter som sluttdato har allerede passert." + +#. module: hr_contract +#: help:hr.employee,contract_id:0 +msgid "Latest contract of the employee" +msgstr "Siste kontrakten av den ansatte" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Job" +msgstr "Jobb" + +#. module: hr_contract +#: view:hr.contract:0 +#: field:hr.contract,advantages:0 +msgid "Advantages" +msgstr "Fordeler" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Valid for" +msgstr "Gyldig for." + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Work Permit" +msgstr "Arbeidstillatelse" + +#. module: hr_contract +#: field:hr.employee,children:0 +msgid "Number of Children" +msgstr "Antall barn" + +#. module: hr_contract +#: model:ir.actions.act_window,name:hr_contract.action_hr_contract_type +#: model:ir.ui.menu,name:hr_contract.hr_menu_contract_type +msgid "Contract Types" +msgstr "Kontrakt typer." + +#. module: hr_contract +#: constraint:hr.employee:0 +msgid "Error ! You cannot create recursive Hierarchy of Employees." +msgstr "Feil! Du kan ikke opprette rekursiv Hierarki av ansatte." + +#. module: hr_contract +#: field:hr.contract,date_end:0 +msgid "End Date" +msgstr "Sluttdato" + +#. module: hr_contract +#: help:hr.contract,wage:0 +msgid "Basic Salary of the employee" +msgstr "Grunnlønn for den ansatte." + +#. module: hr_contract +#: field:hr.contract,name:0 +msgid "Contract Reference" +msgstr "Kontrakt referanse." + +#. module: hr_contract +#: help:hr.employee,vehicle_distance:0 +msgid "In kilometers" +msgstr "I kilometer." + +#. module: hr_contract +#: view:hr.contract:0 +#: field:hr.contract,notes:0 +msgid "Notes" +msgstr "Notater" + +#. module: hr_contract +#: field:hr.contract,permit_no:0 +msgid "Work Permit No" +msgstr "Arbeidstillatelse Ingen." + +#. module: hr_contract +#: view:hr.contract:0 +#: field:hr.employee,contract_id:0 +#: model:ir.model,name:hr_contract.model_hr_contract +#: model:ir.ui.menu,name:hr_contract.next_id_56 +msgid "Contract" +msgstr "Kontrakt" + +#. module: hr_contract +#: view:hr.contract:0 +#: field:hr.contract,type_id:0 +#: view:hr.contract.type:0 +#: field:hr.contract.type,name:0 +#: model:ir.model,name:hr_contract.model_hr_contract_type +msgid "Contract Type" +msgstr "Kontrakt type." + +#. module: hr_contract +#: view:hr.contract:0 +#: field:hr.contract,working_hours:0 +msgid "Working Schedule" +msgstr "Arbeidsplan" + +#. module: hr_contract +#: view:hr.employee:0 +msgid "Job Info" +msgstr "Jobb informasjon." + +#. module: hr_contract +#: field:hr.contract,visa_expire:0 +msgid "Visa Expire Date" +msgstr "Visa utløpsdato." + +#. module: hr_contract +#: field:hr.contract,job_id:0 +msgid "Job Title" +msgstr "Jobb Tittel" + +#. module: hr_contract +#: field:hr.employee,manager:0 +msgid "Is a Manager" +msgstr "Er en leder." + +#. module: hr_contract +#: field:hr.contract,date_start:0 +msgid "Start Date" +msgstr "Startdato" + +#. module: hr_contract +#: constraint:hr.contract:0 +msgid "Error! contract start-date must be lower then contract end-date." +msgstr "Feil! Kontrakten startdato må være lavere enn kontrakt sluttdato." + +#. module: hr_contract +#: field:hr.contract,visa_no:0 +msgid "Visa No" +msgstr "Visa Nei." + +#. module: hr_contract +#: field:hr.employee,place_of_birth:0 +msgid "Place of Birth" +msgstr "Fødested" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Duration" +msgstr "Varighet" + +#. module: hr_contract +#: field:hr.employee,medic_exam:0 +msgid "Medical Examination Date" +msgstr "Legeundersøkelse Dato" + +#. module: hr_contract +#: field:hr.contract,trial_date_end:0 +msgid "Trial End Date" +msgstr "Prøve Sluttdato ." + +#. module: hr_contract +#: view:hr.contract.type:0 +msgid "Search Contract Type" +msgstr "Søk Kontraktstype" diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml index 4f49b7ba516..8744567c597 100644 --- a/addons/hr_evaluation/hr_evaluation_view.xml +++ b/addons/hr_evaluation/hr_evaluation_view.xml @@ -128,14 +128,12 @@ <field name="model">hr.employee</field> <field name="inherit_id" ref="hr.view_employee_form"/> <field name="arch" type="xml"> - <page string="Personal Information" position="after"> - <page string="Appraisal" groups="base.group_hr_user"> - <group col="4"> - <field name="evaluation_plan_id" on_change="onchange_evaluation_plan_id(evaluation_plan_id, evaluation_date)"/> - <field name="evaluation_date"/> - </group> - </page> - </page> + <xpath expr="//group[@name='active_group']" position="before"> + <group string="Appraisals"> + <field name="evaluation_plan_id" on_change="onchange_evaluation_plan_id(evaluation_plan_id, evaluation_date)"/> + <field name="evaluation_date"/> + </group> + </xpath> </field> </record> diff --git a/addons/hr_expense/board_hr_expense_view.xml b/addons/hr_expense/board_hr_expense_view.xml index fe89a4afc7a..3f896a76fae 100644 --- a/addons/hr_expense/board_hr_expense_view.xml +++ b/addons/hr_expense/board_hr_expense_view.xml @@ -17,7 +17,7 @@ <field name="inherit_id" ref="hr.board_hr_form"/> <field name="arch" type="xml"> <xpath expr="/form/board/column[1]" position="inside"> - <action name="%(action_my_expense)d" string="My Expenses" creatable="true"/> + <action name="%(action_my_expense)d" string="My Expenses"/> </xpath> </field> </record> diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index 699c08bd636..5a2e0603b88 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -513,13 +513,17 @@ <field name="model">hr.employee</field> <field name="inherit_id" ref="hr.view_employee_form"/> <field name="arch" type="xml"> - <field name="active" position="before"> - <label for="remaining_leaves"/> - <div> - <field name="remaining_leaves" class="oe_inline"/> - <button name="%(act_hr_employee_holiday_request)d" string="Leaves" type="action" class="oe_inline oe_right"/> - </div> - </field> + <xpath expr="//group[@name='active_group']" position="before"> + <group string="Leaves"> + <label for="remaining_leaves"/> + <div> + <field name="remaining_leaves" class="oe_inline"/> + </div> + </group> + </xpath> + <xpath expr="//div[@name='button_box']" position="inside"> + <button name="%(act_hr_employee_holiday_request)d" string="Leaves" type="action"/> + </xpath> </field> </record> diff --git a/addons/hr_payroll_account/hr_payroll_account.py b/addons/hr_payroll_account/hr_payroll_account.py index 7156735636b..184f9a06867 100644 --- a/addons/hr_payroll_account/hr_payroll_account.py +++ b/addons/hr_payroll_account/hr_payroll_account.py @@ -218,6 +218,17 @@ class hr_payslip_run(osv.osv): 'journal_id': fields.many2one('account.journal', 'Expense Journal', states={'draft': [('readonly', False)]}, readonly=True, required=True), } + def _get_default_journal(self, cr, uid, context=None): + model_data = self.pool.get('ir.model.data') + res = model_data.search(cr, uid, [('name', '=', 'expenses_journal')]) + if res: + return model_data.browse(cr, uid, res[0]).res_id + return False + + _defaults = { + 'journal_id': _get_default_journal, + } + hr_payslip_run() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_payroll_account/i18n/nb.po b/addons/hr_payroll_account/i18n/nb.po new file mode 100644 index 00000000000..d1c0bf47a00 --- /dev/null +++ b/addons/hr_payroll_account/i18n/nb.po @@ -0,0 +1,141 @@ +# 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 19:55+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: hr_payroll_account +#: field:hr.payslip,move_id:0 +msgid "Accounting Entry" +msgstr "Regnskapsmessig oppføring" + +#. module: hr_payroll_account +#: field:hr.salary.rule,account_tax_id:0 +msgid "Tax Code" +msgstr "Skattekode" + +#. module: hr_payroll_account +#: field:hr.payslip,journal_id:0 +#: field:hr.payslip.run,journal_id:0 +msgid "Expense Journal" +msgstr "Bekostning Journal" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:157 +#: code:addons/hr_payroll_account/hr_payroll_account.py:173 +#, python-format +msgid "Adjustment Entry" +msgstr "Justering oppføring" + +#. module: hr_payroll_account +#: field:hr.contract,analytic_account_id:0 +#: field:hr.salary.rule,analytic_account_id:0 +msgid "Analytic Account" +msgstr "Analytisk konto" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_salary_rule +msgid "hr.salary.rule" +msgstr "hr.salary.rule" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "Lønnsslipp Batcher." + +#. module: hr_payroll_account +#: field:hr.contract,journal_id:0 +msgid "Salary Journal" +msgstr "lønn Journal" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_payslip +msgid "Pay Slip" +msgstr "Lønnslipp" + +#. module: hr_payroll_account +#: constraint:hr.payslip:0 +msgid "Payslip 'Date From' must be before 'Date To'." +msgstr "Lønnslipp \" Dato fra \" må være før \" Dato Til \"" + +#. module: hr_payroll_account +#: help:hr.payslip,period_id:0 +msgid "Keep empty to use the period of the validation(Payslip) date." +msgstr "Hold tom for å bruke tid på validering (lønnsslipp) dato." + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:171 +#, python-format +msgid "" +"The Expense Journal \"%s\" has not properly configured the Debit Account!" +msgstr "Bekostning Journal \"% s\" har ikke riktig konfigurert Debet konto!" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:155 +#, python-format +msgid "" +"The Expense Journal \"%s\" has not properly configured the Credit Account!" +msgstr "" +"Bekostning Journal \"% s\" har ikke riktig konfigurert kreditt-konto!" + +#. module: hr_payroll_account +#: field:hr.salary.rule,account_debit:0 +msgid "Debit Account" +msgstr "Debetkonto" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:102 +#, python-format +msgid "Payslip of %s" +msgstr "Lønnslipp av %s." + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_contract +msgid "Contract" +msgstr "Kontrakt" + +#. module: hr_payroll_account +#: constraint:hr.contract:0 +msgid "Error! contract start-date must be lower then contract end-date." +msgstr "Feil! Kontrakten startdato må være lavere enn kontrakt sluttdato." + +#. module: hr_payroll_account +#: field:hr.payslip,period_id:0 +msgid "Force Period" +msgstr "Kraft Periode." + +#. module: hr_payroll_account +#: field:hr.salary.rule,account_credit:0 +msgid "Credit Account" +msgstr "Kredittkonto" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_payslip_employees +msgid "Generate payslips for all selected employees" +msgstr "Generer lønnsslipper for alle utvalgte ansatte." + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:155 +#: code:addons/hr_payroll_account/hr_payroll_account.py:171 +#, python-format +msgid "Configuration Error!" +msgstr "Konfigurasjonsfeil!" + +#. module: hr_payroll_account +#: view:hr.contract:0 +#: view:hr.salary.rule:0 +msgid "Accounting" +msgstr "Regnskap" diff --git a/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py b/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py index a00ff97ef6b..7e3f4bbbe2b 100644 --- a/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py +++ b/addons/hr_payroll_account/wizard/hr_payroll_payslips_by_employees.py @@ -31,8 +31,9 @@ class hr_payslip_employees(osv.osv_memory): context = {} if context and context.get('active_id', False): run_data = run_pool.read(cr, uid, context['active_id'], ['journal_id']) - journal_id = run_data.get('journal_id', False)[0] - context.update({'journal_id': journal_id}) + journal_id = run_data.get('journal_id', False) + journal_id = journal_id and journal_id[0] or False + if journal_id: context.update({'journal_id': journal_id}) return super(hr_payslip_employees, self).compute_sheet(cr, uid, ids, context=context) hr_payslip_employees() diff --git a/addons/hr_recruitment/hr_recruitment_demo.yml b/addons/hr_recruitment/hr_recruitment_demo.yml index 59508b83c28..3f00c7e643b 100644 --- a/addons/hr_recruitment/hr_recruitment_demo.yml +++ b/addons/hr_recruitment/hr_recruitment_demo.yml @@ -52,6 +52,7 @@ partner_name: 'John Bruno' state: 'done' job_id: hr.job_developer + color: 5 stage_id: stage_job5 name: 'Marketing Job' - @@ -100,6 +101,9 @@ partner_name: 'David Armstrong' job_id: hr.job_developer stage_id: stage_job2 + color: 4 name: 'Advertisement' salary_expected: 11000.0 - +- + !record {model: hr.job, id: hr.job_developer}: + survey_id: hr_recruitment.survey_job_0 diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index d00fbc632be..acb8e06cbdb 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -115,13 +115,13 @@ <sheet> <div class="oe_right oe_button_box"> <button name="action_makeMeeting" type="object" - string="Schedule Interview" icon="gtk-index" help="Schedule interview with this applicant"/> + string="Schedule Meeting" help="Schedule interview with this applicant"/> <button name="%(survey.action_view_survey_question_message)d" type="action" - string="Start Interview" icon="gtk-execute" help="Answer related job question" + string="Start Interview" help="Answer related job question" context="{'survey_id': survey, 'response_id': [response], 'response_no':0 ,'active' : response, 'object' : 'hr.applicant'}" attrs="{'invisible':[('survey','=',False)]}"/> <button name="action_print_survey" type="object" - string="Print Interview" icon="gtk-print" help="Print interview report" + string="Print Interview" help="Print interview report" attrs="{'invisible':[('survey','=',False)]}"/> </div> <div class="oe_title"> @@ -208,28 +208,28 @@ <field name="arch" type="xml"> <search string="Search Jobs"> <field name="partner_name" filter_domain="['|','|',('name','ilike',self),('partner_name','ilike',self),('email_from','ilike',self)]" string="Subject / Applicant"/> - <filter icon="terp-mail-message-new" string="Inbox" help="Unread messages" name="message_unread" domain="[('message_unread','=',True)]"/> + <filter string="Inbox" help="Unread messages" name="message_unread" domain="[('message_unread','=',True)]"/> <separator/> - <filter icon="terp-document-new" string="New" domain="[('state','=','draft')]" help="All Initial Jobs"/> - <filter icon="terp-camera_test" string="In Progress" domain="[('state','=','open')]" help="Open Jobs"/> - <filter icon="terp-gtk-media-pause" string="Pending" domain="[('state','=','pending')]" help="Pending Jobs"/> + <filter string="New" domain="[('state','=','draft')]" help="All Initial Jobs"/> + <filter string="In Progress" domain="[('state','=','open')]" help="Open Jobs"/> + <filter string="Pending" domain="[('state','=','pending')]" help="Pending Jobs"/> <separator/> - <filter string="Unassigned Recruitments" domain="[('user_id','=',False)]" help="Unassigned Recruitments" icon="terp-personal-"/> + <filter string="Unassigned Recruitments" domain="[('user_id','=',False)]" help="Unassigned Recruitments"/> <separator/> - <filter icon="terp-gtk-jump-to-ltr" string="Next Actions" context="{'invisible_next_action':False, 'invisible_next_date':False}" + <filter string="Next Actions" context="{'invisible_next_action':False, 'invisible_next_date':False}" domain="[('date_action','<>',False)]" help="Filter and view on next actions and date"/> <field name="job_id"/> <field name="user_id"/> <group expand="0" string="Group By..."> - <filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> - <filter string="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id'}"/> - <filter string="Job" icon="terp-gtk-select-all" domain="[]" context="{'group_by':'job_id'}"/> - <filter string="Degree" icon="terp-gtk-select-all" domain="[]" context="{'group_by':'type_id'}"/> - <filter string="Availability" icon="terp-camera_test" domain="[]" context="{'group_by':'availability'}"/> - <filter string="Appreciation" icon="terp-face-plain" domain="[]" context="{'group_by':'priority'}"/> - <filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/> - <filter string="Source" icon="terp-face-plain" domain="[]" context="{'group_by':'source_id'}"/> - <filter string="Creation Date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" groups="base.group_no_one"/> + <filter string="Responsible" domain="[]" context="{'group_by':'user_id'}"/> + <filter string="Department" domain="[]" context="{'group_by':'department_id'}"/> + <filter string="Job" domain="[]" context="{'group_by':'job_id'}"/> + <filter string="Degree" domain="[]" context="{'group_by':'type_id'}"/> + <filter string="Availability" domain="[]" context="{'group_by':'availability'}"/> + <filter string="Appreciation" domain="[]" context="{'group_by':'priority'}"/> + <filter string="Stage" domain="[]" context="{'group_by':'stage_id'}"/> + <filter string="Source" domain="[]" context="{'group_by':'source_id'}"/> + <filter string="Creation Date" domain="[]" context="{'group_by':'create_date'}" groups="base.group_no_one"/> </group> </search> </field> @@ -339,7 +339,7 @@ <div groups="base.group_user"> <field name="survey_id" class="oe_inline"/> <button class="oe_inline" - string="Interview" icon="gtk-print" + string="Interview" name="action_print_survey" type="object" attrs="{'invisible':[('survey_id','=',False)]}"/> </div> diff --git a/addons/hr_timesheet/hr_timesheet_view.xml b/addons/hr_timesheet/hr_timesheet_view.xml index f4b3e437b27..43b677d7978 100644 --- a/addons/hr_timesheet/hr_timesheet_view.xml +++ b/addons/hr_timesheet/hr_timesheet_view.xml @@ -131,16 +131,12 @@ <field name="model">hr.employee</field> <field name="inherit_id" ref="hr.view_employee_form"/> <field name="arch" type="xml"> - <page string="Personal Information" position="after"> - <page string="Timesheets" groups="base.group_hr_user"> - <group> - <group col="2"> - <field name="product_id" domain="[('type','=','service')]"/> - <field name="journal_id"/> - </group> - </group> - </page> - </page> + <xpath expr="//group[@name='active_group']" position="before"> + <group string="Timesheets"> + <field name="product_id" domain="[('type','=','service')]"/> + <field name="journal_id"/> + </group> + </xpath> </field> </record> diff --git a/addons/import_base/i18n/nb.po b/addons/import_base/i18n/nb.po new file mode 100644 index 00000000000..62b30d04da6 --- /dev/null +++ b/addons/import_base/i18n/nb.po @@ -0,0 +1,105 @@ +# 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-08 19:39+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:52+0000\n" +"X-Generator: Launchpad (build 15914)\n" + +#. module: import_base +#: code:addons/import_base/import_framework.py:434 +#, python-format +msgid "Import failed due to an unexpected error" +msgstr "Import mislyktes på grunn av en uventet feil." + +#. module: import_base +#: code:addons/import_base/import_framework.py:461 +#, python-format +msgid "started at %s and finished at %s \n" +msgstr "Startet på% s og ferdig på% s \n" + +#. module: import_base +#: code:addons/import_base/import_framework.py:448 +#, python-format +msgid "Import of your data finished at %s" +msgstr "Import av dine data ferdig på% s" + +#. module: import_base +#: code:addons/import_base/import_framework.py:463 +#, python-format +msgid "" +"but failed, in consequence no data were imported to keep database " +"consistency \n" +" error : \n" +msgstr "" +"Men mislyktes, i følge ingen data ble importert for å holde databasen " +"konsistens\n" +" feil: \n" + +#. module: import_base +#: code:addons/import_base/import_framework.py:477 +#, python-format +msgid "" +"The import of data \n" +" instance name : %s \n" +msgstr "" +"Import av data\n" +" Eksempel navn:% s \n" + +#. module: import_base +#: code:addons/import_base/import_framework.py:470 +#, python-format +msgid "%s has been successfully imported from %s %s, %s \n" +msgstr "% s har blitt importert fra% s% s,% s \n" + +#. module: import_base +#: code:addons/import_base/import_framework.py:447 +#, python-format +msgid "Data Import failed at %s due to an unexpected error" +msgstr "Dataimport mislyktes ved% s på grunn av en uventet feil." + +#. module: import_base +#: code:addons/import_base/import_framework.py:436 +#, python-format +msgid "Import finished, notification email sended" +msgstr "Import ferdig, e-postmelding sendt." + +#. module: import_base +#: code:addons/import_base/import_framework.py:190 +#, python-format +msgid "%s is not a valid model name" +msgstr "% s er ikke en gyldig modellnavn." + +#. module: import_base +#: model:ir.ui.menu,name:import_base.menu_import_crm +msgid "Import" +msgstr "Import" + +#. module: import_base +#: code:addons/import_base/import_framework.py:467 +#, python-format +msgid "with no warning" +msgstr "Uten advarsel." + +#. module: import_base +#: code:addons/import_base/import_framework.py:469 +#, python-format +msgid "with warning : %s" +msgstr "Med advarsel :%s" + +#. module: import_base +#: code:addons/import_base/import_framework.py:191 +#, python-format +msgid " fields imported : " +msgstr " Felt importert: " diff --git a/addons/import_google/i18n/nb.po b/addons/import_google/i18n/nb.po new file mode 100644 index 00000000000..a6414341f8f --- /dev/null +++ b/addons/import_google/i18n/nb.po @@ -0,0 +1,226 @@ +# 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-09 16:36+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-10 04:41+0000\n" +"X-Generator: Launchpad (build 15924)\n" + +#. module: import_google +#: help:synchronize.google.import,group_name:0 +msgid "Choose which group to import, By default it takes all." +msgstr "Velg hvilken gruppe du vil importere, standard tar alt." + +#. module: import_google +#: view:synchronize.google.import:0 +msgid "Import Google Calendar Events" +msgstr "Importer Google Kalender Hendelser." + +#. module: import_google +#: view:synchronize.google.import:0 +msgid "_Import Events" +msgstr "_Importer hendelser." + +#. module: import_google +#: code:addons/import_google/wizard/import_google_data.py:71 +#, python-format +msgid "" +"No Google Username or password Defined for user.\n" +"Please define in user view" +msgstr "" +"Ingen Google-brukernavn eller passord definert for brukeren.\n" +"Vennligst angi i brukerens visning." + +#. module: import_google +#: code:addons/import_google/wizard/import_google_data.py:127 +#, python-format +msgid "" +"Invalid login detail !\n" +" Specify Username/Password." +msgstr "" +"Ugyldig pålogging detalj!\n" +" Angi brukernavn / passord." + +#. module: import_google +#: field:synchronize.google.import,supplier:0 +msgid "Supplier" +msgstr "Leverandør" + +#. module: import_google +#: view:synchronize.google.import:0 +msgid "Import Options" +msgstr "Alternativer for import" + +#. module: import_google +#: field:synchronize.google.import,group_name:0 +msgid "Group Name" +msgstr "Gruppe Navn" + +#. module: import_google +#: model:ir.model,name:import_google.model_crm_case_categ +msgid "Category of Case" +msgstr "Kategori for hendelse" + +#. module: import_google +#: model:ir.actions.act_window,name:import_google.act_google_login_contact_form +#: model:ir.ui.menu,name:import_google.menu_sync_contact +msgid "Import Google Contacts" +msgstr "Importer Google kontakter." + +#. module: import_google +#: view:google.import.message:0 +msgid "Import Google Data" +msgstr "Importer Google data." + +#. module: import_google +#: view:crm.meeting:0 +msgid "Meeting Type" +msgstr "Møtetype" + +#. module: import_google +#: code:addons/import_google/wizard/import_google.py:38 +#: code:addons/import_google/wizard/import_google_data.py:28 +#, python-format +msgid "" +"Please install gdata-python-client from http://code.google.com/p/gdata-" +"python-client/downloads/list" +msgstr "" +"Vennligst Installer gdata-python-client from http://code.google.com/p/gdata-" +"python-client/downloads/list" + +#. module: import_google +#: model:ir.model,name:import_google.model_google_login +msgid "Google Contact" +msgstr "Google kontakt" + +#. module: import_google +#: view:synchronize.google.import:0 +msgid "Import contacts from a google account" +msgstr "Importer kontakter fra en Google-konto" + +#. module: import_google +#: code:addons/import_google/wizard/import_google_data.py:133 +#, python-format +msgid "Please specify correct user and password !" +msgstr "Vennligst oppgi riktig bruker og passord!" + +#. module: import_google +#: field:synchronize.google.import,customer:0 +msgid "Customer" +msgstr "Kunde" + +#. module: import_google +#: view:synchronize.google.import:0 +msgid "_Cancel" +msgstr "_Avbryt" + +#. module: import_google +#: model:ir.model,name:import_google.model_synchronize_google_import +msgid "synchronize.google.import" +msgstr "Synkronisere.google.import" + +#. module: import_google +#: view:synchronize.google.import:0 +msgid "_Import Contacts" +msgstr "_Importer kontakter." + +#. module: import_google +#: model:ir.actions.act_window,name:import_google.act_google_login_form +#: model:ir.ui.menu,name:import_google.menu_sync_calendar +msgid "Import Google Calendar" +msgstr "Importer Google kalender." + +#. module: import_google +#: code:addons/import_google/wizard/import_google_data.py:50 +#, python-format +msgid "Import google" +msgstr "Importer Google." + +#. module: import_google +#: code:addons/import_google/wizard/import_google_data.py:127 +#: code:addons/import_google/wizard/import_google_data.py:133 +#, python-format +msgid "Error" +msgstr "Feil" + +#. module: import_google +#: code:addons/import_google/wizard/import_google_data.py:71 +#, python-format +msgid "Warning !" +msgstr "Advarsel !" + +#. module: import_google +#: field:synchronize.google.import,create_partner:0 +msgid "Options" +msgstr "Valg" + +#. module: import_google +#: view:google.import.message:0 +msgid "_Ok" +msgstr "_Ok" + +#. module: import_google +#: code:addons/import_google/wizard/import_google.py:38 +#: code:addons/import_google/wizard/import_google_data.py:28 +#, python-format +msgid "Google Contacts Import Error!" +msgstr "Google kontakter Import Feil!" + +#. module: import_google +#: model:ir.model,name:import_google.model_google_import_message +msgid "Import Message" +msgstr "Importer melding." + +#. module: import_google +#: field:synchronize.google.import,calendar_name:0 +msgid "Calendar Name" +msgstr "Kalendernavn" + +#. module: import_google +#: help:synchronize.google.import,supplier:0 +msgid "Check this box to set newly created partner as Supplier." +msgstr "Kryss av for å sette nyopprettede partner som leverandør." + +#. module: import_google +#: selection:synchronize.google.import,create_partner:0 +msgid "Import only address" +msgstr "Importer bare adresse." + +#. module: import_google +#: field:crm.case.categ,user_id:0 +msgid "User" +msgstr "Bruker" + +#. module: import_google +#: view:synchronize.google.import:0 +msgid "Partner Status for this Group:" +msgstr "" + +#. module: import_google +#: field:google.import.message,name:0 +msgid "Message" +msgstr "Melding" + +#. module: import_google +#: selection:synchronize.google.import,create_partner:0 +msgid "Create partner for each contact" +msgstr "Opprett partner for hver kontakt." + +#. module: import_google +#: help:synchronize.google.import,customer:0 +msgid "Check this box to set newly created partner as Customer." +msgstr "Kryss av for å sette nyopprettede partner som Kunden." + +#~ msgid "Partner status for this group:" +#~ msgstr "Partner status for denne gruppen." diff --git a/addons/l10n_be_hr_payroll/l10n_be_hr_payroll_view.xml b/addons/l10n_be_hr_payroll/l10n_be_hr_payroll_view.xml index 893a977e62c..b1951a2a032 100644 --- a/addons/l10n_be_hr_payroll/l10n_be_hr_payroll_view.xml +++ b/addons/l10n_be_hr_payroll/l10n_be_hr_payroll_view.xml @@ -38,11 +38,11 @@ <record id="hr_employee_form__l10n_be_view_for" model="ir.ui.view"> <field name="name">hr.employee.inherit.form</field> <field name="model">hr.employee</field> - <field name="inherit_id" ref="hr.view_employee_form"/> + <field name="inherit_id" ref="hr_contract.hr_hr_employee_view_form2"/> <field name="priority">30</field> <field name="arch" type="xml"> <data> - <xpath expr="//field[@name='gender']" position="before"> + <xpath expr="//field[@name='vehicle_distance']" position="after"> <field name="resident_bool" eval="False"/> </xpath> <xpath expr="//field[@name='marital']" position="after"> diff --git a/addons/l10n_be_invoice_bba/account_invoice_view.xml b/addons/l10n_be_invoice_bba/account_invoice_view.xml index c344f1e9b6f..c4c53261f57 100644 --- a/addons/l10n_be_invoice_bba/account_invoice_view.xml +++ b/addons/l10n_be_invoice_bba/account_invoice_view.xml @@ -8,15 +8,13 @@ <field name="model">account.invoice</field> <field name="inherit_id" ref="account.invoice_form"/> <field name="arch" type="xml"> - <field name="payment_term" position="after"> - <group col="4" colspan="2"> - <field name="reference_type" nolabel="1" size="0" attrs="{'readonly':[('state','!=','draft')]}" - on_change="generate_bbacomm(type,reference_type, partner_id,reference, context)" colspan="1"/> - <field name="reference" nolabel="1" colspan="3" attrs="{'readonly':[('state','!=','draft')]}"/> - </group> + <field name="date_due" position="after"> + <field name="reference_type" nolabel="1" attrs="{'readonly':[('state','!=','draft')]}" + on_change="generate_bbacomm(type,reference_type, partner_id,reference, context)"/> + <field name="reference" nolabel="1" attrs="{'readonly':[('state','!=','draft')]}"/> </field> </field> </record> - + </data> </openerp> diff --git a/addons/l10n_ca/account_chart_en.xml b/addons/l10n_ca/account_chart_en.xml index 0d67e081d08..acb4fa4802b 100644 --- a/addons/l10n_ca/account_chart_en.xml +++ b/addons/l10n_ca/account_chart_en.xml @@ -6,7 +6,6 @@ <record id="chart0_en" model="account.account.template"> <field name="code">0</field> <field name="name">Account Chart CA EN</field> - <field eval="0" name="parent_id"/> <field name="type">view</field> <field name="user_type" ref="account.data_account_type_view"/> </record> diff --git a/addons/l10n_ca/i18n/nb.po b/addons/l10n_ca/i18n/nb.po new file mode 100644 index 00000000000..47276cdded2 --- /dev/null +++ b/addons/l10n_ca/i18n/nb.po @@ -0,0 +1,128 @@ +# 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: 2010-08-02 21:08+0000\n" +"PO-Revision-Date: 2012-09-09 16:43+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-10 04:41+0000\n" +"X-Generator: Launchpad (build 15924)\n" + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.account_type_receivable +msgid "Receivable" +msgstr "Fordring" + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.acct_type_asset_view +msgid "Asset View" +msgstr "Eiendel Vis" + +#. module: l10n_ca +#: model:ir.module.module,description:l10n_ca.module_meta_information +msgid "" +"This is the module to manage the canadian accounting chart in OpenERP." +msgstr "" +"Dette er modulen for å administrere kanadiske regnskap diagrammet i OpenERP." + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.acct_type_expense_view +msgid "Expense View" +msgstr "Kostnad Vis" + +#. module: l10n_ca +#: constraint:account.account.template:0 +msgid "Error ! You can not create recursive account templates." +msgstr "Feil ! Du kan ikke opprette rekursive konto maler." + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.acct_type_income_view +msgid "Income View" +msgstr "Inntekt Vis" + +#. module: l10n_ca +#: model:ir.module.module,shortdesc:l10n_ca.module_meta_information +msgid "Canada - Chart of Accounts" +msgstr "Canada - Kontoplan" + +#. module: l10n_ca +#: constraint:account.account.type:0 +msgid "Error ! You can not create recursive types." +msgstr "Feil ! Du kan ikke opprette rekursive typer." + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.account_type_tax +msgid "Tax" +msgstr "Skatt" + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.account_type_cash +msgid "Cash" +msgstr "Kontant" + +#. module: l10n_ca +#: model:ir.actions.todo,note:l10n_ca.config_call_account_template_ca +msgid "" +"Generate Chart of Accounts from a Chart Template. You will be asked to pass " +"the name of the company, the chart template to follow, the no. of digits to " +"generate the code for your accounts and Bank account, currency to create " +"Journals. Thus,the pure copy of chart Template is generated.\n" +"\tThis is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" +"Generere Kontoplan fra en diagrammal. Du vil bli bedt om å passere navnet på " +"selskapet, diagrammal til følge, nei. sifre som skal generere koden for " +"kontoene og bankkonto, valuta å skape Journals. Dermed er den rene kopi av " +"diagrammal generert.\n" +"\t Dette er den samme veiviser som går fra økonomistyring / konfigurasjon / " +"finansiell Regnskap / finansregnskapet / Generer Kontoplan fra en diagrammal." + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.account_type_payable +msgid "Payable" +msgstr "Utgift" + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.account_type_asset +msgid "Asset" +msgstr "Eiendel" + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.account_type_equity +msgid "Equity" +msgstr "Egenkapital" + +#. module: l10n_ca +#: constraint:account.tax.code.template:0 +msgid "Error ! You can not create recursive Tax Codes." +msgstr "Feil ! Du kan ikke opprette rekursive skatte koder." + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.acct_type_liability_view +msgid "Liability View" +msgstr "Ansvar Vis." + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.account_type_expense +msgid "Expense" +msgstr "Utgift" + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.account_type_income +msgid "Income" +msgstr "Inntekt" + +#. module: l10n_ca +#: model:account.account.type,name:l10n_ca.account_type_view +msgid "View" +msgstr "Vis" diff --git a/addons/l10n_cn/i18n/nb.po b/addons/l10n_cn/i18n/nb.po new file mode 100644 index 00000000000..cafcf30d8e8 --- /dev/null +++ b/addons/l10n_cn/i18n/nb.po @@ -0,0 +1,66 @@ +# 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: 2011-12-23 09:56+0000\n" +"PO-Revision-Date: 2012-09-08 19: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-09 04:52+0000\n" +"X-Generator: Launchpad (build 15914)\n" + +#. module: l10n_cn +#: model:account.account.type,name:l10n_cn.user_type_profit_and_loss +msgid "损益类" +msgstr "Gevinst eller tap kategori." + +#. module: l10n_cn +#: model:account.account.type,name:l10n_cn.user_type_all +msgid "所有科目" +msgstr "Alle fag." + +#. module: l10n_cn +#: model:account.account.type,name:l10n_cn.user_type_equity +msgid "所有者权益类" +msgstr "Eiernes egenkapital." + +#. module: l10n_cn +#: model:ir.actions.todo,note:l10n_cn.config_call_account_template_cn_chart +msgid "" +"Generate Chart of Accounts from a Chart Template. You will be asked to pass " +"the name of the company, the chart template to follow, the no. of digits to " +"generate the code for your accounts and Bank account, currency to create " +"Journals. Thus,the pure copy of chart Template is generated.\n" +"\tThis is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" +"Generere Kontoplan fra en diagrammal. Du vil bli bedt om å passere navnet på " +"selskapet, diagrammal til følge, nei. sifre som skal generere koden for " +"kontoene og bankkonto, valuta å skape Journals. Dermed er den rene kopi av " +"diagrammal generert.\n" +"\t Dette er den samme veiviser som går fra økonomistyring / konfigurasjon / " +"finansiell Regnskap / finansregnskapet / Generer Kontoplan fra en diagrammal." + +#. module: l10n_cn +#: model:account.account.type,name:l10n_cn.user_type_debt +msgid "负债类" +msgstr "Gjeld klasse." + +#. module: l10n_cn +#: model:account.account.type,name:l10n_cn.user_type_cost +msgid "成本类" +msgstr "Kostnaden for klassen" + +#. module: l10n_cn +#: model:account.account.type,name:l10n_cn.user_type_capital +msgid "资产类" +msgstr "Aktivaklasser" diff --git a/addons/l10n_de/i18n/nb.po b/addons/l10n_de/i18n/nb.po new file mode 100644 index 00000000000..b8ba51a6810 --- /dev/null +++ b/addons/l10n_de/i18n/nb.po @@ -0,0 +1,66 @@ +# 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: 2010-12-15 15:05+0000\n" +"PO-Revision-Date: 2012-09-08 19:47+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:52+0000\n" +"X-Generator: Launchpad (build 15914)\n" + +#. module: l10n_de +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_non_eu_sale_skr03 +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_non_eu_sale_skr04 +msgid "Kunde Ausland" +msgstr "Kunde Ausland" + +#. module: l10n_de +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_eu_no_id_sale_skr03 +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_eu_no_id_sale_skr04 +msgid "Kunde EU (ohne USt-ID)" +msgstr "Kunde EU (ohne USt-ID)" + +#. module: l10n_de +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_non_eu_purchase_skr03 +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_non_eu_purchase_skr04 +msgid "Lieferant Ausland" +msgstr "" + +#. module: l10n_de +#: model:ir.module.module,shortdesc:l10n_de.module_meta_information +msgid "Deutschland - SKR03 and SKR04" +msgstr "" + +#. module: l10n_de +#: model:ir.module.module,description:l10n_de.module_meta_information +msgid "" +"Dieses Modul beinhaltet einen deutschen Kontenrahmen basierend auf dem " +"SKR03." +msgstr "" + +#. module: l10n_de +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_eu_vat_id_purchase_skr03 +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_eu_vat_id_purchase_skr04 +msgid "Lieferant EU Unternehmen (mit USt-ID)" +msgstr "" + +#. module: l10n_de +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_eu_no_id_purchase_skr03 +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_eu_no_id_purchase_skr04 +msgid "Lieferant EU (ohne Ust-ID)" +msgstr "" + +#. module: l10n_de +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_eu_vat_id_sale_skr03 +#: model:account.fiscal.position.template,name:l10n_de.fiscal_position_eu_vat_id_sale_skr04 +msgid "Kunde EU Unternehmen (mit USt-ID)" +msgstr "" diff --git a/addons/l10n_gr/account_chart.xml b/addons/l10n_gr/account_chart.xml index 0ad5579d867..950d9e7b09c 100644 --- a/addons/l10n_gr/account_chart.xml +++ b/addons/l10n_gr/account_chart.xml @@ -7,7 +7,6 @@ <record id="chartgr_0" model="account.account.template"> <field name="code">0</field> <field name="name">Γενικό Λογιστικό Σχέδιο</field> - <!--<field eval="0" name="parent_id"/> --> <field name="type">view</field> <field name="user_type" ref="account_type_view"/> </record> diff --git a/addons/l10n_gt/account_chart.xml b/addons/l10n_gt/account_chart.xml index ffb4177d743..0f9aecfb423 100644 --- a/addons/l10n_gt/account_chart.xml +++ b/addons/l10n_gt/account_chart.xml @@ -7,7 +7,6 @@ <record id="plan_raiz" model="account.account.template"> <field name="code">-</field> <field name="name">Plan contable de Guatemala (sencillo)</field> - <field eval="0" name="parent_id"/> <field name="type">view</field> <field name="user_type" ref="cuenta_vista"/> </record> diff --git a/addons/l10n_hn/account_chart.xml b/addons/l10n_hn/account_chart.xml index 7bd17b0e82d..228c60ef4dc 100644 --- a/addons/l10n_hn/account_chart.xml +++ b/addons/l10n_hn/account_chart.xml @@ -7,7 +7,6 @@ <record id="plan_raiz" model="account.account.template"> <field name="code">-</field> <field name="name">Plan contable de Honduras (sencillo)</field> - <field eval="0" name="parent_id"/> <field name="type">view</field> <field name="user_type" ref="cuenta_vista"/> </record> diff --git a/addons/l10n_in/l10n_in_private_chart.xml b/addons/l10n_in/l10n_in_private_chart.xml index db11d0638c8..f38f95750cf 100644 --- a/addons/l10n_in/l10n_in_private_chart.xml +++ b/addons/l10n_in/l10n_in_private_chart.xml @@ -8,7 +8,6 @@ <field name="name">Partnership/Private Firm Chart of Account</field> <field name="code">0</field> <field name="type">view</field> - <field eval="0" name="parent_id"/> <field name="user_type" ref="account.data_account_type_view"/> <field name="reconcile" eval="False"/> </record> @@ -520,4 +519,4 @@ </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/l10n_in/l10n_in_public_chart.xml b/addons/l10n_in/l10n_in_public_chart.xml index 2c2dda0dd9d..4a4098d56c9 100644 --- a/addons/l10n_in/l10n_in_public_chart.xml +++ b/addons/l10n_in/l10n_in_public_chart.xml @@ -9,7 +9,6 @@ <field name="name">Public Firm Chart of Account</field> <field name="code">0</field> <field name="type">view</field> - <field eval="0" name="parent_id"/> <field name="user_type" ref="account.data_account_type_view"/> <field name="reconcile" eval="False"/> </record> @@ -673,4 +672,4 @@ </record> </data> -</openerp>
\ No newline at end of file +</openerp> diff --git a/addons/l10n_in_hr_payroll/__init__.py b/addons/l10n_in_hr_payroll/__init__.py new file mode 100644 index 00000000000..9631ccf0317 --- /dev/null +++ b/addons/l10n_in_hr_payroll/__init__.py @@ -0,0 +1,26 @@ +#-*- coding:utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import l10n_in_hr_payroll +import report +import wizard + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/__openerp__.py b/addons/l10n_in_hr_payroll/__openerp__.py new file mode 100644 index 00000000000..6d891c7a08e --- /dev/null +++ b/addons/l10n_in_hr_payroll/__openerp__.py @@ -0,0 +1,68 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## +{ + 'name': 'Indian Payroll', + 'category': 'Localization', + 'init_xml': [], + 'author': 'OpenERP SA', + 'website':'http://www.openerp.com', + 'depends': ['hr_payroll'], + 'version': '1.0', + 'description': """ +Indian Payroll Salary Rules. +============================ + + -Configuration of hr_payroll for India localization + -All main contributions rules for India payslip. + * New payslip report + * Employee Contracts + * Allow to configure Basic / Gross / Net Salary + * Employee PaySlip + * Allowance / Deduction + * Integrated with Holiday Management + * Medical Allowance, Travel Allowance, Child Allowance, ... + - Payroll Advice and Report + - Yearly Salary by Head and Yearly Salary by Employee Report + """, + 'active': False, + 'update_xml': [ + 'l10n_in_hr_payroll_view.xml', + 'data/l10n_in_hr_payroll_data.xml', + 'data/hr.salary.rule.csv', + 'security/ir.model.access.csv', + 'l10n_in_hr_payroll_report.xml', + 'l10n_in_hr_payroll_sequence.xml', + 'wizard/hr_salary_employee_bymonth_view.xml', + 'wizard/hr_yearly_salary_detail_view.xml', + 'report/payment_advice_report_view.xml', + 'report/payslip_report_view.xml', + + ], + 'test': [ + 'test/payment_advice.yml', + 'test/payment_advice_batch.yml' + ], + + 'demo_xml': ['l10n_in_hr_payroll_demo.xml'], + 'installable': True +} + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_in_hr_payroll/data/hr.salary.rule.csv b/addons/l10n_in_hr_payroll/data/hr.salary.rule.csv new file mode 100644 index 00000000000..2fe1ba739f4 --- /dev/null +++ b/addons/l10n_in_hr_payroll/data/hr.salary.rule.csv @@ -0,0 +1,5 @@ +"id","amount_select","condition_range_min","condition_range_max","amount_percentage","amount_fix","name","category_id","sequence","code","parent_rule_id/id","condition_select","condition_range","amount_percentage_base" +1,"fix",1,1,,100,"Education Allowance For One Child","Allowance",23,"CHEAONE","hr_payroll_rule_child1","range","employee.children", +2,"fix",2,10,,200,"Education Allowance For Two Child","Allowance",24,"CHEATWO","hr_payroll_rule_child1","range","employee.children", +3,"fix",1,1,,300,"Child Hostel Allowance For One Child","Allowance",26,"CHOONE","hr_payroll_rule_child2","range","employee.children", +4,"fix",2,10,,600,"Child Hostel Allowance For Two Child","Allowance",27,"CHOTWO","hr_payroll_rule_child2","range","employee.children", diff --git a/addons/l10n_in_hr_payroll/data/l10n_in_hr_payroll_data.xml b/addons/l10n_in_hr_payroll/data/l10n_in_hr_payroll_data.xml new file mode 100644 index 00000000000..8c6449e6336 --- /dev/null +++ b/addons/l10n_in_hr_payroll/data/l10n_in_hr_payroll_data.xml @@ -0,0 +1,584 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <!-- Contribution Register --> + + <record id="hr_houserent_allowance_register" model="hr.contribution.register"> + <field name="name">Register for House Rent Allowance</field> + </record> + + <record id="hr_register_provident_fund" model="hr.contribution.register"> + <field name="name">Register for Provident Fund</field> + </record> + + <record id="hr_professional_tax_deduction_register" model="hr.contribution.register"> + <field name="name">Register for Professional Tax</field> + </record> + + <record id="hr_food_coupen_register" model="hr.contribution.register"> + <field name="name">Register for Food Coupen</field> + </record> + + <record id="hr_tds_register" model="hr.contribution.register"> + <field name="name">Register for TDS</field> + </record> + + <record id="hr_nps_contribution_register" model="hr.contribution.register"> + <field name="name">Register for NPS Contribution</field> + </record> + + <record id="hr_vpf_contribution_register" model="hr.contribution.register"> + <field name="name">Register for Voluntarily Provident Fund</field> + </record> + + <record id="hr_company_transport_register" model="hr.contribution.register"> + <field name="name">Register for Company Provided Transport Deduction</field> + </record> + + <record id="hr_labour_Welfare_fund_register" model="hr.contribution.register"> + <field name="name">Register for State Labour Welfare Fund Deduction</field> + </record> + + <record id="hr_group_term_insurance_register" model="hr.contribution.register"> + <field name="name">Register for Company Provided Group Term Insurance Deduction</field> + </record> + + <record id="hr_leave_availed_register" model="hr.contribution.register"> + <field name="name">Register for Leave Availed Deduction</field> + </record> + + <record id="hr_medical_insurance_register" model="hr.contribution.register"> + <field name="name">Register for Company Provided Medical Insurance Deduction</field> + </record> + + <record id="hr_other_deduction_register" model="hr.contribution.register"> + <field name="name">Register for Other Deduction from Employer</field> + </record> + <!-- Hr Salary Rules for allowance--> + + <record id="hr_salary_rule_da" model="hr.salary.rule"> + <field name="code">DA</field> + <field name="name">Dearness Allowance</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">percentage</field> + <field name="amount_percentage_base">contract.wage</field> + <field name="amount_percentage" eval="50"/> + <field name="sequence" eval="13"/> + <field name="note">Dearness allowance (D.A.) is part of a person's salary. It is calculated as a percent of the basic salary. This amount is then added to the basic salary along with house rent allowance to get the total salary. Or you can say that The Dearness Allowance is a part of the total compensation a person receives for having performed his or her job.</field> + </record> + + <record id="hr_salary_rule_houserentallowancemetro_nonmetro" model="hr.salary.rule"> + <field name="code">HRAMN</field> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = (payslip.company_id.dearness_allowance and +((contract.wage + DA) * contract.house_rent_allowance_metro_nonmetro / 100) +or (contract.wage * contract.house_rent_allowance_metro_nonmetro / 100))</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="name">House Rent Allowance</field> + <field name="register_id" ref="hr_houserent_allowance_register"/> + <field name="sequence" eval="51"/> + <field name="note">HRA is an allowance given by the employer to the employee for taking care of his rental or accommodation expenses.</field> + </record> + + <record id="hr_salary_trans_allownce" model="hr.salary.rule"> + <field name="code">TCA</field> + <field name="name">Transport/Conveyance Allownace</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">fix</field> + <field eval="800.0" name="amount_fix"/> + <field name="sequence" eval="14"/> + <field name="note">A conveyance allowance refers to an amount of money reimbursed to someone for the operation of a vehicle or the riding of a vehicle. The allowance is typically a designated amount or percentage of total transportation expenses that is referenced in a country's tax laws or code. Organizations and private or public businesses may also offer a conveyance allowance in addition to reimbursing employees or members for transportation expenses. In this instance, the conveyance allowance may identify an unusual transport occurrence that may not be covered by a designated travel expense report such as travel to a specific job site that requires a daily bus or taxi ride.</field> + </record> + + <record id="hr_salary_rule_special" model="hr.salary.rule"> + <field name="code">SA</field> + <field name="name">Grade/Special/Management/Supplementary Allowance</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="condition_select">python</field> + <field name="condition_python">result = bool(contract.supplementary_allowance)</field> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = contract.supplementary_allowance</field> + <field name="sequence" eval="20"/> + <field name="note">This allowance is normally given as an additional benefit to employees and is fully taxable.</field> + </record> + + <record id="hr_payroll_rule_child1" model="hr.salary.rule"> + <field name="code">CHEA</field> + <field name="name">Child Education Allowance</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="condition_select">python</field> + <field name="condition_python">result = bool(employee.children)</field> + <field name="amount_select">fix</field> + <field name="sequence" eval="18"/> + <field name="note">Per school going child 1200 per annum is non-taxable.Maximum for 2 children, so max 2400 per annum becomes non-taxable.</field> + </record> + + <record id="hr_payroll_rule_child2" model="hr.salary.rule"> + <field name="code">CHEAH</field> + <field name="name">Child Hostel Allowance</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="condition_select">python</field> + <field name="condition_python">result = bool(employee.children)</field> + <field name="amount_select">fix</field> + <field name="note">In case the children are in hostel, the exemption available for child.</field> + <field name="sequence" eval="19"/> + </record> + + <record id="hr_payroll_rule_city1" model="hr.salary.rule"> + <field name="code">CBDA</field> + <field name="name">City Compensatory Allowance</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="condition_select">none</field> + <field name="sequence" eval="21"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = (payslip.company_id.dearness_allowance and ((contract.wage + DA) * 0.10) +or (contract.wage * 0.10))</field> + <field name="note">This allowance is paid to Employees who are posted in big cities. The purpose is to compensate the high cost of living in cities like Mumbai, Delhi, etc. However it is Fully Taxable.</field> + </record> + + <record id="hr_payroll_rule_metrocity" model="hr.salary.rule"> + <field name="code">CMETRO</field> + <field name="name">City Allowance for Metro city</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="condition_select">none</field> + <field name="sequence" eval="22"/> + <field name="amount_select">fix</field> + <field name="amount_fix">850.0</field> + </record> + + <record id="hr_payroll_rule_nonmetrocity" model="hr.salary.rule"> + <field name="code">CNMETRO</field> + <field name="name">City Allowance for Non Metro city</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="condition_select">none</field> + <field name="sequence" eval="25"/> + <field name="amount_select">fix</field> + <field name="amount_fix">800.0</field> + </record> + + <record id="hr_salary_rule_arrears" model="hr.salary.rule"> + <field name="code">ARRE</field> + <field name="name">Arrears</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = inputs.ARS.amount</field> + <field eval="0.0" name="amount_fix"/> + <field name="sequence" eval="28"/> + <field name="note">Generally arrears are fully taxable, but employee may claim exemption u/s 89(1). +One would need to compute income tax on the arrears if it would have been received in actual year. +Now difference of income tax between payment year and actual year would be allowed for deduction.</field> + </record> + + <record id="hr_salary_rule_lta" model="hr.salary.rule"> + <field name="code">LTA</field> + <field name="name">Leave Travel Allowance</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">percentage</field> + <field name="amount_percentage_base">contract.wage</field> + <field name="amount_percentage" eval="8.33"/> + <field name="sequence" eval="29"/> + <field name="note">As per Income tax rules of India, if transport bills for LTA are not provided,the amount will be taxed. E.g. If an employee has LTA allowance as Rs 50,000 in his CTC(cost to company),and he provides proofs of Rs 40,000 (boarding pass,air tickets, taxi vouchers) then income tax will be deducted for rest of the Rs 10,000. Does not matter whats the amount of LTA in an employee’s package, income tax laws only permits domestic air tickets only for LTA claim.</field> + </record> + + <record id="hr_salary_rule_le" model="hr.salary.rule"> + <field name="code">LE</field> + <field name="name">Leave Encashment</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="condition_select">none</field> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = inputs.LE.amount</field> + <field name="sequence" eval="30"/> + <field name="note">Payment by way of leave encashment received by Central and State Govt.employees at the time of retirement in respect of the period of earned leave at credit is fully exempt. In case of other employees, the exemption is to be limited to minimum of all below: + 1.The actual amount received + 2.The cash equivalent of leave balance (max 30 days per year of service) + 3.Maximum of 10 months of leave encashment, based on last 10 months average salary + 4.Rs. 3 Lakh</field> + </record> + + <record id="hr_salary_rule_performance" model="hr.salary.rule"> + <field name="code">PI</field> + <field name="name">Performance Incentive</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = inputs.PERF.amount</field> + <field name="sequence" eval="31"/> + <field name="note">This would be fully taxable based on incentive.</field> + </record> + + <record id="hr_salary_rule_bonus" model="hr.salary.rule"> + <field name="code">BONUS</field> + <field name="name">Bonus</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = inputs.BNS.amount</field> + <field name="sequence" eval="41"/> + <field name="note">This would be fully taxable based on Bonus.</field> + </record> + + <record id="hr_salary_rule_medical_allow" model="hr.salary.rule"> + <field name="code">MEDA</field> + <field name="name">Medical Allowance</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">fix</field> + <field eval="1250.0" name="amount_fix"/> + <field name="sequence" eval="43"/> + <field name="note">This component is on-taxable up to 15000 per year (or Rs 1250 per month) on producing medical bills.</field> + </record> + + <record id="hr_salary_rule_medical" model="hr.salary.rule"> + <field name="code">MEDA</field> + <field name="name">Medical Reimbursement</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = inputs.MR.amount</field> + <field name="sequence" eval="32"/> + <field name="note">This component is on-taxable up to 15000 per year (or Rs 1250 per month) on producing medical bills.</field> + </record> + + <record id="hr_salary_rule_food_coupon" model="hr.salary.rule"> + <field name="amount_select">fix</field> + <field eval="50" name="amount_fix"/> + <field name="quantity">worked_days.WORK100.number_of_days</field> + <field name="code">FC</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="name">Food Allowance</field> + <field name="register_id" ref="hr_food_coupen_register"/> + <field name="sequence" eval="33"/> + </record> + + <record id="hr_salary_rule_journals" model="hr.salary.rule"> + <field name="code">PERJ</field> + <field name="name">Periodical Journals</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = inputs.PJ.amount</field> + <field name="sequence" eval="34"/> + <field name="note">Some employers may provide component for buying magazines, journals and books as a part of knowledge enhancement for business growth.This part would become non taxable on providing original bills.</field> + </record> + + <record id="hr_salary_rule_uniform_senior" model="hr.salary.rule"> + <field name="code">UNIFS</field> + <field name="name">Uniform/Dress Allowance for Senior Executive</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">fix</field> + <field eval="1000" name="amount_fix"/> + <field name="sequence" eval="35"/> + <field name="note">Some sections of employees mat get allowance for purchase of office dress/uniform.In such case, the component would become non-taxable.</field> + </record> + + <record id="hr_salary_rule_uniform_junior" model="hr.salary.rule"> + <field name="code">UNIFJ</field> + <field name="name">Uniform/Dress Allowance for Junior Executive</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">fix</field> + <field eval="600" name="amount_fix"/> + <field name="sequence" eval="42"/> + <field name="note">Some sections of employees mat get allowance for purchase of office dress/uniform.In such case, the component would become non-taxable.</field> + </record> + + <record id="hr_salary_rule_telephone" model="hr.salary.rule"> + <field name="code">TELR</field> + <field name="name">Telephone Reimbursement</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = inputs.TR.amount</field> + <field name="sequence" eval="36"/> + <field name="note">In some of the cases, companies may provide a component for telephone bills.Employees may provide actual phone usage bills to reimburse this component and make it non-taxable. + </field> + </record> + + <record id="hr_salary_rule_prof_develope" model="hr.salary.rule"> + <field name="code">PDA</field> + <field name="name">Professional Development Allowance</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">fix</field> + <field eval="0.0" name="amount_fix"/> + <field name="sequence" eval="37"/> + </record> + + <record id="hr_payroll_rule_car" model="hr.salary.rule"> + <field name="code">CAR</field> + <field name="name">Car Expenses Reimbursement</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = inputs.CEI.amount</field> + <field name="sequence" eval="38"/> + <field name="note">In case company provides component for this and employee use self owned car for official and personal purposes, Rs 1800 per month would be non-taxable on showing bills for fuel or can maintenance. This amount would be Rs 2400 in case car is more capacity than 1600cc.</field> + </record> + + <record id="hr_salary_rule_internet" model="hr.salary.rule"> + <field name="code">INT</field> + <field name="name">Internet Expense</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = inputs.IE.amount</field> + <field name="sequence" eval="39"/> + <field name="note">Employer may also provide reimbursement of internet expenses and thus this would become non taxable.</field> + </record> + + <record id="hr_salary_rule_driver" model="hr.salary.rule"> + <field name="code">DRI</field> + <field name="name">Driver Salary</field> + <field name="category_id" ref="hr_payroll.ALW"/> + <field name="condition_select">python</field> + <field name="condition_python">result = bool(contract.driver_salay)</field> + <field name="amount_select">fix</field> + <field eval="900.0" name="amount_fix"/> + <field name="sequence" eval="40"/> + <field name="note">Rs. 900 per month (non taxable)</field> + </record> + + + <!--hr salary rules for Deductions --> + + <record id="hr_payslip_rule_tds" model="hr.salary.rule"> + <field name="code">TDS</field> + <field name="name">Tax Deducted at Source</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="condition_select">python</field> + <field name="condition_python">result = bool(contract.tds)</field> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = -(contract.tds)</field> + <field name="register_id" ref="hr_tds_register"/> + <field name="sequence" eval="140"/> + <field name="note">As per income tax rules, all payment which are taxable in nature should be done after deduction of taxes at the source itself. Hence employer compute income tax on salary payment and deduct it every month. This TDS is based on employee’s saving/investment declaration at the start of year. If investments for tax saving is not done, large amount may be deducted in last few months.</field> + </record> + + <record id="hr_payslip_line_professional_tax" model="hr.salary.rule"> + <field name="code">PTD</field> + <field name="name">Professional Tax</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="condition_select">python</field> + <field name="condition_python">result = contract.wage >= 3000 </field> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = (-200 if contract.wage >= 12000 +else -150 if ((contract.wage >= 9000) and (contract.wage <= 11999)) +else -80 if ((contract.wage >= 6000) and (contract.wage <= 8999)) +else -20 if ((contract.wage >= 3000) and (contract.wage <= 5999)) +else -0)</field> + <field name="register_id" ref="hr_professional_tax_deduction_register"/> + <field eval="145" name="sequence"/> + <field name="note">Workers living in states that impose the professional tax must submit a payment each half-year for the right to practice a profession or trade. It applies equally to employees who work for the national or state government, and those employed by private corporations. The professional tax uses a six-month accounting system, which divides the year into two periods, beginning on April 1 and October 1.</field> + </record> + + <record id="hr_payslip_rule_epf" model="hr.salary.rule"> + <field name="code">EPMF</field> + <field name="name">Employee's PF Contribution</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = (payslip.company_id.dearness_allowance and - ((contract.wage + DA) * 0.12) +or - (contract.wage * 0.12))</field> + <field name= "note">Employer contribution does not become part of employee’s income and hence income tax is not payable on this part.</field> + <field name="register_id" ref="hr_register_provident_fund"/> + <field name="sequence" eval="150"/> + </record> + + <record id="hr_payslip_rule_enps" model="hr.salary.rule"> + <field name="code">ENPFC</field> + <field name="name">Employee's NPS Contribution</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = (payslip.company_id.dearness_allowance and - ((contract.wage + DA) * 0.10) +or - (contract.wage * 0.10))</field> + <field name="sequence" eval="155"/> + <field name="register_id" ref="hr_nps_contribution_register"/> + <field name="note">Employee can claim deduction even of employer's contribution to NPS.</field> + </record> + + <record id="hr_payslip_rule_vpf" model="hr.salary.rule"> + <field name="code">VPF</field> + <field name="name">Voluntarily Provident Fund Contribution</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="condition_select">python</field> + <field name="condition_python">result = bool(contract.voluntary_provident_fund)</field> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = (payslip.company_id.dearness_allowance and +- ((contract.wage + DA) * contract.voluntary_provident_fund / 100) +or - (contract.wage * contract.voluntary_provident_fund / 100))</field> + <field name="sequence" eval="160"/> + <field name="register_id" ref="hr_vpf_contribution_register"/> + <field name="note">VPF is a safe option wherein you can contribute more than the PF ceiling of 12% that has been mandated by the government.This additional amount enjoys all the benefits of PF except that the employer is not liable to contribute any extra amount apart from 12%.An added advantage is that the interest rate is equal to the interest rate of PF and he withdrawal is tax free. Please note that the maximum contribution towards VPF is 100% of your Basic.The highest rate of interest (close to 9%) makes it a very attractive saving scheme. Because of these advantages many employees chose not to close their PF account even after getting employment else where other than India.Employees also get a major tax break on their entire contribution to the fund up to a ceiling of Rs. 70,000/-</field> + </record> + + <record id="hr_payslip_rule_cpt" model="hr.salary.rule"> + <field name="code">CPT</field> + <field name="name">Deduction for Company Provided Transport</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="condition_select">none</field> + <field name="amount_select">fix</field> + <field eval="-1500.0" name="amount_fix"/> + <field name="register_id" ref="hr_company_transport_register"/> + <field name="sequence" eval="165"/> + <field name="appears_on_payslip" eval="False"/> + <field name="note">Company provided transport amount is based on company.</field> + </record> + + <record id="hr_salary_rule_food_coupon_ded" model="hr.salary.rule"> + <field name="amount_select">fix</field> + <field eval="-50" name="amount_fix"/> + <field name="quantity">worked_days.WORK100.number_of_days</field> + <field name="code">FD</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="name">Deduction Towards Food Coupons</field> + <field name="register_id" ref="hr_food_coupen_register"/> + <field name="sequence" eval="166"/> + </record> + + <record id="hr_payslip_rule_lwf_employee" model="hr.salary.rule"> + <field name="code">LWFE</field> + <field name="name">Employee's Deduction Towards State Labour Welfare Fund</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="amount_select">fix</field> + <field eval="-3.0" name="amount_fix"/> + <field name="sequence" eval="170"/> + <field name="register_id" ref="hr_labour_Welfare_fund_register"/> + <field name="note">The LWF is applicable to all the members of the organisation except the Management staff (Staffs having authority to sign on the cheque/official documents on behalf of the organisation). for e.x. Employee Contribution is Rs. 3.00 and Employer contribution Rs. 6.00 Total Rs 9.00 and deposited to the LWF office.It is half yearly contribution (June and December).</field> + </record> + + <record id="hr_payslip_rule_lwf_employer" model="hr.salary.rule"> + <field name="code">LWF</field> + <field name="name">Employer's Deduction Towards State Labour Welfare Fund </field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="amount_select">fix</field> + <field eval="-6.0" name="amount_fix"/> + <field name="sequence" eval="171"/> + <field name="register_id" ref="hr_labour_Welfare_fund_register"/> + <field name="appears_on_payslip" eval="False"/> + <field name="note">The LWF is applicable to all the members of the organisation except the Management staff (Staffs having authority to sign on the cheque/official documents on behalf of the organisation). for e.x. Employee Contribution is Rs. 3.00 and Employer contribution Rs. 6.00 Total Rs 9.00 and deposited to the LWF office.It is half yearly contribution (June and December).</field> + </record> + + <record id="hr_payslip_rule_cgti" model="hr.salary.rule"> + <field name="code">CGTI</field> + <field name="name">Deduction Towards Company Provided Group Term Insurance</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="amount_select">fix</field> + <field eval="-1000.0" name="amount_fix"/> + <field name="register_id" ref="hr_group_term_insurance_register"/> + <field name="sequence" eval="175"/> + <field name="note">Group term insurance provides a solid foundation to a comprehensive employee benifit program,backed up by government asistance in the form of valuable tax incentives to both employees and employers.</field> + </record> + + <record id="hr_payslip_rule_dla" model="hr.salary.rule"> + <field name="code">DLA</field> + <field name="name">Deduction Towards Leave Availed</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="condition_select">none</field> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = - (inputs.LAI.amount)</field> + <field name="register_id" ref="hr_leave_availed_register"/> + <field name="sequence" eval="180"/> + </record> + + <record id="hr_payslip_rule_cmt" model="hr.salary.rule"> + <field name="code">CMT</field> + <field name="name">Deduction Towards Company Provided Medical Insurance</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="condition_select">python</field> + <field name="condition_python">result = bool(contract.medical_insurance)</field> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = - (contract.medical_insurance)</field> + <field eval="-50.0" name="amount_fix"/> + <field name="appears_on_payslip" eval="False"/> + <field name="register_id" ref="hr_medical_insurance_register"/> + <field name="sequence" eval="185"/> + </record> + + <record id="hr_payslip_rule_ode" model="hr.salary.rule"> + <field name="code">ODE</field> + <field name="name">Other Deduction from Employer</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="amount_select">fix</field> + <field eval="-200.0" name="amount_fix"/> + <field name="appears_on_payslip" eval="False"/> + <field name="register_id" ref="hr_other_deduction_register"/> + <field name="sequence" eval="187"/> + </record> + + <record id="hr_payslip_rule_ernps" model="hr.salary.rule"> + <field name="code">ENPC</field> + <field name="name">Employer's NPS Contribution</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = (payslip.company_id.dearness_allowance and - ((contract.wage + DA) * 0.10) +or - (contract.wage * 0.10))</field> + <field name="sequence" eval="190"/> + <field name="register_id" ref="hr_nps_contribution_register"/> + <field name="appears_on_payslip" eval="False"/> + <field name= "note">Any amount contributed by your employer to your NPS account is treated as part of your salary and is included in your income but you can claim deduction under Section 80C for this too.thus, effectively making it exempt from tax within the limit of 10% of your basic salary. This is very useful and tax efficient for you particularly if you fall in the maximum tax.</field> + </record> + + <record id="hr_payslip_rule_erpf" model="hr.salary.rule"> + <field name="code">EPF</field> + <field name="name">Employer's PF Contribution</field> + <field name="category_id" ref="hr_payroll.DED"/> + <field name="amount_select">code</field> + <field name="amount_python_compute">result = (payslip.company_id.dearness_allowance and - ((contract.wage + DA) * 0.12) +or - (contract.wage * 0.12))</field> + <field name="sequence" eval="195"/> + <field name="register_id" ref="hr_register_provident_fund"/> + <field name="appears_on_payslip" eval="False"/> + <field name="note">Both the employees and employer contribute to the fund at the rate of 12% of the basic wages, dearness allowance and retaining allowance, if any, payable to employees per month.</field> + </record> + + <!-- Rule Inputs --> + + <record id="hr_rule_input_performance" model="hr.rule.input"> + <field name="code">PERF</field> + <field name="name">Performance of Employee</field> + <field name="input_id" ref="hr_salary_rule_performance"/> + </record> + + <record id="hr_rule_input_bonus" model="hr.rule.input"> + <field name="code">BNS</field> + <field name="name">Bonus of Employee</field> + <field name="input_id" ref="hr_salary_rule_bonus"/> + </record> + + <record id="hr_rule_input_arrears" model="hr.rule.input"> + <field name="code">ARS</field> + <field name="name">Arrears</field> + <field name="input_id" ref="hr_salary_rule_arrears"/> + </record> + + <record id="hr_rule_input_le" model="hr.rule.input"> + <field name="code">LE</field> + <field name="name">Leave Encashment</field> + <field name="input_id" ref="hr_salary_rule_le"/> + </record> + + <record id="hr_rule_input_journals" model="hr.rule.input"> + <field name="code">PJ</field> + <field name="name">Periodical Journals</field> + <field name="input_id" ref="hr_salary_rule_journals"/> + </record> + + <record id="hr_rule_input_telephone" model="hr.rule.input"> + <field name="code">TR</field> + <field name="name">Telephone Reimbursement</field> + <field name="input_id" ref="hr_salary_rule_telephone"/> + </record> + + <record id="hr_rule_input_car" model="hr.rule.input"> + <field name="code">CEI</field> + <field name="name">Car Expenses</field> + <field name="input_id" ref="hr_payroll_rule_car"/> + </record> + + <record id="hr_rule_input_internet" model="hr.rule.input"> + <field name="code">IE</field> + <field name="name">Internet Expence</field> + <field name="input_id" ref="hr_salary_rule_internet"/> + </record> + + <record id="hr_rule_input_leave_avail" model="hr.rule.input"> + <field name="code">LAI</field> + <field name="name">Leave Availed</field> + <field name="input_id" ref="hr_payslip_rule_dla"/> + </record> + <record id="hr_rule_input_medical" model="hr.rule.input"> + <field name="code">MR</field> + <field name="name">Medical Reimbursement</field> + <field name="input_id" ref="hr_salary_rule_medical"/> + </record> + </data> +</openerp> diff --git a/addons/l10n_in_hr_payroll/i18n/bn.po b/addons/l10n_in_hr_payroll/i18n/bn.po new file mode 100644 index 00000000000..ea9fcfd7bb3 --- /dev/null +++ b/addons/l10n_in_hr_payroll/i18n/bn.po @@ -0,0 +1,933 @@ +# Bengali Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_in_hr_payroll +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0alpha\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-17 06:46+0000\n" +"PO-Revision-Date: 2012-08-17 06:46+0000\n" +"Last-Translator: <>\n" +"Language-Team: Bengali <bn@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "E-mail Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,employee_bank_no:0 +msgid "Employee Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in draft state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Title" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Payment Advice from" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail +msgid "Hr Salary Employee By Category Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employees Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Allowances with Basic:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Department" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Deductions:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "A/C no." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,driver_salay:0 +msgid "Driver Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail +msgid "Yearly Salary by Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list +msgid "Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "March" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "(" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,company_id:0 +#: field:hr.payroll.advice.line,company_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,company_id:0 +msgid "Company" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "The Manager" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Letter Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "," +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Set to Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,number_of_year:0 +msgid "Total years of work experience" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "to" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Total :" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payslip.run,available_advice:0 +msgid "Made Payment Advice?" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Advices which are paid using NEFT transfer" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,tds:0 +msgid "Amount for Tax Deduction at Source" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip +msgid "Pay Slip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,day:0 +msgid "Day" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Month of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.payslip:0 +msgid "Payslip 'Date From' must be before 'Date To'." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,batch_id:0 +msgid "Batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Other Information" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "For" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Details by Salary Rule Category:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,voluntary_provident_fund:0 +msgid "VPF computed as percentage(%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,number:0 +#: report:paylip.details.in:0 +msgid "Reference" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Group By..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,medical_insurance:0 +msgid "Medical Insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Identification No" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Confirmed" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,bysal:0 +#: field:payment.advice.report,bysal:0 +#: report:payroll.advice:0 +msgid "By Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Confirm" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,chaque_nos:0 +#: field:payment.advice.report,cheque_nos:0 +msgid "Cheque Numbers" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month +msgid "Yearly Salary by Head" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#, python-format +msgid "You can not confirm Payment advice without advice lines." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,state:0 +#: field:payment.advice.report,state:0 +msgid "State" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Yours Sincerely" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,medical_insurance:0 +msgid "Deduction towards company provided medical insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line +msgid "Bank Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Email" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payslip.run,available_advice:0 +msgid "If this box is checked which means that Payment Advice exists for current batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Error !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Print" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,debit_credit:0 +#: report:payroll.advice:0 +msgid "C/D" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.employee.bymonth:0 +msgid "Yearly Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice +msgid "Print Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,line_ids:0 +msgid "Employee Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "July" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Configuration" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree +#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice +msgid "Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice +#: view:payment.advice.report:0 +msgid "Advices Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc:0 +msgid "IFSC" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,tds:0 +msgid "TDS" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,join_date:0 +msgid "Join Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.contract:0 +msgid "Error! Contract start-date must be less than contract end-date." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:res.company,dearness_allowance:0 +msgid "Dearness Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "August" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Deduction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Search Payment advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "SI. No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in confirm state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "December" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Sheet" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,month:0 +msgid "Month" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Non Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "or" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month +msgid "Hr Salary Employee By Month Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,category_id:0 +msgid "Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#, python-format +msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "To Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,number_of_year:0 +msgid "No. of Years of Service" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Note" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Salary Rule Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: selection:hr.payroll.advice,state:0 +#: view:payment.advice.report:0 +#: selection:payment.advice.report,state:0 +msgid "Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,voluntary_provident_fund:0 +msgid "Voluntary Provident Fund" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report +msgid "Payment Advice Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Status" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,city_type:0 +msgid "Type of City" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:res.company,dearness_allowance:0 +msgid "Check this box if your company provide Dearness Allowance to employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc_code:0 +#: field:payment.advice.report,ifsc_code:0 +#: report:payroll.advice:0 +msgid "IFSC Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "June" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,nbr:0 +msgid "# Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report +msgid "PaySlip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,date:0 +#: field:payment.advice.report,date:0 +msgid "Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "November" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all +msgid "This report performs analysis on Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "October" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Designation" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "January" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "Pay Head Employee Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:payroll.advice:0 +msgid "Authorized Signature" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice.line:0 +msgid "Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "To," +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,driver_salay:0 +msgid "Check this box if you provide allowance for driver" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice.line,advice_id:0 +#: field:hr.payslip,advice_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice +msgid "Bank Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Other No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Draft Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,neft:0 +msgid "Check this box if your company use online transfer for salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,number:0 +msgid "Number" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "September" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Cancel" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Day of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.employee:0 +msgid "Error! You cannot create recursive hierarchy of Employee(s)." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "This wizard will print report which display a pay head employee breakup for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Payslip Batches ready to be Adviced" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Pay Slip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Total Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,employee_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee +#: view:payment.advice.report:0 +#: field:payment.advice.report,employee_id:0 +msgid "Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Compute Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,join_date:0 +msgid "Joining date of employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Dear Sir/Madam," +msgstr "Dear Sir/Madam," + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,note:0 +msgid "Description" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid ")" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Payroll" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "NEFT" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,bank_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,bank_id:0 +#: report:payroll.advice:0 +#: report:salary.detail.byyear:0 +msgid "Bank" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,end_date:0 +#: field:yearly.salary.detail,date_to:0 +msgid "End Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "February" +msgstr "" + +#. module: l10n_in_hr_payroll +#: sql_constraint:res.company:0 +msgid "The company name must be unique !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,name:0 +#: report:paylip.details.in:0 +#: field:payment.advice.report,name:0 +#: report:salary.employee.bymonth:0 +msgid "Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: field:hr.salary.employee.month,employee_ids:0 +#: view:yearly.salary.detail:0 +#: field:yearly.salary.detail,employee_ids:0 +msgid "Employees" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "April" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Name of the Employe" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Please define bank account for the %s employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,start_date:0 +#: field:yearly.salary.detail,date_from:0 +msgid "Start Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,bank_id:0 +msgid "Select the Bank from which the salary is going to be paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "Employee Pay Head Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Phone No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Credit" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,name:0 +#: report:payroll.advice:0 +msgid "Bank Account No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,date:0 +msgid "Advice Date is used to search Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "May" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Create Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,year:0 +msgid "Year" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,neft:0 +#: field:payment.advice.report,neft:0 +msgid "NEFT Transaction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "Total" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "form period" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Year of Payment Advices" +msgstr ""
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/i18n/gu.po b/addons/l10n_in_hr_payroll/i18n/gu.po new file mode 100644 index 00000000000..2c321b13191 --- /dev/null +++ b/addons/l10n_in_hr_payroll/i18n/gu.po @@ -0,0 +1,933 @@ +# Gujarati Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_in_hr_payroll +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0alpha\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-17 06:46+0000\n" +"PO-Revision-Date: 2012-08-17 06:46+0000\n" +"Last-Translator: <>\n" +"Language-Team: Gujarati <gu@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "E-mail Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,employee_bank_no:0 +msgid "Employee Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in draft state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Title" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Payment Advice from" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail +msgid "Hr Salary Employee By Category Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employees Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Allowances with Basic:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Department" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Deductions:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "A/C no." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,driver_salay:0 +msgid "Driver Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail +msgid "Yearly Salary by Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list +msgid "Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "March" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "(" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,company_id:0 +#: field:hr.payroll.advice.line,company_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,company_id:0 +msgid "Company" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "The Manager" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Letter Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "," +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Set to Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,number_of_year:0 +msgid "Total years of work experience" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "to" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Total :" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payslip.run,available_advice:0 +msgid "Made Payment Advice?" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Advices which are paid using NEFT transfer" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,tds:0 +msgid "Amount for Tax Deduction at Source" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip +msgid "Pay Slip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,day:0 +msgid "Day" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Month of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.payslip:0 +msgid "Payslip 'Date From' must be before 'Date To'." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,batch_id:0 +msgid "Batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Other Information" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "For" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Details by Salary Rule Category:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,voluntary_provident_fund:0 +msgid "VPF computed as percentage(%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,number:0 +#: report:paylip.details.in:0 +msgid "Reference" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Group By..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,medical_insurance:0 +msgid "Medical Insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Identification No" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Confirmed" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,bysal:0 +#: field:payment.advice.report,bysal:0 +#: report:payroll.advice:0 +msgid "By Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Confirm" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,chaque_nos:0 +#: field:payment.advice.report,cheque_nos:0 +msgid "Cheque Numbers" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month +msgid "Yearly Salary by Head" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#, python-format +msgid "You can not confirm Payment advice without advice lines." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,state:0 +#: field:payment.advice.report,state:0 +msgid "State" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Yours Sincerely" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,medical_insurance:0 +msgid "Deduction towards company provided medical insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line +msgid "Bank Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Email" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payslip.run,available_advice:0 +msgid "If this box is checked which means that Payment Advice exists for current batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Error !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Print" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,debit_credit:0 +#: report:payroll.advice:0 +msgid "C/D" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.employee.bymonth:0 +msgid "Yearly Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice +msgid "Print Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,line_ids:0 +msgid "Employee Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "July" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Configuration" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree +#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice +msgid "Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice +#: view:payment.advice.report:0 +msgid "Advices Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc:0 +msgid "IFSC" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,tds:0 +msgid "TDS" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,join_date:0 +msgid "Join Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.contract:0 +msgid "Error! Contract start-date must be less than contract end-date." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:res.company,dearness_allowance:0 +msgid "Dearness Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "August" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Deduction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Search Payment advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "SI. No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in confirm state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "December" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Sheet" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,month:0 +msgid "Month" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Non Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "or" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month +msgid "Hr Salary Employee By Month Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,category_id:0 +msgid "Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#, python-format +msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "To Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,number_of_year:0 +msgid "No. of Years of Service" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Note" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Salary Rule Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: selection:hr.payroll.advice,state:0 +#: view:payment.advice.report:0 +#: selection:payment.advice.report,state:0 +msgid "Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,voluntary_provident_fund:0 +msgid "Voluntary Provident Fund" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report +msgid "Payment Advice Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Status" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,city_type:0 +msgid "Type of City" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:res.company,dearness_allowance:0 +msgid "Check this box if your company provide Dearness Allowance to employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc_code:0 +#: field:payment.advice.report,ifsc_code:0 +#: report:payroll.advice:0 +msgid "IFSC Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "June" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,nbr:0 +msgid "# Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report +msgid "PaySlip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,date:0 +#: field:payment.advice.report,date:0 +msgid "Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "November" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all +msgid "This report performs analysis on Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "October" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Designation" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "January" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "Pay Head Employee Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:payroll.advice:0 +msgid "Authorized Signature" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice.line:0 +msgid "Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "To," +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,driver_salay:0 +msgid "Check this box if you provide allowance for driver" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice.line,advice_id:0 +#: field:hr.payslip,advice_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice +msgid "Bank Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Other No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Draft Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,neft:0 +msgid "Check this box if your company use online transfer for salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,number:0 +msgid "Number" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "September" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Cancel" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Day of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.employee:0 +msgid "Error! You cannot create recursive hierarchy of Employee(s)." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "This wizard will print report which display a pay head employee breakup for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Payslip Batches ready to be Adviced" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Pay Slip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Total Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,employee_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee +#: view:payment.advice.report:0 +#: field:payment.advice.report,employee_id:0 +msgid "Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Compute Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,join_date:0 +msgid "Joining date of employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Dear Sir/Madam," +msgstr "Dear Sir/Madam," + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,note:0 +msgid "Description" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid ")" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Payroll" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "NEFT" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,bank_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,bank_id:0 +#: report:payroll.advice:0 +#: report:salary.detail.byyear:0 +msgid "Bank" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,end_date:0 +#: field:yearly.salary.detail,date_to:0 +msgid "End Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "February" +msgstr "" + +#. module: l10n_in_hr_payroll +#: sql_constraint:res.company:0 +msgid "The company name must be unique !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,name:0 +#: report:paylip.details.in:0 +#: field:payment.advice.report,name:0 +#: report:salary.employee.bymonth:0 +msgid "Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: field:hr.salary.employee.month,employee_ids:0 +#: view:yearly.salary.detail:0 +#: field:yearly.salary.detail,employee_ids:0 +msgid "Employees" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "April" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Name of the Employe" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Please define bank account for the %s employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,start_date:0 +#: field:yearly.salary.detail,date_from:0 +msgid "Start Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,bank_id:0 +msgid "Select the Bank from which the salary is going to be paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "Employee Pay Head Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Phone No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Credit" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,name:0 +#: report:payroll.advice:0 +msgid "Bank Account No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,date:0 +msgid "Advice Date is used to search Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "May" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Create Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,year:0 +msgid "Year" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,neft:0 +#: field:payment.advice.report,neft:0 +msgid "NEFT Transaction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "Total" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "form period" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Year of Payment Advices" +msgstr ""
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/i18n/hi.po b/addons/l10n_in_hr_payroll/i18n/hi.po new file mode 100644 index 00000000000..d7cc9dc1519 --- /dev/null +++ b/addons/l10n_in_hr_payroll/i18n/hi.po @@ -0,0 +1,933 @@ +# Hindi Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_in_hr_payroll +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0alpha\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-17 06:46+0000\n" +"PO-Revision-Date: 2012-08-17 06:46+0000\n" +"Last-Translator: <>\n" +"Language-Team: Hindi <hi@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "E-mail Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,employee_bank_no:0 +msgid "Employee Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in draft state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Title" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Payment Advice from" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail +msgid "Hr Salary Employee By Category Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employees Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Allowances with Basic:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Department" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Deductions:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "A/C no." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,driver_salay:0 +msgid "Driver Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail +msgid "Yearly Salary by Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list +msgid "Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "March" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "(" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,company_id:0 +#: field:hr.payroll.advice.line,company_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,company_id:0 +msgid "Company" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "The Manager" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Letter Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "," +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Set to Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,number_of_year:0 +msgid "Total years of work experience" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "to" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Total :" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payslip.run,available_advice:0 +msgid "Made Payment Advice?" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Advices which are paid using NEFT transfer" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,tds:0 +msgid "Amount for Tax Deduction at Source" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip +msgid "Pay Slip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,day:0 +msgid "Day" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Month of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.payslip:0 +msgid "Payslip 'Date From' must be before 'Date To'." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,batch_id:0 +msgid "Batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Other Information" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "For" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Details by Salary Rule Category:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,voluntary_provident_fund:0 +msgid "VPF computed as percentage(%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,number:0 +#: report:paylip.details.in:0 +msgid "Reference" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Group By..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,medical_insurance:0 +msgid "Medical Insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Identification No" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Confirmed" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,bysal:0 +#: field:payment.advice.report,bysal:0 +#: report:payroll.advice:0 +msgid "By Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Confirm" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,chaque_nos:0 +#: field:payment.advice.report,cheque_nos:0 +msgid "Cheque Numbers" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month +msgid "Yearly Salary by Head" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#, python-format +msgid "You can not confirm Payment advice without advice lines." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,state:0 +#: field:payment.advice.report,state:0 +msgid "State" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Yours Sincerely" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,medical_insurance:0 +msgid "Deduction towards company provided medical insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line +msgid "Bank Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Email" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payslip.run,available_advice:0 +msgid "If this box is checked which means that Payment Advice exists for current batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Error !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Print" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,debit_credit:0 +#: report:payroll.advice:0 +msgid "C/D" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.employee.bymonth:0 +msgid "Yearly Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice +msgid "Print Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,line_ids:0 +msgid "Employee Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "July" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Configuration" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree +#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice +msgid "Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice +#: view:payment.advice.report:0 +msgid "Advices Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc:0 +msgid "IFSC" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,tds:0 +msgid "TDS" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,join_date:0 +msgid "Join Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.contract:0 +msgid "Error! Contract start-date must be less than contract end-date." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:res.company,dearness_allowance:0 +msgid "Dearness Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "August" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Deduction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Search Payment advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "SI. No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in confirm state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "December" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Sheet" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,month:0 +msgid "Month" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Non Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "or" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month +msgid "Hr Salary Employee By Month Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,category_id:0 +msgid "Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#, python-format +msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "To Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,number_of_year:0 +msgid "No. of Years of Service" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Note" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Salary Rule Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: selection:hr.payroll.advice,state:0 +#: view:payment.advice.report:0 +#: selection:payment.advice.report,state:0 +msgid "Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,voluntary_provident_fund:0 +msgid "Voluntary Provident Fund" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report +msgid "Payment Advice Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Status" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,city_type:0 +msgid "Type of City" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:res.company,dearness_allowance:0 +msgid "Check this box if your company provide Dearness Allowance to employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc_code:0 +#: field:payment.advice.report,ifsc_code:0 +#: report:payroll.advice:0 +msgid "IFSC Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "June" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,nbr:0 +msgid "# Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report +msgid "PaySlip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,date:0 +#: field:payment.advice.report,date:0 +msgid "Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "November" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all +msgid "This report performs analysis on Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "October" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Designation" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "January" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "Pay Head Employee Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:payroll.advice:0 +msgid "Authorized Signature" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice.line:0 +msgid "Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "To," +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,driver_salay:0 +msgid "Check this box if you provide allowance for driver" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice.line,advice_id:0 +#: field:hr.payslip,advice_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice +msgid "Bank Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Other No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Draft Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,neft:0 +msgid "Check this box if your company use online transfer for salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,number:0 +msgid "Number" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "September" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Cancel" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Day of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.employee:0 +msgid "Error! You cannot create recursive hierarchy of Employee(s)." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "This wizard will print report which display a pay head employee breakup for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Payslip Batches ready to be Adviced" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Pay Slip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Total Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,employee_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee +#: view:payment.advice.report:0 +#: field:payment.advice.report,employee_id:0 +msgid "Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Compute Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,join_date:0 +msgid "Joining date of employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Dear Sir/Madam," +msgstr "Dear Sir/Madam," + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,note:0 +msgid "Description" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid ")" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Payroll" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "NEFT" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,bank_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,bank_id:0 +#: report:payroll.advice:0 +#: report:salary.detail.byyear:0 +msgid "Bank" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,end_date:0 +#: field:yearly.salary.detail,date_to:0 +msgid "End Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "February" +msgstr "" + +#. module: l10n_in_hr_payroll +#: sql_constraint:res.company:0 +msgid "The company name must be unique !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,name:0 +#: report:paylip.details.in:0 +#: field:payment.advice.report,name:0 +#: report:salary.employee.bymonth:0 +msgid "Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: field:hr.salary.employee.month,employee_ids:0 +#: view:yearly.salary.detail:0 +#: field:yearly.salary.detail,employee_ids:0 +msgid "Employees" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "April" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Name of the Employe" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Please define bank account for the %s employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,start_date:0 +#: field:yearly.salary.detail,date_from:0 +msgid "Start Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,bank_id:0 +msgid "Select the Bank from which the salary is going to be paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "Employee Pay Head Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Phone No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Credit" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,name:0 +#: report:payroll.advice:0 +msgid "Bank Account No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,date:0 +msgid "Advice Date is used to search Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "May" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Create Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,year:0 +msgid "Year" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,neft:0 +#: field:payment.advice.report,neft:0 +msgid "NEFT Transaction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "Total" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "form period" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Year of Payment Advices" +msgstr ""
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/i18n/l10n_in_hr_payroll.pot b/addons/l10n_in_hr_payroll/i18n/l10n_in_hr_payroll.pot new file mode 100644 index 00000000000..552f85b5997 --- /dev/null +++ b/addons/l10n_in_hr_payroll/i18n/l10n_in_hr_payroll.pot @@ -0,0 +1,933 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_in_hr_payroll +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0alpha\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-17 06:46+0000\n" +"PO-Revision-Date: 2012-08-17 06:46+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "E-mail Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,employee_bank_no:0 +msgid "Employee Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in draft state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Title" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Payment Advice from" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail +msgid "Hr Salary Employee By Category Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employees Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Allowances with Basic:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Department" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Deductions:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "A/C no." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,driver_salay:0 +msgid "Driver Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail +msgid "Yearly Salary by Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list +msgid "Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "March" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "(" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,company_id:0 +#: field:hr.payroll.advice.line,company_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,company_id:0 +msgid "Company" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "The Manager" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Letter Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "," +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Set to Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,number_of_year:0 +msgid "Total years of work experience" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "to" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Total :" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payslip.run,available_advice:0 +msgid "Made Payment Advice?" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Advices which are paid using NEFT transfer" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,tds:0 +msgid "Amount for Tax Deduction at Source" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip +msgid "Pay Slip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,day:0 +msgid "Day" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Month of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.payslip:0 +msgid "Payslip 'Date From' must be before 'Date To'." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,batch_id:0 +msgid "Batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Other Information" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "For" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Details by Salary Rule Category:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,voluntary_provident_fund:0 +msgid "VPF computed as percentage(%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,number:0 +#: report:paylip.details.in:0 +msgid "Reference" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Group By..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,medical_insurance:0 +msgid "Medical Insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Identification No" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Confirmed" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,bysal:0 +#: field:payment.advice.report,bysal:0 +#: report:payroll.advice:0 +msgid "By Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Confirm" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,chaque_nos:0 +#: field:payment.advice.report,cheque_nos:0 +msgid "Cheque Numbers" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month +msgid "Yearly Salary by Head" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#, python-format +msgid "You can not confirm Payment advice without advice lines." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,state:0 +#: field:payment.advice.report,state:0 +msgid "State" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Yours Sincerely" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,medical_insurance:0 +msgid "Deduction towards company provided medical insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line +msgid "Bank Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Email" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payslip.run,available_advice:0 +msgid "If this box is checked which means that Payment Advice exists for current batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Error !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Print" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,debit_credit:0 +#: report:payroll.advice:0 +msgid "C/D" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.employee.bymonth:0 +msgid "Yearly Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice +msgid "Print Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,line_ids:0 +msgid "Employee Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "July" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Configuration" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree +#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice +msgid "Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice +#: view:payment.advice.report:0 +msgid "Advices Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc:0 +msgid "IFSC" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,tds:0 +msgid "TDS" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,join_date:0 +msgid "Join Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.contract:0 +msgid "Error! Contract start-date must be less than contract end-date." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:res.company,dearness_allowance:0 +msgid "Dearness Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "August" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Deduction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Search Payment advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "SI. No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in confirm state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "December" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Sheet" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,month:0 +msgid "Month" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Non Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "or" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month +msgid "Hr Salary Employee By Month Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,category_id:0 +msgid "Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#, python-format +msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "To Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,number_of_year:0 +msgid "No. of Years of Service" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Note" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Salary Rule Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: selection:hr.payroll.advice,state:0 +#: view:payment.advice.report:0 +#: selection:payment.advice.report,state:0 +msgid "Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,voluntary_provident_fund:0 +msgid "Voluntary Provident Fund" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report +msgid "Payment Advice Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Status" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,city_type:0 +msgid "Type of City" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:res.company,dearness_allowance:0 +msgid "Check this box if your company provide Dearness Allowance to employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc_code:0 +#: field:payment.advice.report,ifsc_code:0 +#: report:payroll.advice:0 +msgid "IFSC Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "June" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,nbr:0 +msgid "# Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report +msgid "PaySlip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,date:0 +#: field:payment.advice.report,date:0 +msgid "Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "November" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all +msgid "This report performs analysis on Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "October" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Designation" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "January" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "Pay Head Employee Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:payroll.advice:0 +msgid "Authorized Signature" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice.line:0 +msgid "Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "To," +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,driver_salay:0 +msgid "Check this box if you provide allowance for driver" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice.line,advice_id:0 +#: field:hr.payslip,advice_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice +msgid "Bank Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Other No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Draft Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,neft:0 +msgid "Check this box if your company use online transfer for salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,number:0 +msgid "Number" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "September" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Cancel" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Day of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.employee:0 +msgid "Error! You cannot create recursive hierarchy of Employee(s)." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "This wizard will print report which display a pay head employee breakup for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Payslip Batches ready to be Adviced" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Pay Slip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Total Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,employee_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee +#: view:payment.advice.report:0 +#: field:payment.advice.report,employee_id:0 +msgid "Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Compute Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,join_date:0 +msgid "Joining date of employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Dear Sir/Madam," +msgstr "Dear Sir/Madam," + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,note:0 +msgid "Description" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid ")" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Payroll" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "NEFT" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,bank_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,bank_id:0 +#: report:payroll.advice:0 +#: report:salary.detail.byyear:0 +msgid "Bank" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,end_date:0 +#: field:yearly.salary.detail,date_to:0 +msgid "End Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "February" +msgstr "" + +#. module: l10n_in_hr_payroll +#: sql_constraint:res.company:0 +msgid "The company name must be unique !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,name:0 +#: report:paylip.details.in:0 +#: field:payment.advice.report,name:0 +#: report:salary.employee.bymonth:0 +msgid "Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: field:hr.salary.employee.month,employee_ids:0 +#: view:yearly.salary.detail:0 +#: field:yearly.salary.detail,employee_ids:0 +msgid "Employees" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "April" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Name of the Employe" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Please define bank account for the %s employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,start_date:0 +#: field:yearly.salary.detail,date_from:0 +msgid "Start Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,bank_id:0 +msgid "Select the Bank from which the salary is going to be paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "Employee Pay Head Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Phone No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Credit" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,name:0 +#: report:payroll.advice:0 +msgid "Bank Account No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,date:0 +msgid "Advice Date is used to search Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "May" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Create Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,year:0 +msgid "Year" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,neft:0 +#: field:payment.advice.report,neft:0 +msgid "NEFT Transaction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "Total" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "form period" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Year of Payment Advices" +msgstr ""
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/i18n/ta.po b/addons/l10n_in_hr_payroll/i18n/ta.po new file mode 100644 index 00000000000..98d00c76a33 --- /dev/null +++ b/addons/l10n_in_hr_payroll/i18n/ta.po @@ -0,0 +1,933 @@ +# Tamil Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_in_hr_payroll +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0alpha\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-17 06:46+0000\n" +"PO-Revision-Date: 2012-08-17 06:46+0000\n" +"Last-Translator: <>\n" +"Language-Team: Tamil <ta@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "E-mail Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,employee_bank_no:0 +msgid "Employee Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in draft state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Title" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Payment Advice from" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail +msgid "Hr Salary Employee By Category Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employees Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Allowances with Basic:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Department" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Deductions:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "A/C no." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,driver_salay:0 +msgid "Driver Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail +msgid "Yearly Salary by Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list +msgid "Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "March" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "(" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,company_id:0 +#: field:hr.payroll.advice.line,company_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,company_id:0 +msgid "Company" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "The Manager" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Letter Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "," +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Set to Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,number_of_year:0 +msgid "Total years of work experience" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "to" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Total :" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payslip.run,available_advice:0 +msgid "Made Payment Advice?" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Advices which are paid using NEFT transfer" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,tds:0 +msgid "Amount for Tax Deduction at Source" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip +msgid "Pay Slip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,day:0 +msgid "Day" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Month of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.payslip:0 +msgid "Payslip 'Date From' must be before 'Date To'." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,batch_id:0 +msgid "Batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Other Information" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "For" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Details by Salary Rule Category:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,voluntary_provident_fund:0 +msgid "VPF computed as percentage(%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,number:0 +#: report:paylip.details.in:0 +msgid "Reference" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Group By..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,medical_insurance:0 +msgid "Medical Insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Identification No" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Confirmed" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,bysal:0 +#: field:payment.advice.report,bysal:0 +#: report:payroll.advice:0 +msgid "By Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Confirm" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,chaque_nos:0 +#: field:payment.advice.report,cheque_nos:0 +msgid "Cheque Numbers" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month +msgid "Yearly Salary by Head" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#, python-format +msgid "You can not confirm Payment advice without advice lines." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,state:0 +#: field:payment.advice.report,state:0 +msgid "State" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Yours Sincerely" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,medical_insurance:0 +msgid "Deduction towards company provided medical insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line +msgid "Bank Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Email" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payslip.run,available_advice:0 +msgid "If this box is checked which means that Payment Advice exists for current batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Error !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Print" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,debit_credit:0 +#: report:payroll.advice:0 +msgid "C/D" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.employee.bymonth:0 +msgid "Yearly Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice +msgid "Print Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,line_ids:0 +msgid "Employee Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "July" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Configuration" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree +#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice +msgid "Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice +#: view:payment.advice.report:0 +msgid "Advices Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc:0 +msgid "IFSC" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,tds:0 +msgid "TDS" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,join_date:0 +msgid "Join Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.contract:0 +msgid "Error! Contract start-date must be less than contract end-date." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:res.company,dearness_allowance:0 +msgid "Dearness Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "August" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Deduction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Search Payment advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "SI. No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in confirm state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "December" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Sheet" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,month:0 +msgid "Month" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Non Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "or" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month +msgid "Hr Salary Employee By Month Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,category_id:0 +msgid "Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#, python-format +msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "To Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,number_of_year:0 +msgid "No. of Years of Service" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Note" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Salary Rule Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: selection:hr.payroll.advice,state:0 +#: view:payment.advice.report:0 +#: selection:payment.advice.report,state:0 +msgid "Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,voluntary_provident_fund:0 +msgid "Voluntary Provident Fund" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report +msgid "Payment Advice Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Status" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,city_type:0 +msgid "Type of City" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:res.company,dearness_allowance:0 +msgid "Check this box if your company provide Dearness Allowance to employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc_code:0 +#: field:payment.advice.report,ifsc_code:0 +#: report:payroll.advice:0 +msgid "IFSC Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "June" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,nbr:0 +msgid "# Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report +msgid "PaySlip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,date:0 +#: field:payment.advice.report,date:0 +msgid "Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "November" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all +msgid "This report performs analysis on Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "October" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Designation" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "January" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "Pay Head Employee Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:payroll.advice:0 +msgid "Authorized Signature" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice.line:0 +msgid "Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "To," +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,driver_salay:0 +msgid "Check this box if you provide allowance for driver" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice.line,advice_id:0 +#: field:hr.payslip,advice_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice +msgid "Bank Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Other No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Draft Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,neft:0 +msgid "Check this box if your company use online transfer for salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,number:0 +msgid "Number" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "September" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Cancel" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Day of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.employee:0 +msgid "Error! You cannot create recursive hierarchy of Employee(s)." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "This wizard will print report which display a pay head employee breakup for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Payslip Batches ready to be Adviced" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Pay Slip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Total Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,employee_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee +#: view:payment.advice.report:0 +#: field:payment.advice.report,employee_id:0 +msgid "Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Compute Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,join_date:0 +msgid "Joining date of employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Dear Sir/Madam," +msgstr "Dear Sir/Madam," + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,note:0 +msgid "Description" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid ")" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Payroll" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "NEFT" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,bank_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,bank_id:0 +#: report:payroll.advice:0 +#: report:salary.detail.byyear:0 +msgid "Bank" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,end_date:0 +#: field:yearly.salary.detail,date_to:0 +msgid "End Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "February" +msgstr "" + +#. module: l10n_in_hr_payroll +#: sql_constraint:res.company:0 +msgid "The company name must be unique !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,name:0 +#: report:paylip.details.in:0 +#: field:payment.advice.report,name:0 +#: report:salary.employee.bymonth:0 +msgid "Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: field:hr.salary.employee.month,employee_ids:0 +#: view:yearly.salary.detail:0 +#: field:yearly.salary.detail,employee_ids:0 +msgid "Employees" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "April" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Name of the Employe" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Please define bank account for the %s employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,start_date:0 +#: field:yearly.salary.detail,date_from:0 +msgid "Start Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,bank_id:0 +msgid "Select the Bank from which the salary is going to be paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "Employee Pay Head Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Phone No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Credit" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,name:0 +#: report:payroll.advice:0 +msgid "Bank Account No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,date:0 +msgid "Advice Date is used to search Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "May" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Create Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,year:0 +msgid "Year" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,neft:0 +#: field:payment.advice.report,neft:0 +msgid "NEFT Transaction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "Total" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "form period" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Year of Payment Advices" +msgstr ""
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/i18n/te.po b/addons/l10n_in_hr_payroll/i18n/te.po new file mode 100644 index 00000000000..0c6f6127c4d --- /dev/null +++ b/addons/l10n_in_hr_payroll/i18n/te.po @@ -0,0 +1,933 @@ +# Telugu Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_in_hr_payroll +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0alpha\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-17 06:46+0000\n" +"PO-Revision-Date: 2012-08-17 06:46+0000\n" +"Last-Translator: <>\n" +"Language-Team: Telugu <te@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "E-mail Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,employee_bank_no:0 +msgid "Employee Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in draft state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Title" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Payment Advice from" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail +msgid "Hr Salary Employee By Category Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employees Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Allowances with Basic:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Department" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Deductions:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "A/C no." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,driver_salay:0 +msgid "Driver Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail +msgid "Yearly Salary by Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list +msgid "Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "March" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "(" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,company_id:0 +#: field:hr.payroll.advice.line,company_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,company_id:0 +msgid "Company" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "The Manager" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Letter Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "," +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Set to Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,number_of_year:0 +msgid "Total years of work experience" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "to" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Total :" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payslip.run,available_advice:0 +msgid "Made Payment Advice?" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Advices which are paid using NEFT transfer" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,tds:0 +msgid "Amount for Tax Deduction at Source" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip +msgid "Pay Slip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,day:0 +msgid "Day" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Month of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.payslip:0 +msgid "Payslip 'Date From' must be before 'Date To'." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,batch_id:0 +msgid "Batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Other Information" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "For" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Details by Salary Rule Category:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,voluntary_provident_fund:0 +msgid "VPF computed as percentage(%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,number:0 +#: report:paylip.details.in:0 +msgid "Reference" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Group By..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,medical_insurance:0 +msgid "Medical Insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Identification No" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Confirmed" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,bysal:0 +#: field:payment.advice.report,bysal:0 +#: report:payroll.advice:0 +msgid "By Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Confirm" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,chaque_nos:0 +#: field:payment.advice.report,cheque_nos:0 +msgid "Cheque Numbers" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month +msgid "Yearly Salary by Head" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#, python-format +msgid "You can not confirm Payment advice without advice lines." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,state:0 +#: field:payment.advice.report,state:0 +msgid "State" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Yours Sincerely" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,medical_insurance:0 +msgid "Deduction towards company provided medical insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line +msgid "Bank Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Email" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payslip.run,available_advice:0 +msgid "If this box is checked which means that Payment Advice exists for current batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Error !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Print" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,debit_credit:0 +#: report:payroll.advice:0 +msgid "C/D" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.employee.bymonth:0 +msgid "Yearly Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice +msgid "Print Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,line_ids:0 +msgid "Employee Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "July" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Configuration" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree +#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice +msgid "Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice +#: view:payment.advice.report:0 +msgid "Advices Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc:0 +msgid "IFSC" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,tds:0 +msgid "TDS" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,join_date:0 +msgid "Join Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.contract:0 +msgid "Error! Contract start-date must be less than contract end-date." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:res.company,dearness_allowance:0 +msgid "Dearness Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "August" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Deduction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Search Payment advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "SI. No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in confirm state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "December" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Sheet" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,month:0 +msgid "Month" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Non Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "or" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month +msgid "Hr Salary Employee By Month Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,category_id:0 +msgid "Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240 +#, python-format +msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "To Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.employee,number_of_year:0 +msgid "No. of Years of Service" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Note" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Salary Rule Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: selection:hr.payroll.advice,state:0 +#: view:payment.advice.report:0 +#: selection:payment.advice.report,state:0 +msgid "Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Date From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,voluntary_provident_fund:0 +msgid "Voluntary Provident Fund" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report +msgid "Payment Advice Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Status" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,city_type:0 +msgid "Type of City" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:res.company,dearness_allowance:0 +msgid "Check this box if your company provide Dearness Allowance to employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc_code:0 +#: field:payment.advice.report,ifsc_code:0 +#: report:payroll.advice:0 +msgid "IFSC Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "June" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,nbr:0 +msgid "# Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report +msgid "PaySlip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,date:0 +#: field:payment.advice.report,date:0 +msgid "Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "November" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all +msgid "This report performs analysis on Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "October" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Designation" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "January" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "Pay Head Employee Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:payroll.advice:0 +msgid "Authorized Signature" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice.line:0 +msgid "Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "To," +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,driver_salay:0 +msgid "Check this box if you provide allowance for driver" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice.line,advice_id:0 +#: field:hr.payslip,advice_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice +msgid "Bank Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Other No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Draft Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,neft:0 +msgid "Check this box if your company use online transfer for salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,number:0 +msgid "Number" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "September" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Cancel" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Day of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.employee:0 +msgid "Error! You cannot create recursive hierarchy of Employee(s)." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "This wizard will print report which display a pay head employee breakup for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Payslip Batches ready to be Adviced" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Pay Slip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Total Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,employee_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee +#: view:payment.advice.report:0 +#: field:payment.advice.report,employee_id:0 +msgid "Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Compute Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.employee,join_date:0 +msgid "Joining date of employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Dear Sir/Madam," +msgstr "Dear Sir/Madam," + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,note:0 +msgid "Description" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid ")" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Payroll" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "NEFT" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,bank_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,bank_id:0 +#: report:payroll.advice:0 +#: report:salary.detail.byyear:0 +msgid "Bank" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,end_date:0 +#: field:yearly.salary.detail,date_to:0 +msgid "End Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "February" +msgstr "" + +#. module: l10n_in_hr_payroll +#: sql_constraint:res.company:0 +msgid "The company name must be unique !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,name:0 +#: report:paylip.details.in:0 +#: field:payment.advice.report,name:0 +#: report:salary.employee.bymonth:0 +msgid "Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.contract,city_type:0 +msgid "Metro" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: field:hr.salary.employee.month,employee_ids:0 +#: view:yearly.salary.detail:0 +#: field:yearly.salary.detail,employee_ids:0 +msgid "Employees" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "April" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Name of the Employe" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257 +#, python-format +msgid "Please define bank account for the %s employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,start_date:0 +#: field:yearly.salary.detail,date_from:0 +msgid "Start Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,bank_id:0 +msgid "Select the Bank from which the salary is going to be paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "Employee Pay Head Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Phone No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Credit" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,name:0 +#: report:payroll.advice:0 +msgid "Bank Account No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,date:0 +msgid "Advice Date is used to search Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +msgid "May" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Create Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,year:0 +msgid "Year" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,neft:0 +#: field:payment.advice.report,neft:0 +msgid "NEFT Transaction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "Total" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "form period" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Year of Payment Advices" +msgstr ""
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py new file mode 100644 index 00000000000..085a2679db2 --- /dev/null +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py @@ -0,0 +1,283 @@ +#-*- coding:utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import time +from datetime import datetime +from dateutil.relativedelta import relativedelta +from calendar import isleap + +from tools.translate import _ +from osv import fields, osv +import netsvc +import decimal_precision as dp + +DATETIME_FORMAT = "%Y-%m-%d" + +class hr_contract(osv.osv): + """ + Employee contract allows to add different values in fields. + Fields are used in salary rule computation. + """ + + _inherit = 'hr.contract' + _description = 'HR Contract' + + _columns = { + 'tds': fields.float('TDS', digits_compute=dp.get_precision('Payroll'), help="Amount for Tax Deduction at Source"), + 'driver_salay': fields.boolean('Driver Salary', help="Check this box if you provide allowance for driver"), + 'medical_insurance': fields.float('Medical Insurance', digits_compute=dp.get_precision('Payroll'), help="Deduction towards company provided medical insurance"), + 'voluntary_provident_fund': fields.float('Voluntary Provident Fund (%)', digits_compute=dp.get_precision('Payroll'), help="VPF is a safe option wherein you can contribute more than the PF ceiling of 12% that has been mandated by the government and VPF computed as percentage(%)"), + 'house_rent_allowance_metro_nonmetro': fields.float('House Rent Allowance (%)', digits_compute=dp.get_precision('Payroll'), help="HRA is an allowance given by the employer to the employee for taking care of his rental or accommodation expenses for metro city it is 50 % and for non metro 40%.HRA computed as percentage(%)"), + 'supplementary_allowance': fields.float('Supplementary Allowance', digits_compute=dp.get_precision('Payroll')), + } + +hr_contract() + +class payroll_advice(osv.osv): + ''' + Bank Advice + ''' + _name = 'hr.payroll.advice' + _description = 'Bank Advice' + _columns = { + 'name':fields.char('Name', size=32, readonly=True, required=True, states={'draft': [('readonly', False)]},), + 'note': fields.text('Description'), + 'date': fields.date('Date', readonly=True, required=True, states={'draft': [('readonly', False)]}, help="Advice Date is used to search Payslips"), + 'state':fields.selection([ + ('draft', 'Draft'), + ('confirm', 'Confirmed'), + ('cancel', 'Cancelled'), + ], 'State', select=True, readonly=True), + 'number':fields.char('Reference', size=16, readonly=True), + 'line_ids':fields.one2many('hr.payroll.advice.line', 'advice_id', 'Employee Salary', states={'draft': [('readonly', False)]}, readonly=True), + 'chaque_nos':fields.char('Cheque Numbers', size=256), + 'neft': fields.boolean('NEFT Transaction', help="Check this box if your company use online transfer for salary"), + 'company_id':fields.many2one('res.company', 'Company', required=True, readonly=True, states={'draft': [('readonly', False)]}), + 'bank_id':fields.many2one('res.bank', 'Bank', readonly=True, states={'draft': [('readonly', False)]}, help="Select the Bank from which the salary is going to be paid"), + 'batch_id': fields.many2one('hr.payslip.run', 'Batch', readonly=True) + } + + _defaults = { + 'date': lambda * a: time.strftime('%Y-%m-%d'), + 'state': lambda * a: 'draft', + 'company_id': lambda self, cr, uid, context: \ + self.pool.get('res.users').browse(cr, uid, uid, + context=context).company_id.id, + 'note': "Please make the payroll transfer from above account number to the below mentioned account numbers towards employee salaries:" + } + + def compute_advice(self, cr, uid, ids, context=None): + """ + Advice - Create Advice lines in Payment Advice and + compute Advice lines. + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param ids: List of Advice’s IDs + @return: Advice lines + @param context: A standard dictionary for contextual values + """ + payslip_pool = self.pool.get('hr.payslip') + advice_line_pool = self.pool.get('hr.payroll.advice.line') + payslip_line_pool = self.pool.get('hr.payslip.line') + + for advice in self.browse(cr, uid, ids, context=context): + old_line_ids = advice_line_pool.search(cr, uid, [('advice_id', '=', advice.id)], context=context) + if old_line_ids: + advice_line_pool.unlink(cr, uid, old_line_ids, context=context) + slip_ids = payslip_pool.search(cr, uid, [('date_from', '<=', advice.date), ('date_to', '>=', advice.date), ('state', '=', 'done')], context=context) + for slip in payslip_pool.browse(cr, uid, slip_ids, context=context): + if not slip.employee_id.bank_account_id and not slip.employee_id.bank_account_id.acc_number: + raise osv.except_osv(_('Error !'), _('Please define bank account for the %s employee') % (slip.employee_id.name)) + line_ids = payslip_line_pool.search(cr, uid, [ ('slip_id', '=', slip.id), ('code', '=', 'NET')], context=context) + if line_ids: + line = payslip_line_pool.browse(cr, uid, line_ids, context=context)[0] + advice_line = { + 'advice_id': advice.id, + 'name': slip.employee_id.bank_account_id.acc_number, + 'employee_id': slip.employee_id.id, + 'bysal': line.total + } + advice_line_pool.create(cr, uid, advice_line, context=context) + payslip_pool.write(cr, uid, slip_ids, {'advice_id': advice.id}, context=context) + return True + + def confirm_sheet(self, cr, uid, ids, context=None): + """ + confirm Advice - confirmed Advice after computing Advice Lines.. + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param ids: List of confirm Advice’s IDs + @return: confirmed Advice lines and set sequence of Advice. + @param context: A standard dictionary for contextual values + """ + seq_obj = self.pool.get('ir.sequence') + for advice in self.browse(cr, uid, ids, context=context): + if not advice.line_ids: + raise osv.except_osv(_('Error !'), _('You can not confirm Payment advice without advice lines.')) + advice_date = datetime.strptime(advice.date, DATETIME_FORMAT) + advice_year = advice_date.strftime('%m') + '-' + advice_date.strftime('%Y') + number = seq_obj.get(cr, uid, 'payment.advice') + sequence_num = 'PAY' + '/' + advice_year + '/' + number + self.write(cr, uid, [advice.id], {'number': sequence_num, 'state': 'confirm'}, context=context) + return True + + def set_to_draft(self, cr, uid, ids, context=None): + """Resets Advice as draft. + """ + return self.write(cr, uid, ids, {'state':'draft'}, context=context) + + def cancel_sheet(self, cr, uid, ids, context=None): + """Marks Advice as cancelled. + """ + return self.write(cr, uid, ids, {'state':'cancel'}, context=context) + + def onchange_company_id(self, cr, uid, ids, company_id=False, context=None): + res = {} + if company_id: + company = self.pool.get('res.company').browse(cr, uid, [company_id], context=context)[0] + if company.partner_id.bank_ids: + res.update({'bank_id': company.partner_id.bank_ids[0].bank.id}) + return { + 'value':res + } +payroll_advice() + +class hr_payslip_run(osv.osv): + + _inherit = 'hr.payslip.run' + _description = 'Payslip Batches' + _columns = { + 'available_advice': fields.boolean('Made Payment Advice?', help="If this box is checked which means that Payment Advice exists for current batch", readonly=False), + } + def copy(self, cr, uid, id, default={}, context=None): + if not default: + default = {} + default.update({'available_advice': False}) + return super(hr_payslip_run, self).copy(cr, uid, id, default, context=context) + + def draft_payslip_run(self, cr, uid, ids, context=None): + res = super(hr_payslip_run, self).draft_payslip_run(cr, uid, ids, context=context) + self.write(cr, uid, ids, {'available_advice': False}, context=context) + return res + + def create_advice(self, cr, uid, ids, context=None): + wf_service = netsvc.LocalService("workflow") + payslip_pool = self.pool.get('hr.payslip') + payslip_line_pool = self.pool.get('hr.payslip.line') + advice_pool = self.pool.get('hr.payroll.advice') + advice_line_pool = self.pool.get('hr.payroll.advice.line') + users = self.pool.get('res.users').browse(cr, uid, [uid], context=context) + for run in self.browse(cr, uid, ids, context=context): + if run.available_advice: + raise osv.except_osv(_('Error !'), _("Payment advice already exists for %s, 'Set to Draft' to create a new advice.") %(run.name)) + advice_data = { + 'batch_id': run.id, + 'company_id': users[0].company_id.id, + 'name': run.name, + 'date': run.date_end, + 'bank_id': users[0].company_id.bank_ids and users[0].company_id.bank_ids[0].id or False + } + advice_id = advice_pool.create(cr, uid, advice_data, context=context) + slip_ids = [] + for slip_id in run.slip_ids: + wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'hr_verify_sheet', cr) + wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'process_sheet', cr) + slip_ids.append(slip_id.id) + + for slip in payslip_pool.browse(cr, uid, slip_ids, context=context): + if not slip.employee_id.bank_account_id or not slip.employee_id.bank_account_id.acc_number: + raise osv.except_osv(_('Error !'), _('Please define bank account for the %s employee') % (slip.employee_id.name)) + line_ids = payslip_line_pool.search(cr, uid, [('slip_id', '=', slip.id), ('code', '=', 'NET')], context=context) + if line_ids: + line = payslip_line_pool.browse(cr, uid, line_ids, context=context)[0] + advice_line = { + 'advice_id': advice_id, + 'name': slip.employee_id.bank_account_id.acc_number, + 'employee_id': slip.employee_id.id, + 'bysal': line.total + } + advice_line_pool.create(cr, uid, advice_line, context=context) + return self.write(cr, uid, ids, {'available_advice' : True}) + +hr_payslip_run() + +class payroll_advice_line(osv.osv): + ''' + Bank Advice Lines + ''' + def onchange_employee_id(self, cr, uid, ids, employee_id=False, context=None): + res = {} + hr_obj = self.pool.get('hr.employee') + if not employee_id: + return {'value': res} + employee = hr_obj.browse(cr, uid, [employee_id], context=context)[0] + res.update({'name': employee.bank_account_id.acc_number , 'ifsc_code': employee.bank_account_id.bank_bic or ''}) + return {'value': res} + + _name = 'hr.payroll.advice.line' + _description = 'Bank Advice Lines' + _columns = { + 'advice_id': fields.many2one('hr.payroll.advice', 'Bank Advice'), + 'name': fields.char('Bank Account No.', size=25, required=True), + 'ifsc_code': fields.char('IFSC Code', size=16), + 'employee_id': fields.many2one('hr.employee', 'Employee', required=True), + 'bysal': fields.float('By Salary', digits_compute=dp.get_precision('Payroll')), + 'debit_credit': fields.char('C/D', size=3, required=False), + 'company_id': fields.related('advice_id', 'company_id', type='many2one', required=False, relation='res.company', string='Company', store=True), + 'ifsc': fields.related('advice_id', 'neft', type='boolean', string='IFSC'), + } + _defaults = { + 'debit_credit': 'C', + } + +payroll_advice_line() + +class hr_payslip(osv.osv): + ''' + Employee Pay Slip + ''' + _inherit = 'hr.payslip' + _description = 'Pay Slips' + _columns = { + 'advice_id': fields.many2one('hr.payroll.advice', 'Bank Advice') + } + + def copy(self, cr, uid, id, default={}, context=None): + if not default: + default = {} + default.update({'advice_id' : False}) + return super(hr_payslip, self).copy(cr, uid, id, default, context=context) + +hr_payslip() + +class res_company(osv.osv): + + _inherit = 'res.company' + _columns = { + 'dearness_allowance': fields.boolean('Dearness Allowance', help="Check this box if your company provide Dearness Allowance to employee") + } + _defaults = { + 'dearness_allowance': True, + } + +res_company() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_demo.xml b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_demo.xml new file mode 100644 index 00000000000..bcb168467a9 --- /dev/null +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_demo.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <!-- Salary Structure --> + + <record id="hr_payroll_salary_structure_ind_emp" model="hr.payroll.structure"> + <field name="code">NE</field> + <field name="name">Non-Executive Employee</field> + <field eval="[(6, 0, [ref('hr_salary_rule_medical'), ref('hr_salary_rule_da'), ref('hr_salary_rule_lta'), ref('hr_salary_rule_telephone'), ref('hr_salary_rule_internet'), ref('hr_payroll_rule_child1')])]" name="rule_ids"/> + <field name="company_id" ref="base.main_company"/> + <field name="parent_id" ref="hr_payroll.structure_base"/> + </record> + + </data> +</openerp> diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml new file mode 100644 index 00000000000..7f27291051f --- /dev/null +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml @@ -0,0 +1,38 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <report + auto="False" + id="payslip_details_report" + model="hr.payslip" + name="paylip.details.in" + rml="l10n_in_hr_payroll/report/report_payslip_details.rml" + string="PaySlip Details" /> + + <report + auto="False" + id="payroll_advice" + model="hr.payroll.advice" + name="payroll.advice" + rml="l10n_in_hr_payroll/report/report_payroll_advice.rml" + string="Print Advice" /> + + <report + auto="False" + id="hr_salary_employee_bymonth" + model="hr.salary.employee.month" + name="salary.employee.bymonth" + rml="l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.rml" + string="Yearly Salary by Head" /> + + <report + auto="False" + id="yearly_salary" + model="yearly.salary.detail" + name="salary.detail.byyear" + rml="l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml" + string="Yearly Salary by Employee" /> + + </data> +</openerp> diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_sequence.xml b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_sequence.xml new file mode 100644 index 00000000000..3941d6461c9 --- /dev/null +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_sequence.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data noupdate="1"> + + <record id="seq_type_payment_advice" model="ir.sequence.type"> + <field name="name">Payment Advice</field> + <field name="code">payment.advice</field> + </record> + + <record id="seq_payment_advice" model="ir.sequence"> + <field name="name">Payment Advice</field> + <field name="code">payment.advice</field> + <field name="padding">3</field> + </record> + + </data> +</openerp>
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_view.xml b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_view.xml new file mode 100644 index 00000000000..37d2f865770 --- /dev/null +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_view.xml @@ -0,0 +1,220 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <record id="hr_contract_form_in_inherit" model="ir.ui.view"> + <field name="name">hr.contract.form.in.inherit</field> + <field name="model">hr.contract</field> + <field name="inherit_id" ref="hr_payroll.hr_contract_form_inherit"/> + <field name="arch" type="xml"> + <data> + <xpath expr="//field[@name='struct_id']" position="after"> + <group col="2" colspan="2" name="right_column"> + <separator colspan="2" string="Allowance"/> + <field name="driver_salay"/> + <field name="house_rent_allowance_metro_nonmetro"/> + <field name="supplementary_allowance"/> + </group> + <group col="2" colspan="2" name="left_column"> + <separator colspan="2" string="Deduction"/> + <field name="tds"/> + <field name="voluntary_provident_fund"/> + <field name="medical_insurance"/> + </group> + </xpath> + </data> + </field> + </record> + + <record id="hr_payslip_run_form_inherit" model="ir.ui.view"> + <field name="name">hr.payslip.run.form.inherit</field> + <field name="model">hr.payslip.run</field> + <field name="inherit_id" ref="hr_payroll.hr_payslip_run_form"/> + <field name="arch" type="xml"> + <data> + <xpath expr="//field[@name='credit_note']" position="after"> + <newline/> + <field name="available_advice"/> + </xpath> + <xpath expr="//button[@string='Set to Draft']" position="after"> + <button name="create_advice" string="Create Advice" type="object" states="close" /> + </xpath> + </data> + </field> + </record> + + <record id="hr_payslip_run_search_inherit" model="ir.ui.view"> + <field name="name">hr.payslip.run.search.inherit</field> + <field name="model">hr.payslip.run</field> + <field name="inherit_id" ref="hr_payroll.hr_payslip_run_filter"/> + <field name="arch" type="xml"> + <data> + <xpath expr="//field[@name='date_end']" position="after"> + <separator orientation="vertical"/> + <filter icon="terp-gtk-go-back-rtl" string="To Advice" domain="[('available_advice','=', False)]" help="Payslip Batches ready to be Adviced"/> + </xpath> + </data> + </field> + </record> + + <record id="view_hr_bank_advice_tree" model="ir.ui.view"> + <field name="name">hr.payroll.advice.tree</field> + <field name="model">hr.payroll.advice</field> + <field name="arch" type="xml"> + <tree string="Bank Advice"> + <field name="date"/> + <field name="number"/> + <field name="name"/> + <field name="company_id" groups="base.group_multi_company" widget="selection"/> + <field name="bank_id"/> + <field name="state"/> + </tree> + </field> + </record> + + <record id="view_hr_bank_advice_form" model="ir.ui.view"> + <field name="name">hr.payroll.advice.form</field> + <field name="model">hr.payroll.advice</field> + <field name="arch" type="xml"> + <form string="Bank Advice" version="7.0"> + <header> + <button name="confirm_sheet" string="Confirm Sheet" states="draft" type="object" class="oe_highlight"/> + <button name="compute_advice" string="Compute Advice" states="draft" type="object" class="oe_highlight"/> + <button name="cancel_sheet" string="Cancel" states="draft" type="object"/> + <button name="set_to_draft" string="Set to Draft" states="cancel,confirm" type="object"/> + <div class="oe_right"> + <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft"/> + </div> + <div class="oe_clear"/> + </header> + <sheet> + <group> + <label for="Name" class="oe_edit_only" string="Name"/> + <h2><field name="name"/></h2> + <label for="date" class="oe_edit_only"/> + <h2><field name="date"/></h2> + <group colspan="3" col="6"> + <field name="bank_id"/> + <field name="number"/> + </group> + </group> + <notebook colspan="4"> + <page string="Payment Lines"> + <field name="line_ids" colspan="4" nolabel="1"> + <tree string="Payment Lines" editable="bottom"> + <field name="employee_id" on_change="onchange_employee_id(employee_id)"/> + <field name="name"/> + <field name="ifsc" invisible="1"/> + <field name="ifsc_code" attrs="{'invisible':[('ifsc','=', False)]}" /> + <field name="bysal"/> + <field name="debit_credit"/> + </tree> + </field> + </page> + <page string="Other Information"> + <group colspan="4" col="6"> + <field name="company_id" on_change="onchange_company_id(company_id)" groups="base.group_multi_company" widget="selection"/> + <field name="chaque_nos"/> + <newline/> + <field name="neft"/> + <field name="batch_id"/> + </group> + <separator colspan="4" string="Letter Details"/> + <field name="note" colspan="4" nolabel="1"/> + </page> + </notebook> + </sheet> + </form> + </field> + </record> + + <record id="view_hr_payroll_advice_filter" model="ir.ui.view"> + <field name="name">hr.payroll.advice.select</field> + <field name="model">hr.payroll.advice</field> + <field name="arch" type="xml"> + <search string="Search Payment advice"> + <group> + <filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Draft Advices"/> + <filter icon="terp-camera_test" string="Confirm" domain="[('state','=','confirm')]" help="Confirm Advices"/> + <separator orientation="vertical"/> + <field name="date"/> + <field name="number"/> + <field name="name"/> + <field name="bank_id"/> + <field name="batch_id"/> + </group> + <newline/> + <group expand="0" string="Group By..."> + <filter string="Bank" name="bank_id" icon="terp-go-home" context="{'group_by':'bank_id'}"/> + <separator orientation="vertical"/> + <filter string="Status" name="state" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> + <separator orientation="vertical" /> + <filter string="Company" name="company_id" groups="base.group_multi_company" icon="terp-go-home" context="{'group_by':'company_id'}"/> + </group> + </search> + </field> + </record> + + <record id="action_view_hr_bank_advice_tree" model="ir.actions.act_window"> + <field name="name">Payment Advices</field> + <field name="res_model">hr.payroll.advice</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="view_id" ref="view_hr_bank_advice_tree"/> + <field name="search_view_id" ref="view_hr_payroll_advice_filter"/> + </record> + + <menuitem + action="action_view_hr_bank_advice_tree" + id="hr_menu_payment_advice" + parent="hr_payroll.menu_hr_root_payroll" + /> + + <record id="view_advice_line_form" model="ir.ui.view"> + <field name="name">advice.line.form</field> + <field name="model">hr.payroll.advice.line</field> + <field name="arch" type="xml"> + <form string="Advice Lines" version="7.0"> + <sheet> + <label for="advice_id" class="oe_edit_only"/> + <h1><field name="advice_id"/></h1> + <group> + <field name="employee_id" on_change="onchange_employee_id(employee_id)" /> + <field name="name" /> + <field name="ifsc" invisible="1"/> + <field name="ifsc_code" attrs="{'invisible':[('ifsc','=', False)]}" /> + <field name="bysal" /> + <field name="debit_credit" /> + </group> + </sheet> + </form> + </field> + </record> + + <record id="view_res_company_da" model="ir.ui.view"> + <field name="name">res.company.inherit</field> + <field name="model">res.company</field> + <field name="inherit_id" ref="base.view_company_form"/> + <field name="arch" type="xml"> + <data> + <page string="Configuration" position="inside"> + <group name="rule" string="Payroll"> + <field name="dearness_allowance"/> + </group> + </page> + </data> + </field> + </record> + + <!-- Shortcuts --> + + <act_window name="Payslips" + domain="[('advice_id', '=', active_id)]" + res_model="hr.payslip" + src_model="hr.payroll.advice" + view_id ="hr_payroll.view_hr_payslip_tree" + id="act_hr_emp_payslip_list" + /> + + </data> +</openerp> diff --git a/addons/l10n_in_hr_payroll/report/__init__.py b/addons/l10n_in_hr_payroll/report/__init__.py new file mode 100644 index 00000000000..8a20170c384 --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/__init__.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +#-*- coding:utf-8 -*- + +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved +# d$ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import report_payslip_details +import report_payroll_advice +import report_hr_salary_employee_bymonth +import payment_advice_report +import report_hr_yearly_salary_detail +import payslip_report + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_in_hr_payroll/report/payment_advice_report.py b/addons/l10n_in_hr_payroll/report/payment_advice_report.py new file mode 100644 index 00000000000..838334913a5 --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/payment_advice_report.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2012-Today OpenERP SA (<http://www.openerp.com>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import tools +from osv import fields, osv + +class payment_advice_report(osv.osv): + _name = "payment.advice.report" + _description = "Payment Advice Analysis" + _auto = False + _columns = { + 'name':fields.char('Name', size=32, readonly=True), + 'date': fields.date('Date', readonly=True,), + 'year': fields.char('Year', size=4, readonly=True), + 'month': fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'), + ('05', 'May'), ('06', 'June'), ('07', 'July'), ('08', 'August'), ('09', 'September'), + ('10', 'October'), ('11', 'November'), ('12', 'December')], 'Month', readonly=True), + 'day': fields.char('Day', size=128, readonly=True), + 'state':fields.selection([ + ('draft', 'Draft'), + ('confirm', 'Confirmed'), + ('cancel', 'Cancelled'), + ], 'State', select=True, readonly=True), + 'employee_id': fields.many2one('hr.employee', 'Employee', readonly=True), + 'nbr': fields.integer('# Payment Lines', readonly=True), + 'number':fields.char('Number', size=16, readonly=True), + 'bysal': fields.float('By Salary', readonly=True), + 'bank_id':fields.many2one('res.bank', 'Bank', readonly=True), + 'company_id':fields.many2one('res.company', 'Company', readonly=True), + 'cheque_nos':fields.char('Cheque Numbers', size=256, readonly=True), + 'neft': fields.boolean('NEFT Transaction', readonly=True), + 'ifsc_code': fields.char('IFSC Code', size=32, readonly=True), + 'employee_bank_no': fields.char('Employee Bank Account', size=32, required=True), + } + def init(self, cr): + tools.drop_view_if_exists(cr, 'payment_advice_report') + cr.execute(""" + create or replace view payment_advice_report as ( + select + min(l.id) as id, + sum(l.bysal) as bysal, + p.name, + p.state, + p.date, + p.number, + p.company_id, + p.bank_id, + p.chaque_nos as cheque_nos, + p.neft, + l.employee_id, + l.ifsc_code, + l.name as employee_bank_no, + to_char(p.date, 'YYYY') as year, + to_char(p.date, 'MM') as month, + to_char(p.date, 'YYYY-MM-DD') as day, + 1 as nbr + from + hr_payroll_advice as p + left join hr_payroll_advice_line as l on (p.id=l.advice_id) + where + l.employee_id IS NOT NULL + group by + p.number,p.name,p.date,p.state,p.company_id,p.bank_id,p.chaque_nos,p.neft, + l.employee_id,l.advice_id,l.bysal,l.ifsc_code, l.name + ) + """) +payment_advice_report() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_in_hr_payroll/report/payment_advice_report_view.xml b/addons/l10n_in_hr_payroll/report/payment_advice_report_view.xml new file mode 100644 index 00000000000..7a023f09608 --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/payment_advice_report_view.xml @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + + <record id="view_payment_advice_tree" model="ir.ui.view"> + <field name="name">payment.advice.report.tree</field> + <field name="model">payment.advice.report</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree colors="blue:state == 'draft';black:state == 'confirm';gray:state == 'cancel' " string="Advices Analysis"> + <field name="nbr" sum="# Payment Lines"/> + <field name="name" invisible="1"/> + <field name="employee_id" invisible="1"/> + <field name="date" invisible="1"/> + <field name="bank_id" invisible="1"/> + <field name="state" invisible="1"/> + <field name="number" invisible="1"/> + <field name="bysal" sum="Total Salary"/> + <field name="year" invisible="1"/> + <field name="day" invisible="1"/> + <field name="month" invisible="1"/> + <field name="company_id" invisible="1"/> + <field name="cheque_nos" invisible="1"/> + <field name="neft" invisible="1"/> + <field name="ifsc_code" invisible="1"/> + </tree> + </field> + </record> + + + <record id="view_payment_advice_search" model="ir.ui.view"> + <field name="name">payment.advice.report.search</field> + <field name="model">payment.advice.report</field> + <field name="type">search</field> + <field name="arch" type="xml"> + <search string="Advices Analysis"> + <group> + <filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Payment Advices which are in draft state"/> + <filter icon="terp-check" string="Confirm" name="confirm" domain="[('state','=','confirm')]" help="Payment Advices which are in confirm state"/> + <separator orientation="vertical"/> + <filter icon="terp-camera_test" string="NEFT" domain="[('neft','=',True)]" help="Advices which are paid using NEFT transfer"/> + <separator orientation="vertical"/> + <field name="date"/> + <separator orientation="vertical"/> + <field name="number"/> + <field name="name"/> + <field name="employee_id"/> + <field name="cheque_nos"/> + </group> + <newline/> + <group expand="0" string="Extended Filters..."> + <field name="ifsc_code"/> + <field name="bank_id" widget="selection"/> + <field name="employee_bank_no"/> + <separator orientation="vertical"/> + <field name="company_id" groups="base.group_multi_company" widget="selection"/> + </group> + <newline/> + <group expand="1" string="Group By..."> + <filter string="Employee" icon="terp-personal" context="{'group_by':'employee_id'}" /> + <filter string="Bank" icon="terp-go-home" context="{'group_by':'bank_id'}"/> + <separator orientation="vertical"/> + <filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> + <separator orientation="vertical"/> + <filter string="Company" icon="terp-go-home" groups="base.group_multi_company" context="{'group_by':'company_id'}"/> + <separator orientation="vertical"/> + <filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Day of Payment Advices"/> + <filter string="Month" name="order_month" icon="terp-go-month" context="{'group_by':'month'}" help="Month of Payment Advices"/> + <filter string="Year" icon="terp-go-year" context="{'group_by':'year'}" help="Year of Payment Advices"/> + </group> + </search> + </field> + </record> + + <record id="action_payment_advice_report_all" model="ir.actions.act_window"> + <field name="name">Advices Analysis</field> + <field name="res_model">payment.advice.report</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> + <field name="view_id" ref="view_payment_advice_tree"/> + <field name="context">{'search_default_confirm':1,'group_by_no_leaf':1,'group_by':[]}</field> + <field name="help">This report performs analysis on Payment Advices</field> + </record> + + <menuitem action="action_payment_advice_report_all" id="menu_reporting_payment_advice" parent="hr.menu_hr_reporting" sequence="5" groups="base.group_hr_manager"/> + +</data> +</openerp> diff --git a/addons/l10n_in_hr_payroll/report/payslip_report.py b/addons/l10n_in_hr_payroll/report/payslip_report.py new file mode 100644 index 00000000000..b688af4329b --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/payslip_report.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2012-Today OpenERP SA (<http://www.openerp.com>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import tools +from osv import fields, osv + +class payslip_report(osv.osv): + _name = "payslip.report" + _description = "Payslip Analysis" + _auto = False + _columns = { + 'name':fields.char('Name', size=32, readonly=True), + 'date_from': fields.date('Date From', readonly=True,), + 'date_to': fields.date('Date To', readonly=True,), + 'year': fields.char('Year', size=4, readonly=True), + 'month': fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'), + ('05', 'May'), ('06', 'June'), ('07', 'July'), ('08', 'August'), ('09', 'September'), + ('10', 'October'), ('11', 'November'), ('12', 'December')], 'Month', readonly=True), + 'day': fields.char('Day', size=128, readonly=True), + 'state': fields.selection([ + ('draft', 'Draft'), + ('done', 'Done'), + ('cancel', 'Rejected'), + ], 'State', readonly=True), + 'employee_id': fields.many2one('hr.employee', 'Employee', readonly=True), + 'nbr': fields.integer('# Payslip lines', readonly=True), + 'number': fields.char('Number', size=16, readonly=True), + 'struct_id': fields.many2one('hr.payroll.structure', 'Structure', readonly=True), + 'company_id':fields.many2one('res.company', 'Company', readonly=True), + 'paid': fields.boolean('Made Payment Order ? ', readonly=True), + 'total': fields.float('Total', readonly=True), + 'category_id':fields.many2one('hr.salary.rule.category', 'Category', readonly=True), + } + def init(self, cr): + tools.drop_view_if_exists(cr, 'payslip_report') + cr.execute(""" + create or replace view payslip_report as ( + select + min(l.id) as id, + l.name, + p.struct_id, + p.state, + p.date_from, + p.date_to, + p.number, + p.company_id, + p.paid, + l.category_id, + l.employee_id, + sum(l.total) as total, + to_char(p.date_from, 'YYYY') as year, + to_char(p.date_from, 'MM') as month, + to_char(p.date_from, 'YYYY-MM-DD') as day, + to_char(p.date_to, 'YYYY') as to_year, + to_char(p.date_to, 'MM') as to_month, + to_char(p.date_to, 'YYYY-MM-DD') as to_day, + 1 AS nbr + from + hr_payslip as p + left join hr_payslip_line as l on (p.id=l.slip_id) + where + l.employee_id IS NOT NULL + group by + p.number,l.name,p.date_from,p.date_to,p.state,p.company_id,p.paid, + l.employee_id,p.struct_id,l.category_id + ) + """) +payslip_report() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_in_hr_payroll/report/payslip_report_view.xml b/addons/l10n_in_hr_payroll/report/payslip_report_view.xml new file mode 100644 index 00000000000..5588fc6edca --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/payslip_report_view.xml @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + + <record id="view_payslip_tree" model="ir.ui.view"> + <field name="name">payslip.report.tree</field> + <field name="model">payslip.report</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree colors="blue:state == 'draft';black:state == 'done';gray:state == 'cancel' " string="Payslip Analysis"> + <field name="nbr" sum="# Payslip Lines"/> + <field name="name"/> + <field name="employee_id" invisible="1"/> + <field name="date_to" invisible="1"/> + <field name="date_from" invisible="1"/> + <field name="state" invisible="1"/> + <field name="number" invisible="1"/> + <field name="struct_id" invisible="1"/> + <field name="year" invisible="1"/> + <field name="day" invisible="1"/> + <field name="month" invisible="1"/> + <field name="company_id" invisible="1"/> + <field name="paid" invisible="1"/> + <field name="total" /> + <field name="category_id" invisible="1"/> + </tree> + </field> + </record> + + <record id="view_payslip_search" model="ir.ui.view"> + <field name="name">payslip.report.search</field> + <field name="model">payslip.report</field> + <field name="type">search</field> + <field name="arch" type="xml"> + <search string="Payslip Analysis"> + <group> + <filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Payslips which are in draft state"/> + <filter icon="terp-check" string="Done" name="done" domain="[('state','=','done')]" help="Payslips which are in done state"/> + <separator orientation="vertical"/> + <filter icon="terp-camera_test" string="Paid" domain="[('paid','=',True)]" help="Payslips which are paid"/> + <separator orientation="vertical"/> + <field name="date_from"/> + <field name="date_to"/> + <separator orientation="vertical"/> + <field name="number"/> + <field name="name"/> + <field name="employee_id"/> + </group> + <newline/> + <group expand="1" string="Extended Filters..."> + <separator orientation="vertical"/> + <field name="company_id" groups="base.group_multi_company" widget="selection"/> + </group> + <newline/> + <group expand="1" string="Group By..."> + <filter string="Employee" name="employee" icon="terp-personal" context="{'group_by':'employee_id'}" /> + <filter string="Structure" context="{'group_by':'struct_id'}" /> + <filter string="Category" name="category" context="{'group_by':'category_id'}" /> + <filter string="Payslip Line" context="{'group_by':'name'}" /> + <separator orientation="vertical"/> + <filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> + <separator orientation="vertical"/> + <filter string="Company" icon="terp-go-home" groups="base.group_multi_company" context="{'group_by':'company_id'}"/> + <separator orientation="vertical"/> + <filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Day of Payslip"/> + <filter string="Month" name="order_month" icon="terp-go-month" context="{'group_by':'month'}" help="Month of Payslip"/> + <filter string="Year" icon="terp-go-year" context="{'group_by':'year'}" help="Year of Payslip"/> + + </group> + </search> + </field> + </record> + + <record id="action_payslip_report_all" model="ir.actions.act_window"> + <field name="name">Payslip Analysis</field> + <field name="res_model">payslip.report</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> + <field name="view_id" ref="view_payslip_tree"/> + <field name="context">{'search_default_employee':1,'search_default_category':1,'group_by_no_leaf':uid,'group_by':[]}</field> + <field name="help">This report performs analysis on Payslip</field> + </record> + + <menuitem action="action_payslip_report_all" id="menu_reporting_payslip" parent="hr.menu_hr_reporting" sequence="5" groups="base.group_hr_manager"/> + +</data> +</openerp> diff --git a/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.py b/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.py new file mode 100644 index 00000000000..54b0daa7749 --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.py @@ -0,0 +1,133 @@ +#-*- coding:utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import datetime +import time + +from report import report_sxw + +class report_hr_salary_employee_bymonth(report_sxw.rml_parse): + + def __init__(self, cr, uid, name, context): + super(report_hr_salary_employee_bymonth, self).__init__(cr, uid, name, context=context) + + self.localcontext.update({ + 'time': time, + 'get_employee': self.get_employee, + 'get_periods': self.get_periods, + 'get_months_tol': self.get_months_tol, + 'get_total': self.get_total, + }) + + self.context = context + self.mnths = [] + self.mnths_total = [] + self.total = 0.0 + + def get_periods(self, form): +# Get start year-month-date and end year-month-date + first_year = int(form['start_date'][0:4]) + last_year = int(form['end_date'][0:4]) + + first_month = int(form['start_date'][5:7]) + last_month = int(form['end_date'][5:7]) + no_months = (last_year-first_year) * 12 + last_month - first_month + 1 + current_month = first_month + current_year = first_year + +# Get name of the months from integer + mnth_name = [] + for count in range(0, no_months): + m = datetime.date(current_year, current_month, 1).strftime('%b') + mnth_name.append(m) + self.mnths.append(str(current_month) + '-' + str(current_year)) + if current_month == 12: + current_month = 0 + current_year = last_year + current_month = current_month + 1 + for c in range(0, (12-no_months)): + mnth_name.append('None') + self.mnths.append('None') + return [mnth_name] + + def get_salary(self, form, emp_id, emp_salary, total_mnths): + category_id = form.get('category_id', []) + category_id = category_id and category_id[0] or False + self.cr.execute("select to_char(date_to,'mm-yyyy') as to_date ,sum(pl.total) \ + from hr_payslip_line as pl \ + left join hr_payslip as p on pl.slip_id = p.id \ + left join hr_employee as emp on emp.id = p.employee_id \ + left join resource_resource as r on r.id = emp.resource_id \ + where p.state = 'done' and p.employee_id = %s and pl.category_id = %s \ + group by r.name, p.date_to,emp.id",(emp_id, category_id,)) + sal = self.cr.fetchall() + salary = dict(sal) + total = 0.0 + cnt = 1 + + for month in self.mnths: + if month <> 'None': + if len(month) != 7: + month = '0' + str(month) + if month in salary and salary[month]: + emp_salary.append(salary[month]) + total += salary[month] + total_mnths[cnt] = total_mnths[cnt] + salary[month] + else: + emp_salary.append(0.00) + else: + emp_salary.append('') + total_mnths[cnt] = '' + cnt = cnt + 1 + return emp_salary, total, total_mnths + + def get_employee(self, form): + emp_salary = [] + salary_list = [] + total_mnths=['Total', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + emp_obj = self.pool.get('hr.employee') + emp_ids = form.get('employee_ids', []) + employees = emp_obj.browse(self.cr, self.uid, emp_ids, context=self.context) + + for emp_id in employees: + emp_salary.append(emp_id.name) + total = 0.0 + emp_salary, total, total_mnths = self.get_salary(form, emp_id.id, emp_salary, total_mnths) + emp_salary.append(total) + salary_list.append(emp_salary) + emp_salary = [] + self.mnths_total.append(total_mnths) + return salary_list + + def get_months_tol(self): + return self.mnths_total + + def get_total(self): + for item in self.mnths_total: + for count in range(1, len(item)): + if item[count] == '': + continue + self.total += item[count] + return self.total + +report_sxw.report_sxw('report.salary.employee.bymonth', 'hr.salary.employee.month', 'l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.rml', parser=report_hr_salary_employee_bymonth, header='internal') + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.rml b/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.rml new file mode 100644 index 00000000000..8f2a57d2018 --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.rml @@ -0,0 +1,293 @@ +<?xml version="1.0"?> +<document filename="yearly salary report.pdf"> + <template pageSize="(620.0,842.0)" title="Yearly Salary Report" author="OpenERP" allowSplitting="50"> + <pageTemplate id="first"> + <frame id="first" x1="28.0" y1="28.0" width="539" height="772"/> + </pageTemplate> + </template> + <stylesheet> + <blockTableStyle id="Standard_Outline"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table1"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="5,0" stop="5,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="6,0" stop="6,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="6,-1" stop="6,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="7,0" stop="7,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="7,-1" stop="7,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="8,0" stop="8,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="8,-1" stop="8,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="9,0" stop="9,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="9,-1" stop="9,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="10,0" stop="10,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="10,-1" stop="10,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="11,0" stop="11,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="11,-1" stop="11,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="12,0" stop="12,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="12,-1" stop="12,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="13,0" stop="13,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="13,-1" stop="13,-1"/> + </blockTableStyle> + <blockTableStyle id="Table2"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="5,-1" stop="5,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="6,-1" stop="6,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="7,-1" stop="7,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="8,-1" stop="8,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="9,-1" stop="9,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="10,-1" stop="10,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="11,-1" stop="11,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="12,-1" stop="12,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="13,-1" stop="13,-1"/> + </blockTableStyle> + <blockTableStyle id="Table6"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="5,0" stop="5,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="6,0" stop="6,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="7,0" stop="7,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="8,0" stop="8,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="9,0" stop="9,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="10,0" stop="10,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="11,0" stop="11,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="12,0" stop="12,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="13,0" stop="13,0"/> + </blockTableStyle> + <initialize> + <paraStyle name="all" alignment="justify"/> + </initialize> + <paraStyle name="P1" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P2" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P3" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P4" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P5" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P6" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Standard" fontName="Helvetica"/> + <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="Index" fontName="Helvetica"/> + <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="7.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="7.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_1" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Table Contents" fontName="Helvetica"/> + <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/> + <paraStyle name="terp_default_9" fontName="Helvetica" fontSize="5.0" leading="5" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="5.0" leading="2" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="7.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Right_9_Bold" fontName="Helvetica-Bold" fontSize="5.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="5.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <images/> + </stylesheet> + <story> + <para style="P1">Yearly Salary Details </para> + <para style="P5">From <u>[[ formatLang(data['form']['start_date'], date=True) ]]</u> To <u>[[ formatLang(data['form']['end_date'], date=True) ]]</u> of <u>[[ (data['form']['category_id'][1]) ]]</u> Category</para> + <para style="P6"> + <font color="white"> </font> + </para> + <section> + <para style="terp_default_1">[[ repeatIn(get_periods(data['form']),'m') ]]</para> + <blockTable colWidths="55.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,57.0" style="Table1"> + <tr> + <td> + <para style="terp_tblheader_Details">Name</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[0] != 'None' and m[0] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[1] != 'None' and m[1] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[2] != 'None' and m[2] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[3] != 'None' and m[3] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[4] != 'None' and m[4] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[5] != 'None' and m[5] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[6] != 'None' and m[6] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[7] != 'None' and m[7] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[8] != 'None' and m[8] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[9] != 'None' and m[9] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[10] != 'None' and m[10] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[11] != 'None' and m[11] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">Total</para> + </td> + </tr> + </blockTable> + <section> + <para style="terp_default_1">[[ repeatIn(get_employee(data['form']),'e') ]]</para> + <blockTable colWidths="55.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,57.0" style="Table2"> + <tr> + <td> + <para style="terp_default_9">[[ e[0] ]]</para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[1]!='' and formatLang(e[1])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[2]!='' and formatLang(e[2])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[3]!='' and formatLang(e[3])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[4]!='' and formatLang(e[4])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[5]!='' and formatLang(e[5])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[6]!='' and formatLang(e[6])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[7]!='' and formatLang(e[7])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[8]!='' and formatLang(e[8])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[9]!='' and formatLang(e[9])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[10]!='' and formatLang(e[10])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[11]!='' and formatLang(e[11])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica" size="5.0">[[ (e[12]!='' and formatLang(e[12])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_9_Bold">[[ formatLang(e[13]) ]] [[company.currency_id.symbol]]</para> + </td> + </tr> + </blockTable> + </section> + </section> + <section> + <para style="terp_default_1">[[ repeatIn(get_months_tol(),'t') ]]</para> + <blockTable colWidths="55.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,40.0,57.0" style="Table6"> + <tr> + <td> + <para style="terp_tblheader_Details">Total</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[1]) or removeParentNode('para') ]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[2]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[3]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[4]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[5]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[6]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[7]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[8]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[9]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[10]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[11]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(t[12]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para> + </td> + <td> + <para style="terp_tblheader_General_Right">[[ formatLang(get_total()) ]] [[company.currency_id.symbol]]</para> + </td> + </tr> + </blockTable> + </section> + </story> +</document> diff --git a/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.py b/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.py new file mode 100644 index 00000000000..576fd302f6f --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.py @@ -0,0 +1,164 @@ +#-*- coding:utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import time +import datetime +from report import report_sxw + +class employees_yearly_salary_report(report_sxw.rml_parse): + + def __init__(self, cr, uid, name, context): + super(employees_yearly_salary_report, self).__init__(cr, uid, name, context) + + self.localcontext.update({ + 'time': time, + 'get_employee': self.get_employee, + 'get_employee_detail': self.get_employee_detail, + 'cal_monthly_amt': self.cal_monthly_amt, + 'get_periods': self.get_periods, + 'get_total': self.get_total, + 'get_allow': self.get_allow, + 'get_deduct': self.get_deduct, + }) + + self.context = context + + def get_periods(self, form): + self.mnths = [] +# Get start year-month-date and end year-month-date + first_year = int(form['date_from'][0:4]) + last_year = int(form['date_to'][0:4]) + + first_month = int(form['date_from'][5:7]) + last_month = int(form['date_to'][5:7]) + no_months = (last_year-first_year) * 12 + last_month - first_month + 1 + current_month = first_month + current_year = first_year + +# Get name of the months from integer + mnth_name = [] + for count in range(0, no_months): + m = datetime.date(current_year, current_month, 1).strftime('%b') + mnth_name.append(m) + self.mnths.append(str(current_month) + '-' + str(current_year)) + if current_month == 12: + current_month = 0 + current_year = last_year + current_month = current_month + 1 + for c in range(0, (12-no_months)): + mnth_name.append('None') + self.mnths.append('None') + return [mnth_name] + + def get_employee(self, form): + return self.pool.get('hr.employee').browse(self.cr,self.uid, form.get('employee_ids', []), context=self.context) + + def get_employee_detail(self, form, obj): + self.allow_list = [] + self.deduct_list = [] + self.total = 0.00 + gross = False + net = False + + payslip_lines = self.cal_monthly_amt(form, obj.id) + for line in payslip_lines: + for line[0] in line: + if line[0][0] == "Gross": + gross = line[0] + elif line[0][0] == "Net": + net = line[0] + elif line[0][13] > 0.0 and line[0][0] != "Net": + self.total += line[0][len(line[0])-1] + self.allow_list.append(line[0]) + elif line[0][13] < 0.0: + self.total += line[0][len(line[0])-1] + self.deduct_list.append(line[0]) + if gross: + self.allow_list.append(gross) + if net: + self.deduct_list.append(net) + return None + + def cal_monthly_amt(self, form, emp_id): + category_obj = self.pool.get('hr.salary.rule.category') + result = [] + res = [] + salaries = {} + self.cr.execute('''SELECT rc.code, pl.name, sum(pl.total), \ + to_char(date_to,'mm-yyyy') as to_date FROM hr_payslip_line as pl \ + LEFT JOIN hr_salary_rule_category AS rc on (pl.category_id = rc.id) \ + LEFT JOIN hr_payslip as p on pl.slip_id = p.id \ + LEFT JOIN hr_employee as emp on emp.id = p.employee_id \ + WHERE p.employee_id = %s \ + GROUP BY rc.parent_id, pl.sequence, pl.id, pl.category_id,pl.name,p.date_to,rc.code \ + ORDER BY pl.sequence, rc.parent_id''',(emp_id,)) + salary = self.cr.fetchall() + for category in salary: + if category[0] not in salaries: + salaries.setdefault(category[0], {}) + salaries[category[0]].update({category[1]: {category[3]: category[2]}}) + elif category[1] not in salaries[category[0]]: + salaries[category[0]].setdefault(category[1], {}) + salaries[category[0]][category[1]].update({category[3]: category[2]}) + else: + salaries[category[0]][category[1]].update({category[3]: category[2]}) + + category_ids = category_obj.search(self.cr,self.uid, [], context=self.context) + categories = category_obj.read(self.cr, self.uid, category_ids, ['code'], context=self.context) + for code in map(lambda x: x['code'], categories): + if code in salaries: + res = self.salary_list(salaries[code]) + result.append(res) + return result + + def salary_list(self, salaries): + cat_salary_all = [] + for category_name,amount in salaries.items(): + cat_salary = [] + total = 0.0 + cat_salary.append(category_name) + for mnth in self.mnths: + if mnth <> 'None': + if len(mnth) != 7: + mnth = '0' + str(mnth) + if mnth in amount and amount[mnth]: + cat_salary.append(amount[mnth]) + total += amount[mnth] + else: + cat_salary.append(0.00) + else: + cat_salary.append('') + cat_salary.append(total) + cat_salary_all.append(cat_salary) + return cat_salary_all + + def get_allow(self): + return self.allow_list + + def get_deduct(self): + return self.deduct_list + + def get_total(self): + return self.total + +report_sxw.report_sxw('report.salary.detail.byyear', 'yearly.salary.detail', 'hr_payroll/report/report_hr_yearly_salary_detail.rml', parser=employees_yearly_salary_report, header='internal landscape') + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml b/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml new file mode 100644 index 00000000000..7fa127b0bd3 --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml @@ -0,0 +1,588 @@ +<?xml version="1.0"?> +<document filename="hr_yearly_salary_detail_report.pdf"> + <template pageSize="(842.0,595.0)" title="hr_yearly_salary_detail_report" author="Openerp S.A." allowSplitting="20"> + <pageTemplate id="first"> + <frame id="first" x1="28.0" y1="57.0" width="786" height="481"/> + </pageTemplate> + </template> + <stylesheet> + <blockTableStyle id="Standard_Outline"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table12"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table2"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="4,0" stop="4,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="4,0" stop="4,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="5,0" stop="5,-1"/> + <lineStyle kind="LINEAFTER" colorName="#cccccc" start="5,0" stop="5,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="5,0" stop="5,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="5,-1" stop="5,-1"/> + </blockTableStyle> + <blockTableStyle id="Table3"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="4,0" stop="4,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="4,0" stop="4,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="5,0" stop="5,-1"/> + <lineStyle kind="LINEAFTER" colorName="#cccccc" start="5,0" stop="5,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="5,0" stop="5,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="5,-1" stop="5,-1"/> + </blockTableStyle> + <blockTableStyle id="Table5"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="4,0" stop="4,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="4,0" stop="4,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="5,0" stop="5,-1"/> + <lineStyle kind="LINEAFTER" colorName="#cccccc" start="5,0" stop="5,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="5,0" stop="5,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="5,-1" stop="5,-1"/> + </blockTableStyle> + <blockTableStyle id="Table4"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="5,0" stop="5,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="6,0" stop="6,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="6,-1" stop="6,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="7,0" stop="7,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="7,-1" stop="7,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="8,0" stop="8,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="8,-1" stop="8,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="9,0" stop="9,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="9,-1" stop="9,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="10,0" stop="10,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="10,-1" stop="10,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="11,0" stop="11,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="11,-1" stop="11,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="12,0" stop="12,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="12,-1" stop="12,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="13,0" stop="13,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="13,-1" stop="13,-1"/> + </blockTableStyle> + <blockTableStyle id="Table7"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table6"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="5,-1" stop="5,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="6,-1" stop="6,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="7,-1" stop="7,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="8,-1" stop="8,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="9,-1" stop="9,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="10,-1" stop="10,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="11,-1" stop="11,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="12,-1" stop="12,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="13,-1" stop="13,-1"/> + </blockTableStyle> + <blockTableStyle id="Table10"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table8"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="5,-1" stop="5,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="6,-1" stop="6,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="7,-1" stop="7,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="8,-1" stop="8,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="9,-1" stop="9,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="10,-1" stop="10,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="11,-1" stop="11,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="12,-1" stop="12,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="13,-1" stop="13,-1"/> + </blockTableStyle> + <blockTableStyle id="Table11"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table9"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="5,-1" stop="5,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="6,-1" stop="6,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="7,-1" stop="7,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="8,-1" stop="8,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="9,-1" stop="9,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="10,-1" stop="10,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="11,-1" stop="11,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="12,-1" stop="12,-1"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="13,-1" stop="13,-1"/> + </blockTableStyle> + <blockTableStyle id="Table1"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="5,0" stop="5,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="6,0" stop="6,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="7,0" stop="7,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="8,0" stop="8,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="9,0" stop="9,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="10,0" stop="10,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="11,0" stop="11,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="12,0" stop="12,0"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="13,0" stop="13,0"/> + </blockTableStyle> + <initialize> + <paraStyle name="all" alignment="justify"/> + </initialize> + <paraStyle name="Standard" fontName="Helvetica"/> + <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Text body" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="List" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="Index" fontName="Helvetica"/> + <paraStyle name="Table Contents" fontName="Helvetica"/> + <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/> + <paraStyle name="Drawing" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="Header" fontName="Helvetica"/> + <paraStyle name="Endnote" rightIndent="0.0" leftIndent="14.0" fontName="Helvetica" fontSize="10.0" leading="13"/> + <paraStyle name="Addressee" fontName="Helvetica" spaceBefore="0.0" spaceAfter="3.0"/> + <paraStyle name="Signature" fontName="Helvetica"/> + <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 8" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 7" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 6" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 5" fontName="Helvetica-Bold" fontSize="85%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 4" fontName="Helvetica-BoldOblique" fontSize="85%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 1" fontName="Helvetica-Bold" fontSize="115%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 10" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 2" fontName="Helvetica-BoldOblique" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="First line indent" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="Hanging indent" rightIndent="0.0" leftIndent="28.0" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="Salutation" fontName="Helvetica"/> + <paraStyle name="Text body indent" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="Heading 3" fontName="Helvetica-Bold" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="List Indent" rightIndent="0.0" leftIndent="142.0" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="Marginalia" rightIndent="0.0" leftIndent="113.0" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_Details" rightIndent="0.0" leftIndent="-3.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Footer" fontName="Helvetica"/> + <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/> + <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="terp_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_1" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Right_9_Bold" fontName="Helvetica-Bold" fontSize="7.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_8_Italic" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_space" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="9.0" spaceAfter="0.0"/> + <images/> + </stylesheet> + <story> + <para style="terp_default_8">[[ repeatIn(get_employee(data['form']), 'o') ]] </para> + <blockTable colWidths="785.0" style="Table12"> + <tr> + <td> + <para style="terp_default_Centre_9">From <u>[[ formatLang(data['form']['date_from'], date=True) ]]</u> To <u>[[ formatLang(data['form']['date_to'], date=True) ]]</u></para> + </td> + </tr> + </blockTable> + <para style="terp_default_Centre_9"> + <font color="white"> </font> + </para> + <blockTable colWidths="100.0,162.0,92.0,161.0,103.0,167.0" style="Table2"> + <tr> + <td> + <para style="terp_tblheader_Details">Employee Code</para> + </td> + <td> + <para style="terp_default_9">[[ o.identification_id ]]</para> + </td> + <td> + <para style="terp_tblheader_Details">Department</para> + </td> + <td> + <para style="terp_default_9">[[ o.department_id and o.department_id.name or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details">Bank</para> + </td> + <td> + <para style="terp_default_9">[[ o.bank_account_id and o.bank_account_id.bank.name or '' ]]</para> + </td> + </tr> + </blockTable> + <blockTable colWidths="100.0,162.0,92.0,161.0,103.0,167.0" style="Table3"> + <tr> + <td> + <para style="terp_tblheader_Details">Employee Name</para> + </td> + <td> + <para style="terp_default_9">[[ o.name ]]</para> + </td> + <td> + <para style="terp_tblheader_Details">Other No.</para> + </td> + <td> + <para style="terp_default_9">[[ o.otherid or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details">Address</para> + </td> + <td> + <para style="terp_default_9">[[o.address_home_id and o.address_home_id.name or '' ]]</para> + </td> + </tr> + </blockTable> + <blockTable colWidths="100.0,162.0,92.0,161.0,103.0,167.0" style="Table5"> + <tr> + <td> + <para style="terp_tblheader_Details">Designation</para> + </td> + <td> + <para style="terp_default_9">[[ o.job_id and o.job_id.name or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details">Phone No.</para> + </td> + <td> + <para style="terp_default_9">[[ o.work_phone or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details">E-mail Address</para> + </td> + <td> + <para style="terp_default_9">[[o.work_email or '' ]]</para> + </td> + </tr> + </blockTable> + <para style="terp_default_space"> + <font color="white"> </font> + </para> + <section> + <para style="terp_default_1">[[ repeatIn(get_periods(data['form']),'m') ]]</para> + <para style="terp_default_1">[[ get_employee_detail((data['form']),o) ]]</para> + <blockTable colWidths="195.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,56.0" style="Table4"> + <tr> + <td> + <para style="terp_tblheader_Details">Title</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[0] != 'None' and m[0] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[1] != 'None' and m[1] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[2] != 'None' and m[2] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[3] != 'None' and m[3] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[4] != 'None' and m[4] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[5] != 'None' and m[5] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[6] != 'None' and m[6] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[7] != 'None' and m[7] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[8] != 'None' and m[8] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[9] != 'None' and m[9] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[10] != 'None' and m[10] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">[[ m[11] != 'None' and m[11] or '' ]]</para> + </td> + <td> + <para style="terp_tblheader_Details_Right">Total</para> + </td> + </tr> + </blockTable> + <para style="terp_default_1"> + <font color="white"> </font> + </para> + <section> + <blockTable colWidths="803.0" style="Table7"> + <tr> + <td> + <para style="terp_tblheader_Details">Allowances with Basic: </para> + </td> + </tr> + </blockTable> + <section> + <para style="terp_default_1">[[ repeatIn(get_allow(),'e1') ]]</para> + <blockTable colWidths="195.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,56.0" style="Table6"> + <tr> + <td> + <para style="terp_default_9"><b>[[ e1[0] in ["Basic","Gross"] and e1[0] ]]</b> </para> + <para style="terp_default_9">[[ e1[0] not in ["Basic","Gross"] and e1[0] ]]</para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[1]!='' and formatLang(e1[1])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[1]!='' and formatLang(e1[1])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[2]!='' and formatLang(e1[2])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[2]!='' and formatLang(e1[2])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[3]!='' and formatLang(e1[3])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[3]!='' and formatLang(e1[3])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[4]!='' and formatLang(e1[4])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[4]!='' and formatLang(e1[4])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[5]!='' and formatLang(e1[5])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[5]!='' and formatLang(e1[5])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[6]!='' and formatLang(e1[6])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[6]!='' and formatLang(e1[6])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[7]!='' and formatLang(e1[7])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[7]!='' and formatLang(e1[7])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[8]!='' and formatLang(e1[8])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[8]!='' and formatLang(e1[8])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[9]!='' and formatLang(e1[9])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[9]!='' and formatLang(e1[9])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[10]!='' and formatLang(e1[10])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[10]!='' and formatLang(e1[10])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[11]!='' and formatLang(e1[11])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[11]!='' and formatLang(e1[11])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e1[0] in ["Basic","Gross"] and e1[12]!='' and formatLang(e1[12])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e1[0] not in ["Basic","Gross"] and e1[12]!='' and formatLang(e1[12])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_9_Bold">[[ formatLang(e1[13]) ]] [[ company.currency_id.symbol ]]</para> + </td> + </tr> + </blockTable> + </section> + <blockTable colWidths="803.0" style="Table10"> + <tr> + <td> + <para style="terp_tblheader_Details">Deductions: </para> + </td> + </tr> + </blockTable> + <section> + <para style="terp_default_1">[[ repeatIn(get_deduct(),'e2') ]]</para> + <blockTable colWidths="195.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,46.0,56.0" style="Table8"> + <tr> + <td> + <para style="terp_default_9"><b>[[ e2[0] in ["Net"] and e2[0] ]]</b> </para> + <para style="terp_default_9">[[ e2[0] not in ["Net"] and e2[0] ]]</para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[1]!='' and formatLang(e2[1])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[1]!='' and formatLang(e2[1])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[2]!='' and formatLang(e2[2])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[2]!='' and formatLang(e2[2])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[3]!='' and formatLang(e2[3])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[3]!='' and formatLang(e2[3])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[4]!='' and formatLang(e2[4])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[4]!='' and formatLang(e2[4])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[5]!='' and formatLang(e2[5])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[5]!='' and formatLang(e2[5])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[6]!='' and formatLang(e2[6])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[6]!='' and formatLang(e2[6])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[7]!='' and formatLang(e2[7])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[7]!='' and formatLang(e2[7])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[8]!='' and formatLang(e2[8])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[8]!='' and formatLang(e2[8])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[9]!='' and formatLang(e2[9])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[9]!='' and formatLang(e2[9])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[10]!='' and formatLang(e2[10])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[10]!='' and formatLang(e2[10])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[11]!='' and formatLang(e2[11])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[11]!='' and formatLang(e2[11])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_8"> + <font face="Helvetica-Bold" size="7.0">[[ (e2[0] in ["Net"] and e2[12]!='' and formatLang(e2[12])) or removeParentNode('font') ]]</font> + <font face="Helvetica" size="7.0">[[ (e2[0] not in ["Net"] and e2[12]!='' and formatLang(e2[12])) or removeParentNode('font') ]]</font> + </para> + </td> + <td> + <para style="terp_default_Right_9_Bold">[[ formatLang(e2[13]) ]] [[ company.currency_id.symbol ]]</para> + </td> + </tr> + </blockTable> + </section> + </section> + <para style="terp_default_1"> + <font color="white"> </font> + </para> + </section> + <para style="terp_default_9"> + <font color="white"> </font> + </para> + </story> +</document> diff --git a/addons/l10n_in_hr_payroll/report/report_payroll_advice.py b/addons/l10n_in_hr_payroll/report/report_payroll_advice.py new file mode 100644 index 00000000000..d4eeaf3d218 --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/report_payroll_advice.py @@ -0,0 +1,82 @@ +#-*- coding:utf-8 -*- + +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). All Rights Reserved +# d$ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import time +from datetime import datetime + +from report import report_sxw +from tools import amount_to_text_en + +class payroll_advice_report(report_sxw.rml_parse): + + def __init__(self, cr, uid, name, context): + super(payroll_advice_report, self).__init__(cr, uid, name, context=context) + + self.localcontext.update({ + 'time': time, + 'get_month': self.get_month, + 'convert': self.convert, + 'get_detail': self.get_detail, + 'get_bysal_total': self.get_bysal_total, + }) + self.context = context + + def get_month(self, input_date): + payslip_pool = self.pool.get('hr.payslip') + res = { + 'from_name': '', 'to_name': '' + } + slip_ids = payslip_pool.search(self.cr, self.uid, [('date_from','<=',input_date), ('date_to','>=',input_date)], context=self.context) + if slip_ids: + slip = payslip_pool.browse(self.cr, self.uid, slip_ids, context=self.context)[0] + from_date = datetime.strptime(slip.date_from, '%Y-%m-%d') + to_date = datetime.strptime(slip.date_to, '%Y-%m-%d') + res['from_name']= from_date.strftime('%d')+'-'+from_date.strftime('%B')+'-'+from_date.strftime('%Y') + res['to_name']= to_date.strftime('%d')+'-'+to_date.strftime('%B')+'-'+to_date.strftime('%Y') + return res + + def convert(self, amount, cur): + return amount_to_text_en.amount_to_text(amount, 'en', cur); + + def get_bysal_total(self): + return self.total_bysal + + def get_detail(self, line_ids): + result = [] + self.total_bysal = 0.00 + for l in line_ids: + res = {} + res.update({ + 'name': l.employee_id.name, + 'acc_no': l.name, + 'ifsc_code': l.ifsc_code, + 'bysal': l.bysal, + 'debit_credit': l.debit_credit, + }) + self.total_bysal += l.bysal + result.append(res) + return result + +report_sxw.report_sxw('report.payroll.advice', 'hr.payroll.advice', 'l10n_in_hr_payroll/report/report_payroll_advice.rml', parser=payroll_advice_report, header="external") + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_in_hr_payroll/report/report_payroll_advice.rml b/addons/l10n_in_hr_payroll/report/report_payroll_advice.rml new file mode 100644 index 00000000000..8ca1bae5ba5 --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/report_payroll_advice.rml @@ -0,0 +1,425 @@ +<?xml version="1.0"?> +<document filename="test.pdf"> + <template pageSize="(595.0,842.0)" title="Test" author="Martin Simon" allowSplitting="20"> + <pageTemplate id="first"> + <frame id="first" x1="28.0" y1="28.0" width="539" height="786"/> + </pageTemplate> + </template> + <stylesheet> + <blockTableStyle id="Standard_Outline"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table1"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table2"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table3"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table4"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="5,0" stop="5,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/> + </blockTableStyle> + <blockTableStyle id="Table5"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="4,0" stop="4,0"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="5,0" stop="5,0"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="5,-1" stop="5,-1"/> + </blockTableStyle> + <blockTableStyle id="Table6"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/> + </blockTableStyle> + <blockTableStyle id="Table7"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <initialize> + <paraStyle name="all" alignment="justify"/> + </initialize> + <paraStyle name="P1" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="JUSTIFY" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P2" fontName="Helvetica-Bold" fontSize="6.0" leading="8" alignment="JUSTIFY" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P3" rightIndent="-0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="JUSTIFY" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P4" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="JUSTIFY" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P5" fontName="Helvetica" fontSize="8.0" leading="10" alignment="JUSTIFY" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P6" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P7" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="JUSTIFY" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P9" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P10" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P11" fontName="Helvetica" alignment="LEFT"/> + <paraStyle name="P12" fontName="Helvetica" fontSize="8.0" leading="10" alignment="JUSTIFY" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P13" rightIndent="-0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="JUSTIFY" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Standard" fontName="Helvetica"/> + <paraStyle name="Heading" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="Caption" fontName="Helvetica-Oblique" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="Index" fontName="Helvetica"/> + <paraStyle name="Table Contents" fontName="Helvetica"/> + <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/> + <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_9" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Footer" fontName="Helvetica"/> + <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/> + <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="terp_default_0.30cmspace" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="9.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_1" fontName="Helvetica" fontSize="4.0" leading="5" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Right_9_Bold" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_8_space" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="1.0"/> + <paraStyle name="Drawing" fontName="Helvetica-Oblique" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="Header" fontName="Helvetica"/> + <paraStyle name="Endnote" rightIndent="0.0" leftIndent="14.0" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Addressee" fontName="Helvetica" spaceBefore="0.0" spaceAfter="3.0"/> + <paraStyle name="Signature" fontName="Helvetica"/> + <paraStyle name="Heading 8" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 7" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 6" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 5" fontName="Helvetica-Bold" fontSize="85%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 4" fontName="Helvetica-BoldOblique" fontSize="85%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 1" fontName="Helvetica-Bold" fontSize="115%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 10" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Heading 2" fontName="Helvetica-BoldOblique" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="First line indent" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Hanging indent" rightIndent="0.0" leftIndent="28.0" fontName="Helvetica" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Salutation" fontName="Helvetica"/> + <paraStyle name="Text body indent" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Heading 3" fontName="Helvetica-Bold" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="List Indent" rightIndent="0.0" leftIndent="142.0" fontName="Helvetica" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Marginalia" rightIndent="0.0" leftIndent="113.0" fontName="Helvetica" spaceBefore="0.0" spaceAfter="0.0"/> + <images/> + </stylesheet> + <story> + <para style="terp_default_8">[[repeatIn(objects,'o')]]</para> + <blockTable colWidths="234.0,305.0" style="Table1"> + <tr> + <td> + <para style="P7">[[ formatLang(time.strftime('%Y-%m-%d'),date=True) ]]</para> + <para style="P9"/> + <para style="terp_default_9"> + <font color="white"> </font> + </para> + </td> + <td> + <para style="P6"> + <font color="white"> </font> + </para> + </td> + </tr> + <tr> + <td> + <para style="terp_default_Bold_9">To, </para> + <para style="terp_default_Bold_9">The Manager</para> + </td> + <td> + <para style="terp_default_Bold_9"> + <font color="white"> </font> + </para> + </td> + </tr> + <tr> + <td> + <para style="terp_default_Bold_9">[[ o.bank_id.name ]] Bank</para> + </td> + <td> + <para style="terp_default_Bold_9"> + <font color="white"> </font> + </para> + </td> + </tr> + <tr> + <td> + <para style="terp_default_1"> + <font color="white"> </font> + </para> + <para style="terp_default_9">Dear Sir/Madam,</para> + </td> + <td> + <para style="terp_default_9"> + <font color="white"> </font> + </para> + </td> + </tr> + </blockTable> + <blockTable colWidths="539.0" style="Table2"> + <tr> + <td> + <para style="P10">Payment Advice from [[ o.name ]] A/C no. [[ o.company_id.bank_ids and o.company_id.bank_ids[0].acc_number ]] form period [[ get_month(o.date)['from_name'] ]] to [[ get_month(o.date)['to_name'] ]]</para> + </td> + </tr> + </blockTable> + <blockTable colWidths="539.0" style="Table3"> + <tr> + <td> + <para style="terp_default_9">[[ o.note ]] </para> + </td> + </tr> + </blockTable> + <para style="terp_default_8_space"> + <font color="white"> </font> + </para> + <blockTable colWidths="47.0,146.0,158.0,105.0,83.0" style="Table4">[[ o.neft == True and removeParentNode('blockTable') ]] + <tr> + <td> + <para style="P1">SI. No.</para> + </td> + <td> + <para style="P1">Name of the Employe</para> + </td> + <td> + <para style="P3">Bank Account No.</para> + </td> + <td> + <para style="P3">By Salary</para> + </td> + <td> + <para style="P3">C/D</para> + </td> + </tr> + </blockTable> + <section> + <para style="terp_default_8">[[ repeatIn(get_detail(o.line_ids),'line') ]]</para> + <blockTable colWidths="47.0,146.0,158.0,105.0,83.0" style="Table5">[[ o.neft == True and removeParentNode('blockTable') ]] + <tr> + <td> + <para style="P11" leftIndent="15" bulletIndent="0"> + <bullet><seq id="L1"/>.</bullet> + <font color="white"> </font> + </para> + </td> + <td> + <para style="P8">[[ line['name'] ]]</para> + </td> + <td> + <para style="P5">[[ line['acc_no'] ]]</para> + </td> + <td> + <para style="P8">[[formatLang(line['bysal'])]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]</para> + </td> + <td> + <para style="P5">[[ line['debit_credit'] ]]</para> + </td> + </tr> + </blockTable> + </section> + <blockTable colWidths="40.0,129.0,141.0,104.0,77.0,49.0" style="Table4">[[ o.neft != True and removeParentNode('blockTable') ]] + <tr> + <td> + <para style="P1">SI. No.</para> + </td> + <td> + <para style="P1">Name of the Employe</para> + </td> + <td> + <para style="P3">Bank Account No.</para> + </td> + <td> + <para style="P3">IFSC Code</para> + </td> + <td> + <para style="P3">By Salary</para> + </td> + <td> + <para style="P3">C/D</para> + </td> + </tr> + </blockTable> + <section> + <para style="terp_default_8">[[ repeatIn(get_detail(o.line_ids),'line') ]]</para> + <blockTable colWidths="39.0,129.0,140.0,104.0,78.0,49.0" style="Table5">[[ o.neft !=True and removeParentNode('blockTable') ]] + <tr> + <td> + <para style="P11" leftIndent="15" bulletIndent="0"> + <bullet><seq id="L1"/>.</bullet> + </para> + </td> + <td> + <para style="P8">[[ line['name'] ]]</para> + </td> + <td> + <para style="P5">[[ line['acc_no'] ]]</para> + </td> + <td> + <para style="P5">[[ line['ifsc_code'] ]]</para> + </td> + <td> + <para style="P8">[[formatLang(line['bysal'])]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]</para> + </td> + <td> + <para style="P5">[[ line['debit_credit'] ]]</para> + </td> + </tr> + </blockTable> + </section> + <blockTable colWidths="50.0,144.0,158.0,107.0,80.0" style="Table6">[[ o.neft == True and removeParentNode('blockTable') ]] + <tr> + <td> + <para style="terp_tblheader_Details"> + <font color="white"> </font> + </para> + </td> + <td> + <para style="P2"> + <font color="white"> </font> + </para> + </td> + <td> + <para style="P1">Total : <font face="Helvetica" size="6.0">[[ o.line_ids==[] and removeParentNode('para') ]]</font></para> + <para style="P4"/> + </td> + <td> + <para style="P4"><font face="Helvetica" size="6.0">[[ o.line_ids==[] and removeParentNode('para') ]]</font>[[ formatLang(get_bysal_total()) ]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]</para> + </td> + <td> + <para style="P4"> + <font color="white"> </font> + </para> + </td> + </tr> + </blockTable> + <blockTable colWidths="50.0,119.0,244.0,99.0,27.0" style="Table6">[[ o.neft !=True and removeParentNode('blockTable') ]] + <tr> + <td> + <para style="terp_tblheader_Details"> + <font color="white"> </font> + </para> + </td> + <td> + <para style="P2"> + <font color="white"> </font> + </para> + </td> + <td> + <para style="P1">Total : <font face="Helvetica" size="6.0">[[ o.line_ids==[] and removeParentNode('para') ]]</font></para> + <para style="P4"/> + </td> + <td> + <para style="P4"><font face="Helvetica" size="6.0">[[ o.line_ids==[] and removeParentNode('para') ]]</font>[[ formatLang(get_bysal_total()) ]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]</para> + </td> + <td> + <para style="P4"> + <font color="white"> </font> + </para> + </td> + </tr> + </blockTable> + <para style="terp_default_0.30cmspace"> + <font color="white"> </font> + </para> + <blockTable colWidths="269.0,269.0" style="Table7"> + <tr> + <td> + <para style="terp_default_9">Yours Sincerely</para> + </td> + <td> + <para style="terp_tblheader_Details"> + <font color="white"> </font> + </para> + </td> + </tr> + <tr> + <td> + <para style="terp_default_9">For [[ company.name ]]</para> + </td> + <td> + <para style="terp_tblheader_Details"> + <font color="white"> </font> + </para> + </td> + </tr> + <tr> + <td> + <para style="terp_default_9"> + <font color="white"> </font> + </para> + </td> + <td> + <para style="terp_tblheader_Details"> + <font color="white"> </font> + </para> + </td> + </tr> + <tr> + <td> + <para style="terp_default_9"> + <font color="white"> </font> + </para> + </td> + <td> + <para style="terp_tblheader_Details"> + <font color="white"> </font> + </para> + </td> + </tr> + <tr> + <td> + <para style="terp_default_9">Authorized Signature</para> + </td> + <td> + <para style="terp_tblheader_Details"> + <font color="white"> </font> + </para> + </td> + </tr> + </blockTable> + <para style="terp_default_9"> + <font color="white"> </font> + </para> + <para> + <seqReset id="L1"/> + </para> + </story> +</document> diff --git a/addons/l10n_in_hr_payroll/report/report_payslip_details.py b/addons/l10n_in_hr_payroll/report/report_payslip_details.py new file mode 100644 index 00000000000..2732d5d09ae --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/report_payslip_details.py @@ -0,0 +1,35 @@ +#-*- coding:utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from report import report_sxw +from hr_payroll import report + +class payslip_details_report_in(report.report_payslip_details.payslip_details_report): + + def __init__(self, cr, uid, name, context): + super(payslip_details_report_in, self).__init__(cr, uid, name, context) + self.localcontext.update({ + 'get_details_by_rule_category': self.get_details_by_rule_category, + }) + +report_sxw.report_sxw('report.paylip.details.in', 'hr.payslip', 'l10n_in_hr_payroll/report/report_payslip_details.rml', parser=payslip_details_report_in) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/report/report_payslip_details.rml b/addons/l10n_in_hr_payroll/report/report_payslip_details.rml new file mode 100644 index 00000000000..a7ab3db3185 --- /dev/null +++ b/addons/l10n_in_hr_payroll/report/report_payslip_details.rml @@ -0,0 +1,372 @@ +<?xml version="1.0"?> +<document filename="test.pdf"> + <template pageSize="(595.0,842.0)" title="Test" author="Martin Simon" allowSplitting="20"> + <pageTemplate id="first"> + <frame id="first" x1="28.0" y1="28.0" width="539" height="786"/> + </pageTemplate> + </template> + <stylesheet> + <blockTableStyle id="Standard_Outline"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table1"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table2"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/> + <lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/> + </blockTableStyle> + <blockTableStyle id="Table3"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/> + <lineStyle kind="LINEAFTER" colorName="#cccccc" start="1,0" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + </blockTableStyle> + <blockTableStyle id="Table4"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/> + <lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/> + </blockTableStyle> + <blockTableStyle id="Table5"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/> + <lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/> + </blockTableStyle> + <blockTableStyle id="Table6"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/> + <lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/> + <lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/> + <lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/> + </blockTableStyle> + <blockTableStyle id="Table10"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table11"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/> + </blockTableStyle> + <blockTableStyle id="Table12"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/> + </blockTableStyle> + <blockTableStyle id="Table8"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <blockTableStyle id="Table7"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/> + </blockTableStyle> + <blockTableStyle id="Table16"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="4,-1" stop="4,-1"/> + <lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="5,-1" stop="5,-1"/> + </blockTableStyle> + <blockTableStyle id="Table13"> + <blockAlignment value="LEFT"/> + <blockValign value="TOP"/> + </blockTableStyle> + <initialize> + <paraStyle name="all" alignment="justify"/> + </initialize> + <paraStyle name="P1" fontName="Helvetica" fontSize="2.0" leading="3"/> + <paraStyle name="P2" fontName="Helvetica" fontSize="2.0" leading="3"/> + <paraStyle name="P3" rightIndent="-56.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P4" rightIndent="-56.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P5" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P6" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P7" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P8" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P9" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P10" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P11" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P12" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P13" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT"/> + <paraStyle name="P14" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT"/> + <paraStyle name="P15" fontName="Helvetica-Bold" fontSize="8.0" leading="10"/> + <paraStyle name="P16" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P17" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P18" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P19" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT"/> + <paraStyle name="P20" fontName="Helvetica" fontSize="2.0" leading="3"/> + <paraStyle name="P21" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P22" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT"/> + <paraStyle name="P23" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT"/> + <paraStyle name="P24" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P25" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="P26" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Standard" fontName="Helvetica"/> + <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/> + <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/> + <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="Index" fontName="Helvetica"/> + <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_space" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Bold_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_default_10" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="Table Contents" fontName="Helvetica"/> + <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> + <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/> + <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/> + <paraStyle name="payslip_adj" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> + <images/> + </stylesheet> + <story> + <para style="P3">[[repeatIn(objects,'o')]]</para> + <blockTable colWidths="539.0" style="Table1"> + <tr> + <td> + <para style="P8">Pay Slip Details</para> + </td> + </tr> + </blockTable> + <para style="terp_header_Centre"> + <font face="Helvetica" size="6.0">[[o.credit_note==False and removeParentNode('para')]]</font> + <font face="Helvetica-Bold" size="14.0">Credit</font> + <font face="Helvetica" size="14.0"/> + <font face="Helvetica-Bold" size="14.0">Note</font> + </para> + <para style="P9">([[o.name or removeParentNode('para')]])</para> + <blockTable colWidths="63.0,206.0,89.0,181.0" style="Table2"> + <tr> + <td> + <para style="P16">Name</para> + </td> + <td> + <para style="P16">[[o.employee_id.name]]</para> + </td> + <td> + <para style="P16">Designation </para> + </td> + <td> + <para style="P5">[[ o.employee_id.job_id.name or '' ]]</para> + </td> + </tr> + </blockTable> + <blockTable colWidths="63.0,476.0" style="Table3"> + <tr> + <td> + <para style="terp_default_Bold_8"> + <font face="Helvetica">Address </font> + </para> + </td> + <td> + <para style="P5">[[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street2 or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.zip or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.city or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.state_id and o.employee_id.address_home_id.state_id.name or '' ]] [[o.employee_id.address_home_id and o.employee_id.address_home_id.country_id and o.employee_id.address_home_id.country_id.name or '' ]]</para> + </td> + </tr> + </blockTable> + <blockTable colWidths="63.0,206.0,89.0,181.0" style="Table4"> + <tr> + <td> + <para style="P16">Email</para> + </td> + <td> + <para style="P5">[[ o.employee_id.work_email or '' ]]</para> + </td> + <td> + <para style="terp_default_Bold_8"> + <font face="Helvetica">Identification No</font> + </para> + </td> + <td> + <para style="P5">[[ o.employee_id.identification_id or '' ]]</para> + </td> + </tr> + </blockTable> + <blockTable colWidths="63.0,206.0,89.0,181.0" style="Table5"> + <tr> + <td> + <para style="P16">Reference</para> + </td> + <td> + <para style="P5">[[ o.number or '' ]]</para> + </td> + <td> + <para style="P16">Bank Account</para> + </td> + <td> + <para style="P5">[[ o.employee_id.otherid or '' ]]</para> + </td> + </tr> + </blockTable> + <blockTable colWidths="63.0,206.0,89.0,181.0" style="Table6"> + <tr> + <td> + <para style="P16">Date From</para> + </td> + <td> + <para style="P5">[[ o.date_from or '']]</para> + </td> + <td> + <para style="terp_default_Bold_8"> + <font face="Helvetica" size="8.0">Date To</font> + </para> + </td> + <td> + <para style="P5">[[ o.date_to or '' ]]</para> + </td> + </tr> + </blockTable> + <para style="P7"/> + <para style="P11"> + <font color="white"> </font> + </para> + <para style="P5"> + <font color="white"> </font> + </para> + <blockTable colWidths="539.0" style="Table10"> + <tr> + <td> + <para style="P10">Details by Salary Rule Category: </para> + </td> + </tr> + </blockTable> + <blockTable colWidths="54.0,388.0,97.0" style="Table11"> + <tr> + <td> + <para style="P15">Code</para> + </td> + <td> + <para style="P15">Salary Rule Category</para> + </td> + <td> + <para style="P14">Total</para> + </td> + </tr> + </blockTable> + <para style="P1"> + <font color="white"> </font> + </para> + <section> + <para style="P16">[[repeatIn(get_details_by_rule_category(o.details_by_salary_rule_category),'h') ]]</para> + <blockTable colWidths="54.0,388.0,97.0" style="Table12"> + <tr> + <td> + <para style="P16"> + <font face="Helvetica">[[ h['code'] ]]</font> + <font face="Helvetica">[[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font')]]</font> + </para> + </td> + <td> + <para style="P17"><font face="Helvetica" color="white">[[ '..'*h['level'] ]]</font>[[ h['rule_category'] ]]<font face="Helvetica">[[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]]</font></para> + </td> + <td> + <para style="P6">[[ formatLang(h['total']) ]] [[o.company_id and o.company_id.currency_id.symbol or '']] <font face="Helvetica" size="8.0">[[ h['level']==0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]]</font></para> + </td> + </tr> + </blockTable> + </section> + <para style="P7"> + <font color="white"> </font> + </para> + + <blockTable colWidths="269.0,269.0" style="Table13"> + <tr> + <td> + <para style="P5"> + <font color="white"> </font> + </para> + </td> + <td> + <para style="P12"> + <font color="white"> </font> + </para> + <para style="P12"> + <font color="white"> </font> + </para> + <para style="P12"> + <font color="white"> </font> + </para> + <para style="P12">Authorized Signature </para> + </td> + </tr> + </blockTable> + <para style="P4"> + <font color="white"> </font> + </para> + </story> +</document> + diff --git a/addons/l10n_in_hr_payroll/security/ir.model.access.csv b/addons/l10n_in_hr_payroll/security/ir.model.access.csv new file mode 100644 index 00000000000..7ca0834449b --- /dev/null +++ b/addons/l10n_in_hr_payroll/security/ir.model.access.csv @@ -0,0 +1,5 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_hr_payroll_advice_user","hr.payroll.advice","model_hr_payroll_advice","base.group_hr_user",1,1,1,1 +"access_hr_payroll_advice_line_user","hr.payroll.advice.line","model_hr_payroll_advice_line","base.group_hr_user",1,1,1,1 +"access_hr_payroll_advice_report_user","payment.advice.report","model_payment_advice_report","base.group_hr_manager",1,1,1,1 +"access_hr_payroll_payslip_report_user","payslip.report","model_payslip_report","base.group_hr_manager",1,1,1,1 diff --git a/addons/l10n_in_hr_payroll/static/src/img/icon.png b/addons/l10n_in_hr_payroll/static/src/img/icon.png Binary files differnew file mode 100644 index 00000000000..ddaf38f8b6d --- /dev/null +++ b/addons/l10n_in_hr_payroll/static/src/img/icon.png diff --git a/addons/l10n_in_hr_payroll/test/payment_advice.yml b/addons/l10n_in_hr_payroll/test/payment_advice.yml new file mode 100644 index 00000000000..20b45830c5e --- /dev/null +++ b/addons/l10n_in_hr_payroll/test/payment_advice.yml @@ -0,0 +1,41 @@ +- + In order to test Payment Advice I create a new Payment Advice +- + I create a new Payment Advice with NEFT Transaction Enable +- + !record {model: hr.payroll.advice, id: payment_advice_1}: + name: 'NEFT Advice' + bank_id: base.res_bank_1 + line_ids: + - employee_id: hr.employee_fp + name: '90125452552' + ifsc_code: 'abn45215145' + bysal: 25000.00 + - employee_id: hr.employee_al + name: '00014521111232' + ifsc_code: 'sbi45452145' + bysal: 20000.00 +- + I check that the Payment Advice is in "Draft" +- + !assert {model: hr.payroll.advice, id: payment_advice_1}: + - state == 'draft' +- + Now I confirm Payment Advice +- + !python {model: hr.payroll.advice}: | + self.confirm_sheet(cr, uid, [ref('payment_advice_1')]) +- + I check that the Payment Advice state is "Confirmed" +- + !python {model: hr.payroll.advice}: | + advice = self.browse(cr, uid, ref("payment_advice_1")) + assert (advice.state == 'confirm') +- + In order to test the PDF report defined on a Payment Advice, we will print a Print Advice Report when NEFT is checked +- + !python {model: hr.payroll.advice}: | + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.payroll.advice').create(cr, uid, [ref('l10n_in_hr_payroll.payment_advice_1')], {}) + if tools.config['test_report_directory']: + file(os.path.join(tools.config['test_report_directory'], 'l10n_in_hr_payroll_summary report'+format), 'wb+').write(data)
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/test/payment_advice_batch.yml b/addons/l10n_in_hr_payroll/test/payment_advice_batch.yml new file mode 100644 index 00000000000..d1a1436b50b --- /dev/null +++ b/addons/l10n_in_hr_payroll/test/payment_advice_batch.yml @@ -0,0 +1,61 @@ +- + In order to test Payment Advice Creation from Payslip Bacth I create New Payslip Batch +- + I Create a bank record +- + !record {model: res.partner.bank, id: res_partner_bank_0}: + acc_number: '3025632343043' + partner_id: base.res_partner_21 + state: bank + bank: base.res_bank_1 +- + I create a new employee “Rahul” +- + !record {model: hr.employee, id: hr_employee_rahul0}: + country_id: base.in + department_id: hr.dep_rd + name: Rahul + bank_account_id: res_partner_bank_0 +- + I want to generate a payslip from Payslip Batch. +- + !record {model: hr.payslip.run, id: hr_payslip_run_forAdvice}: + name: Payslip Batch +- + I create record for generating the Payslip for Payslip Batch. +- + !record {model: hr.payslip.employees, id: hr_payslip_employees}: + employee_ids: + - hr_employee_rahul0 +- + I generate the payslip by clicking on Generate button wizard. +- + !python {model: hr.payslip.employees}: | + self.compute_sheet(cr, uid, [ref('hr_payslip_employees')], context={'active_id': ref('hr_payslip_run_forAdvice')}) +- + I check that the Payslip Batch is in "Draft" +- + !assert {model: hr.payslip.run, id: hr_payslip_run_forAdvice}: + - state == 'draft' +- + Now I close Payslip Batch +- + !python {model: hr.payslip.run}: | + self.close_payslip_run(cr, uid, [ref('hr_payslip_run_forAdvice')]) +- + I check that the Payslip Batch is "Close" +- + !python {model: hr.payslip.run}: | + batch = self.browse(cr, uid, ref("hr_payslip_run_forAdvice")) + assert (batch.state == 'close') +- + I create Advice from Payslip Batch using Create Advice button +- + !python {model: hr.payslip.run}: | + self.create_advice(cr, uid, [ref('hr_payslip_run_forAdvice')]) +- + I check for Advice is created from Payslip Batch +- + !python {model: hr.payroll.advice}: | + advice_ids = self.search(cr, uid, [('batch_id','=',ref('hr_payslip_run_forAdvice'))]) + assert advice_ids,"Advice is not created from Payslip Batch."
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/wizard/__init__.py b/addons/l10n_in_hr_payroll/wizard/__init__.py new file mode 100644 index 00000000000..36635aec3c2 --- /dev/null +++ b/addons/l10n_in_hr_payroll/wizard/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import hr_salary_employee_bymonth +import hr_yearly_salary_detail + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py new file mode 100644 index 00000000000..25cc615a1df --- /dev/null +++ b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py @@ -0,0 +1,71 @@ +#-*- coding:utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import time + +from osv import osv, fields + +class hr_salary_employee_bymonth(osv.osv_memory): + + _name = 'hr.salary.employee.month' + _description = 'Hr Salary Employee By Month Report' + _columns = { + 'start_date': fields.date('Start Date', required=True), + 'end_date': fields.date('End Date', required=True), + 'employee_ids': fields.many2many('hr.employee', 'payroll_year_rel', 'payroll_year_id', 'employee_id', 'Employees', required=True), + 'category_id': fields.many2one('hr.salary.rule.category', 'Category', required=True), + } + + def _get_default_category(self, cr, uid, context=None): + category_ids = self.pool.get('hr.salary.rule.category').search(cr, uid, [('code', '=', 'NET')], context=context) + return category_ids and category_ids[0] or False + + _defaults = { + 'start_date': lambda *a: time.strftime('%Y-01-01'), + 'end_date': lambda *a: time.strftime('%Y-%m-%d'), + 'category_id': _get_default_category + } + + def print_report(self, cr, uid, ids, context=None): + """ + To get the date and print the report + @param self: The object pointer. + @param cr: A database cursor + @param uid: ID of the user currently logged in + @param context: A standard dictionary + @return: return report + """ + if context is None: + context = {} + datas = {'ids': context.get('active_ids', [])} + + res = self.read(cr, uid, ids, context=context) + res = res and res[0] or {} + datas.update({'form': res}) + return { + 'type': 'ir.actions.report.xml', + 'report_name': 'salary.employee.bymonth', + 'datas': datas, + } + +hr_salary_employee_bymonth() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth_view.xml b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth_view.xml new file mode 100644 index 00000000000..e05519b08db --- /dev/null +++ b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth_view.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <record id="view_salary_employee_month" model="ir.ui.view"> + <field name="name">Hr monthly Employee Salary</field> + <field name="model">hr.salary.employee.month</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form string="Employee Pay Head Breakup" version="7.0"> + <label string="This wizard will print report which displays employees break-up of Net Head for a specified dates."/> + <footer> + <button name="print_report" string="Print" type="object" class="oe_highlight"/> + or + <button string="Cancel" class="oe_link" special="cancel" /> + </footer> + <group> + <field name="start_date"/> + <field name="end_date"/> + <field name="category_id"/> + <separator string="Employees" /> + <field name="employee_ids" nolabel="1" colspan="4"/> + </group> + </form> + </field> + </record> + + <record id="action_salary_employee_month" model="ir.actions.act_window"> + <field name="name">Yearly Salary by Head</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">hr.salary.employee.month</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> + + <menuitem + name="Yearly Salary by Head" + parent="hr.menu_hr_reporting_timesheet" + sequence="200" icon="STOCK_PRINT" + action="action_salary_employee_month" + id="menu_salary_employee_month" + /> + + </data> +</openerp> diff --git a/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail.py b/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail.py new file mode 100644 index 00000000000..16bfd63bdc9 --- /dev/null +++ b/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail.py @@ -0,0 +1,66 @@ +#-*- coding:utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 OpenERP SA (<http://openerp.com>). All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import time + +from osv import fields, osv + +class yearly_salary_detail(osv.osv_memory): + + _name ='yearly.salary.detail' + _description = 'Hr Salary Employee By Category Report' + _columns = { + 'employee_ids': fields.many2many('hr.employee', 'payroll_emp_rel', 'payroll_id', 'employee_id', 'Employees', required=True), + 'date_from': fields.date('Start Date', required=True), + 'date_to': fields.date('End Date', required=True), + } + + _defaults = { + 'date_from': lambda *a: time.strftime('%Y-01-01'), + 'date_to': lambda *a: time.strftime('%Y-%m-%d'), + + } + + def print_report(self, cr, uid, ids, context=None): + """ + To get the date and print the report + @param self: The object pointer. + @param cr: A database cursor + @param uid: ID of the user currently logged in + @param context: A standard dictionary + @return: return report + """ + if context is None: + context = {} + datas = {'ids': context.get('active_ids', [])} + + res = self.read(cr, uid, ids, context=context) + res = res and res[0] or {} + datas.update({'form': res}) + return { + 'type': 'ir.actions.report.xml', + 'report_name': 'salary.detail.byyear', + 'datas': datas, + } + +yearly_salary_detail() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail_view.xml b/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail_view.xml new file mode 100644 index 00000000000..ec70e8b41e0 --- /dev/null +++ b/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail_view.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <record id="view_yearly_salary_detail" model="ir.ui.view"> + <field name="name">Employee Yearly Salary</field> + <field name="model">yearly.salary.detail</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form string="Pay Head Employee Breakup" version="7.0"> + <label string="This wizard will print report which display a pay head employee breakup for a specified dates."/> + <footer> + <button name="print_report" string="Print" type="object" class="oe_highlight"/> + or + <button string="Cancel" class="oe_link" special="cancel" /> + </footer> + <group> + <field name="date_from"/> + <field name="date_to"/> + <separator string="Employees" /> + <field name="employee_ids" nolabel="1" colspan="4"/> + </group> + </form> + </field> + </record> + + <record id="action_yearly_salary_detail" model="ir.actions.act_window"> + <field name="name">Yearly Salary by Employee</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">yearly.salary.detail</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> + + <menuitem + name="Yearly Salary by Employee" + parent="hr.menu_hr_reporting_timesheet" + action="action_yearly_salary_detail" + sequence="250" icon="STOCK_PRINT" + id="menu_yearly_salary_detail" + /> + +</data> +</openerp> diff --git a/addons/l10n_syscohada/l10n_syscohada_data.xml b/addons/l10n_syscohada/l10n_syscohada_data.xml index feeea3a2314..d90988e00e3 100644 --- a/addons/l10n_syscohada/l10n_syscohada_data.xml +++ b/addons/l10n_syscohada/l10n_syscohada_data.xml @@ -1816,15 +1816,15 @@ #
-->
- <record id="base.CFA" model="res.currency">
+ <record id="base.XOF" model="res.currency">
<field name="name">XOF</field>
<field name="symbol">CFA</field>
<field name="rounding">1</field>
<field name="accuracy">4</field>
</record>
- <record id="base.rateCFA" model="res.currency.rate">
+ <record id="base.rateXOF" model="res.currency.rate">
<field name="rate">655.957</field>
- <field name="currency_id" ref="base.CFA"/>
+ <field name="currency_id" ref="base.XOF"/>
<field eval="time.strftime('%Y-01-01')" name="name"/>
</record>
<!--
diff --git a/addons/l10n_th/account_data.xml b/addons/l10n_th/account_data.xml index 48e7b4f33d6..d5885d4b92b 100644 --- a/addons/l10n_th/account_data.xml +++ b/addons/l10n_th/account_data.xml @@ -26,7 +26,6 @@ <record id="a_root" model="account.account.template"> <field name="code">0</field> <field name="name">Simple chart of accounts</field> - <field name="parent_id" eval="False"/> <field name="type">view</field> <field name="user_type" ref="acc_type_view"/> </record> diff --git a/addons/l10n_th/i18n/nb.po b/addons/l10n_th/i18n/nb.po new file mode 100644 index 00000000000..8810993035f --- /dev/null +++ b/addons/l10n_th/i18n/nb.po @@ -0,0 +1,52 @@ +# 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: 2011-12-23 09:56+0000\n" +"PO-Revision-Date: 2012-09-09 16: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-10 04:41+0000\n" +"X-Generator: Launchpad (build 15924)\n" + +#. module: l10n_th +#: model:ir.actions.todo,note:l10n_th.config_call_account_template_th +msgid "" +"Generate Chart of Accounts from a Chart Template. You will be asked to pass " +"the name of the company, the chart template to follow, the no. of digits to " +"generate the code for your accounts and Bank account, currency to create " +"Journals. Thus,the pure copy of chart Template is generated.\n" +"This is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" +"Generere Kontoplan fra en diagrammal. Du vil bli bedt om å passere navnet på " +"selskapet, diagrammal til følge, nei. Sifre som skal generere koden for " +"kontoene og bankkonto, valuta å skape Journals. Dermed er den rene kopi av " +"diagrammal generert.\n" +"Dette er den samme veiviser som går fra økonomistyring / Configuration / " +"Financial Accounting / finansregnskapet / Generer Kontoplan fra en " +"diagrammal." + +#. module: l10n_th +#: model:account.account.type,name:l10n_th.acc_type_other +msgid "Other" +msgstr "Annet" + +#. module: l10n_th +#: model:account.account.type,name:l10n_th.acc_type_reconciled +msgid "Reconciled" +msgstr "Forsonet" + +#. module: l10n_th +#: model:account.account.type,name:l10n_th.acc_type_view +msgid "View" +msgstr "Vis" diff --git a/addons/l10n_uy/account_chart_template.xml b/addons/l10n_uy/account_chart_template.xml index 1548d3ee25a..8308263d8b0 100644 --- a/addons/l10n_uy/account_chart_template.xml +++ b/addons/l10n_uy/account_chart_template.xml @@ -4,7 +4,6 @@ <record id="uy_code_0" model="account.account.template"> <field name="code">0</field> <field name="type">view</field> - <field name="parent_id" eval="False"/> <field name="name">Uruguay - Plan de Cuentas</field> <field name="user_type" ref="type_view"/> </record> diff --git a/addons/mail/__openerp__.py b/addons/mail/__openerp__.py index 99dd6bda6ac..08a98cb0a02 100644 --- a/addons/mail/__openerp__.py +++ b/addons/mail/__openerp__.py @@ -30,27 +30,27 @@ A business oriented Social Networking with a fully-integrated email and message =========================================================================================== The Social Networking module provides an unified social network -abstraction layer allowing applications to display a complete +abstraction layer allowing applications to display a complete communication history on documents. It gives the users the possibility to read and send messages and emails in an unified way. -It also provides a feeds page combined to a subscription mechanism, that +It also provides a feeds page combined to a subscription mechanism, that allows to follow documents, and to be constantly updated about recent news. - + The main features of the module are: ------------------------------------ * a clean and renewed communication history for any OpenERP document that can act as a discussion topic, * a discussion mean on documents, - * a subscription mechanism to be updated about new messages on + * a subscription mechanism to be updated about new messages on interesting documents, - * an unified feeds page to see recent messages and activity + * an unified feeds page to see recent messages and activity on followed documents, * user communication through the feeds page, * a threaded discussion design, * relies on the global outgoing mail server, an integrated email - management system allowing to send emails with a configurable + management system allowing to send emails with a configurable scheduler-based processing engine * includes an extensible generic email composition assistant, that can turn into a mass-mailing assistant, and is capable of interpreting diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index fdfeafd4afe..175ce650f06 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -56,25 +56,24 @@ class mail_group(osv.Model): help="Members of those groups will automatically added as followers. "\ "Note that they will be able to manage their subscription manually "\ "if necessary."), + # image: all image fields are base64 encoded and PIL-supported 'image': fields.binary("Photo", - help="This field holds the image used as photo for the "\ - "user. The image is base64 encoded, and PIL-supported. "\ - "It is limited to a 1024x1024 px image."), + help="This field holds the image used as photo for the group, limited to 1024x1024px."), 'image_medium': fields.function(_get_image, fnct_inv=_set_image, string="Medium-sized photo", type="binary", multi="_get_image", - store = { + store={ 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), }, help="Medium-sized photo of the group. It is automatically "\ - "resized as a 180x180px image, with aspect ratio preserved. "\ + "resized as a 128x128px image, with aspect ratio preserved. "\ "Use this field in form views or some kanban views."), 'image_small': fields.function(_get_image, fnct_inv=_set_image, string="Small-sized photo", type="binary", multi="_get_image", - store = { + store={ 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), }, help="Small-sized photo of the group. It is automatically "\ - "resized as a 50x50px image, with aspect ratio preserved. "\ + "resized as a 64x64px image, with aspect ratio preserved. "\ "Use this field anywhere a small image is required."), 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True, help="The email address associated with this group. New emails received will automatically " diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index e4862ca9fb9..18a88bb0b61 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -147,7 +147,7 @@ class mail_message(osv.Model): def _message_dict_get(self, cr, uid, msg, context=None): """ Return a dict representation of the message browse record. """ - attachment_ids = self.pool.get('ir.attachment').name_get(cr, uid, [x.id for x in msg.attachment_ids], context=context) + attachment_ids = [{'id': attach[0], 'name': attach[1]} for attach in self.pool.get('ir.attachment').name_get(cr, uid, [x.id for x in msg.attachment_ids], context=context)] author_id = self.pool.get('res.partner').name_get(cr, uid, [msg.author_id.id], context=context)[0] author_user_id = self.pool.get('res.users').name_get(cr, uid, [msg.author_id.user_ids[0].id], context=context)[0] partner_ids = self.pool.get('res.partner').name_get(cr, uid, [x.id for x in msg.partner_ids], context=context) @@ -306,15 +306,15 @@ class mail_message(osv.Model): def unlink(self, cr, uid, ids, context=None): # cascade-delete attachments that are directly attached to the message (should only happen - # for mail.messages that act as parent for a standalone mail.mail record. + # for mail.messages that act as parent for a standalone mail.mail record). attachments_to_delete = [] - for mail in self.browse(cr, uid, ids, context=context): - for attach in mail.attachment_ids: - if attach.res_model == 'mail.message' and attach.res_id == mail.id: + for message in self.browse(cr, uid, ids, context=context): + for attach in message.attachment_ids: + if attach.res_model == self._name and attach.res_id == message.id: attachments_to_delete.append(attach.id) if attachments_to_delete: self.pool.get('ir.attachment').unlink(cr, uid, attachments_to_delete, context=context) - return super(mail_message,self).unlink(cr, uid, ids, context=context) + return super(mail_message, self).unlink(cr, uid, ids, context=context) def notify(self, cr, uid, newid, context=None): """ Add the related record followers to the destination partner_ids. diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index 1bc193051a1..f9ca54c478d 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -55,9 +55,20 @@ class res_users(osv.Model): return init_res def _auto_init(self, cr, context=None): - """Installation hook to create aliases for all users and avoid constraint errors.""" - self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(res_users,self)._auto_init, + """ Installation hook: aliases, partner following themselves """ + # create aliases for all users and avoid constraint errors + self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(res_users, self)._auto_init, self._columns['alias_id'], 'login', alias_force_key='id', context=context) + # make already existing users follow themselves, using SQL to avoid using the ORM during the auto_init + cr.execute(""" SELECT p.id FROM res_partner p + LEFT JOIN mail_followers n + ON (n.partner_id = p.id AND n.res_model = 'res.partner' AND n.res_id = p.id) + WHERE n.id IS NULL + """) + params = [(res[0], res[0]) for res in cr.fetchall()] + cr.executemany(""" INSERT INTO mail_followers (partner_id, res_model, res_id) + VALUES (%s, 'res.partner', %s) + """, params) def create(self, cr, uid, data, context=None): # create default alias same as the login diff --git a/addons/mail/static/src/css/mail.css b/addons/mail/static/src/css/mail.css index 240627c9e6c..92ead6f2432 100644 --- a/addons/mail/static/src/css/mail.css +++ b/addons/mail/static/src/css/mail.css @@ -230,6 +230,10 @@ clear: both; } +.openerp .oe_mail_msg_content a { + cursor: pointer; +} + .openerp img.oe_mail_icon { width: 50px; height: 50px; @@ -307,6 +311,29 @@ padding: 1px; } +/* attachment button: override of openerp values */ +.openerp .oe_mail_msg_content .oe_mail_compose_message_icons div.oe_hidden_input_file { + display: inline-block; + width: 24px; + height: 24px; + margin: 2px; +} +.openerp .oe_mail_msg_content .oe_mail_compose_message_icons div.oe_hidden_input_file button { + margin: 0px; +} +.openerp .oe_mail_msg_content .oe_mail_compose_message_icons input.oe_form_binary_file { + bottom: 0px; + top: auto; + left: auto; + right: 28px; + height: 26px; + width: 26px; + min-width: 22px; + font-size: 0px; + margin: 0px; + padding: 0px; +} + /* ------------------------------------------------------------ */ /* Messages layout /* ------------------------------------------------------------ */ @@ -322,34 +349,20 @@ text-decoration: none; } -.openerp .oe_mail_msg_subtitle { - margin: 0 0 .5em 0; -} -.openerp .oe_mail_msg_footer, -.openerp .oe_mail_msg_subtitle { - color: #888; -} - -.openerp .oe_mail_msg_footer li { - float: left; - margin-right: 3px; -} - -.openerp .oe_mail_msg_body { +.openerp .oe_mail_msg .oe_mail_msg_body { margin-bottom: .5em; text-align: justify; } -.openerp .oe_mail_msg_body span.oe_mail_msg_tail { +.openerp .oe_mail_msg .oe_mail_msg_body pre { + font-family: "Lucida Grande", Helvetica, Verdana, Arial, sans-serif; + margin: 0px; + white-space: pre-wrap; display: inline; } -.openerp .oe_mail_oe_bold { - font-weight: bold; -} - /* Read more/less link */ -.openerp .oe_mail_msg_content .oe_mail_reduce { +.openerp .oe_mail_msg span.oe_mail_reduce { position: absolute; right: 0; } @@ -367,16 +380,23 @@ border-top: 4px solid #404040; } -.openerp .oe_mail_msg_footer li:after { +/* Message footer */ +.openerp .oe_mail_msg .oe_mail_msg_footer { + color: #888; +} +.openerp .oe_mail_msg .oe_mail_msg_footer li { + float: left; + margin-right: 3px; +} +.openerp .oe_mail_msg .oe_mail_msg_footer li:after { content: " · "; } - -.openerp .oe_mail_msg_footer li:last-child:after { +.openerp .oe_mail_msg .oe_mail_msg_footer li:last-child:after { content: ""; } /* Attachments list */ -.openerp ul.oe_mail_msg_attachments { +.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments { display: none; width: 100%; border-top: 1px solid #CCC; @@ -384,7 +404,7 @@ padding: .5em 0; list-style-position: inside; } -.openerp ul.oe_mail_msg_attachments li { +.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments li { float: none; margin: 0; padding: 0; diff --git a/addons/mail/static/src/css/mail_group.css b/addons/mail/static/src/css/mail_group.css index 8f4ca61d531..b700cb8c80f 100644 --- a/addons/mail/static/src/css/mail_group.css +++ b/addons/mail/static/src/css/mail_group.css @@ -12,7 +12,6 @@ min-height: 0px; max-height: none; padding: 0px 18px; - max-width: 80%; } /* Resize footer width */ diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index a5a64a59a8b..71665bc69fb 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -17,19 +17,13 @@ openerp.mail = function(session) { */ session.web.FormView = session.web.FormView.extend({ - // TDE FIXME TODO: CHECK WITH NEW BRANCH do_action: function(action, on_close) { if (action.res_model == 'mail.compose.message' && - this.fields && this.fields.message_ids && - this.fields.message_ids.view.get("actual_mode") != 'create') { - // debug - console.groupCollapsed('FormView do_action on mail.compose.message'); - console.log('message_ids field:', this.fields.message_ids); - console.groupEnd(); - var record_thread = this.fields.message_ids; - var thread = record_thread.thread; - thread.instantiate_composition_form('comment', true, false, 0, action.context); - return false; + action.context && action.context.redirect == true && + this.fields && this.fields.message_ids && this.fields.message_ids.view.get("actual_mode") != 'create') { + var thread = this.fields.message_ids.thread; + thread.refresh_composition_form(action.context); + return true; } else { return this._super(action, on_close); @@ -37,35 +31,32 @@ openerp.mail = function(session) { }, }); + /** * ------------------------------------------------------------ * ChatterUtils * ------------------------------------------------------------ * - * This class holds a few tools method that will be used by - * the various Chatter widgets. - * + * This class holds a few tools method for Chatter. * Some regular expressions not used anymore, kept because I want to * - (^|\s)@((\w|@|\.)*): @login@log.log - * 1. '(void)' - * 2. login@log.log * - (^|\s)\[(\w+).(\w+),(\d)\|*((\w|[@ .,])*)\]: [ir.attachment,3|My Label], * for internal links - * 1. '(void)' - * 2. 'ir' - * 3. 'attachment' - * 4. '3' - * 5. 'My Label' */ mail.ChatterUtils = { - /** get an image in /web/binary/image?... */ - get_image: function(session_prefix, session_id, model, field, id) { - return session_prefix + '/web/binary/image?session_id=' + session_id + '&model=' + model + '&field=' + field + '&id=' + (id || ''); + /** Get an image in /web/binary/image?... */ + get_image: function(session, model, field, id) { + return session.prefix + '/web/binary/image?session_id=' + session.session_id + '&model=' + model + '&field=' + field + '&id=' + (id || ''); + }, + + /** Get the url of an attachment {'id': id} */ + get_attachment_url: function (session, attachment) { + return session.origin + '/web/binary/saveas?session_id=' + session.session_id + '&model=ir.attachment&field=datas&filename_field=datas_fname&id=' + attachment['id']; }, - /** check if the current user is the message author */ + /** Check if the current user is the message author */ is_author: function (widget, message_user_id) { return (widget.session && widget.session.uid != 0 && widget.session.uid == message_user_id); }, @@ -111,21 +102,19 @@ openerp.mail = function(session) { init: function (parent, options) { var self = this; this._super(parent); + this.attachment_ids = []; // options this.options = options || {}; this.options.context = options.context || {}; this.options.form_xml_id = options.form_xml_id || 'email_compose_message_wizard_form_chatter'; this.options.form_view_id = options.form_view_id || false; - // debug - // console.groupCollapsed('New ComposeMessage: model', this.options.context.default_res_model, ', id', this.options.context.default_res_id); - // console.log('context:', this.options.context); - // console.groupEnd(); + this.show_attachment_delete = true; }, start: function () { this._super.apply(this, arguments); // customize display: add avatar, clean previous content - var user_avatar = mail.ChatterUtils.get_image(this.session.prefix, this.session.session_id, 'res.users', 'image_small', this.session.uid); + var user_avatar = mail.ChatterUtils.get_image(this.session, 'res.users', 'image_small', this.session.uid); this.$el.find('img.oe_mail_icon').attr('src', user_avatar); this.$el.find('div.oe_mail_msg_content').empty(); // create a context for the dataset and default_get of the wizard @@ -156,10 +145,52 @@ openerp.mail = function(session) { }); // add the form, bind events, activate the form var msg_node = this.$el.find('div.oe_mail_msg_content'); - return $.when(this.form_view.appendTo(msg_node)).pipe(function() { - self.bind_events(); - self.form_view.do_show(); - }); + return $.when(this.form_view.appendTo(msg_node)).pipe(this.proxy('postprocess_create_form_view')); + }, + + postprocess_create_form_view: function () { + // handle attachment button + this.fileupload_id = _.uniqueId('oe_fileupload'); + var button_attach = this.$el.find('button.oe_mail_compose_message_attachment'); + var rendered = session.web.qweb.render('mail.compose_message.add_attachment', {'widget': this}); + $(rendered).insertBefore(button_attach); + // move the button inside div.oe_hidden_input_file + var input_node = this.$el.find('input[name=ufile]'); + button_attach.detach().insertAfter(input_node); + // set the function called when attachments are added + this.$el.find('input.oe_form_binary_file').change(this.on_attachment_change); + this.bind_events(); + this.form_view.do_show(); + }, + + on_attachment_change: function (event) { + var $target = $(event.target); + if ($target.val() !== '') { + this.$el.find('form.oe_form_binary_form').submit(); + session.web.blockUI(); + } + }, + + on_attachment_delete: function (event) { + if (event.target.dataset && event.target.dataset.id) { + var attachment_id = parseInt(event.target.dataset.id); + var idx = _.pluck(this.attachment_ids, 'id').indexOf(attachment_id); + if (idx == -1) return false; + new session.web.DataSetSearch(this, 'ir.attachment').unlink(attachment_id); + this.attachment_ids.splice(idx, 1); + this.display_attachments(); + } + }, + + display_attachments: function () { + var attach_node = this.$el.find('div.oe_mail_compose_message_attachments'); + var rendered = session.web.qweb.render('mail.thread.message.attachments', {'record': this}); + attach_node.empty(); + $(rendered).appendTo(attach_node); + this.$el.find('.oe_mail_msg_attachments').show(); + var composer_attachment_ids = _.pluck(this.attachment_ids, 'id'); + var onchange_like = {'value': {'attachment_ids': composer_attachment_ids}} + this.form_view.on_processed_onchange(onchange_like, []); }, /** @@ -170,13 +201,18 @@ openerp.mail = function(session) { refresh: function (new_context) { if (! this.form_view) return; var self = this; + this.attachments = []; this.options.context = _.extend(this.options.context, new_context || {}); this.ds_compose.context = _.extend(this.ds_compose.context, this.options.context); return this.ds_compose.call('default_get', [ - ['subject', 'body_text', 'body', 'attachment_ids', 'partner_ids', 'composition_mode', - 'model', 'res_id', 'parent_id', 'content_subtype'], + ['subject', 'body_text', 'body', 'partner_ids', 'composition_mode', + 'use_template', 'template_id', 'model', 'res_id', 'parent_id', 'content_subtype'], this.ds_compose.get_context(), - ]).then( function (result) { self.form_view.on_processed_onchange({'value': result}, []); }); + ]).then( function (result) { + self.form_view.on_processed_onchange({'value': result}, []); + self.attachment_ids = []; + self.display_attachments(); + }); }, /** @@ -184,11 +220,17 @@ openerp.mail = function(session) { * in the function. */ bind_events: function() { var self = this; - // event: click on 'Attachment' icon-link that opens the dialog to - // add an attachment. - this.$el.on('click', 'button.oe_mail_compose_message_attachment', function (event) { - event.stopImmediatePropagation(); + // event: add a new attachment + $(window).on(this.fileupload_id, function() { + var args = [].slice.call(arguments).slice(1); + var attachment = args[0]; + attachment['url'] = mail.ChatterUtils.get_attachment_url(self.session, attachment); + self.attachment_ids.push(attachment); + self.display_attachments(); + session.web.unblockUI(); }); + // event: delete an attachment + this.$el.on('click', '.oe_mail_attachment_delete', self.on_attachment_delete); }, }), @@ -210,47 +252,48 @@ openerp.mail = function(session) { /** * @param {Object} parent parent - * @param {Object} [options] - * @param {Object} [options.context] context of the thread. It should + * @param {Array} [domain] + * @param {Object} [context] context of the thread. It should contain at least default_model, default_res_id. Please refer to the ComposeMessage widget for more information about it. - * @param {Number} [options.thread_level=0] number of thread levels + * @param {Object} [options] * @param {Number} [options.message_ids=null] ids for message_fetch * @param {Number} [options.message_data=null] already formatted message data, for subthreads getting data from their parent - * @param {Boolean} [options.composer] use the advanced composer, or + * @param {Number} [options.thread_level=0] number of thread levels + * @param {Boolean} [options.use_composer] use the advanced composer, or the default basic textarea if not set * @param {Number} [options.truncate_limit=250] number of character to * display before having a "show more" link; note that the text * will not be truncated if it does not have 110% of the parameter */ - init: function(parent, options) { + init: function(parent, domain, context, options) { this._super(parent); - // options - this.options = options || {}; - this.options.domain = options.domain || []; - this.options.context = _.extend({ + this.domain = domain || []; + this.context = _.extend({ default_model: 'mail.thread', default_res_id: 0, - default_parent_id: false }, options.context || {}); - this.options.thread_level = options.thread_level || 0; - this.options.composer = options.composer || false; - this.options.message_ids = options.message_ids || null; - this.options.message_data = options.message_data || null; - // datasets and internal vars - this.ds_thread = new session.web.DataSetSearch(this, this.options.context.default_model); - this.ds_notification = new session.web.DataSetSearch(this, 'mail.notification'); - this.ds_message = new session.web.DataSetSearch(this, 'mail.message'); - // display customization vars - this.display = { - truncate_limit: options.truncate_limit || 250, - show_header_compose: options.show_header_compose || false, + default_parent_id: false }, context || {}); + // options + this.options = { + message_ids: options.message_ids || null, + message_data: options.message_data || null, + thread_level: options.thread_level || 0, + use_composer: options.use_composer || false, + show_header_compose: options.show_header_compose != undefined ? options.show_header_compose: true, + show_record_name: options.show_record_name != undefined ? options.show_record_name: true, show_reply: options.show_reply || false, - show_delete: options.show_delete || false, - show_hide: options.show_hide || false, show_reply_by_email: options.show_reply_by_email || false, + show_dd_reply_by_email:options.show_dd_reply_by_email != undefined ? options.show_dd_reply_by_email: true, + show_dd_delete: options.show_dd_delete || false, + show_dd_hide: options.show_dd_hide || false, show_more: options.show_more || false, + truncate_limit: options.truncate_limit || 250, } + // datasets and internal vars + this.ds_thread = new session.web.DataSetSearch(this, this.context.default_model); + this.ds_notification = new session.web.DataSetSearch(this, 'mail.notification'); + this.ds_message = new session.web.DataSetSearch(this, 'mail.message'); }, start: function() { @@ -260,7 +303,7 @@ openerp.mail = function(session) { // fetch and display message, using message_ids if set var display_done = $.when(this.message_fetch(true, [], {})).then(this.proxy('do_customize_display')); // add message composition form view - if (this.display.show_header_compose && this.options.composer) { + if (this.options.show_header_compose && this.options.use_composer) { var compose_done = this.instantiate_composition_form(); } return display_done && compose_done; @@ -270,7 +313,9 @@ openerp.mail = function(session) { * - show_header_compose: show the composition form in the header */ do_customize_display: function() { this.display_user_avatar(); - if (this.display.show_header_compose) { this.$el.find('div.oe_mail_thread_action').eq(0).show(); } + if (this.options.show_header_compose) { + this.$el.find('div.oe_mail_thread_action').eq(0).show(); + } }, /** @@ -278,10 +323,8 @@ openerp.mail = function(session) { * in the function. */ bind_events: function() { var self = this; - // event: click on 'more' at bottom of thread - this.$el.find('button.oe_mail_button_more').click(function () { - self.do_message_fetch(); - }); + // event: click on 'More' at bottom of thread + this.$el.on('click', 'button.oe_mail_button_more', this.do_message_fetch_more); // event: writing in basic textarea of composition form (quick reply) this.$el.find('textarea.oe_mail_compose_textarea').keyup(function (event) { var charCode = (event.which) ? event.which : window.event.keyCode; @@ -290,41 +333,21 @@ openerp.mail = function(session) { }); // event: click on 'Reply' in msg this.$el.on('click', 'a.oe_mail_msg_reply', function (event) { - event.preventDefault(); - event.stopPropagation(); var act_dom = $(this).parents('li.oe_mail_thread_msg').eq(0).find('div.oe_mail_thread_action:first'); act_dom.toggle(); }); - // event: click on 'attachment(s)' in msg + // event: click on 'Attachment(s)' in msg this.$el.on('click', 'a.oe_mail_msg_view_attachments', function (event) { - event.preventDefault(); - event.stopPropagation(); var act_dom = $(this).parent().parent().parent().find('.oe_mail_msg_attachments'); act_dom.toggle(); }); // event: click on 'Delete' in msg side menu - this.$el.on('click', 'a.oe_mail_msg_delete', function (event) { - event.preventDefault(); - event.stopPropagation(); - if (! confirm(_t("Do you really want to delete this message?"))) { return false; } - var msg_id = event.srcElement.dataset.id; - if (! msg_id) return false; - $(event.srcElement).parents('li.oe_mail_thread_msg').eq(0).remove(); - return self.ds_msg.unlink([parseInt(msg_id)]); - }); + this.$el.on('click', 'a.oe_mail_msg_delete', this.on_message_delete); // event: click on 'Hide' in msg side menu - this.$el.on('click', 'a.oe_mail_msg_hide', function (event) { - event.preventDefault(); - event.stopPropagation(); - var msg_id = event.srcElement.dataset.id; - if (! msg_id) return false; - $(event.srcElement).parents('li.oe_mail_thread_msg').eq(0).remove(); - return self.ds_notif.call('set_message_read', [parseInt(msg_id)]); - }); - // event: click on "Reply by email" in msg side menu (email style) + this.$el.on('click', 'a.oe_mail_msg_hide', this.on_message_read); + // event: click on 'Reply by email' in msg side menu this.$el.on('click', 'a.oe_mail_msg_reply_by_email', function (event) { - event.preventDefault(); - event.stopPropagation(); + if (! self.compose_message_widget) return true; var msg_id = event.srcElement.dataset.msg_id; if (! msg_id) return false; self.compose_message_widget.refresh({ @@ -334,20 +357,37 @@ openerp.mail = function(session) { }); }, + on_message_delete: function (event) { + if (! confirm(_t("Do you really want to delete this message?"))) { return false; } + var msg_id = event.srcElement.dataset.id; + if (! msg_id) return false; + $(event.srcElement).parents('li.oe_mail_thread_msg').eq(0).remove(); + return this.ds_message.unlink([parseInt(msg_id)]); + }, + + on_message_read: function (event) { + //TDE: TODO + var msg_id = event.srcElement.dataset.id; + if (! msg_id) return false; + $(event.srcElement).parents('li.oe_mail_thread_msg').eq(0).remove(); + return this.ds_notification.call('set_message_read', [parseInt(msg_id)]); + }, + /** * Override-hack of do_action: automatically reload the chatter. * Normally it should be called only when clicking on 'Post/Send' * in the composition form. */ do_action: function(action, on_close) { + //TDE: TODO: instead of reloading, push the message ? this.message_clean(); this.message_fetch(); if (this.compose_message_widget) { this.compose_message_widget.refresh({ 'default_composition_mode': 'comment', - 'default_parent_id': this.options.default_parent_id, + 'default_parent_id': this.context.default_parent_id, 'default_content_subtype': 'plain'} ); } - return this._super(action, on_close); + // return this._super(action, on_close); }, /** Instantiate the composition form, with every parameters in context @@ -357,7 +397,7 @@ openerp.mail = function(session) { this.compose_message_widget.destroy(); } this.compose_message_widget = new mail.ComposeMessage(this, { - 'context': _.extend(context || {}, this.options.context), + 'context': _.extend(context || {}, this.context), }); var composition_node = this.$el.find('div.oe_mail_thread_action'); composition_node.empty(); @@ -365,6 +405,11 @@ openerp.mail = function(session) { return compose_done; }, + refresh_composition_form: function (context) { + if (! this.compose_message_widget) return; + return this.compose_message_widget.refresh(context); + }, + /** Clean the thread */ message_clean: function() { this.$el.find('div.oe_mail_thread_display').empty(); @@ -374,20 +419,20 @@ openerp.mail = function(session) { * @param {Bool} initial_mode: initial mode: try to use message_data or * message_ids, if nothing available perform a message_read; otherwise * directly perform a message_read - * @param {Array} additional_domain: added to options.domain - * @param {Object} additional_context: added to options.context + * @param {Array} additional_domain: added to this.domain + * @param {Object} additional_context: added to this.context */ message_fetch: function (initial_mode, additional_domain, additional_context) { var self = this; // domain and context: options + additional - fetch_domain = _.flatten([this.options.domain, additional_domain || []], true) - fetch_context = _.extend(this.options.context, additional_context || {}) - // if message_ids is set: try to use it + fetch_domain = _.flatten([this.domain, additional_domain || []], true) + fetch_context = _.extend(this.context, additional_context || {}) + // initial mode: try to use message_data or message_ids if (initial_mode && this.options.message_data) { return this.message_display(this.options.message_data); } - return this.ds_message.call('message_read', - [(initial_mode && this.options.message_ids) || false, fetch_domain, this.options.thread_level, undefined, fetch_context] + message_ids = initial_mode && this.options.message_ids != null && this.options.message_ids || false; + return this.ds_message.call('message_read', [message_ids, fetch_domain, this.options.thread_level, undefined, fetch_context] ).then(this.proxy('message_display')); }, @@ -407,19 +452,19 @@ openerp.mail = function(session) { } else { self.display_record(record); - // if (self.options.thread_level >= 0) { - self.thread = new mail.Thread(self, { - 'context': { - 'default_model': record.model, - 'default_id': record.res_id, + self.thread = new mail.Thread(self, self.domain, + { 'default_model': record.model, + 'default_res_id': record.res_id, 'default_parent_id': record.id }, - 'message_data': record.child_ids, 'thread_level': self.options.thread_level-1, - 'show_header_compose': false, 'show_reply': self.options.thread_level > 1, - 'show_hide': self.display.show_hide, 'show_delete': self.display.show_delete, - }); + { 'message_data': record.child_ids, + 'thread_level': self.options.thread_level - 1, + 'show_header_compose': false, + 'show_reply': self.options.show_reply && self.options.thread_level > 1, + 'show_reply_by_email': self.options.show_reply_by_email, + 'show_dd_hide': self.options.show_dd_hide, + 'show_dd_delete': self.options.show_dd_delete }); self.$el.find('li.oe_mail_thread_msg:last').append('<div class="oe_mail_thread_subthread"/>'); self.thread.appendTo(self.$el.find('div.oe_mail_thread_subthread:last')); - // } } }); if (! _expendable) { @@ -431,7 +476,7 @@ openerp.mail = function(session) { * - record.date: formatting according to the user timezone * - record.timerelative: relative time givein by timeago lib * - record.avatar: image url - * - record.attachments[].url: url of each attachment + * - record.attachment_ids[].url: url of each attachment * - record.is_author: is the current user the author of the record */ display_record: function (record) { // formatting and additional fields @@ -440,21 +485,18 @@ openerp.mail = function(session) { if (record.type == 'email') { record.avatar = ('/mail/static/src/img/email_icon.png'); } else { - record.avatar = mail.ChatterUtils.get_image(this.session.prefix, this.session.session_id, 'res.partner', 'image_small', record.author_id[0]); + record.avatar = mail.ChatterUtils.get_image(this.session, 'res.partner', 'image_small', record.author_id[0]); } - //TDE: FIX - if (record.attachments) { - for (var l in record.attachments) { - var url = self.session.origin + '/web/binary/saveas?session_id=' + self.session.session_id + '&model=ir.attachment&field=datas&filename_field=datas_fname&id='+records[k].attachments[l].id; - record.attachments[l].url = url; - } + for (var l in record.attachment_ids) { + var attach = record.attachment_ids[l]; + attach['url'] = mail.ChatterUtils.get_attachment_url(this.session, attach); } record.is_author = mail.ChatterUtils.is_author(this, record.author_user_id[0]); // render, add the expand feature - var rendered = session.web.qweb.render('mail.thread.message', {'record': record, 'thread': this, 'params': this.options, 'display': this.display}); + var rendered = session.web.qweb.render('mail.thread.message', {'record': record, 'thread': this, 'options': this.options}); $(rendered).appendTo(this.$el.children('div.oe_mail_thread_display:first')); - this.$el.find('div.oe_mail_msg_record_body').expander({ - slicePoint: this.options.msg_more_limit, + this.$el.find('div.oe_mail_msg_body').expander({ + slicePoint: this.options.truncate_limit, expandText: 'read more', userCollapseText: '[^]', detailClass: 'oe_mail_msg_tail', @@ -473,7 +515,7 @@ openerp.mail = function(session) { }, display_user_avatar: function () { - var avatar = mail.ChatterUtils.get_image(this.session.prefix, this.session.session_id, 'res.users', 'image_small', this.options.uid); + var avatar = mail.ChatterUtils.get_image(this.session, 'res.users', 'image_small', this.session.uid); return this.$el.find('img.oe_mail_icon').attr('src', avatar); }, @@ -484,13 +526,13 @@ openerp.mail = function(session) { var body = comment_node.val(); comment_node.val(''); } - return this.ds_post.call('message_post', [ - [this.options.context.res_id], body, false, 'comment', this.options.context.parent_id] - ).then(this.proxy('message_fetch')); + return this.ds_thread.call('message_post', [ + [this.context.default_res_id], body, false, 'comment', this.context.default_parent_id, undefined] + ).then(self.message_fetch()); }, /** Action: 'shows more' to fetch new messages */ - do_message_fetch: function () { + do_message_fetch_more: function () { return this.message_fetch(false, this.fetch_more_domain, this.fetch_more_context); }, @@ -533,13 +575,11 @@ openerp.mail = function(session) { * mail_thread Widget * ------------------------------------------------------------ * - * This widget handles the display of the Chatter on documents. + * This widget handles the display of messages on a document. Its main + * use is to receive a context and a domain, and to delegate the message + * fetching and displaying to the Thread widget. */ - - /* Add mail_thread widget to registry */ session.web.form.widgets.add('mail_thread', 'openerp.mail.RecordThread'); - - /** mail_thread widget: thread of comments */ mail.RecordThread = session.web.form.AbstractField.extend({ template: 'mail.record_thread', @@ -548,13 +588,11 @@ openerp.mail = function(session) { this.options.domain = this.options.domain || []; this.options.context = {'default_model': 'mail.thread', 'default_res_id': false}; this.options.thread_level = this.options.thread_level || 0; - this.thread_list = []; }, start: function() { this._super.apply(this, arguments); - // NB: all the widget should be modified to check the actual_mode property on view, not use - // any other method to know if the view is in create mode anymore + // NB: check the actual_mode property on view to know if the view is in create mode anymore this.view.on("change:actual_mode", this, this._check_visibility); this._check_visibility(); }, @@ -563,11 +601,6 @@ openerp.mail = function(session) { this.$el.toggle(this.view.get("actual_mode") !== "create"); }, - destroy: function() { - for (var i in this.thread_list) { this.thread_list[i].destroy(); } - this._super.apply(this, arguments); - }, - set_value: function() { var self = this; this._super.apply(this, arguments); @@ -579,14 +612,15 @@ openerp.mail = function(session) { _.extend(this.options.context, { default_res_id: this.view.datarecord.id, default_model: this.view.model }); + // update domain + var domain = this.options.domain.concat([['model', '=', this.view.model], ['res_id', '=', this.view.datarecord.id]]); // create and render Thread widget this.$el.find('div.oe_mail_recthread_main').empty(); - for (var i in this.thread_list) { this.thread_list[i].destroy(); } - var thread = new mail.Thread(self, { - 'context': this.options.context, - 'thread_level': this.options.thread_level, 'show_header_compose': true, - 'show_delete': true, 'composer': true }); - this.thread_list.push(thread); + var thread = new mail.Thread(self, domain, this.options.context, + { 'thread_level': this.options.thread_level, + 'use_composer': true, + 'show_dd_delete': true, + 'show_reply_by_email': true }); return thread.appendTo(this.$el.find('div.oe_mail_recthread_main')); }, }); @@ -597,22 +631,22 @@ openerp.mail = function(session) { * Wall Widget * ------------------------------------------------------------ * - * This widget handles the display of the Chatter on the Wall. + * This widget handles the display of messages on a Wall. Its main + * use is to receive a context and a domain, and to delegate the message + * fetching and displaying to the Thread widget. */ - - /* Add WallView widget to registry */ session.web.client_actions.add('mail.wall', 'session.mail.Wall'); - - /* WallView widget: a wall of messages */ mail.Wall = session.web.Widget.extend({ template: 'mail.wall', /** * @param {Object} parent parent * @param {Object} [options] - * @param {Number} [options.domain] domain on the Wall, is an array. - * @param {Number} [options.domain] context, is an object. It should + * @param {Array} [options.domain] domain on the Wall + * @param {Object} [options.context] context, is an object. It should * contain default_model, default_res_id, to give it to the threads. + * @param {Number} [options.thread_level] number of thread levels to display + * 0 being flat. */ init: function (parent, options) { this._super(parent); @@ -620,23 +654,15 @@ openerp.mail = function(session) { this.options.domain = options.domain || []; this.options.context = options.context || {}; this.options.thread_level = options.thread_level || 1; - this.thread_list = []; - this.ds_msg = new session.web.DataSetSearch(this, 'mail.message'); - // for search view - this.search = {'domain': [], 'context': {}, 'groupby': {}} this.search_results = {'domain': [], 'context': {}, 'groupby': {}} + this.ds_msg = new session.web.DataSetSearch(this, 'mail.message'); }, start: function () { this._super.apply(this, arguments); - var search_view_ready = this.load_search_view({}, false); - var thread_displayed = this.message_display(); - return (search_view_ready && thread_displayed); - }, - - destroy: function () { - for (var i in this.thread_list) { this.thread_list[i].destroy(); } - this._super.apply(this, arguments); + var searchview_ready = this.load_searchview({}, false); + var thread_displayed = this.message_render(); + return (searchview_ready && thread_displayed); }, /** @@ -644,7 +670,7 @@ openerp.mail = function(session) { * @param {Object} defaults ?? * @param {Boolean} hidden some kind of trick we do not care here */ - load_search_view: function (defaults, hidden) { + load_searchview: function (defaults, hidden) { var self = this; this.searchview = new session.web.SearchView(this, this.ds_msg, false, defaults || {}, hidden || false); return this.searchview.appendTo(this.$el.find('.oe_view_manager_view_search')).then(function () { @@ -653,9 +679,8 @@ openerp.mail = function(session) { }, /** - * Aggregate the domains, contexts and groupbys in parameter - * with those from search form, and then calls fetch_comments - * to actually fetch comments + * Get the domains, contexts and groupbys in parameter from search + * view, then render the filtered threads. * @param {Array} domains * @param {Array} contexts * @param {Array} groupbys @@ -670,30 +695,24 @@ openerp.mail = function(session) { self.search_results['context'] = results.context; self.search_results['domain'] = results.domain; self.search_results['groupby'] = results.group_by; - self.message_clean(); - return self.message_display(); + return self.message_render(); }); }, - /** Clean the wall */ - message_clean: function() { + /** Clean and display the threads */ + message_render: function () { this.$el.find('ul.oe_mail_wall_threads').empty(); - }, - - /** Display the Wall threads */ - message_display: function () { + var domain = this.options.domain.concat(this.search_results['domain']); var render_res = session.web.qweb.render('mail.wall_thread_container', {}); - $('<li class="oe_mail_wall_thread">').html(render_res).appendTo(this.$el.find('ul.oe_mail_wall_threads')); - var thread = new mail.Thread(this, { - 'domain': this.options.domain, 'context': this.options.context, - 'thread_level': this.options.thread_level, 'composer': true, - // display options - 'show_header_compose': true, 'show_reply': this.options.thread_level > 0, - 'show_hide': true, 'show_reply_by_email': true, + $(render_res).appendTo(this.$el.find('ul.oe_mail_wall_threads')); + var thread = new mail.Thread(this, domain, this.options.context, + { 'thread_level': this.options.thread_level, + 'use_composer': true, + 'show_reply': this.options.thread_level > 0, + 'show_dd_hide': true, } ); - thread.appendTo(this.$el.find('li.oe_mail_wall_thread:last')); - this.thread_list.push(thread); + return thread.appendTo(this.$el.find('li.oe_mail_wall_thread:last')); }, }); }; diff --git a/addons/mail/static/src/js/mail_followers.js b/addons/mail/static/src/js/mail_followers.js index e5d216ed3d2..34976269285 100644 --- a/addons/mail/static/src/js/mail_followers.js +++ b/addons/mail/static/src/js/mail_followers.js @@ -79,7 +79,7 @@ openerp_mail_followers = function(session, mail) { var node_user_list = this.$el.find('ul.oe_mail_followers_display').empty(); this.$el.find('div.oe_mail_recthread_followers h4').html(this.options.title + ' (' + records.length + ')'); _(records).each(function (record) { - record.avatar_url = mail.ChatterUtils.get_image(self.session.prefix, self.session.session_id, 'res.partner', 'image_small', record.id); + record.avatar_url = mail.ChatterUtils.get_image(self.session, 'res.partner', 'image_small', record.id); $(session.web.qweb.render('mail.followers.partner', {'record': record})).appendTo(node_user_list); }); if (this.message_is_follower) { diff --git a/addons/mail/static/src/xml/mail.xml b/addons/mail/static/src/xml/mail.xml index f6be765c603..4d3b56cf62f 100644 --- a/addons/mail/static/src/xml/mail.xml +++ b/addons/mail/static/src/xml/mail.xml @@ -39,8 +39,8 @@ wall_thread_container template for the wall Each discussion thread is contained inside this template --> - <t t-name="mail.wall_thread_container"> - </t> + <li t-name="mail.wall_thread_container" class="oe_mail_wall_thread"> + </li> <!-- record_thread main template @@ -74,6 +74,20 @@ </t> <!-- + mail.compose_message.add_attachment template + Small template to be inserted in the composition form to add attachments + --> + <t t-name="mail.compose_message.add_attachment"> + <t t-call="HiddenInputFile"> + <t t-set="fileupload_id" t-value="widget.fileupload_id"/> + <t t-set="fileupload_action">/web/binary/upload_attachment</t> + <input type="hidden" name="model" t-att-value="widget.form_view.model"/> + <input type="hidden" name="id" t-att-value="widget.form_view.datarecord.id || 0"/> + <input type="hidden" name="session_id" t-att-value="widget.session.session_id"/> + </t> + </t> + + <!-- thread template This template holds a thread of comments. It begins with an actions container, holding the composition form. Then come the various @@ -100,16 +114,14 @@ <!-- dropdown menu with message options and actions --> <span class="oe_dropdown_toggle oe_dropdown_arrow"> <ul class="oe_dropdown_menu"> - <t t-if="record.is_author"> - <li t-if="display['show_delete']"><a href="#" class="oe_mail_msg_delete" t-attf-data-id='{record.id}'>Delete</a></li> - </t> - <li t-if="display['show_hide']"><a href="#" class="oe_mail_msg_hide" t-attf-data-id='{record.id}'>Remove notification</a></li> + <li t-if="record.is_author & options.show_dd_delete"><a class="oe_mail_msg_delete" t-attf-data-id='{record.id}'>Delete</a></li> + <li t-if="options.show_dd_hide"><a class="oe_mail_msg_hide" t-attf-data-id='{record.id}'>Remove notification</a></li> <!-- Uncomment when adding subtype hiding <li t-if="display['show_hide']"> <a href="#" class="oe_mail_msg_hide_type" t-attf-data-subtype='{record.subtype}'>Hide '<t t-esc="record.subtype"/>' for this document</a> </li> --> - <li><a href="#" t-attf-data-msg_id="{record.id}" class="oe_mail_msg_reply_by_email">Quote and reply</a></li> - <li t-if="record.type == 'email'"><a t-attf-href="#model=mail.message&id=#{record.id}" class="oe_mail_msg_details">Details</a></li> + <li t-if="options.show_dd_reply_by_email"><a class="oe_mail_msg_reply_by_email" t-attf-data-msg_id="{record.id}">Quote and reply</a></li> + <li t-if="record.type == 'email'"><a class="oe_mail_msg_details" t-attf-href="#model=mail.message&id=#{record.id}" >Details</a></li> </ul> </span> <!-- message itself --> @@ -118,39 +130,54 @@ <t t-raw="record.subject"/> </h1> <div class="oe_mail_msg_body"> - - <div class="oe_mail_msg_record_body"> - <a t-attf-href="#model=#{params.res_model}&id=#{params.res_id}" t-if="(params.thread_level > 0) & (!record.subject)"><t t-raw="record.record_name"/></a> - <t t-raw="record.body"/> - </div> + <t t-if="options.show_record_name & (!record.subject) & (options.thread_level > 0)"> + <a t-attf-href="#model=#{record.model}&id=#{record.res_id}"><t t-raw="record.record_name"/></a> + </t> + <t t-raw="record.body"/> </div> <div class="oe_clear"/> <ul class="oe_mail_msg_footer"> - <li t-if="record.subject & params.thread_level > 0"><a t-attf-href="#model=#{params.res_model}&id=#{params.res_id}"><t t-raw="record.record_name"/></a></li> - <li><a t-attf-href="#model=res.partner&id=#{record.author_id[0]}"><t t-raw="record.author_id[1]"/></a></li> - <li><span t-att-title="record.date"><t t-raw="record.timerelative"/></span></li> - <li t-if="display['show_reply']"><a href="#" class="oe_mail_msg_reply">Reply</a></li> - <!-- uncomment when merging vote - <li><a href="#">Like</a></li> - --> - <li t-if="record.attachment_ids.length > 0"> - <a href="#" class="oe_mail_msg_view_attachments"> - <t t-if="record.attachment_ids.length == 1">1 Attachment</t> - <t t-if="record.attachment_ids.length > 1"><t t-raw="record.attachment_ids.length"/> Attachments</t> - </a> - </li> + <li t-if="options.show_record_name & record.subject & options.thread_level > 0"> + <a t-attf-href="#model=#{record.model}&id=#{record.res_id}"><t t-raw="record.record_name"/></a> + </li> + <li><a t-attf-href="#model=res.partner&id=#{record.author_id[0]}"><t t-raw="record.author_id[1]"/></a></li> + <li><span t-att-title="record.date"><t t-raw="record.timerelative"/></span></li> + <li t-if="options.show_reply"><a class="oe_mail_msg_reply">Reply</a></li> + <li t-if="options.show_reply_by_email"><a class="oe_mail_msg_reply_by_email" t-attf-data-msg_id="{record.id}">Reply</a></li> + <!-- uncomment when merging vote + <li><a href="#">Like</a></li> + --> + <li t-if="record.attachment_ids.length > 0"> + <a class="oe_mail_msg_view_attachments"> + <t t-if="record.attachment_ids.length == 1">1 Attachment</t> + <t t-if="record.attachment_ids.length > 1"><t t-raw="record.attachment_ids.length"/> Attachments</t> + </a> + </li> </ul> <t t-if="record.attachment_ids.length > 0"> <div class="oe_clear"></div> - <ul class="oe_mail_msg_attachments"> - <t t-foreach="record.attachments" t-as="attachment"> - <li> <a t-att-href="attachment.url"><t t-raw="attachment.name"/></a> </li> - </t> - </ul> + <t t-call="mail.thread.message.attachments"/> </t> </div> </div> </div> </li> + <!-- + mail.thread.message.attachments template + Template used to display attachments in a mail.message + --> + <t t-name="mail.thread.message.attachments"> + <ul class="oe_mail_msg_attachments"> + <t t-foreach="record.attachment_ids" t-as="attachment"> + <li> + <a t-att-href="attachment.url"><t t-raw="attachment.name || attachment.filename"/></a> + <t t-if="record.show_attachment_delete"> + <a class="oe_right oe_mail_attachment_delete" title="Delete this attachmentt" t-attf-data-id="{attachment.id}">x</a> + </t> + </li> + </t> + </ul> + </t> + </template> diff --git a/addons/mail/tests/test_mail.py b/addons/mail/tests/test_mail.py index f45745f31dc..069e1b0d35a 100644 --- a/addons/mail/tests/test_mail.py +++ b/addons/mail/tests/test_mail.py @@ -29,7 +29,7 @@ Received: by mail1.openerp.com (Postfix, from userid 10002) From: Sylvie Lelitre <sylvie.lelitre@agrolait.com> Subject: {subject} MIME-Version: 1.0 -Content-Type: multipart/alternative; +Content-Type: multipart/alternative; boundary="----=_Part_4200734_24778174.1344608186754" Date: Fri, 10 Aug 2012 14:16:26 +0000 Message-ID: <1198923581.41972151344608186760.JavaMail@agrolait.com> @@ -52,9 +52,9 @@ Content-Transfer-Encoding: quoted-printable <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8" /> </head>=20 <body style=3D"margin: 0; padding: 0; background: #ffffff;-webkit-text-size-adjust: 100%;">=20 - + <p>Please call me as soon as possible this afternoon!</p> - + <p>--<br/> Sylvie <p> @@ -153,7 +153,7 @@ class test_mail(common.TransactionCase): test_msg_id = '<deadcafe.1337@smtp.agrolait.com>' mail_text = MAIL_TEMPLATE_PLAINTEXT.format(to='groups@example.com', subject='frogs', extra='', msg_id=test_msg_id) self.mail_thread.message_process(cr, uid, None, mail_text) - new_mail = self.mail_message.browse(cr, uid, self.mail_message.search(cr, uid, [('message_id','=',test_msg_id)])[0]) + new_mail = self.mail_message.browse(cr, uid, self.mail_message.search(cr, uid, [('message_id', '=', test_msg_id)])[0]) self.assertEqual(new_mail.body, '\n<pre>\nPlease call me as soon as possible this afternoon!\n\n--\nSylvie\n</pre>\n', 'plaintext mail incorrectly parsed') @@ -409,12 +409,14 @@ class test_mail(common.TransactionCase): self.assertEqual(compose.content_subtype, 'html', 'mail.compose.message incorrect content_subtype') # 2. Post the comment, get created message + parent_id = message.id mail_compose.send_mail(cr, uid, [compose_id]) group_pigs.refresh() message = group_pigs.message_ids[0] - # Test: mail.message: subject as Re:.., body in html + # Test: mail.message: subject as Re:.., body in html, parent_id self.assertEqual(message.subject, _msg_reply, 'mail.message incorrect subject') self.assertIn('Administrator wrote:<blockquote><pre>Pigs rules</pre></blockquote></div>', message.body, 'mail.message body is incorrect') + self.assertEqual(message.parent_id and message.parent_id.id, parent_id, 'mail.message parent_id incorrect') # Test: mail.message: attachments for attach in message.attachment_ids: self.assertEqual(attach.res_model, 'mail.group', 'mail.message attachment res_model incorrect') @@ -458,6 +460,7 @@ class test_mail(common.TransactionCase): # It will be updated as soon as we have fixed specs ! cr, uid = self.cr, self.uid group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id) + def _compare_structures(struct1, struct2, n=0): # print '%scompare structure' % ('\t' * n) self.assertEqual(len(struct1), len(struct2), 'message_read structure number of childs incorrect') diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index 3153ccc2069..03c5a7cfe8b 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -31,6 +31,7 @@ from tools.translate import _ # main mako-like expression pattern EXPRESSION_PATTERN = re.compile('(\$\{.+?\})') + class mail_compose_message(osv.TransientModel): """ Generic message composition wizard. You may inherit from this wizard at model and view levels to provide specific features. @@ -117,6 +118,7 @@ class mail_compose_message(osv.TransientModel): 'body_text': lambda self, cr, uid, ctx={}: False, 'body': lambda self, cr, uid, ctx={}: '', 'subject': lambda self, cr, uid, ctx={}: False, + 'partner_ids': lambda self, cr, uid, ctx={}: [], } def notify(self, cr, uid, newid, context=None): @@ -152,7 +154,7 @@ class mail_compose_message(osv.TransientModel): # create subject re_prefix = _('Re:') reply_subject = tools.ustr(message_data.subject or '') - if not (reply_subject.startswith('Re:') or reply_subject.startswith(re_prefix)): + if not (reply_subject.startswith('Re:') or reply_subject.startswith(re_prefix)) and message_data.subject: reply_subject = "%s %s" % (re_prefix, reply_subject) # create the reply in the body reply_body = _('<div>On %(date)s, %(sender_name)s wrote:<blockquote>%(body)s</blockquote></div>') % { @@ -176,8 +178,8 @@ class mail_compose_message(osv.TransientModel): return result def toggle_content_subtype(self, cr, uid, ids, context=None): - """ hit toggle formatting mode button: calls onchange_formatting to - emulate an on_change, then writes the value to update the form. """ + """ toggle content_subtype: calls onchange_formatting to emulate an + on_change, then writes the value to update the form. """ for record in self.browse(cr, uid, ids, context=context): content_st_new_value = 'plain' if record.content_subtype == 'html' else 'html' onchange_res = self.onchange_content_subtype(cr, uid, ids, content_st_new_value, record.model, record.res_id, context=context) @@ -185,11 +187,10 @@ class mail_compose_message(osv.TransientModel): return True def onchange_content_subtype(self, cr, uid, ids, value, model, res_id, context=None): - """ onchange_content_subtype (values: 'plain' or 'html'). This onchange - on the subtype allows to have some specific behavior when switching - between text or html mode. - This method can be overridden for models that want to have their - specific behavior. """ + """ This onchange allows to have some specific behavior when switching + between text or html mode. This method can be overridden. + :param values: 'plain' or 'html' + """ return {'value': {'content_subtype': value}} def _verify_partner_email(self, cr, uid, partner_ids, context=None): @@ -211,9 +212,9 @@ class mail_compose_message(osv.TransientModel): } def onchange_partner_ids(self, cr, uid, ids, value, context=None): - """ onchange_partner_ids (value format: [[6, 0, [3, 4]]]). The - basic purpose of this method is to check that destination partners + """ The basic purpose of this method is to check that destination partners effectively have email addresses. Otherwise a warning is thrown. + :param value: value format: [[6, 0, [3, 4]]] """ res = {'value': {}} if not value or not value[0] or not value[0][0] == 6: @@ -221,12 +222,6 @@ class mail_compose_message(osv.TransientModel): res.update(self._verify_partner_email(cr, uid, value[0][2], context=context)) return res - def unlink(self, cr, uid, ids, context=None): - # Cascade delete all attachments, as they are owned by the composition wizard - for wizard in self.read(cr, uid, ids, ['attachment_ids'], context=context): - self.pool.get('ir.attachment').unlink(cr, uid, wizard['attachment_ids'], context=context) - return super(mail_compose_message, self).unlink(cr, uid, ids, context=context) - def dummy(self, cr, uid, ids, context=None): """ TDE: defined to have buttons that do basically nothing. It is currently impossible to have buttons that do nothing special @@ -255,6 +250,7 @@ class mail_compose_message(osv.TransientModel): post_values = { 'subject': wizard.subject if wizard.content_subtype == 'html' else False, 'body': wizard.body if wizard.content_subtype == 'html' else '<pre>%s</pre>' % tools.ustr(wizard.body_text), + 'parent_id': wizard.parent_id and wizard.parent_id.id, 'partner_ids': [(4, partner.id) for partner in wizard.partner_ids], 'attachments': [(attach.datas_fname or attach.name, base64.b64decode(attach.datas)) for attach in wizard.attachment_ids], } @@ -268,6 +264,8 @@ class mail_compose_message(osv.TransientModel): post_values.update(email_dict) # post the message active_model_pool.message_post(cr, uid, [res_id], type='comment', context=context, **post_values) + # post process: update attachments, because id is not necessarily known when adding attachments in Chatter + self.pool.get('ir.attachment').write(cr, uid, [attach.id for attach in wizard.attachment_ids], {'res_id': wizard.id}, context=context) return {'type': 'ir.actions.act_window_close'} @@ -296,6 +294,7 @@ class mail_compose_message(osv.TransientModel): """ if context is None: context = {} + def merge(match): exp = str(match.group()[2:-1]).strip() result = eval(exp, { diff --git a/addons/mail/wizard/mail_compose_message_view.xml b/addons/mail/wizard/mail_compose_message_view.xml index 70b50c154ac..2899c0c9a41 100644 --- a/addons/mail/wizard/mail_compose_message_view.xml +++ b/addons/mail/wizard/mail_compose_message_view.xml @@ -14,7 +14,7 @@ <group> <field name="subject" placeholder="Subject..."/> <field name="partner_ids" widget="many2many_tags" placeholder="Add contacts to notify..." - context="{'force_create':True}" + context="{'force_email':True}" on_change="onchange_partner_ids(partner_ids)"/> </group> <notebook> @@ -65,7 +65,7 @@ class="oe_mail_compose_message_body_html" attrs="{'invisible':[('content_subtype', '=', 'plain')]}"/> <field name="partner_ids" colspan="2" nolabel="1" widget="many2many_tags" placeholder="Add contacts to notify..." - context="{'force_create':True}" + context="{'force_email':True}" on_change="onchange_partner_ids(partner_ids)" class="oe_mail_compose_message_partner_ids"/> <field name="attachment_ids" colspan="2" nolabel="1" widget="many2many_tags" diff --git a/addons/marketing_campaign_crm_demo/i18n/nb.po b/addons/marketing_campaign_crm_demo/i18n/nb.po new file mode 100644 index 00000000000..036051e492d --- /dev/null +++ b/addons/marketing_campaign_crm_demo/i18n/nb.po @@ -0,0 +1,192 @@ +# 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-10 13:33+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-11 04:50+0000\n" +"X-Generator: Launchpad (build 15924)\n" + +#. module: marketing_campaign_crm_demo +#: model:ir.actions.report.xml,name:marketing_campaign_crm_demo.mc_crm_lead_demo_report +msgid "Marketing campaign demo report" +msgstr "Markedsføringskampanje demo rapport." + +#. module: marketing_campaign_crm_demo +#: model:email.template,body_text:marketing_campaign_crm_demo.email_template_1 +msgid "" +"Hello,Thanks for generous interest you have shown in the " +"openERP.Regards,OpenERP Team," +msgstr "" +"Hei, Takk for sjenerøs interessen du har vist i openERP.Regards, OpenERP lag," + +#. module: marketing_campaign_crm_demo +#: report:crm.lead.demo:0 +msgid "Company :" +msgstr "Firma :" + +#. module: marketing_campaign_crm_demo +#: model:email.template,subject:marketing_campaign_crm_demo.email_template_4 +msgid "Thanks for buying the OpenERP book" +msgstr "Takk for at du kjøpte OpenERP boken." + +#. module: marketing_campaign_crm_demo +#: model:email.template,body_text:marketing_campaign_crm_demo.email_template_6 +msgid "" +"Hello, We have very good offer that might suit you.\n" +" For our silver partners,We are paid technical training on " +"june,2010.\n" +" If any further information required kindly revert back.\n" +" I really appreciate your co-operation on this.\n" +" Regards,OpenERP Team," +msgstr "" +"Hei, Vi har veldig godt tilbud som kan passe for deg.\n" +" For våre sølv partnere, Vi betalte teknisk trening på juni " +"2010.\n" +" Hvis noen ytterligere opplysninger som kreves ber gå tilbake.\n" +" Jeg setter pris på ditt samarbeid om dette.\n" +" Hilsen OpenERP Team," + +#. module: marketing_campaign_crm_demo +#: model:email.template,subject:marketing_campaign_crm_demo.email_template_5 +msgid "Propose a free technical training to Gold partners" +msgstr "Foreslå en gratis teknisk opplæring til Gold partnere." + +#. module: marketing_campaign_crm_demo +#: model:email.template,subject:marketing_campaign_crm_demo.email_template_3 +msgid "Thanks for subscribing to the OpenERP Discovery Day" +msgstr "Takk for at du abonnerte på OpenERP Discovery dag." + +#. module: marketing_campaign_crm_demo +#: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy +msgid "Dummy Action" +msgstr "Dummy handling." + +#. module: marketing_campaign_crm_demo +#: report:crm.lead.demo:0 +msgid "Partner :" +msgstr "Partner :" + +#. module: marketing_campaign_crm_demo +#: model:email.template,subject:marketing_campaign_crm_demo.email_template_1 +msgid "Thanks for showing interest in OpenERP" +msgstr "Takk for at du viser interesse for OpenERP." + +#. module: marketing_campaign_crm_demo +#: model:email.template,subject:marketing_campaign_crm_demo.email_template_2 +msgid "Propose to subscribe to the OpenERP Discovery Day on May 2010" +msgstr "Foreslår å abonnere på OpenERP Discovery Day mai 2010." + +#. module: marketing_campaign_crm_demo +#: model:email.template,body_text:marketing_campaign_crm_demo.email_template_7 +msgid "" +"Hello, We have very good offer that might suit you.\n" +" For our silver partners,We are offering Gold partnership.\n" +" If any further information required kindly revert back.\n" +" I really appreciate your co-operation on this.\n" +" Regards,OpenERP Team," +msgstr "" +"Hei, Vi har veldig godt tilbud som kan passe for deg.\n" +" For våre sølv partnere, tilbyr vi Gold partnerskap.\n" +" Hvis noen ytterligere opplysninger som kreves ber gå tilbake.\n" +" Jeg setter pris på ditt samarbeid om dette.\n" +" Hilsen OpenERP Team," + +#. module: marketing_campaign_crm_demo +#: model:email.template,subject:marketing_campaign_crm_demo.email_template_7 +msgid "Propose gold partnership to silver partners" +msgstr "Foreslå gull partnerskap til sølv partnere." + +#. module: marketing_campaign_crm_demo +#: model:email.template,body_text:marketing_campaign_crm_demo.email_template_4 +msgid "" +"Hello,Thanks for showing intrest and buying the OpenERP book.\n" +" If any further information required kindly revert back.\n" +" I really appreciate your co-operation on this.\n" +" Regards,OpenERP Team," +msgstr "" +"Hei, Takk for at du viser interesse og kjøpe OpenERP boken.\n" +" Hvis noen ytterligere opplysninger som kreves ber gå tilbake.\n" +" Jeg setter pris på ditt samarbeid om dette.\n" +" Hilsen OpenERP Team," + +#. module: marketing_campaign_crm_demo +#: model:email.template,body_text:marketing_campaign_crm_demo.email_template_5 +msgid "" +"Hello, We have very good offer that might suit you.\n" +" For our gold partners,We are arranging free technical training " +"on june,2010.\n" +" If any further information required kindly revert back.\n" +" I really appreciate your co-operation on this.\n" +" Regards,OpenERP Team," +msgstr "" +"Hei, Vi har veldig godt tilbud som kan passe for deg.\n" +" For våre gull partnere, Vi arrangerer gratis teknisk trening på " +"juni 2010.\n" +" Hvis noen ytterligere opplysninger som kreves ber gå tilbake.\n" +" Jeg setter pris på ditt samarbeid om dette.\n" +" Hilsen OpenERP Team," + +#. module: marketing_campaign_crm_demo +#: model:email.template,body_text:marketing_campaign_crm_demo.email_template_3 +msgid "" +"Hello,Thanks for showing intrest and for subscribing to the OpenERP " +"Discovery Day.\n" +" If any further information required kindly revert back.\n" +" I really appreciate your co-operation on this.\n" +" Regards,OpenERP Team," +msgstr "" +"Hei, Takk for at du viser interesse og for å abonnere på OpenERP Discovery " +"Day.\n" +" Hvis noen ytterligere opplysninger som kreves ber gå tilbake.\n" +" Jeg setter pris på ditt samarbeid om dette.\n" +" Hilsen OpenERP Team," + +#. module: marketing_campaign_crm_demo +#: model:email.template,subject:marketing_campaign_crm_demo.email_template_8 +msgid "Thanks for subscribing to technical training" +msgstr "Takk for at du abonnerte på teknisk trening." + +#. module: marketing_campaign_crm_demo +#: model:email.template,body_text:marketing_campaign_crm_demo.email_template_2 +msgid "" +"Hello,We have very good offer that might suit you.\n" +" We propose you to subscribe to the OpenERP Discovery Day on May " +"2010.\n" +" If any further information required kindly revert back.\n" +" We really appreciate your co-operation on this.\n" +" Regards,OpenERP Team," +msgstr "" +"Hei, Vi har veldig godt tilbud som kan passe for deg.\n" +" Vi foreslår at du abonnere på OpenERP Discovery Day mai 2010.\n" +" Hvis noen ytterligere opplysninger som kreves ber gå tilbake.\n" +" Vi setter pris på din samarbeid om dette.\n" +" Hilsen OpenERP Team," + +#. module: marketing_campaign_crm_demo +#: model:email.template,body_text:marketing_campaign_crm_demo.email_template_8 +msgid "" +"Hello, Thanks for showing intrest and for subscribing to technical " +"training.If any further information required kindly revert back.I really " +"appreciate your co-operation on this.\n" +" Regards,OpenERP Team," +msgstr "" +"Hei, Takk for at du viser interesse og for å abonnere på teknisk training.If " +"ytterligere informasjon som kreves ber tilbake tilbake.Jeg virkelig setter " +"pris på din samarbeid om dette.\n" +" Hilsen OpenERP Team," + +#. module: marketing_campaign_crm_demo +#: model:email.template,subject:marketing_campaign_crm_demo.email_template_6 +msgid "Propose paid training to Silver partners" +msgstr "Foreslå betalt opplæring til Silver partnere." diff --git a/addons/mrp/i18n/ar.po b/addons/mrp/i18n/ar.po index 4dd8634257b..a4f19287cd4 100644 --- a/addons/mrp/i18n/ar.po +++ b/addons/mrp/i18n/ar.po @@ -13,8 +13,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 05:58+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -48,7 +48,7 @@ msgstr "إستعمال مراكز العمل" #. module: mrp #: model:product.template,name:mrp.product_sugar_product_template msgid "Sugar" -msgstr "" +msgstr "سكر" #. module: mrp #: report:mrp.production.order:0 @@ -63,7 +63,7 @@ msgstr "عدد الدورات" #. module: mrp #: model:product.uom.categ,name:mrp.product_uom_categ_fluid msgid "Fluid" -msgstr "" +msgstr "سائل" #. module: mrp #: model:process.transition,note:mrp.process_transition_minimumstockprocure0 @@ -145,7 +145,7 @@ msgstr "منتجات منتهية" #. module: mrp #: view:mrp.production:0 msgid "Manufacturing Orders which are currently in production." -msgstr "" +msgstr "تصنيع الطلبيات التي هي حاليا في الإنتاج." #. module: mrp #: model:process.transition,name:mrp.process_transition_servicerfq0 @@ -219,16 +219,13 @@ msgid "For purchased material" msgstr "للمواد المشتراه" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "مراجعة" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " "the product can be purchased." msgstr "" +"إنشاء نموذج المنتج على كل شيء قمت بالشراءه أو بيعه. حدد المورد إذا كان من " +"الممكن شراء المنتج." #. module: mrp #: model:ir.ui.menu,name:mrp.next_id_77 @@ -264,7 +261,7 @@ msgstr "معلومات عن القدرة" #. module: mrp #: field:mrp.production,move_created_ids2:0 msgid "Produced Products" -msgstr "" +msgstr "إنتاج المنتجات" #. module: mrp #: report:mrp.production.order:0 @@ -319,7 +316,7 @@ msgstr "انت تحاول تخصيص الكثير من ما هو دون المن #. module: mrp #: model:product.template,name:mrp.product_cloth_product_template msgid "Cloth" -msgstr "" +msgstr "ثوب" #. module: mrp #: model:ir.model,name:mrp.model_mrp_product_produce @@ -334,7 +331,7 @@ msgstr "" #. module: mrp #: model:ir.model,name:mrp.model_mrp_routing_workcenter msgid "Work Center Usage" -msgstr "" +msgstr "استخدام عمل المركز" #. module: mrp #: model:process.transition,name:mrp.process_transition_procurestockableproduct0 @@ -396,6 +393,11 @@ msgid "" "sales person creates a sales order, he can relate it to several properties " "and OpenERP will automatically select the BoM to use according the needs." msgstr "" +"وتستخدم الخصائص في OpenERP لتحديد مواد المشروع المناسبة لتصنيع منتج عندما " +"يكون لديك طرق مختلفة لبناء نفس المنتج. يمكنك تعيين العديد من الخصائص على كل " +"فاتورة مواد. عندما يقوم مندوب المبيعات بإنشاء طلبات مبيعات، وكما يمكنه ربطها " +"بالعديد من الخصائص وOpenERP سوف تختار تلقائيا فاتورة المواد لاستخدامها وفقا " +"للاحتياجات." #. module: mrp #: help:mrp.production,picking_id:0 @@ -473,7 +475,7 @@ msgstr "" #. module: mrp #: help:mrp.workcenter,costs_cycle:0 msgid "Specify Cost of Work Center per cycle." -msgstr "" +msgstr "حدد تكلفة العمل المركزية دورة" #. module: mrp #: model:process.transition,name:mrp.process_transition_bom0 @@ -486,11 +488,6 @@ msgid "For Services." msgstr "للخدمات." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "تاريخ التعديل." - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -525,7 +522,7 @@ msgstr "خطأ: كود إين غير صالح" #. module: mrp #: field:mrp.production,move_created_ids:0 msgid "Products to Produce" -msgstr "" +msgstr "لإنتاج منتجات" #. module: mrp #: view:mrp.routing:0 @@ -541,7 +538,7 @@ msgstr "كمية التغيير" #. module: mrp #: model:ir.actions.act_window,name:mrp.action_configure_workcenter msgid "Configure your work centers" -msgstr "" +msgstr "اضبط مراكز عملك" #. module: mrp #: view:mrp.production:0 @@ -549,11 +546,6 @@ msgid "Force Reservation" msgstr "فرض الحجز" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "المؤلف" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "قيمة المخزون" @@ -669,7 +661,7 @@ msgstr "جاهز" #. module: mrp #: model:product.template,name:mrp.product_buttons_product_template msgid "Shirt Buttons" -msgstr "" +msgstr "أزرار القميص" #. module: mrp #: help:mrp.production,routing_id:0 @@ -806,7 +798,7 @@ msgstr "عاجل" #. module: mrp #: view:mrp.production:0 msgid "Manufacturing Orders which are waiting for raw materials." -msgstr "" +msgstr "تصنيع الطلبيات التي تنتظر المواد الخام." #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_workcenter_action @@ -840,11 +832,6 @@ msgid "Ready to Produce" msgstr "جاهز للانتاج" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "إسم التصنيف" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -903,7 +890,7 @@ msgstr "الحد الادنى من المخزون" #: code:addons/mrp/mrp.py:503 #, python-format msgid "Cannot delete a manufacturing order in state '%s'" -msgstr "" +msgstr "لا يمكن حذف نظام التصنيع في ولاية %s" #. module: mrp #: model:ir.ui.menu,name:mrp.menus_dash_mrp @@ -915,7 +902,7 @@ msgstr "اللوحة الرئيسية" #: code:addons/mrp/report/price.py:211 #, python-format msgid "Total Cost of %s %s" -msgstr "" +msgstr "التكلفة الكلية لـ%s %s" #. module: mrp #: model:process.node,name:mrp.process_node_stockproduct0 @@ -1424,11 +1411,6 @@ msgid "Work Center Loads" msgstr "تحميلات مركز العمل" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "فمراجعة فاتورة المواد" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1959,12 +1941,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "فاتورة المواد" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1982,17 +1958,6 @@ msgid "Waiting Goods" msgstr "انتظار السلع" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "اخر مؤشر" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "مراجعات فاتورة المواد" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2180,19 +2145,6 @@ msgid "Change Product Qty" msgstr "غير كمية المنتج" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "الوصف" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "التصنيع" @@ -2312,6 +2264,9 @@ msgstr "منتجات للاستهلاك" #~ msgid "Day" #~ msgstr "يوم" +#~ msgid "Revision" +#~ msgstr "مراجعة" + #~ msgid "title" #~ msgstr "الاسم" @@ -2324,6 +2279,9 @@ msgstr "منتجات للاستهلاك" #~ msgid "October" #~ msgstr "أكتوبر" +#~ msgid "Author" +#~ msgstr "المؤلف" + #~ msgid "March" #~ msgstr "مارس" @@ -2394,6 +2352,9 @@ msgstr "منتجات للاستهلاك" #~ "following addons." #~ msgstr "اضف وظائف اكثر لجوهر تطبيق الصناعة بالملحقات التالية." +#~ msgid "Modification name" +#~ msgstr "إسم التصنيف" + #~ msgid "" #~ "Time in hours for this work center to achieve the operation of the specified " #~ "routing." @@ -2497,6 +2458,15 @@ msgstr "منتجات للاستهلاك" #~ "performance." #~ msgstr "يسمح لك هذا التقرير بتحليل انشطة التصنيع الخاصة بك و الاداء." +#~ msgid "BoM" +#~ msgstr "فاتورة المواد" + +#~ msgid "BoM Revisions" +#~ msgstr "مراجعات فاتورة المواد" + +#~ msgid "last indice" +#~ msgstr "اخر مؤشر" + #~ msgid "Draft" #~ msgstr "مسوّدة" @@ -2527,6 +2497,9 @@ msgstr "منتجات للاستهلاك" #~ msgid "Work Cost of " #~ msgstr "تكلفة العمل لـ " +#~ msgid "Bill of Material Revision" +#~ msgstr "فمراجعة فاتورة المواد" + #~ msgid "Manufacturing Operations" #~ msgstr "عمليات التصنيع" @@ -2535,6 +2508,9 @@ msgstr "منتجات للاستهلاك" #~ "this work center." #~ msgstr "وصف مركز العمل. يبين هنا ماهي الدورة وفقًا لمركز العمل هذا." +#~ msgid "Description" +#~ msgstr "الوصف" + #~ msgid "May" #~ msgstr "مايو" @@ -2644,3 +2620,6 @@ msgstr "منتجات للاستهلاك" #~ "الخصائص على كل فاتورة من المواد. عندما ينشأ البائع ترتيب مبيعات، يمكنه ربطها " #~ "بالعديد من الخصائص و ستحدد OpenERP تلقائيا فاتورة المواد لاستخدمها طبقًا " #~ "للاحتياجات." + +#~ msgid "Modification Date" +#~ msgstr "تاريخ التعديل." diff --git a/addons/mrp/i18n/bg.po b/addons/mrp/i18n/bg.po index c433a374169..ddd3947e772 100644 --- a/addons/mrp/i18n/bg.po +++ b/addons/mrp/i18n/bg.po @@ -13,8 +13,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 05:58+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -224,11 +224,6 @@ msgid "For purchased material" msgstr "За закупени суровини" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Версия" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -495,11 +490,6 @@ msgid "For Services." msgstr "За услуги." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Дата на промяна" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -561,11 +551,6 @@ msgid "Force Reservation" msgstr "Мощност за резервация" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Автор" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Складова наличност" @@ -846,11 +831,6 @@ msgid "Ready to Produce" msgstr "Готов за производство" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Име на промяна" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1411,11 +1391,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1919,12 +1894,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1942,17 +1911,6 @@ msgid "Waiting Goods" msgstr "Чакащи стоки" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2138,19 +2096,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Описание" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2320,6 +2265,15 @@ msgstr "" #~ msgid "products" #~ msgstr "продукти" +#~ msgid "Author" +#~ msgstr "Автор" + +#~ msgid "Modification Date" +#~ msgstr "Дата на промяна" + +#~ msgid "Modification name" +#~ msgstr "Име на промяна" + #~ msgid "Stockable Production Order" #~ msgstr "Скадируема поръчка за производство" @@ -2332,6 +2286,9 @@ msgstr "" #~ msgid "Day" #~ msgstr "Ден" +#~ msgid "Revision" +#~ msgstr "Версия" + #~ msgid "title" #~ msgstr "заглавие" @@ -2435,6 +2392,9 @@ msgstr "" #~ msgid "January" #~ msgstr "Януари" +#~ msgid "Description" +#~ msgstr "Описание" + #~ msgid "May" #~ msgstr "Май" diff --git a/addons/mrp/i18n/bs.po b/addons/mrp/i18n/bs.po index 221b8dfd6af..96ed648dced 100644 --- a/addons/mrp/i18n/bs.po +++ b/addons/mrp/i18n/bs.po @@ -13,8 +13,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 05:58+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -211,11 +211,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -470,11 +465,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -532,11 +522,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -817,11 +802,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1382,11 +1362,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1890,12 +1865,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1913,17 +1882,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2109,19 +2067,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" diff --git a/addons/mrp/i18n/ca.po b/addons/mrp/i18n/ca.po index 48007166a19..b43d7b7fc5c 100644 --- a/addons/mrp/i18n/ca.po +++ b/addons/mrp/i18n/ca.po @@ -13,8 +13,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 05:58+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -226,11 +226,6 @@ msgid "For purchased material" msgstr "Per material comprat" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisió" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -500,11 +495,6 @@ msgid "For Services." msgstr "Per serveis" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Data modificació" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -566,11 +556,6 @@ msgid "Force Reservation" msgstr "Força reserves" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valor de l'estoc" @@ -863,11 +848,6 @@ msgid "Ready to Produce" msgstr "Llest per produir" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nom de modificació" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1461,11 +1441,6 @@ msgid "Work Center Loads" msgstr "Càrregues centre de producció" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revisió de la llista de materials" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2008,12 +1983,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Llista de materials (LdM)" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2031,17 +2000,6 @@ msgid "Waiting Goods" msgstr "Esperant mercaderia" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Últim índex" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Revisions llista de materials" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2230,19 +2188,6 @@ msgid "Change Product Qty" msgstr "Canvia Qtat. producte" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Descripció" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Taulell de fabricació" @@ -2378,6 +2323,9 @@ msgstr "Productes a consumir" #~ "virtual menor que 0. Probablement no hauria d'utilitzar aquesta opció, " #~ "suggerim utilitzar una configuració de MTO en productes." +#~ msgid "Revision" +#~ msgstr "Revisió" + #~ msgid "Exceptions Procurements" #~ msgstr "Excepcions de proveïments" @@ -2544,6 +2492,9 @@ msgstr "Productes a consumir" #~ msgid "Make Procurement" #~ msgstr "Realitza proveïment" +#~ msgid "Modification Date" +#~ msgstr "Data modificació" + #~ msgid "If Procure method is Make to order and supply method is produce" #~ msgstr "" #~ "Si mètode de proveïment és obtenir sota comanda i mètode de subministre és " @@ -2552,6 +2503,9 @@ msgstr "Productes a consumir" #~ msgid "Purchase Lead Time" #~ msgstr "Termini de temps de compra" +#~ msgid "Author" +#~ msgstr "Autor" + #~ msgid "Stockable Product Stock" #~ msgstr "Estoc de producte estocable" @@ -2644,6 +2598,9 @@ msgstr "Productes a consumir" #~ msgid "Security Days" #~ msgstr "Dies de seguretat" +#~ msgid "Modification name" +#~ msgstr "Nom de modificació" + #~ msgid "Exception" #~ msgstr "Excepció" @@ -2995,6 +2952,9 @@ msgstr "Productes a consumir" #~ msgid "plus" #~ msgstr "més" +#~ msgid "BoM" +#~ msgstr "Llista de materials (LdM)" + #~ msgid "Stockable Product Process" #~ msgstr "Procés producte estocable" @@ -3004,6 +2964,12 @@ msgstr "Productes a consumir" #~ msgid "A Request for Quotation is created and sent to the supplier." #~ msgstr "Una sol·licitud de pressupost és creada i enviada al proveïdor." +#~ msgid "last indice" +#~ msgstr "Últim índex" + +#~ msgid "BoM Revisions" +#~ msgstr "Revisions llista de materials" + #~ msgid "Retry" #~ msgstr "Torna a intentar" @@ -3061,6 +3027,9 @@ msgstr "Productes a consumir" #~ msgid "Close Move at end" #~ msgstr "Moviment de tancament al final" +#~ msgid "Description" +#~ msgstr "Descripció" + #~ msgid "Running" #~ msgstr "En procés" @@ -3303,6 +3272,9 @@ msgstr "Productes a consumir" #~ msgid "Configure" #~ msgstr "Configura" +#~ msgid "Bill of Material Revision" +#~ msgstr "Revisió de la llista de materials" + #~ msgid "" #~ "Routing indicates all the workcenters used, for how long and/or cycles.If " #~ "Routing is indicated then,the third tab of a production order (workcenters) " diff --git a/addons/mrp/i18n/cs.po b/addons/mrp/i18n/cs.po index a6f97ebee88..bd2be7678e4 100644 --- a/addons/mrp/i18n/cs.po +++ b/addons/mrp/i18n/cs.po @@ -13,8 +13,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 05:58+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" "X-Poedit-Language: Czech\n" #. module: mrp @@ -212,11 +212,6 @@ msgid "For purchased material" msgstr "Pro nakoupený materiál" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revize" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -478,11 +473,6 @@ msgid "For Services." msgstr "Pro služby." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Datum úpravy" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -540,11 +530,6 @@ msgid "Force Reservation" msgstr "Vynutit rezervaci" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Hodnota zásob" @@ -829,11 +814,6 @@ msgid "Ready to Produce" msgstr "Připraveno k výrobě" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Jméno úpravy" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1397,11 +1377,6 @@ msgid "Work Center Loads" msgstr "Vytížení výrobních center" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revize Soupisky materiálu" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1913,12 +1888,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "BoM" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1936,17 +1905,6 @@ msgid "Waiting Goods" msgstr "Čekající zboží" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "poslední ukazatel" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Revize BoM" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2132,19 +2090,6 @@ msgid "Change Product Qty" msgstr "Změnit množ. výrobků" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Popis" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Výrobní tabule" @@ -2298,6 +2243,9 @@ msgstr "Výrobků ke spotřebě" #~ msgid "Raw Material Location" #~ msgstr "Umístění surového materiálu" +#~ msgid "Revision" +#~ msgstr "Revize" + #~ msgid "title" #~ msgstr "nadpis" @@ -2323,6 +2271,12 @@ msgstr "Výrobků ke spotřebě" #~ msgid "Advanced Routes" #~ msgstr "Pokročilé trasy" +#~ msgid "Modification Date" +#~ msgstr "Datum úpravy" + +#~ msgid "Author" +#~ msgstr "Autor" + #~ msgid "March" #~ msgstr "Březen" @@ -2355,6 +2309,9 @@ msgstr "Výrobků ke spotřebě" #~ "Čas v hodinách pro toto pracovní centrum k dosažení operace zadaného " #~ "směrování." +#~ msgid "Modification name" +#~ msgstr "Jméno úpravy" + #~ msgid "Extended Filters..." #~ msgstr "Rozšířené filtry..." @@ -2433,6 +2390,15 @@ msgstr "Výrobků ke spotřebě" #~ msgid "Image" #~ msgstr "Obrázek" +#~ msgid "BoM" +#~ msgstr "BoM" + +#~ msgid "last indice" +#~ msgstr "poslední ukazatel" + +#~ msgid "BoM Revisions" +#~ msgstr "Revize BoM" + #~ msgid "Draft" #~ msgstr "Koncept" @@ -2451,6 +2417,9 @@ msgstr "Výrobků ke spotřebě" #~ "will be automatically pre-completed." #~ msgstr "poslední ukazatel" +#~ msgid "Bill of Material Revision" +#~ msgstr "Revize Soupisky materiálu" + #, python-format #~ msgid "Work Cost of " #~ msgstr "Cena práce " @@ -2468,6 +2437,9 @@ msgstr "Výrobků ke spotřebě" #~ msgid "MRP Applications Configuration" #~ msgstr "Nastavení aplikace MRP" +#~ msgid "Description" +#~ msgstr "Popis" + #~ msgid "May" #~ msgstr "Květen" diff --git a/addons/mrp/i18n/da.po b/addons/mrp/i18n/da.po index becdcd330fc..6eea2b3c7e8 100644 --- a/addons/mrp/i18n/da.po +++ b/addons/mrp/i18n/da.po @@ -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 05:58+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -212,11 +212,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -471,11 +466,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -533,11 +523,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Lager værdi" @@ -818,11 +803,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1383,11 +1363,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1891,12 +1866,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1914,17 +1883,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2110,19 +2068,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" diff --git a/addons/mrp/i18n/de.po b/addons/mrp/i18n/de.po index b3c8716c9f4..8c4a422fd10 100644 --- a/addons/mrp/i18n/de.po +++ b/addons/mrp/i18n/de.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -226,11 +226,6 @@ msgid "For purchased material" msgstr "Für eingekauftes Material" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revision" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -510,11 +505,6 @@ msgid "For Services." msgstr "Für Dienstleistungsprodukte." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Änderung am" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -576,11 +566,6 @@ msgid "Force Reservation" msgstr "Erzwinge Reservierung" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Mitarbeiter" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Bestandswert" @@ -881,11 +866,6 @@ msgid "Ready to Produce" msgstr "Startbereit für Fertigung" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Bezeichnung geändert" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1484,11 +1464,6 @@ msgid "Work Center Loads" msgstr "Arbeitsplatz Auslastungen" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Stückliste Revision" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2033,12 +2008,6 @@ msgid "Orange Juice" msgstr "Orangensaft" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Stückliste" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2056,17 +2025,6 @@ msgid "Waiting Goods" msgstr "Erwartet Material" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Letzter Index" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Stücklisten Revision" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2258,19 +2216,6 @@ msgid "Change Product Qty" msgstr "Ändere Produkt Menge" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Beschreibung" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Pinnwand Fertigung" @@ -2409,6 +2354,9 @@ msgstr "Benötigte Produkte" #~ "virtuellem Lager unter \"0\". Idealerweise arbeitet man allerdings mit " #~ "Lagerbestandsregeln." +#~ msgid "Revision" +#~ msgstr "Revision" + #~ msgid "Compute Stock Minimum Rules Only" #~ msgstr "Regelbasierte Beschaffungsvorschläge" @@ -2582,6 +2530,9 @@ msgstr "Benötigte Produkte" #~ msgid "Make Procurement" #~ msgstr "Erzeuge Beschaffung" +#~ msgid "Modification Date" +#~ msgstr "Änderung am" + #~ msgid "If Procure method is Make to order and supply method is produce" #~ msgstr "" #~ "Falls Beschaffungsmethode 'aus Auftrag' und Einkaufsmethode 'Produktion'" @@ -2684,6 +2635,9 @@ msgstr "Benötigte Produkte" #~ msgid "Security Days" #~ msgstr "Sicherheitspuffer (Tage)" +#~ msgid "Modification name" +#~ msgstr "Bezeichnung geändert" + #~ msgid "Exception" #~ msgstr "Fehlerliste" @@ -3033,6 +2987,9 @@ msgstr "Benötigte Produkte" #~ msgid "plus" #~ msgstr "Plus" +#~ msgid "BoM" +#~ msgstr "Stückliste" + #~ msgid "Stockable Product Process" #~ msgstr "Lagerfähiges Produkt Prozess" @@ -3042,6 +2999,12 @@ msgstr "Benötigte Produkte" #~ msgid "A Request for Quotation is created and sent to the supplier." #~ msgstr "Eine Angebotsanfrage wurde erzeugt und an den Lieferanten versendet." +#~ msgid "last indice" +#~ msgstr "Letzter Index" + +#~ msgid "BoM Revisions" +#~ msgstr "Stücklisten Revision" + #~ msgid "Retry" #~ msgstr "Wiederhole" @@ -3100,6 +3063,9 @@ msgstr "Benötigte Produkte" #~ msgid "Close Move at end" #~ msgstr "Beende Warenfluss (Ende)" +#~ msgid "Description" +#~ msgstr "Beschreibung" + #~ msgid "Running" #~ msgstr "In Weiterbearbeitung" @@ -3238,6 +3204,9 @@ msgstr "Benötigte Produkte" #~ msgid "January" #~ msgstr "Januar" +#~ msgid "Bill of Material Revision" +#~ msgstr "Stückliste Revision" + #~ msgid "February" #~ msgstr "Februar" @@ -3263,6 +3232,9 @@ msgstr "Benötigte Produkte" #~ msgid "Advanced Routes" #~ msgstr "Lieferketten" +#~ msgid "Author" +#~ msgstr "Mitarbeiter" + #~ msgid "Workcenter Usage" #~ msgstr "Fertigungsstelle Auslastung" diff --git a/addons/mrp/i18n/el.po b/addons/mrp/i18n/el.po index 32dfa7a3025..3eb611eb8e6 100644 --- a/addons/mrp/i18n/el.po +++ b/addons/mrp/i18n/el.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" "X-Poedit-Country: GREECE\n" "X-Poedit-Language: Greek\n" "X-Poedit-SourceCharset: utf-8\n" @@ -214,11 +214,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Αναθεώρηση" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -477,11 +472,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Ημερ/νία Τροποποίησης" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -541,11 +531,6 @@ msgid "Force Reservation" msgstr "Κράτηση Τώρα" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Δημιουργός" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Αξία αποθέματος" @@ -826,11 +811,6 @@ msgid "Ready to Produce" msgstr "Έτοιμο για Παραγωγή" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Όνομα τροποποίησης" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1391,11 +1371,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1900,12 +1875,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Κ.Υ." - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1923,17 +1892,6 @@ msgid "Waiting Goods" msgstr "Σε αναμονή υλικών" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "last indice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Αναθεωρήσεις ΚΥ" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2119,19 +2077,6 @@ msgid "Change Product Qty" msgstr "Αλλαγή Ποσ. Προϊόντος" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Περιγραφή" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2296,6 +2241,9 @@ msgstr "" #~ msgid "Security Days" #~ msgstr "Ημέρες Ασφαλείας" +#~ msgid "Modification name" +#~ msgstr "Όνομα τροποποίησης" + #~ msgid "From minimum stock rules, it goes for procure product." #~ msgstr "From minimum stock rules, it goes for procure product." @@ -2331,6 +2279,9 @@ msgstr "" #~ msgid "Manufacturing Resource Planning" #~ msgstr "Σχεδίαση Πηγών Βιομηχανικής Παραγωγής (MRP)" +#~ msgid "Revision" +#~ msgstr "Αναθεώρηση" + #~ msgid "Routing Workcenters" #~ msgstr "Κέντρα Εργασίας Γραμμής Παραγωγής" @@ -2468,12 +2419,18 @@ msgstr "" #~ msgid "Print product price" #~ msgstr "Εκτύπωση τιμής Προϊόντος" +#~ msgid "Modification Date" +#~ msgstr "Ημερ/νία Τροποποίησης" + #~ msgid "If Procure method is Make to order and supply method is produce" #~ msgstr "If Procure method is Make to order and supply method is produce" #~ msgid "Purchase Lead Time" #~ msgstr "Χρόνος Παράδοσης Παραγγελίας" +#~ msgid "Author" +#~ msgstr "Δημιουργός" + #~ msgid "Stockable Product Stock" #~ msgstr "Απόθεμα Αποθηκεύσιμου Προϊόντος" @@ -2888,6 +2845,9 @@ msgstr "" #~ msgid "plus" #~ msgstr "plus" +#~ msgid "BoM" +#~ msgstr "Κ.Υ." + #~ msgid "" #~ "The list of operations (list of workcenters) to produce the finished " #~ "product. The routing is mainly used to compute workcenter costs during " @@ -2908,6 +2868,12 @@ msgstr "" #~ msgid "A Request for Quotation is created and sent to the supplier." #~ msgstr "Η Αίτηση για Προσφορά δημιουργήθηκε και εστάλει στον προμηθευτή." +#~ msgid "last indice" +#~ msgstr "last indice" + +#~ msgid "BoM Revisions" +#~ msgstr "Αναθεωρήσεις ΚΥ" + #~ msgid "Retry" #~ msgstr "Νέα προσπάθεια" @@ -2962,6 +2928,9 @@ msgstr "" #~ msgid "Close Move at end" #~ msgstr "Close Move at end" +#~ msgid "Description" +#~ msgstr "Περιγραφή" + #~ msgid "Running" #~ msgstr "Σε εξέλιξη" diff --git a/addons/mrp/i18n/es.po b/addons/mrp/i18n/es.po index b044729d30a..fc51d8dc3c7 100644 --- a/addons/mrp/i18n/es.po +++ b/addons/mrp/i18n/es.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -226,11 +226,6 @@ msgid "For purchased material" msgstr "Para material comprado" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisión" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -508,11 +503,6 @@ msgid "For Services." msgstr "Para servicios" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Fecha de modificación" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -574,11 +564,6 @@ msgid "Force Reservation" msgstr "Forzar reservas" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valor del stock" @@ -881,11 +866,6 @@ msgid "Ready to Produce" msgstr "Listo para producir" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nombre de modificación" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1482,11 +1462,6 @@ msgid "Work Center Loads" msgstr "Cargas centro de producción" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revisión de lista de materiales" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2033,12 +2008,6 @@ msgid "Orange Juice" msgstr "Zumo de naranja" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Lista de materiales (LdM)" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2056,17 +2025,6 @@ msgid "Waiting Goods" msgstr "Esperando mercancía" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Último índice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Revisiones lista de materiales" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2257,19 +2215,6 @@ msgid "Change Product Qty" msgstr "Cambiar Ctd. producto" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Descripción" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Tablero fabricación" @@ -2405,6 +2350,9 @@ msgstr "Productos a consumir" #~ "stock virtual menor que 0. Probablemente no debería utilizar esta opción, " #~ "sugerimos utilizar una configuración de MTO en productos." +#~ msgid "Revision" +#~ msgstr "Revisión" + #~ msgid "Compute Stock Minimum Rules Only" #~ msgstr "Calcular sólo reglas de stock mínimo" @@ -2591,6 +2539,9 @@ msgstr "Productos a consumir" #~ msgid "Purchase Lead Time" #~ msgstr "Plazo de tiempo de compra" +#~ msgid "Author" +#~ msgstr "Autor" + #~ msgid "Stockable Product Stock" #~ msgstr "Stock de producto almacenable" @@ -2688,6 +2639,9 @@ msgstr "Productos a consumir" #~ msgid "Security Days" #~ msgstr "Días de seguridad" +#~ msgid "Modification name" +#~ msgstr "Nombre de modificación" + #~ msgid "Exception" #~ msgstr "Excepción" @@ -3044,6 +2998,9 @@ msgstr "Productos a consumir" #~ msgid "plus" #~ msgstr "más" +#~ msgid "BoM" +#~ msgstr "Lista de materiales (LdM)" + #~ msgid "Stockable Product Process" #~ msgstr "Proceso producto almacenable" @@ -3053,6 +3010,12 @@ msgstr "Productos a consumir" #~ msgid "A Request for Quotation is created and sent to the supplier." #~ msgstr "Una solicitud de presupuesto es creada y enviada al proveedor." +#~ msgid "last indice" +#~ msgstr "Último índice" + +#~ msgid "BoM Revisions" +#~ msgstr "Revisiones lista de materiales" + #~ msgid "Retry" #~ msgstr "Volver a intentar" @@ -3111,6 +3074,9 @@ msgstr "Productos a consumir" #~ msgid "Close Move at end" #~ msgstr "Movimiento de cierre al final" +#~ msgid "Description" +#~ msgstr "Descripción" + #~ msgid "Running" #~ msgstr "En proceso" @@ -3239,6 +3205,9 @@ msgstr "Productos a consumir" #~ msgid "Image" #~ msgstr "Imagen" +#~ msgid "Bill of Material Revision" +#~ msgstr "Revisión de lista de materiales" + #~ msgid "January" #~ msgstr "Enero" @@ -3532,3 +3501,6 @@ msgstr "Productos a consumir" #~ " *Gráfico de carga del centro de trabajo\n" #~ " *Lista de órdenes de fabricación con excepciones\n" #~ " " + +#~ msgid "Modification Date" +#~ msgstr "Fecha de modificación" diff --git a/addons/mrp/i18n/es_AR.po b/addons/mrp/i18n/es_AR.po index 995d32da5d5..040da63a7ed 100644 --- a/addons/mrp/i18n/es_AR.po +++ b/addons/mrp/i18n/es_AR.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -226,11 +226,6 @@ msgid "For purchased material" msgstr "Para material comprado" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisión" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -498,11 +493,6 @@ msgid "For Services." msgstr "Para servicios" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Fecha de Modificación" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -562,11 +552,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valor del stock" @@ -852,11 +837,6 @@ msgid "Ready to Produce" msgstr "Listo para producir" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nombre de la modificación" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1432,11 +1412,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revisión de lista de materiales" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1956,12 +1931,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "LdM" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1979,17 +1948,6 @@ msgid "Waiting Goods" msgstr "Esperando mercandería" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Último índice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Revisiones de LdM" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2178,19 +2136,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2320,6 +2265,9 @@ msgstr "" #~ msgid "MRP Subproducts" #~ msgstr "Subproductos MRP" +#~ msgid "Revision" +#~ msgstr "Revisión" + #~ msgid "title" #~ msgstr "título" @@ -2349,6 +2297,12 @@ msgstr "" #~ "Activa garantía y gestión de reparaciones (y su impacto sobre stocks y " #~ "facturación)" +#~ msgid "Author" +#~ msgstr "Autor" + +#~ msgid "Modification Date" +#~ msgstr "Fecha de Modificación" + #~ msgid "March" #~ msgstr "Marzo" @@ -2384,6 +2338,9 @@ msgstr "" #~ msgid "Extended Filters..." #~ msgstr "Filtros extendidos..." +#~ msgid "Modification name" +#~ msgstr "Nombre de la modificación" + #~ msgid "Just In Time Scheduling" #~ msgstr "Planificación 'Just in Time'" @@ -2478,6 +2435,9 @@ msgstr "" #~ "Estos informes le permiten analizar sus actividades productivas y " #~ "rendimiento." +#~ msgid "BoM" +#~ msgstr "LdM" + #~ msgid "December" #~ msgstr "Diciembre" @@ -2490,6 +2450,12 @@ msgstr "" #~ msgid "Configuration Progress" #~ msgstr "Progreso de la configuración" +#~ msgid "BoM Revisions" +#~ msgstr "Revisiones de LdM" + +#~ msgid "last indice" +#~ msgstr "Último índice" + #~ msgid "Draft" #~ msgstr "Borrador" @@ -2512,6 +2478,9 @@ msgstr "" #~ msgid "Manufacturing Operations" #~ msgstr "Operaciones de fabricación" +#~ msgid "Bill of Material Revision" +#~ msgstr "Revisión de lista de materiales" + #~ msgid "" #~ "Description of the work center. Explain here what's a cycle according to " #~ "this work center." diff --git a/addons/mrp/i18n/es_CL.po b/addons/mrp/i18n/es_CL.po index 2c24b479f82..3fa0bdb155a 100644 --- a/addons/mrp/i18n/es_CL.po +++ b/addons/mrp/i18n/es_CL.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -226,11 +226,6 @@ msgid "For purchased material" msgstr "Para material comprado" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisión" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -509,11 +504,6 @@ msgid "For Services." msgstr "Para servicios" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Fecha modificación" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -575,11 +565,6 @@ msgid "Force Reservation" msgstr "Forzar reservas" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valor del stock" @@ -882,11 +867,6 @@ msgid "Ready to Produce" msgstr "Listo para producir" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nombre de modificación" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1484,11 +1464,6 @@ msgid "Work Center Loads" msgstr "Cargas centro de producción" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revisión de lista de materiales" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2035,12 +2010,6 @@ msgid "Orange Juice" msgstr "Jugo de Naranja" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Lista de materiales (LdM)" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2058,17 +2027,6 @@ msgid "Waiting Goods" msgstr "Esperando mercancía" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Último índice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Revisiones lista de materiales" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2259,19 +2217,6 @@ msgid "Change Product Qty" msgstr "Cambiar Ctd. producto" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Descripción" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Tablero fabricación" @@ -2414,6 +2359,9 @@ msgstr "Productos a consumir" #~ msgid "MRP Subproducts" #~ msgstr "Subproductos MRP" +#~ msgid "Revision" +#~ msgstr "Revisión" + #~ msgid "title" #~ msgstr "título" @@ -2442,6 +2390,12 @@ msgstr "Productos a consumir" #~ "Activa la garantía y la gestión de reparaciones (y su impacto sobre stocks y " #~ "facturación)" +#~ msgid "Modification Date" +#~ msgstr "Fecha modificación" + +#~ msgid "Author" +#~ msgstr "Autor" + #~ msgid "March" #~ msgstr "Marzo" @@ -2481,6 +2435,9 @@ msgstr "Productos a consumir" #~ "Tiempo en horas para este centro de producción para realizar la operación de " #~ "la ruta indicada." +#~ msgid "Modification name" +#~ msgstr "Nombre de modificación" + #~ msgid "Extended Filters..." #~ msgstr "Filtros extendidos..." @@ -2620,6 +2577,15 @@ msgstr "Productos a consumir" #~ msgid "Image" #~ msgstr "Imagen" +#~ msgid "BoM" +#~ msgstr "Lista de materiales (LdM)" + +#~ msgid "last indice" +#~ msgstr "Último índice" + +#~ msgid "BoM Revisions" +#~ msgstr "Revisiones lista de materiales" + #~ msgid "Draft" #~ msgstr "Borrador" @@ -2641,6 +2607,9 @@ msgstr "Productos a consumir" #~ "y/o ciclos. Si se indica la ruta, entonces la tercera pestaña de una orden " #~ "de producción (centros de producción) será automáticamente pre-completada." +#~ msgid "Bill of Material Revision" +#~ msgstr "Revisión de lista de materiales" + #, python-format #~ msgid "Work Cost of " #~ msgstr "Coste trabajo de " @@ -2673,6 +2642,9 @@ msgstr "Productos a consumir" #~ msgid "MRP Applications Configuration" #~ msgstr "Configuración de las aplicaciónes MRP" +#~ msgid "Description" +#~ msgstr "Descripción" + #~ msgid "May" #~ msgstr "Mayo" diff --git a/addons/mrp/i18n/es_CR.po b/addons/mrp/i18n/es_CR.po index 77292b8bc9c..bf699a68e31 100644 --- a/addons/mrp/i18n/es_CR.po +++ b/addons/mrp/i18n/es_CR.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" "Language: \n" #. module: mrp @@ -227,11 +227,6 @@ msgid "For purchased material" msgstr "Para material comprado" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisión" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -509,11 +504,6 @@ msgid "For Services." msgstr "Para servicios" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Fecha de modificación" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -575,11 +565,6 @@ msgid "Force Reservation" msgstr "Forzar reservas" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valor del stock" @@ -881,11 +866,6 @@ msgid "Ready to Produce" msgstr "Listo para producir" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nombre de modificación" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1482,11 +1462,6 @@ msgid "Work Center Loads" msgstr "Cargas centro de producción" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revisión de lista de materiales" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2033,12 +2008,6 @@ msgid "Orange Juice" msgstr "Zumo de naranja" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Lista de materiales (LdM)" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2056,17 +2025,6 @@ msgid "Waiting Goods" msgstr "Esperando mercancía" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Último índice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Revisiones lista de materiales" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2257,19 +2215,6 @@ msgid "Change Product Qty" msgstr "Cambiar Ctd. producto" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Descripción" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Tablero fabricación" @@ -2390,6 +2335,33 @@ msgstr "" msgid "Products to Consume" msgstr "Productos a consumir" +#~ msgid "Revision" +#~ msgstr "Revisión" + +#~ msgid "Modification Date" +#~ msgstr "Fecha de modificación" + +#~ msgid "Author" +#~ msgstr "Autor" + +#~ msgid "Modification name" +#~ msgstr "Nombre de modificación" + +#~ msgid "Bill of Material Revision" +#~ msgstr "Revisión de lista de materiales" + +#~ msgid "BoM" +#~ msgstr "Lista de materiales (LdM)" + +#~ msgid "last indice" +#~ msgstr "Último índice" + +#~ msgid "BoM Revisions" +#~ msgstr "Revisiones lista de materiales" + +#~ msgid "Description" +#~ msgstr "Descripción" + #~ msgid "-" #~ msgstr "-" diff --git a/addons/mrp/i18n/es_EC.po b/addons/mrp/i18n/es_EC.po index a654c6db97f..021462a540b 100644 --- a/addons/mrp/i18n/es_EC.po +++ b/addons/mrp/i18n/es_EC.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -226,11 +226,6 @@ msgid "For purchased material" msgstr "Para material comprado" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisión" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -498,11 +493,6 @@ msgid "For Services." msgstr "Para servicios" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Fecha modificación" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -564,11 +554,6 @@ msgid "Force Reservation" msgstr "Forzar reservas" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valor del stock" @@ -862,11 +847,6 @@ msgid "Ready to Produce" msgstr "Listo para producir" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nombre de modificación" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1454,11 +1434,6 @@ msgid "Work Center Loads" msgstr "Cargas centro de producción" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revisión de lista de materiales" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2001,12 +1976,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Lista de materiales (LdM)" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2024,17 +1993,6 @@ msgid "Waiting Goods" msgstr "Esperando mercancía" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Último índice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Revisiones lista de materiales" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2223,19 +2181,6 @@ msgid "Change Product Qty" msgstr "Cambiar Ctd. producto" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Descripción" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Tablero fabricación" @@ -2374,6 +2319,9 @@ msgstr "Productos a consumir" #~ msgid "Invalid model name in the action definition." #~ msgstr "Nombre de modelo no válido en la definición de acción." +#~ msgid "Revision" +#~ msgstr "Revisión" + #~ msgid "Compute Stock Minimum Rules Only" #~ msgstr "Calcular sólo reglas de stock mínimo" @@ -2521,6 +2469,9 @@ msgstr "Productos a consumir" #~ msgid "Make Procurement" #~ msgstr "Realizar abastecimiento" +#~ msgid "Modification Date" +#~ msgstr "Fecha modificación" + #~ msgid "If Procure method is Make to order and supply method is produce" #~ msgstr "" #~ "si método de abastecimiento es obtener bajo pedido y método de suministro es " @@ -2529,6 +2480,9 @@ msgstr "Productos a consumir" #~ msgid "Purchase Lead Time" #~ msgstr "Plazo de tiempo de compra" +#~ msgid "Author" +#~ msgstr "Autor" + #~ msgid "Stockable Product Stock" #~ msgstr "Stock de producto almacenable" @@ -2620,6 +2574,9 @@ msgstr "Productos a consumir" #~ msgid "Security Days" #~ msgstr "Días de seguridad" +#~ msgid "Modification name" +#~ msgstr "Nombre de modificación" + #~ msgid "Exception" #~ msgstr "Excepción" @@ -2960,6 +2917,9 @@ msgstr "Productos a consumir" #~ msgid "plus" #~ msgstr "más" +#~ msgid "BoM" +#~ msgstr "Lista de materiales (LdM)" + #~ msgid "" #~ "The list of operations (list of workcenters) to produce the finished " #~ "product. The routing is mainly used to compute workcenter costs during " @@ -2981,6 +2941,12 @@ msgstr "Productos a consumir" #~ msgid "A Request for Quotation is created and sent to the supplier." #~ msgstr "Una solicitud de presupuesto es creada y enviada al proveedor." +#~ msgid "last indice" +#~ msgstr "Último índice" + +#~ msgid "BoM Revisions" +#~ msgstr "Revisiones lista de materiales" + #~ msgid "Retry" #~ msgstr "Volver a intentar" @@ -3031,6 +2997,9 @@ msgstr "Productos a consumir" #~ msgid "Close Move at end" #~ msgstr "Movimiento de cierre al final" +#~ msgid "Description" +#~ msgstr "Descripción" + #~ msgid "Running" #~ msgstr "En proceso" @@ -3352,6 +3321,9 @@ msgstr "Productos a consumir" #~ msgid "Image" #~ msgstr "Imágen" +#~ msgid "Bill of Material Revision" +#~ msgstr "Revisión de lista de materiales" + #~ msgid "" #~ "Routing indicates all the workcenters used, for how long and/or cycles.If " #~ "Routing is indicated then,the third tab of a production order (workcenters) " diff --git a/addons/mrp/i18n/et.po b/addons/mrp/i18n/et.po index 9745405756c..52b21406bfa 100644 --- a/addons/mrp/i18n/et.po +++ b/addons/mrp/i18n/et.po @@ -13,8 +13,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 05:58+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -211,11 +211,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisjon" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -470,11 +465,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Muutmise Kuupäev" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -532,11 +522,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Lao suurus" @@ -817,11 +802,6 @@ msgid "Ready to Produce" msgstr "Valmis tootmiseks" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Modifikatsiooni nimi" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1382,11 +1362,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1890,12 +1865,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1913,17 +1882,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2109,19 +2067,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2232,6 +2177,9 @@ msgstr "" #~ msgid "Moves Created" #~ msgstr "Liikumised loodud" +#~ msgid "Revision" +#~ msgstr "Revisjon" + #~ msgid "Compute Stock Minimum Rules Only" #~ msgstr "Arvuta ainult lao miinimum reeglid" @@ -2325,6 +2273,12 @@ msgstr "" #~ msgid "Print product price" #~ msgstr "Prindi toote hind" +#~ msgid "Modification Date" +#~ msgstr "Muutmise Kuupäev" + +#~ msgid "Author" +#~ msgstr "Autor" + #~ msgid "Latest error" #~ msgstr "Viimane viga" @@ -2353,6 +2307,9 @@ msgstr "" #~ msgid "Security Days" #~ msgstr "Turvalised Päevad" +#~ msgid "Modification name" +#~ msgstr "Modifikatsiooni nimi" + #~ msgid "Exception" #~ msgstr "Erand" diff --git a/addons/mrp/i18n/fi.po b/addons/mrp/i18n/fi.po index ad1704e1441..58081cbe657 100644 --- a/addons/mrp/i18n/fi.po +++ b/addons/mrp/i18n/fi.po @@ -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 05:58+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -225,11 +225,6 @@ msgid "For purchased material" msgstr "Ostettaville materiaaleille" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisio" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -497,11 +492,6 @@ msgid "For Services." msgstr "Palveluille" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Muokkauspäivä" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -561,11 +551,6 @@ msgid "Force Reservation" msgstr "Pakota varaus" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Tekijä" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Varastoarvo" @@ -850,11 +835,6 @@ msgid "Ready to Produce" msgstr "Valmis tuotantoon" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Muutoksen nimi" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1429,11 +1409,6 @@ msgid "Work Center Loads" msgstr "Työpisteen kuormitus" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Osaluettelon versio" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1948,12 +1923,6 @@ msgid "Orange Juice" msgstr "Appelssiinimehu" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Osaluettelo" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1971,17 +1940,6 @@ msgid "Waiting Goods" msgstr "Odottaa tuotteita" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Viimeinen järjestys" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Osaluettelon revisiot" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2172,19 +2130,6 @@ msgid "Change Product Qty" msgstr "Muuta tuotteen määrää" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Kuvaus" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Valmistuksen työpöytä" @@ -2338,6 +2283,9 @@ msgstr "Käytettävät tuotteet" #~ msgid "Make Procurement" #~ msgstr "Tee hankinta" +#~ msgid "Author" +#~ msgstr "Tekijä" + #~ msgid "Latest error" #~ msgstr "Viimeisin virhe" @@ -2416,6 +2364,9 @@ msgstr "Käytettävät tuotteet" #~ msgid "Service Product" #~ msgstr "Palvelutuote" +#~ msgid "Revision" +#~ msgstr "Revisio" + #~ msgid "Invalid model name in the action definition." #~ msgstr "Virheellinen mallin nimi toiminnon määrittelyssä." @@ -2554,6 +2505,9 @@ msgstr "Käytettävät tuotteet" #~ msgid "Purchase Lead Time" #~ msgstr "Oston läpimenoaika" +#~ msgid "Modification Date" +#~ msgstr "Muokkauspäivä" + #~ msgid "Routing workcenter usage" #~ msgstr "Reititys työpisteiden käyttö" @@ -2647,6 +2601,9 @@ msgstr "Käytettävät tuotteet" #~ msgid "Serivce Stockable Order" #~ msgstr "Huolto varastoitava tilaus" +#~ msgid "Modification name" +#~ msgstr "Muutoksen nimi" + #~ msgid "Production done" #~ msgstr "Tuotanto valmis" @@ -2884,9 +2841,15 @@ msgstr "Käytettävät tuotteet" #~ msgid "Canceled" #~ msgstr "Peruttu" +#~ msgid "BoM" +#~ msgstr "Osaluettelo" + #~ msgid "New Production Order" #~ msgstr "Uusi tuotantotilaus" +#~ msgid "last indice" +#~ msgstr "Viimeinen järjestys" + #~ msgid "plus" #~ msgstr "plus" @@ -2912,6 +2875,9 @@ msgstr "Käytettävät tuotteet" #~ msgid "The normal working time of the workcenter." #~ msgstr "Työpisteen normaali työaika." +#~ msgid "BoM Revisions" +#~ msgstr "Osaluettelon revisiot" + #~ msgid "Procurement Reason" #~ msgstr "Hankinnan syy" @@ -2944,6 +2910,9 @@ msgstr "Käytettävät tuotteet" #~ msgid "TOTAL" #~ msgstr "Yhteensä" +#~ msgid "Description" +#~ msgstr "Kuvaus" + #~ msgid "Close Move at end" #~ msgstr "Sulje siirto lopussa" @@ -3142,6 +3111,9 @@ msgstr "Käytettävät tuotteet" #~ msgid "Image" #~ msgstr "Kuva" +#~ msgid "Bill of Material Revision" +#~ msgstr "Osaluettelon versio" + #~ msgid "Manufacturing Operations" #~ msgstr "Valmistuksen vaiheet" diff --git a/addons/mrp/i18n/fr.po b/addons/mrp/i18n/fr.po index f2f572d6c27..e55bc565550 100644 --- a/addons/mrp/i18n/fr.po +++ b/addons/mrp/i18n/fr.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: field:mrp.bom,product_uom:0 @@ -243,11 +243,6 @@ msgid "For purchased material" msgstr "Pour un produit acheté" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Révision" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -524,11 +519,6 @@ msgid "For Services." msgstr "Pour les services." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Date de modification" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -590,11 +580,6 @@ msgid "Force Reservation" msgstr "Forcer la réservation" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Auteur" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valeur du stock" @@ -887,11 +872,6 @@ msgid "Ready to Produce" msgstr "Prêt à Produire" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nom de la Modification" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1487,11 +1467,6 @@ msgid "Work Center Loads" msgstr "Occupation des postes de charge" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Révision des nomenclatures" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2029,12 +2004,6 @@ msgid "Orange Juice" msgstr "Jus d'orange" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Nomenclature" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2052,17 +2021,6 @@ msgid "Waiting Goods" msgstr "En attente de marchandises" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Dernier Indice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Révisions des Nomenclatures" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2251,19 +2209,6 @@ msgid "Change Product Qty" msgstr "Changer la Qté de Produits" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Description" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Tableau de bord de production" @@ -2409,6 +2354,9 @@ msgstr "Produits à consommer" #~ msgid "Moves Created" #~ msgstr "Mouvements créés" +#~ msgid "Revision" +#~ msgstr "Révision" + #~ msgid "Packing list" #~ msgstr "Liste des Colisages" @@ -2457,6 +2405,12 @@ msgstr "Produits à consommer" #~ msgid "Print product price" #~ msgstr "Imprimer le prix du produit" +#~ msgid "Modification Date" +#~ msgstr "Date de modification" + +#~ msgid "Author" +#~ msgstr "Auteur" + #~ msgid "Latest error" #~ msgstr "Dernière Erreur" @@ -2487,6 +2441,9 @@ msgstr "Produits à consommer" #~ msgid "Security Days" #~ msgstr "Jours de sécurité" +#~ msgid "Modification name" +#~ msgstr "Nom de la Modification" + #~ msgid "Exception" #~ msgstr "Exception" @@ -2601,9 +2558,18 @@ msgstr "Produits à consommer" #~ msgid "plus" #~ msgstr "plus" +#~ msgid "BoM" +#~ msgstr "Nomenclature" + #~ msgid "New Production Order" #~ msgstr "Nouvel Ordre de Production" +#~ msgid "last indice" +#~ msgstr "Dernier Indice" + +#~ msgid "BoM Revisions" +#~ msgstr "Révisions des Nomenclatures" + #~ msgid "Retry" #~ msgstr "Réessayez" @@ -2616,6 +2582,9 @@ msgstr "Produits à consommer" #~ msgid "Warehouse" #~ msgstr "Entrepôt" +#~ msgid "Description" +#~ msgstr "Description" + #~ msgid "Running" #~ msgstr "En cours" @@ -3272,6 +3241,9 @@ msgstr "Produits à consommer" #~ msgid "Total Cost of " #~ msgstr "Coût total " +#~ msgid "Bill of Material Revision" +#~ msgstr "Révision des nomenclatures" + #, python-format #~ msgid "Work Cost of " #~ msgstr "Coût de fabrication de " diff --git a/addons/mrp/i18n/gl.po b/addons/mrp/i18n/gl.po index 22cabf88895..05b80d99743 100644 --- a/addons/mrp/i18n/gl.po +++ b/addons/mrp/i18n/gl.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -227,11 +227,6 @@ msgid "For purchased material" msgstr "Para material mercado" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisión" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -499,11 +494,6 @@ msgid "For Services." msgstr "Para servizos" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Data de modificación" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -565,11 +555,6 @@ msgid "Force Reservation" msgstr "Forzar reservas" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valor do stock" @@ -860,11 +845,6 @@ msgid "Ready to Produce" msgstr "Listo para producir" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nome da modificación" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1451,11 +1431,6 @@ msgid "Work Center Loads" msgstr "Cargas centro de produción" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revisión da lista de materiais" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1991,12 +1966,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Lista de materiais" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2014,17 +1983,6 @@ msgid "Waiting Goods" msgstr "Esperando mercancía" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Último índice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Revisións lista de materiais" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2213,19 +2171,6 @@ msgid "Change Product Qty" msgstr "Cambiar Ctde producto" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Descrición" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Taboleiro de fabricación" @@ -2368,6 +2313,9 @@ msgstr "Produtos a consumir" #~ "Mellora as ordes de produción cos estados de preparación, así como a data de " #~ "inicio e final da execución da orde." +#~ msgid "Revision" +#~ msgstr "Revisión" + #~ msgid "title" #~ msgstr "título" @@ -2400,6 +2348,12 @@ msgstr "Produtos a consumir" #~ "Activa a garantía e a xestión das reparacións (e o seu impacto sobre os " #~ "stocks e a facturación)" +#~ msgid "Author" +#~ msgstr "Autor" + +#~ msgid "Modification Date" +#~ msgstr "Data de modificación" + #~ msgid "March" #~ msgstr "Marzo" @@ -2442,6 +2396,9 @@ msgstr "Produtos a consumir" #~ msgid "Extended Filters..." #~ msgstr "Filtros extendidos..." +#~ msgid "Modification name" +#~ msgstr "Nome da modificación" + #~ msgid "Just In Time Scheduling" #~ msgstr "Planificación 'Just in Time'" @@ -2622,6 +2579,9 @@ msgstr "Produtos a consumir" #~ "Estes informes permítenlle analizar as súas actividades productivas e o seu " #~ "rendemento." +#~ msgid "BoM" +#~ msgstr "Lista de materiais" + #~ msgid "December" #~ msgstr "Decembro" @@ -2634,6 +2594,12 @@ msgstr "Produtos a consumir" #~ msgid "Configuration Progress" #~ msgstr "Progreso da configuración" +#~ msgid "BoM Revisions" +#~ msgstr "Revisións lista de materiais" + +#~ msgid "last indice" +#~ msgstr "Último índice" + #~ msgid "Draft" #~ msgstr "Proxecto" @@ -2652,6 +2618,9 @@ msgstr "Produtos a consumir" #~ msgid "January" #~ msgstr "Xaneiro" +#~ msgid "Bill of Material Revision" +#~ msgstr "Revisión da lista de materiais" + #~ msgid "Manufacturing Operations" #~ msgstr "Operacións de produción" @@ -2680,6 +2649,9 @@ msgstr "Produtos a consumir" #~ msgid "Work Cost of " #~ msgstr "Custo do traballo de " +#~ msgid "Description" +#~ msgstr "Descrición" + #~ msgid "May" #~ msgstr "Maio" diff --git a/addons/mrp/i18n/hi.po b/addons/mrp/i18n/hi.po index 427d50288fe..953960bc26b 100644 --- a/addons/mrp/i18n/hi.po +++ b/addons/mrp/i18n/hi.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -212,11 +212,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -471,11 +466,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -533,11 +523,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "लेखक" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -818,11 +803,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1383,11 +1363,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1891,12 +1866,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1914,17 +1883,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2110,19 +2068,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2284,6 +2229,9 @@ msgstr "" #~ msgid "Print product price" #~ msgstr "प्रिंट उत्पाद मूल्य" +#~ msgid "Author" +#~ msgstr "लेखक" + #~ msgid "Latest error" #~ msgstr "नवीनतम त्रुटि" diff --git a/addons/mrp/i18n/hr.po b/addons/mrp/i18n/hr.po index 7f545f986d5..08931365976 100644 --- a/addons/mrp/i18n/hr.po +++ b/addons/mrp/i18n/hr.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -224,11 +224,6 @@ msgid "For purchased material" msgstr "Za nabavljeni materijal" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revizija" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -496,11 +491,6 @@ msgid "For Services." msgstr "Za usluge." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Datum promjene" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -562,11 +552,6 @@ msgid "Force Reservation" msgstr "Force Reservation" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Vrijednost Zalihe" @@ -857,11 +842,6 @@ msgid "Ready to Produce" msgstr "Spremno za proizvodnju" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Naziv promjene" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1447,11 +1427,6 @@ msgid "Work Center Loads" msgstr "Opterećenje radnog centra" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revizija sastavnice" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1989,12 +1964,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "BoM" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2012,17 +1981,6 @@ msgid "Waiting Goods" msgstr "Waiting Goods" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "last indice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "BoM Revisions" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2211,19 +2169,6 @@ msgid "Change Product Qty" msgstr "Promjeni kol. proizvoda" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Opis" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Kokpit proizvodnje" @@ -2363,6 +2308,9 @@ msgstr "Proizvodi za utrošiti" #~ msgid "Raw Material Location" #~ msgstr "Mjesto Sirovina" +#~ msgid "Revision" +#~ msgstr "Revizija" + #~ msgid "June" #~ msgstr "Lipanj" @@ -2378,6 +2326,9 @@ msgstr "Proizvodi za utrošiti" #~ msgid "October" #~ msgstr "Listopad" +#~ msgid "Modification Date" +#~ msgstr "Datum promjene" + #~ msgid "March" #~ msgstr "Ožujak" @@ -2415,6 +2366,24 @@ msgstr "Proizvodi za utrošiti" #~ msgid "Manufacturing Resource Planning" #~ msgstr "Planiranje resursa proizvodnje" +#~ msgid "Author" +#~ msgstr "Autor" + +#~ msgid "Modification name" +#~ msgstr "Naziv promjene" + +#~ msgid "Bill of Material Revision" +#~ msgstr "Revizija sastavnice" + +#~ msgid "BoM" +#~ msgstr "BoM" + +#~ msgid "last indice" +#~ msgstr "last indice" + +#~ msgid "BoM Revisions" +#~ msgstr "BoM Revisions" + #~ msgid "Work Center Future Load" #~ msgstr "Buduće opterećenje radnog centra" @@ -2431,6 +2400,9 @@ msgstr "Proizvodi za utrošiti" #~ "sales person creates a sales order, he can relate it to several properties " #~ "and OpenERP will automatically select the BoM to use according the the needs." +#~ msgid "Description" +#~ msgstr "Opis" + #~ msgid "" #~ "Work Center Loads gives you a projection of work center loads over a " #~ "specified period. It is expressed in number of hours and machine related " diff --git a/addons/mrp/i18n/hu.po b/addons/mrp/i18n/hu.po index a54f4137326..16409c5afc9 100644 --- a/addons/mrp/i18n/hu.po +++ b/addons/mrp/i18n/hu.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -227,11 +227,6 @@ msgid "For purchased material" msgstr "Vásárolt termékhez" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Felülvizsgálat" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -500,11 +495,6 @@ msgid "For Services." msgstr "Szolgáltatásokhoz." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Módosítás dátuma" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -566,11 +556,6 @@ msgid "Force Reservation" msgstr "Foglalás erőltetése" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Szerző" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Készletérték" @@ -863,11 +848,6 @@ msgid "Ready to Produce" msgstr "Gyártásra kész" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Módosítás neve" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1454,11 +1434,6 @@ msgid "Work Center Loads" msgstr "Munkaállomások terheltsége" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Anyagjegyzék felülvizsgálat" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1999,12 +1974,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Anyagjegyzék" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2022,17 +1991,6 @@ msgid "Waiting Goods" msgstr "Várakozás az árura" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "utolsó jelzőszám" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Anyagjegyzék felülvizsgálatok" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2221,19 +2179,6 @@ msgid "Change Product Qty" msgstr "Mennyiség változtatása" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Leírás" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Gyártás áttekintő" @@ -2366,6 +2311,12 @@ msgstr "Felhasználandó termékek" #~ msgid "October" #~ msgstr "Október" +#~ msgid "Modification Date" +#~ msgstr "Módosítás dátuma" + +#~ msgid "Author" +#~ msgstr "Szerző" + #~ msgid "March" #~ msgstr "Március" @@ -2379,6 +2330,9 @@ msgstr "Felhasználandó termékek" #~ msgid "September" #~ msgstr "Szeptember" +#~ msgid "Modification name" +#~ msgstr "Módosítás neve" + #~ msgid "Extended Filters..." #~ msgstr "Kiterjesztett szűrők…" @@ -2403,6 +2357,9 @@ msgstr "Felhasználandó termékek" #~ msgid "January" #~ msgstr "Január" +#~ msgid "Description" +#~ msgstr "Leírás" + #~ msgid "May" #~ msgstr "Május" @@ -2461,6 +2418,9 @@ msgstr "Felhasználandó termékek" #~ msgid "MRP Subproducts" #~ msgstr "MRP altermékek modul" +#~ msgid "Revision" +#~ msgstr "Felülvizsgálat" + #~ msgid "title" #~ msgstr "pozíció" @@ -2682,6 +2642,15 @@ msgstr "Felhasználandó termékek" #~ msgid "Configure" #~ msgstr "Beállít" +#~ msgid "BoM" +#~ msgstr "Anyagjegyzék" + +#~ msgid "last indice" +#~ msgstr "utolsó jelzőszám" + +#~ msgid "BoM Revisions" +#~ msgstr "Anyagjegyzék felülvizsgálatok" + #~ msgid "" #~ "Routing indicates all the workcenters used, for how long and/or cycles.If " #~ "Routing is indicated then,the third tab of a production order (workcenters) " @@ -2691,6 +2660,9 @@ msgstr "Felhasználandó termékek" #~ "hány ciklusra van használatban. Ha a gyártási eljárás be van kapcsolva, a " #~ "gyártási rendelés 3. füle (munkaállomások) automatikusan kitöltésre kerül." +#~ msgid "Bill of Material Revision" +#~ msgstr "Anyagjegyzék felülvizsgálat" + #, python-format #~ msgid "Work Cost of " #~ msgstr "Munkaköltsége " diff --git a/addons/mrp/i18n/id.po b/addons/mrp/i18n/id.po index 86b71f3e881..98dd494ca17 100644 --- a/addons/mrp/i18n/id.po +++ b/addons/mrp/i18n/id.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -211,11 +211,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -470,11 +465,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -532,11 +522,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -817,11 +802,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1382,11 +1362,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1890,12 +1865,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1913,17 +1882,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2109,19 +2067,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" diff --git a/addons/mrp/i18n/it.po b/addons/mrp/i18n/it.po index 5efbb7870e7..c37ee163724 100644 --- a/addons/mrp/i18n/it.po +++ b/addons/mrp/i18n/it.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -227,11 +227,6 @@ msgid "For purchased material" msgstr "Per materiali acquistati" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisione" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -502,11 +497,6 @@ msgid "For Services." msgstr "Per Servizi." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Data di Ultima Modifica" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -568,11 +558,6 @@ msgid "Force Reservation" msgstr "Forza Prenotazione" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Mittente" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valore Stock" @@ -867,11 +852,6 @@ msgid "Ready to Produce" msgstr "Pronto per Entrare in Produzione" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nome Modifica" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1455,11 +1435,6 @@ msgid "Work Center Loads" msgstr "Carico Centri di Lavoro" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revisione distinta base" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2003,12 +1978,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Distinta base" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2026,17 +1995,6 @@ msgid "Waiting Goods" msgstr "In attesa del materiale" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Ultimo Indice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Revisioni Distinta Base" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2225,19 +2183,6 @@ msgid "Change Product Qty" msgstr "Cambia la quantità del prodotto" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Descrizione" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Dashboard Produzione" @@ -2355,6 +2300,9 @@ msgstr "" msgid "Products to Consume" msgstr "Prodotti da Utilizzare" +#~ msgid "Revision" +#~ msgstr "Revisione" + #~ msgid "UoS Quantity" #~ msgstr "Quantità Unità di Vendita" @@ -2412,6 +2360,9 @@ msgstr "Prodotti da Utilizzare" #~ msgid "Procurement Lines" #~ msgstr "Righe Approvvigionamento" +#~ msgid "Modification name" +#~ msgstr "Nome Modifica" + #~ msgid "Exception" #~ msgstr "Eccezione" @@ -2517,9 +2468,18 @@ msgstr "Prodotti da Utilizzare" #~ msgid "plus" #~ msgstr "più" +#~ msgid "BoM" +#~ msgstr "Distinta base" + #~ msgid "New Production Order" #~ msgstr "Nuovo Ordine di Produzione" +#~ msgid "last indice" +#~ msgstr "Ultimo Indice" + +#~ msgid "BoM Revisions" +#~ msgstr "Revisioni Distinta Base" + #~ msgid "Retry" #~ msgstr "Riprova" @@ -2535,6 +2495,9 @@ msgstr "Prodotti da Utilizzare" #~ msgid "Close Move at end" #~ msgstr "Chiudi spostamento alla Fine" +#~ msgid "Description" +#~ msgstr "Descrizione" + #~ msgid "Running" #~ msgstr "In esecuzione" @@ -2715,6 +2678,9 @@ msgstr "Prodotti da Utilizzare" #~ msgid "Procurement Process" #~ msgstr "Procedura di approvvigionamento" +#~ msgid "Author" +#~ msgstr "Mittente" + #~ msgid "If Procure method is Make to order and supply method is produce" #~ msgstr "" #~ "Se il tipo di approvvigionamento è \"Make to Order\" e il tipo di fornitura " @@ -2723,6 +2689,9 @@ msgstr "Prodotti da Utilizzare" #~ msgid "Purchase Lead Time" #~ msgstr "Lead Time di Acquisto" +#~ msgid "Modification Date" +#~ msgstr "Data di Ultima Modifica" + #~ msgid "Manufacturity Lead Time" #~ msgstr "Lead Time di Produzione" @@ -3124,6 +3093,9 @@ msgstr "Prodotti da Utilizzare" #~ msgid "January" #~ msgstr "Gennaio" +#~ msgid "Bill of Material Revision" +#~ msgstr "Revisione distinta base" + #~ msgid "February" #~ msgstr "Febbraio" diff --git a/addons/mrp/i18n/ja.po b/addons/mrp/i18n/ja.po index e3837617d63..b5827bb09c5 100644 --- a/addons/mrp/i18n/ja.po +++ b/addons/mrp/i18n/ja.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -214,11 +214,6 @@ msgid "For purchased material" msgstr "仕入済材料" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "改訂" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -478,11 +473,6 @@ msgid "For Services." msgstr "サービス用" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "修正日" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -540,11 +530,6 @@ msgid "Force Reservation" msgstr "強制予約" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "著者" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "在庫価値" @@ -831,11 +816,6 @@ msgid "Ready to Produce" msgstr "生産準備完了" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "変更の名前" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1403,11 +1383,6 @@ msgid "Work Center Loads" msgstr "作業センタの負荷" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "部品表の改訂" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1927,12 +1902,6 @@ msgid "Orange Juice" msgstr "オレンジジュース" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "部品表" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1950,17 +1919,6 @@ msgid "Waiting Goods" msgstr "待機商品" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "最終インデックス" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "部品表改訂" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2149,19 +2107,6 @@ msgid "Change Product Qty" msgstr "製品数量変更" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "説明" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "製造ボード" @@ -2271,6 +2216,33 @@ msgstr "部品表のリストを表示する際には並び順を与えます。 msgid "Products to Consume" msgstr "消費製品" +#~ msgid "Revision" +#~ msgstr "改訂" + +#~ msgid "Modification Date" +#~ msgstr "修正日" + +#~ msgid "Author" +#~ msgstr "著者" + +#~ msgid "Modification name" +#~ msgstr "変更の名前" + +#~ msgid "Bill of Material Revision" +#~ msgstr "部品表の改訂" + +#~ msgid "BoM" +#~ msgstr "部品表" + +#~ msgid "last indice" +#~ msgstr "最終インデックス" + +#~ msgid "BoM Revisions" +#~ msgstr "部品表改訂" + +#~ msgid "Description" +#~ msgstr "説明" + #~ msgid "" #~ "Reference of the document that created this procurement.\n" #~ "This is automatically completed by Open ERP." diff --git a/addons/mrp/i18n/ko.po b/addons/mrp/i18n/ko.po index 1f34ff36b9f..6577f11cc68 100644 --- a/addons/mrp/i18n/ko.po +++ b/addons/mrp/i18n/ko.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -212,11 +212,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "개정 번호" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -473,11 +468,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "수정 날짜" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -535,11 +525,6 @@ msgid "Force Reservation" msgstr "예약하기" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "작성자" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -820,11 +805,6 @@ msgid "Ready to Produce" msgstr "생산 준비" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "수정 이름" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1385,11 +1365,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1893,12 +1868,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "BoM" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1916,17 +1885,6 @@ msgid "Waiting Goods" msgstr "대기 상품" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "마지막 인덱스" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "BoM 리비전" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2112,19 +2070,6 @@ msgid "Change Product Qty" msgstr "상품 수량 변경" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "설명" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2359,6 +2304,12 @@ msgstr "" #~ msgid "Purchase Lead Time" #~ msgstr "구매 리드 타임" +#~ msgid "Author" +#~ msgstr "작성자" + +#~ msgid "Modification Date" +#~ msgstr "수정 날짜" + #~ msgid "Make Procurement" #~ msgstr "조달하기" @@ -2426,6 +2377,9 @@ msgstr "" #~ msgid "Security Days" #~ msgstr "안전 기간 (일)" +#~ msgid "Modification name" +#~ msgstr "수정 이름" + #~ msgid "If Product type is service" #~ msgstr "상품 타입이 서비스일 경우" @@ -2710,9 +2664,18 @@ msgstr "" #~ msgid "Canceled" #~ msgstr "취소됨" +#~ msgid "BoM" +#~ msgstr "BoM" + #~ msgid "New Production Order" #~ msgstr "새 생산 주문" +#~ msgid "BoM Revisions" +#~ msgstr "BoM 리비전" + +#~ msgid "last indice" +#~ msgstr "마지막 인덱스" + #~ msgid "plus" #~ msgstr "더하기" @@ -2778,6 +2741,9 @@ msgstr "" #~ msgid "Bill of Material Structure" #~ msgstr "BoM 구조" +#~ msgid "Description" +#~ msgstr "설명" + #~ msgid "Workcenter load" #~ msgstr "워크센터 부하" @@ -2790,6 +2756,9 @@ msgstr "" #~ msgid "Procurement Details" #~ msgstr "조달 상세내용" +#~ msgid "Revision" +#~ msgstr "개정 번호" + #~ msgid "Not used in computations, for information purpose only." #~ msgstr "계산용이 아닌 정보 용도" diff --git a/addons/mrp/i18n/lt.po b/addons/mrp/i18n/lt.po index 83ff2a3e314..e68f7cd1137 100644 --- a/addons/mrp/i18n/lt.po +++ b/addons/mrp/i18n/lt.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" "Language: lt\n" #. module: mrp @@ -213,11 +213,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revizija" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -475,11 +470,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Modifikavimo data" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -539,11 +529,6 @@ msgid "Force Reservation" msgstr "Priverstinai rezervuoti" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autorius" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -824,11 +809,6 @@ msgid "Ready to Produce" msgstr "Paruošta gamybai" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Modifikavimo pavadinimas" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1389,11 +1369,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1898,12 +1873,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "KS" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1921,17 +1890,6 @@ msgid "Waiting Goods" msgstr "Laukiama žaliavų" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Pask. revizija" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "KS revizijos" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2117,19 +2075,6 @@ msgid "Change Product Qty" msgstr "Pakeisti produkto kiekį" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Aprašymas" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2247,6 +2192,9 @@ msgstr "" #~ msgstr "" #~ "Paleidžiamas automatiškai, kai virtualios atsargos pasidaro mažiau nulio." +#~ msgid "Revision" +#~ msgstr "Revizija" + #~ msgid "Compute Stock Minimum Rules Only" #~ msgstr "Apskaičiuoti atsargų likučio taisykles" @@ -2398,12 +2346,18 @@ msgstr "" #~ msgid "Make Procurement" #~ msgstr "Sukurti planinį užsakymą" +#~ msgid "Modification Date" +#~ msgstr "Modifikavimo data" + #~ msgid "If Procure method is Make to order and supply method is produce" #~ msgstr "Jeigu gamybos metodas yra užsakyti ir tiekimo metodas yra gaminti" #~ msgid "Purchase Lead Time" #~ msgstr "Gamybos trukmė" +#~ msgid "Author" +#~ msgstr "Autorius" + #~ msgid "Stockable Product Stock" #~ msgstr "Produktai sandėlyje." @@ -2491,6 +2445,9 @@ msgstr "" #~ msgid "Security Days" #~ msgstr "Saugios dienos" +#~ msgid "Modification name" +#~ msgstr "Modifikavimo pavadinimas" + #~ msgid "Exception" #~ msgstr "Išimtis" @@ -2805,6 +2762,9 @@ msgstr "" #~ msgid "plus" #~ msgstr "plius" +#~ msgid "BoM" +#~ msgstr "KS" + #~ msgid "" #~ "The list of operations (list of workcenters) to produce the finished " #~ "product. The routing is mainly used to compute workcenter costs during " @@ -2824,6 +2784,12 @@ msgstr "" #~ msgid "A Request for Quotation is created and sent to the supplier." #~ msgstr "Užklausa yra sukurta ir išsiųsta tiekėjams." +#~ msgid "last indice" +#~ msgstr "Pask. revizija" + +#~ msgid "BoM Revisions" +#~ msgstr "KS revizijos" + #~ msgid "Retry" #~ msgstr "Pakartoti" @@ -2881,6 +2847,9 @@ msgstr "" #~ msgid "Close Move at end" #~ msgstr "Uždarymo perkėlimas pabaigoje" +#~ msgid "Description" +#~ msgstr "Aprašymas" + #~ msgid "Running" #~ msgstr "Veikiantis" diff --git a/addons/mrp/i18n/lv.po b/addons/mrp/i18n/lv.po index 437122ce2cd..109f6fb2c97 100644 --- a/addons/mrp/i18n/lv.po +++ b/addons/mrp/i18n/lv.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -212,11 +212,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -471,11 +466,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -533,11 +523,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -818,11 +803,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1383,11 +1363,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1891,12 +1866,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1914,17 +1883,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2110,19 +2068,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" diff --git a/addons/mrp/i18n/mn.po b/addons/mrp/i18n/mn.po index a66cb6ffe1e..2eb6ebf3942 100644 --- a/addons/mrp/i18n/mn.po +++ b/addons/mrp/i18n/mn.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -228,11 +228,6 @@ msgid "For purchased material" msgstr "Худалдан авсан материалын хувьд" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Хувилбар" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -507,11 +502,6 @@ msgid "For Services." msgstr "Үйлчилгээнүүдэд." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Зассан огноо" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -571,11 +561,6 @@ msgid "Force Reservation" msgstr "Нөөцлөхийг албадах" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Зохиогч" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Нөөцийн үнэ" @@ -871,11 +856,6 @@ msgid "Ready to Produce" msgstr "Үйлдвэрлэхэд бэлэн" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Өөрчлөлтийн нэр" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1464,11 +1444,6 @@ msgid "Work Center Loads" msgstr "Дамжлагын Ачаалал" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Жорын Шинэчилсэн хувилбар" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2002,12 +1977,6 @@ msgid "Orange Juice" msgstr "Жүржийн Шүүс" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Жор" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2025,17 +1994,6 @@ msgid "Waiting Goods" msgstr "Бараанууд Хүлээж буй" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "сүүлийн индекс" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Жорын өөрчлөлтүүд" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2226,19 +2184,6 @@ msgid "Change Product Qty" msgstr "Барааны Тоо Хэмжээг Өөрчлөх" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Тайлбар" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Үйлдвэрлэлийн самбар" @@ -2355,3 +2300,30 @@ msgstr "Жорын жагсаалтыг харуулах дэс дарааллы #: report:mrp.production.order:0 msgid "Products to Consume" msgstr "Хангах Бараанууд" + +#~ msgid "Revision" +#~ msgstr "Хувилбар" + +#~ msgid "Modification Date" +#~ msgstr "Зассан огноо" + +#~ msgid "Author" +#~ msgstr "Зохиогч" + +#~ msgid "Modification name" +#~ msgstr "Өөрчлөлтийн нэр" + +#~ msgid "Bill of Material Revision" +#~ msgstr "Жорын Шинэчилсэн хувилбар" + +#~ msgid "BoM" +#~ msgstr "Жор" + +#~ msgid "BoM Revisions" +#~ msgstr "Жорын өөрчлөлтүүд" + +#~ msgid "last indice" +#~ msgstr "сүүлийн индекс" + +#~ msgid "Description" +#~ msgstr "Тайлбар" diff --git a/addons/mrp/i18n/mrp.pot b/addons/mrp/i18n/mrp.pot index 1223b21f55d..21c397bd1b0 100644 --- a/addons/mrp/i18n/mrp.pot +++ b/addons/mrp/i18n/mrp.pot @@ -197,11 +197,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "Create a product form for everything you buy or sell. Specify a supplier if the product can be purchased." msgstr "" @@ -436,11 +431,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "Complete this only if you want automatic analytic accounting entries on production orders." @@ -494,11 +484,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -762,11 +747,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1295,11 +1275,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "Reference of the document that generated this production order request." msgstr "" @@ -1773,12 +1748,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1796,17 +1765,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -1988,19 +1946,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" diff --git a/addons/mrp/i18n/nb.po b/addons/mrp/i18n/nb.po index e94a0636397..6dc969fbea2 100644 --- a/addons/mrp/i18n/nb.po +++ b/addons/mrp/i18n/nb.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -227,16 +227,13 @@ msgid "For purchased material" msgstr "For innkjøpt materiale" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisjon" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " "the product can be purchased." msgstr "" +"Lag et produktskjema for alt du kjøper eller selger. Angi en leverandør hvis " +"produktet kan bli kjøpt." #. module: mrp #: model:ir.ui.menu,name:mrp.next_id_77 @@ -505,11 +502,6 @@ msgid "For Services." msgstr "For Tjenester." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Dato endret" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -570,11 +562,6 @@ msgid "Force Reservation" msgstr "Tving Reservasjon" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Forfatter" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Lagerverdi" @@ -600,6 +587,7 @@ msgstr "Leverandør Pris per enhet" msgid "" "Gives the sequence order when displaying a list of routing Work Centers." msgstr "" +"Gir rekkefølgen av når du viser en liste over ruter av arbeidsstasjoner." #. module: mrp #: constraint:stock.move:0 @@ -714,7 +702,7 @@ msgstr "Tid i timer for å utføre en syklus." #. module: mrp #: constraint:mrp.bom:0 msgid "BoM line product should not be same as BoM product." -msgstr "" +msgstr "Bom linje produktet bør ikke være det samme som BOM produkt." #. module: mrp #: view:mrp.production:0 @@ -842,6 +830,10 @@ msgid "" "resource leave are not taken into account in the time computation of the " "work center." msgstr "" +"Arbeidsstasjoner kan du opprette og administrere produksjonsenheter. De " +"består av arbeidstakerne og / eller maskiner, som anses som en enhet for " +"kapasitet og planlegging prognose. Husk at arbeidstiden og ressurs permisjon " +"ikke er tatt hensyn til i tiden beregning av arbeidet sentrum." #. module: mrp #: model:ir.model,name:mrp.model_mrp_production @@ -865,11 +857,6 @@ msgid "Ready to Produce" msgstr "Klar for produksjon" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Endring navn" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1107,7 +1094,7 @@ msgstr "" #. module: mrp #: model:ir.actions.todo.category,name:mrp.category_mrp_config msgid "MRP Management" -msgstr "" +msgstr "MRP Ledelse" #. module: mrp #: help:mrp.workcenter,costs_hour:0 @@ -1120,6 +1107,8 @@ msgid "" "Number of operations this Work Center can do in parallel. If this Work " "Center represents a team of 5 workers, the capacity per cycle is 5." msgstr "" +"Antall operasjoner denne Work Center kan gjøre parallelt. Hvis dette Work " +"Center representerer et lag av 5 arbeidere, er kapasiteten per syklus 5." #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_production_action3 @@ -1453,11 +1442,6 @@ msgid "Work Center Loads" msgstr "Arbeidssenter Belastning" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Stykkliste revisjoner" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1977,12 +1961,6 @@ msgid "Orange Juice" msgstr "Appelsinjuice" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Materialliste" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2000,17 +1978,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Materialliste revisjon" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2196,19 +2163,6 @@ msgid "Change Product Qty" msgstr "Endre produkt mengde" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Beskrivelse" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2328,6 +2282,9 @@ msgstr "Produkter til forbruk" #~ msgid "Raw Material Location" #~ msgstr "Råmateriale Lokasjon" +#~ msgid "Revision" +#~ msgstr "Revisjon" + #~ msgid "title" #~ msgstr "tittel" @@ -2370,6 +2327,12 @@ msgstr "Produkter til forbruk" #~ "Muliggjør garanti og reparasjons håndtering (og deres påvirkning av lager og " #~ "fakturering)." +#~ msgid "Author" +#~ msgstr "Forfatter" + +#~ msgid "Modification Date" +#~ msgstr "Dato endret" + #~ msgid "March" #~ msgstr "Mars" @@ -2412,6 +2375,9 @@ msgstr "Produkter til forbruk" #~ msgid "Extended Filters..." #~ msgstr "Utvidede filter..." +#~ msgid "Modification name" +#~ msgstr "Endring navn" + #~ msgid "Just In Time Scheduling" #~ msgstr "Akkurat i Tide Planlegging" @@ -2603,6 +2569,12 @@ msgstr "Produkter til forbruk" #~ msgid "January" #~ msgstr "Januar" +#~ msgid "Bill of Material Revision" +#~ msgstr "Stykkliste revisjoner" + +#~ msgid "Description" +#~ msgstr "Beskrivelse" + #~ msgid "April" #~ msgstr "April" @@ -2614,3 +2586,9 @@ msgstr "Produkter til forbruk" #~ msgid "Year" #~ msgstr "År" + +#~ msgid "BoM" +#~ msgstr "Materialliste" + +#~ msgid "BoM Revisions" +#~ msgstr "Materialliste revisjon" diff --git a/addons/mrp/i18n/nl.po b/addons/mrp/i18n/nl.po index f890f30bf59..f2646fb5b78 100644 --- a/addons/mrp/i18n/nl.po +++ b/addons/mrp/i18n/nl.po @@ -13,8 +13,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 05:58+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -226,11 +226,6 @@ msgid "For purchased material" msgstr "Voor ingekocht materiaal" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisie" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -508,11 +503,6 @@ msgid "For Services." msgstr "Voor services" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Wijzigingsdatum" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -574,11 +564,6 @@ msgid "Force Reservation" msgstr "Forceer reservering" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Auteur" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Voorraadwaarde" @@ -883,11 +868,6 @@ msgid "Ready to Produce" msgstr "Gereed voor productie" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Naamswijziging" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1484,11 +1464,6 @@ msgid "Work Center Loads" msgstr "Werkplek belastingen" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Grondstoffenlijst revisie" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1555,7 +1530,7 @@ msgstr "Verantwoordelijke" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_production_action2 msgid "Manufacturing Orders To Start" -msgstr "Porductieorers te starten" +msgstr "Productieorders te starten" #. module: mrp #: model:ir.model,name:mrp.model_mrp_workcenter @@ -1737,7 +1712,7 @@ msgstr "" "In de 'Alleen verbruiken' modus worden alleen producten met de geselecteerde " "hoeveelheid verbruikt.\n" "In de 'Verbruik & Produceer' modus worden producten verbruikt met de " -"geselecteerde hoeveelheid en het zal de productieporder afronden wanneer de " +"geselecteerde hoeveelheid en het zal de productieorder afronden wanneer de " "totaal bestelde hoeveelheid zijn geproduceerd." #. module: mrp @@ -2036,12 +2011,6 @@ msgid "Orange Juice" msgstr "Sinasappelsap" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Materiaallijst" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2059,17 +2028,6 @@ msgid "Waiting Goods" msgstr "Wacht op materialen" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "laatste index" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Materiaallijst versies" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2260,19 +2218,6 @@ msgid "Change Product Qty" msgstr "Wijzig producthoeveelheid" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Beschrijving" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Productie dashboard" @@ -2420,6 +2365,9 @@ msgstr "Producten te verbruiken" #~ msgid "Product Standard Price" #~ msgstr "Standaard productprijs" +#~ msgid "Modification Date" +#~ msgstr "Wijzigingsdatum" + #~ msgid "For stockable and consumable" #~ msgstr "Voor voorraadartikel en verbruiksartikel" @@ -2521,6 +2469,9 @@ msgstr "Producten te verbruiken" #~ msgid "max" #~ msgstr "max" +#~ msgid "Author" +#~ msgstr "Auteur" + #~ msgid "Latest error" #~ msgstr "Laatste fout" @@ -2836,6 +2787,9 @@ msgstr "Producten te verbruiken" #~ msgid "New Production Order" #~ msgstr "Nieuwe productieopdracht" +#~ msgid "Description" +#~ msgstr "Beschrijving" + #~ msgid "Service Product" #~ msgstr "Dienstverleningsproduct" @@ -3033,6 +2987,12 @@ msgstr "Producten te verbruiken" #~ msgid "Canceled" #~ msgstr "Geannuleerd" +#~ msgid "BoM" +#~ msgstr "Materiaallijst" + +#~ msgid "last indice" +#~ msgstr "laatste index" + #~ msgid "An entry is being made from billing material to routing." #~ msgstr "" #~ "Er wordt een boeking gemaakt van doorbelastbaar materiaal naar routering." @@ -3111,6 +3071,9 @@ msgstr "Producten te verbruiken" #~ msgid "UoS Quantity" #~ msgstr "VE aantal" +#~ msgid "Revision" +#~ msgstr "Revisie" + #~ msgid "Routing Workcenters" #~ msgstr "Routing werkcentra" @@ -3126,6 +3089,9 @@ msgstr "Producten te verbruiken" #~ msgid "Workcenter Operations" #~ msgstr "Werkcenter operaties" +#~ msgid "Modification name" +#~ msgstr "Naamswijziging" + #~ msgid "alphabetical indices" #~ msgstr "Alfabetische index" @@ -3185,3 +3151,9 @@ msgstr "Producten te verbruiken" #~ msgid "Repairs" #~ msgstr "Reparaties" + +#~ msgid "Bill of Material Revision" +#~ msgstr "Grondstoffenlijst revisie" + +#~ msgid "BoM Revisions" +#~ msgstr "Materiaallijst versies" diff --git a/addons/mrp/i18n/nl_BE.po b/addons/mrp/i18n/nl_BE.po index 720234c8f5a..a7251604a56 100644 --- a/addons/mrp/i18n/nl_BE.po +++ b/addons/mrp/i18n/nl_BE.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -211,11 +211,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -470,11 +465,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -532,11 +522,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -817,11 +802,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1382,11 +1362,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1890,12 +1865,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1913,17 +1882,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2109,19 +2067,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" diff --git a/addons/mrp/i18n/pl.po b/addons/mrp/i18n/pl.po index 2d4647be9e1..491b12bf492 100644 --- a/addons/mrp/i18n/pl.po +++ b/addons/mrp/i18n/pl.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -223,11 +223,6 @@ msgid "For purchased material" msgstr "Dla kupowanych materiałów" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Wersja" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -495,11 +490,6 @@ msgid "For Services." msgstr "Do usług." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Data modyfikacji" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -561,11 +551,6 @@ msgid "Force Reservation" msgstr "Wymuś rezerwację" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Wycena zapasów" @@ -850,11 +835,6 @@ msgid "Ready to Produce" msgstr "Gotowe do produkcji" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nazwa modyfikacji" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1424,11 +1404,6 @@ msgid "Work Center Loads" msgstr "Obciążenie centrum roboczego" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Wersja zestawienia materiałowego" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1934,12 +1909,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Zest. Mat." - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1957,17 +1926,6 @@ msgid "Waiting Goods" msgstr "Czeka na materiały" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Wersje Zest. Mat." - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2153,19 +2111,6 @@ msgid "Change Product Qty" msgstr "Zmień ilość produktu" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Opis" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Konsola produkcji" @@ -2310,6 +2255,9 @@ msgstr "Produkty do zużycia" #~ msgid "Details" #~ msgstr "Szczegóły" +#~ msgid "Modification Date" +#~ msgstr "Data modyfikacji" + #~ msgid "Compute Stock Minimum Rules Only" #~ msgstr "Oblicz tylko reguły minimalnych zapasów" @@ -2381,6 +2329,9 @@ msgstr "Produkty do zużycia" #~ "Jeśli metoda nabycia jest 'Na zamówienie' i metoda zaopatrzenia jest " #~ "'Produkcja'" +#~ msgid "Author" +#~ msgstr "Autor" + #~ msgid "Latest error" #~ msgstr "Ostatni błąd" @@ -2409,6 +2360,9 @@ msgstr "Produkty do zużycia" #~ msgid "Security Days" #~ msgstr "Dni na wszelki wypadek" +#~ msgid "Modification name" +#~ msgstr "Nazwa modyfikacji" + #~ msgid "If Product type is service" #~ msgstr "Jeśli typem produktu jest usługa" @@ -2595,6 +2549,9 @@ msgstr "Produkty do zużycia" #~ msgid "Canceled" #~ msgstr "Anulowano" +#~ msgid "BoM" +#~ msgstr "Zest. Mat." + #~ msgid "New Production Order" #~ msgstr "Nowe zamówienie produkcji" @@ -2640,6 +2597,9 @@ msgstr "Produkty do zużycia" #~ msgid "Create minimum stock rules" #~ msgstr "Utwórz reguły zapasów minimalnych" +#~ msgid "Description" +#~ msgstr "Opis" + #~ msgid "Bill of Material Structure" #~ msgstr "Struktura zestawień materiałowych" @@ -2682,6 +2642,9 @@ msgstr "Produkty do zużycia" #~ "przechodzenia przez zamówienie produkcji. Zwykłe zestawienie materiałowe " #~ "będzie generowało jedno zamówienie produkcji na każdy poziom zestawienia." +#~ msgid "BoM Revisions" +#~ msgstr "Wersje Zest. Mat." + #~ msgid "Draft" #~ msgstr "Projekt" @@ -2802,6 +2765,9 @@ msgstr "Produkty do zużycia" #~ msgid "Service Product" #~ msgstr "Produkt - usługa" +#~ msgid "Revision" +#~ msgstr "Wersja" + #~ msgid "Confirmed" #~ msgstr "Potwierdzone" @@ -3200,6 +3166,9 @@ msgstr "Produkty do zużycia" #~ msgid "MRP Application Configuration" #~ msgstr "Konfiguracja aplikacji MRP" +#~ msgid "Bill of Material Revision" +#~ msgstr "Wersja zestawienia materiałowego" + #~ msgid "MRP Applications Configuration" #~ msgstr "Konfiguracja aplikacji MRP" diff --git a/addons/mrp/i18n/pt.po b/addons/mrp/i18n/pt.po index f4f70b7fa58..fd06a72ddfa 100644 --- a/addons/mrp/i18n/pt.po +++ b/addons/mrp/i18n/pt.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -226,11 +226,6 @@ msgid "For purchased material" msgstr "Para materiais comprados" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisão" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -507,11 +502,6 @@ msgid "For Services." msgstr "Para serviços" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Data de modificação" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -573,11 +563,6 @@ msgid "Force Reservation" msgstr "Forçar reserva" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valor do stock" @@ -877,11 +862,6 @@ msgid "Ready to Produce" msgstr "Pronto para produzir" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nome de modificação" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1478,11 +1458,6 @@ msgid "Work Center Loads" msgstr "Cargas Centro de Trabalho" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Ficha técnica da revisão de material" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2025,12 +2000,6 @@ msgid "Orange Juice" msgstr "Sumo Laranja" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "BoM" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2048,17 +2017,6 @@ msgid "Waiting Goods" msgstr "Esperar bens" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Último índice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Revisões de BoM" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2249,19 +2207,6 @@ msgid "Change Product Qty" msgstr "Alterar Quantidade do Artigo" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Descrição" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Painel de fabrico" @@ -2384,6 +2329,9 @@ msgstr "Artigos para consumir" #~ msgid "Moves Created" #~ msgstr "Movimentos criados" +#~ msgid "Revision" +#~ msgstr "Revisão" + #~ msgid "UoS Quantity" #~ msgstr "Quantidade UoS" @@ -2444,6 +2392,9 @@ msgstr "Artigos para consumir" #~ msgid "Print product price" #~ msgstr "Imprimir o preço do produto" +#~ msgid "Author" +#~ msgstr "Autor" + #~ msgid "Latest error" #~ msgstr "Último erro" @@ -2477,6 +2428,9 @@ msgstr "Artigos para consumir" #~ msgid "Security Days" #~ msgstr "Dias de segurança" +#~ msgid "Modification name" +#~ msgstr "Nome de modificação" + #~ msgid "Exception" #~ msgstr "Excepção" @@ -2617,9 +2571,18 @@ msgstr "Artigos para consumir" #~ msgid "plus" #~ msgstr "mais" +#~ msgid "BoM" +#~ msgstr "BoM" + #~ msgid "New Production Order" #~ msgstr "Nova pedido de produção" +#~ msgid "last indice" +#~ msgstr "Último índice" + +#~ msgid "BoM Revisions" +#~ msgstr "Revisões de BoM" + #~ msgid "Retry" #~ msgstr "Tentar novamente" @@ -2644,6 +2607,9 @@ msgstr "Artigos para consumir" #~ msgid "Close Move at end" #~ msgstr "Fechar movimento no fim" +#~ msgid "Description" +#~ msgstr "Descrição" + #~ msgid "Running" #~ msgstr "Em execução" @@ -3236,6 +3202,9 @@ msgstr "Artigos para consumir" #~ msgid "Repairs" #~ msgstr "Reparações" +#~ msgid "Modification Date" +#~ msgstr "Data de modificação" + #~ msgid "Raw Material Location" #~ msgstr "Localização do material em bruto" @@ -3461,6 +3430,9 @@ msgstr "Artigos para consumir" #~ "aba da ordem de produção (centros de trabalho) será automaticamente pré-" #~ "preenchido." +#~ msgid "Bill of Material Revision" +#~ msgstr "Ficha técnica da revisão de material" + #, python-format #~ msgid "Work Cost of " #~ msgstr "Custo de trabalho " diff --git a/addons/mrp/i18n/pt_BR.po b/addons/mrp/i18n/pt_BR.po index aa7250aa3a7..48bfb807036 100644 --- a/addons/mrp/i18n/pt_BR.po +++ b/addons/mrp/i18n/pt_BR.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -227,11 +227,6 @@ msgid "For purchased material" msgstr "Para Material Comprado" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revisão" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -509,11 +504,6 @@ msgid "For Services." msgstr "Para Serviços" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Data de Modificação" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -575,11 +565,6 @@ msgid "Force Reservation" msgstr "Forçar reserva" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valor do Estoque" @@ -879,11 +864,6 @@ msgid "Ready to Produce" msgstr "Pronto para Produção" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Modificação de Nome" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1479,11 +1459,6 @@ msgid "Work Center Loads" msgstr "Cargas dos Centros de Trabalho" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revisão da Lista de Materiais" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2027,12 +2002,6 @@ msgid "Orange Juice" msgstr "Suco de Laranja" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Lista de Material (BoM)" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2050,17 +2019,6 @@ msgid "Waiting Goods" msgstr "Aguardando mercadorias" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "Último Indice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "BoM Revisões" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2251,19 +2209,6 @@ msgid "Change Product Qty" msgstr "Alterar Qtd. Produto" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Descrição" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Quadro de produção" @@ -2425,6 +2370,9 @@ msgstr "Produtos para Consumir" #~ msgid "Production scheduled products" #~ msgstr "Produção de produtos agendados" +#~ msgid "Modification Date" +#~ msgstr "Data de Modificação" + #~ msgid "Latest error" #~ msgstr "Último erro" @@ -2455,6 +2403,9 @@ msgstr "Produtos para Consumir" #~ msgid "Details" #~ msgstr "Detalhes" +#~ msgid "Author" +#~ msgstr "Autor" + #~ msgid "Qty Multiple" #~ msgstr "Múltiplo de Qtd" @@ -2672,6 +2623,9 @@ msgstr "Produtos para Consumir" #~ msgstr "" #~ "Fator que multiplica todos os momentos expressa no centro de trabalho." +#~ msgid "Modification name" +#~ msgstr "Modificação de Nome" + #~ msgid "Workcenter Name" #~ msgstr "Nome Centro de Trabalho" @@ -2800,6 +2754,12 @@ msgstr "Produtos para Consumir" #~ msgid "A Request for Quotation is created and sent to the supplier." #~ msgstr "Um pedido de cotação é criado e enviado ao fornecedor." +#~ msgid "BoM Revisions" +#~ msgstr "BoM Revisões" + +#~ msgid "last indice" +#~ msgstr "Último Indice" + #~ msgid "Retry" #~ msgstr "Repetir" @@ -2829,6 +2789,9 @@ msgstr "Produtos para Consumir" #~ msgid "Create minimum stock rules" #~ msgstr "Criar Regras minimas de Estoque." +#~ msgid "Description" +#~ msgstr "Descrição" + #~ msgid "Service Product" #~ msgstr "Produto de Serviço" @@ -2977,6 +2940,9 @@ msgstr "Produtos para Consumir" #~ msgstr "" #~ "Qualquer lançamento sendo feito da lista de materiais para roteamento" +#~ msgid "BoM" +#~ msgstr "Lista de Material (BoM)" + #~ msgid "Procurement Reason" #~ msgstr "Motivo da Aquisição" @@ -2992,6 +2958,9 @@ msgstr "Produtos para Consumir" #~ msgid "Close Move at end" #~ msgstr "Fechar Lançamento no final" +#~ msgid "Revision" +#~ msgstr "Revisão" + #, python-format #~ msgid "Warning !" #~ msgstr "Atenção !" @@ -3071,6 +3040,9 @@ msgstr "Produtos para Consumir" #~ msgid "Image" #~ msgstr "Imagem" +#~ msgid "Bill of Material Revision" +#~ msgstr "Revisão da Lista de Materiais" + #~ msgid "November" #~ msgstr "Novembro" diff --git a/addons/mrp/i18n/ro.po b/addons/mrp/i18n/ro.po index 4c4687d1f25..06586d71c3c 100644 --- a/addons/mrp/i18n/ro.po +++ b/addons/mrp/i18n/ro.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -224,11 +224,6 @@ msgid "For purchased material" msgstr "Pentru materiale achizitionate" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revizie" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -505,11 +500,6 @@ msgid "For Services." msgstr "Pentru servicii." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Data Modificarii" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -571,11 +561,6 @@ msgid "Force Reservation" msgstr "Impune Rezervarea" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Autor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Valoare stoc" @@ -879,11 +864,6 @@ msgid "Ready to Produce" msgstr "Pregatit de productie" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Nume modificare" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1480,11 +1460,6 @@ msgid "Work Center Loads" msgstr "Sarcini Centru de lucru" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Revizuire Lista de materiale" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -2033,12 +2008,6 @@ msgid "Orange Juice" msgstr "Suc de portocale" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "LdM" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2056,17 +2025,6 @@ msgid "Waiting Goods" msgstr "Bunuri in asteptare" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "ultimul indice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Revizuiri LdM" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2257,19 +2215,6 @@ msgid "Change Product Qty" msgstr "Schimba Cant Produsului" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Descriere" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Panou fabricatie" @@ -2386,12 +2331,24 @@ msgstr "Da ordinea atunci cand afiseaza o lista cu listele de materiale." msgid "Products to Consume" msgstr "Produse de consumat" +#~ msgid "Revision" +#~ msgstr "Revizie" + #~ msgid "BOM" #~ msgstr "LDM" +#~ msgid "Author" +#~ msgstr "Autor" + #~ msgid "Draft" #~ msgstr "Ciornă" +#~ msgid "Description" +#~ msgstr "Descriere" + +#~ msgid "Modification name" +#~ msgstr "Nume modificare" + #~ msgid "Day" #~ msgstr "Zi" @@ -2434,6 +2391,9 @@ msgstr "Produse de consumat" #~ msgid "Current" #~ msgstr "Curent" +#~ msgid "BoM" +#~ msgstr "LdM" + #~ msgid "December" #~ msgstr "Decembrie" @@ -2510,6 +2470,9 @@ msgstr "Produse de consumat" #~ msgid "mrp.installer" #~ msgstr "mrp.installer" +#~ msgid "last indice" +#~ msgstr "ultimul indice" + #~ msgid "Order quantity cannot be negative or zero !" #~ msgstr "Cantitatea din comandă nu poate fi negativă sau zero !" @@ -2762,3 +2725,12 @@ msgstr "Produse de consumat" #~ "Fișa tehnologică indică toate centrele de lucru folosite, pentru cât timp și " #~ "/ sau cicluri. Dacă fișa tehnologică este indicată, atunci al treilea tab al " #~ "unei comenzi de producție (centre de lucru) va fi pre-completat automat." + +#~ msgid "Modification Date" +#~ msgstr "Data Modificarii" + +#~ msgid "Bill of Material Revision" +#~ msgstr "Revizuire Lista de materiale" + +#~ msgid "BoM Revisions" +#~ msgstr "Revizuiri LdM" diff --git a/addons/mrp/i18n/ru.po b/addons/mrp/i18n/ru.po index 4a0d3eaf5c4..e54e3617354 100644 --- a/addons/mrp/i18n/ru.po +++ b/addons/mrp/i18n/ru.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -218,11 +218,6 @@ msgid "For purchased material" msgstr "Для приобретенного материала" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Ревизия" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -490,11 +485,6 @@ msgid "For Services." msgstr "Для услуг." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Дата изменения" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -554,11 +544,6 @@ msgid "Force Reservation" msgstr "Не ждать пополнения расходных" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Автор" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Оценка запасов" @@ -847,11 +832,6 @@ msgid "Ready to Produce" msgstr "Готово к производству" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Название модификации" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1426,11 +1406,6 @@ msgid "Work Center Loads" msgstr "Загрузка Рабочего центра" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Пересмотр спецификации" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1937,12 +1912,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "Спецификация" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1960,17 +1929,6 @@ msgid "Waiting Goods" msgstr "Ожидание товара" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "последний индекс" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Ревизии спецификации" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2156,19 +2114,6 @@ msgid "Change Product Qty" msgstr "Изменить кол-во" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Описание" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Панель производства" @@ -2323,6 +2268,12 @@ msgstr "Потребляемые продукты" #~ msgid "Print product price" #~ msgstr "Распечатать цену продукции" +#~ msgid "Modification Date" +#~ msgstr "Дата изменения" + +#~ msgid "Author" +#~ msgstr "Автор" + #~ msgid "Latest error" #~ msgstr "Последняя ошибка" @@ -2344,6 +2295,9 @@ msgstr "Потребляемые продукты" #~ msgid "Procurement Lines" #~ msgstr "Позиции снабжения" +#~ msgid "Modification name" +#~ msgstr "Название модификации" + #~ msgid "Exception" #~ msgstr "Исключение" @@ -2440,9 +2394,15 @@ msgstr "Потребляемые продукты" #~ msgid "plus" #~ msgstr "плюс" +#~ msgid "BoM" +#~ msgstr "Спецификация" + #~ msgid "New Production Order" #~ msgstr "Новый заказ на производство" +#~ msgid "last indice" +#~ msgstr "последний индекс" + #~ msgid "Retry" #~ msgstr "Повторить" @@ -2458,6 +2418,9 @@ msgstr "Потребляемые продукты" #~ msgid "Warehouse" #~ msgstr "Склад" +#~ msgid "Description" +#~ msgstr "Описание" + #~ msgid "Running" #~ msgstr "Выполняется" @@ -2473,6 +2436,9 @@ msgstr "Потребляемые продукты" #~ msgid "Bill of Materials Components" #~ msgstr "Компоненты спецификации" +#~ msgid "Revision" +#~ msgstr "Ревизия" + #~ msgid "Compute Stock Minimum Rules Only" #~ msgstr "Правила вычисления минимального запаса" @@ -2574,6 +2540,9 @@ msgstr "Потребляемые продукты" #~ msgid "A Request for Quotation is created and sent to the supplier." #~ msgstr "Заявка выслана поставщику" +#~ msgid "BoM Revisions" +#~ msgstr "Ревизии спецификации" + #~ msgid "" #~ "The list of operations (list of workcenters) to produce the finished " #~ "product. The routing is mainly used to compute workcenter costs during " @@ -2965,6 +2934,9 @@ msgstr "Потребляемые продукты" #~ "Описание рабочего центра. Объясните здесь, каков цикл для этого рабочего " #~ "центра." +#~ msgid "Bill of Material Revision" +#~ msgstr "Пересмотр спецификации" + #~ msgid "Configure Your Manufacturing Resource Planning Application" #~ msgstr "Настройте модуль планирования ресурсов производства" diff --git a/addons/mrp/i18n/sk.po b/addons/mrp/i18n/sk.po index 7f62c1836c9..225730b4937 100644 --- a/addons/mrp/i18n/sk.po +++ b/addons/mrp/i18n/sk.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -212,11 +212,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revízia" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -471,11 +466,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -533,11 +523,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -818,11 +803,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1383,11 +1363,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1891,12 +1866,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1914,17 +1883,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2110,19 +2068,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2230,6 +2175,9 @@ msgstr "" msgid "Products to Consume" msgstr "" +#~ msgid "Revision" +#~ msgstr "Revízia" + #~ msgid "Invalid model name in the action definition." #~ msgstr "Neplatný názov modelu v akcii definície." diff --git a/addons/mrp/i18n/sl.po b/addons/mrp/i18n/sl.po index 80603cd1591..060dd81a3a2 100644 --- a/addons/mrp/i18n/sl.po +++ b/addons/mrp/i18n/sl.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -211,11 +211,6 @@ msgid "For purchased material" msgstr "Za nabavljeni material" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revizija" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -471,11 +466,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Datum spremembe" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -533,11 +523,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Avtor" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Vrednost zaloge" @@ -818,11 +803,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1383,11 +1363,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1891,12 +1866,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1914,17 +1883,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2110,19 +2068,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Opis" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2238,6 +2183,9 @@ msgstr "" #~ msgstr "" #~ "Naziv objekta se mora začeti z 'x_' in ne sme vsebovati posebnih znakov." +#~ msgid "Revision" +#~ msgstr "Revizija" + #, python-format #~ msgid "Product name" #~ msgstr "Ime proizvoda" @@ -2283,6 +2231,12 @@ msgstr "" #~ msgid "Reservation" #~ msgstr "Rezervacija" +#~ msgid "Modification Date" +#~ msgstr "Datum spremembe" + +#~ msgid "Author" +#~ msgstr "Avtor" + #~ msgid "Waiting" #~ msgstr "Čakanje" @@ -2351,6 +2305,9 @@ msgstr "" #~ msgid "Close" #~ msgstr "Zapri" +#~ msgid "Description" +#~ msgstr "Opis" + #~ msgid "Warehouse" #~ msgstr "Skladišče" diff --git a/addons/mrp/i18n/sq.po b/addons/mrp/i18n/sq.po index 131a02ab8a8..8602a0c6985 100644 --- a/addons/mrp/i18n/sq.po +++ b/addons/mrp/i18n/sq.po @@ -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 05:58+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -212,11 +212,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -471,11 +466,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -533,11 +523,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -818,11 +803,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1383,11 +1363,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1891,12 +1866,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1914,17 +1883,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2110,19 +2068,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" diff --git a/addons/mrp/i18n/sr@latin.po b/addons/mrp/i18n/sr@latin.po index 06c5da4ea56..dc566ed2f53 100644 --- a/addons/mrp/i18n/sr@latin.po +++ b/addons/mrp/i18n/sr@latin.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -212,11 +212,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -471,11 +466,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -533,11 +523,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -818,11 +803,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1383,11 +1363,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1891,12 +1866,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1914,17 +1883,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2110,19 +2068,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" diff --git a/addons/mrp/i18n/sv.po b/addons/mrp/i18n/sv.po index 98c0b5615c3..2ad9e9e4c6e 100644 --- a/addons/mrp/i18n/sv.po +++ b/addons/mrp/i18n/sv.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -211,11 +211,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Revision" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -477,11 +472,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Ändringsdatum" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -541,11 +531,6 @@ msgid "Force Reservation" msgstr "Force Reservation" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Upphovsman" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -826,11 +811,6 @@ msgid "Ready to Produce" msgstr "Klar att producera" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Ändring" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1394,11 +1374,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1907,12 +1882,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "BoM" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1930,17 +1899,6 @@ msgid "Waiting Goods" msgstr "Väntande varor" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "last indice" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "BoM Revisions" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2126,19 +2084,6 @@ msgid "Change Product Qty" msgstr "Ändra produktkvantitet" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Beskrivning" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2254,6 +2199,12 @@ msgstr "" #~ msgid "Reservation" #~ msgstr "Reservation" +#~ msgid "Author" +#~ msgstr "Upphovsman" + +#~ msgid "Modification name" +#~ msgstr "Ändring" + #~ msgid "Exception" #~ msgstr "Undantag" @@ -2295,6 +2246,9 @@ msgstr "" #~ msgid "max" #~ msgstr "max" +#~ msgid "Modification Date" +#~ msgstr "Ändringsdatum" + #~ msgid "Waiting" #~ msgstr "Väntar" @@ -2322,6 +2276,9 @@ msgstr "" #~ msgid "Close" #~ msgstr "Stäng" +#~ msgid "Description" +#~ msgstr "Beskrivning" + #~ msgid "Ask New Products" #~ msgstr "Be om nya produkter" @@ -2340,6 +2297,9 @@ msgstr "" #~ msgid "Paid ?" #~ msgstr "Betald?" +#~ msgid "Revision" +#~ msgstr "Revision" + #~ msgid "Compute Stock Minimum Rules Only" #~ msgstr "Beräkna minsta lagersaldo regler" @@ -2911,6 +2871,9 @@ msgstr "" #~ msgid "Product quantity" #~ msgstr "Product quantity" +#~ msgid "BoM" +#~ msgstr "BoM" + #~ msgid "" #~ "The list of operations (list of workcenters) to produce the finished " #~ "product. The routing is mainly used to compute workcenter costs during " @@ -2934,6 +2897,12 @@ msgstr "" #~ msgid "A Request for Quotation is created and sent to the supplier." #~ msgstr "A Request for Quotation is created and sent to the supplier." +#~ msgid "last indice" +#~ msgstr "last indice" + +#~ msgid "BoM Revisions" +#~ msgstr "BoM Revisions" + #~ msgid "When any procuere products, it comes into the prpcurement orders" #~ msgstr "When any procuere products, it comes into the prpcurement orders" diff --git a/addons/mrp/i18n/tlh.po b/addons/mrp/i18n/tlh.po index a1ec5465328..0ed57249ba6 100644 --- a/addons/mrp/i18n/tlh.po +++ b/addons/mrp/i18n/tlh.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -211,11 +211,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -470,11 +465,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -532,11 +522,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -817,11 +802,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1382,11 +1362,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1890,12 +1865,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1913,17 +1882,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2109,19 +2067,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" diff --git a/addons/mrp/i18n/tr.po b/addons/mrp/i18n/tr.po index 2e4f1a91a8c..c5d211a1b78 100644 --- a/addons/mrp/i18n/tr.po +++ b/addons/mrp/i18n/tr.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -225,11 +225,6 @@ msgid "For purchased material" msgstr "Satın alınan malzemeler için" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Düzeltme" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -406,6 +401,11 @@ msgid "" "sales person creates a sales order, he can relate it to several properties " "and OpenERP will automatically select the BoM to use according the needs." msgstr "" +"Aynı ürünü farklı yöntemlerle yapma durumunuz varsa, OpenERP özellikleri bir " +"ürünün üretimi için doğru ürün ağacını seçmek için kullanılır. Her Ürün " +"Ağacına çeşitli özellikler atayabilirsiniz. Bir satış elemanı bir satış " +"siparişi oluşturduğunda onu çeşitli özelliklerle ilişkilendirebilir ve " +"OpenERP gereksinimlere göre kullanmak üzere otomatikman Ürün Ağacını seçer." #. module: mrp #: help:mrp.production,picking_id:0 @@ -497,11 +497,6 @@ msgid "For Services." msgstr "Hizmetler için." #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Değiştirme Tarihi" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -561,11 +556,6 @@ msgid "Force Reservation" msgstr "Rezerve Et" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Yazar" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Stok Değeri" @@ -860,11 +850,6 @@ msgid "Ready to Produce" msgstr "Üretim için Hazır" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Değiştirme Adı" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1452,11 +1437,6 @@ msgid "Work Center Loads" msgstr "İş Merkezi Yükleri" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "Ürün Ağacı Revizyonu" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1992,12 +1972,6 @@ msgid "Orange Juice" msgstr "Portakal Suyu" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "BoM" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -2015,17 +1989,6 @@ msgid "Waiting Goods" msgstr "Malzeme Bekleniyor" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "son indis" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "BoM Revizyonları" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2216,19 +2179,6 @@ msgid "Change Product Qty" msgstr "Ürün Miktarını Değiştir" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Açıklama" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "Üretim panosu" @@ -2441,9 +2391,15 @@ msgstr "Sarf Edilecek Ürünler" #~ msgid "Make Procurement" #~ msgstr "Satınalma Yap" +#~ msgid "Modification Date" +#~ msgstr "Değiştirme Tarihi" + #~ msgid "Purchase Lead Time" #~ msgstr "Alış Tedarik Süresi" +#~ msgid "Author" +#~ msgstr "Yazar" + #~ msgid "Stockable Product Stock" #~ msgstr "Stoklanabilir Ürün Stoğ" @@ -2489,6 +2445,9 @@ msgstr "Sarf Edilecek Ürünler" #~ msgid "Security Days" #~ msgstr "Emniyet Günü" +#~ msgid "Modification name" +#~ msgstr "Değiştirme Adı" + #~ msgid "Exception" #~ msgstr "İstisnai" @@ -2682,6 +2641,9 @@ msgstr "Sarf Edilecek Ürünler" #~ msgid "New Production Order" #~ msgstr "Yeni Üretim Emri Oluştur" +#~ msgid "BoM Revisions" +#~ msgstr "BoM Revizyonları" + #~ msgid "Retry" #~ msgstr "Tekrar Dene" @@ -2715,6 +2677,9 @@ msgstr "Sarf Edilecek Ürünler" #~ msgid "Close Move at end" #~ msgstr "Son Hareketi Kapat" +#~ msgid "Description" +#~ msgstr "Açıklama" + #~ msgid "Running" #~ msgstr "Çalışıyor" @@ -3022,6 +2987,12 @@ msgstr "Sarf Edilecek Ürünler" #~ msgid "Image" #~ msgstr "Resim" +#~ msgid "BoM" +#~ msgstr "BoM" + +#~ msgid "last indice" +#~ msgstr "son indis" + #~ msgid "Configuration Progress" #~ msgstr "Kurulum Safhası" @@ -3040,6 +3011,9 @@ msgstr "Sarf Edilecek Ürünler" #~ "ve/veya çevrimleri gösterir. Rota gösterilirse, ürün emrinin üçüncü sekmesi " #~ "(iş merkezleri) otomatik olarak önceden doldurulacaktır." +#~ msgid "Bill of Material Revision" +#~ msgstr "Ürün Ağacı Revizyonu" + #, python-format #~ msgid "Work Cost of " #~ msgstr "İş Maliyeti " @@ -3095,3 +3069,6 @@ msgstr "Sarf Edilecek Ürünler" #~ msgid "Moves Created" #~ msgstr "Oluşturulan Hareketler" + +#~ msgid "Revision" +#~ msgstr "Düzeltme" diff --git a/addons/mrp/i18n/uk.po b/addons/mrp/i18n/uk.po index 163fab92b6a..6f09893d897 100644 --- a/addons/mrp/i18n/uk.po +++ b/addons/mrp/i18n/uk.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -211,11 +211,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "Ревізії" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -470,11 +465,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "Дата модифікації" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -532,11 +522,6 @@ msgid "Force Reservation" msgstr "Виконати резервування" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "Автор" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "Складська ціна" @@ -817,11 +802,6 @@ msgid "Ready to Produce" msgstr "Готовий до виробництва" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "Назва модифікації" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1382,11 +1362,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1890,12 +1865,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "СВ" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1913,17 +1882,6 @@ msgid "Waiting Goods" msgstr "Очікування вантажу" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "останній індекс" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "Ревізії СВ" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2109,19 +2067,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "Опис" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2232,6 +2177,9 @@ msgstr "" #~ msgid "Moves Created" #~ msgstr "Створені переміщення" +#~ msgid "Revision" +#~ msgstr "Ревізії" + #~ msgid "Routing Workcenters" #~ msgstr "Робочі центри технологічних маршрутів" @@ -2280,6 +2228,12 @@ msgstr "" #~ msgid "Print product price" #~ msgstr "Друк ціни продукту" +#~ msgid "Modification Date" +#~ msgstr "Дата модифікації" + +#~ msgid "Author" +#~ msgstr "Автор" + #~ msgid "Latest error" #~ msgstr "Остання помилка" @@ -2304,6 +2258,9 @@ msgstr "" #~ msgid "Procurement Lines" #~ msgstr "Радки постачання" +#~ msgid "Modification name" +#~ msgstr "Назва модифікації" + #~ msgid "Exception" #~ msgstr "Вилучений" @@ -2423,6 +2380,15 @@ msgstr "" #~ msgid "plus" #~ msgstr "plus" +#~ msgid "BoM" +#~ msgstr "СВ" + +#~ msgid "last indice" +#~ msgstr "останній індекс" + +#~ msgid "BoM Revisions" +#~ msgstr "Ревізії СВ" + #~ msgid "Retry" #~ msgstr "Повторити" @@ -2441,6 +2407,9 @@ msgstr "" #~ msgid "Close Move at end" #~ msgstr "Дія закриття в кінці" +#~ msgid "Description" +#~ msgstr "Опис" + #~ msgid "Running" #~ msgstr "Діючий" diff --git a/addons/mrp/i18n/vi.po b/addons/mrp/i18n/vi.po index 61357a82208..b11ade19365 100644 --- a/addons/mrp/i18n/vi.po +++ b/addons/mrp/i18n/vi.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -217,11 +217,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -476,11 +471,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -538,11 +528,6 @@ msgid "Force Reservation" msgstr "" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -823,11 +808,6 @@ msgid "Ready to Produce" msgstr "" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1388,11 +1368,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1896,12 +1871,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1919,17 +1888,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2115,19 +2073,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" diff --git a/addons/mrp/i18n/zh_CN.po b/addons/mrp/i18n/zh_CN.po index 0f584b45e31..bfeab10df7e 100644 --- a/addons/mrp/i18n/zh_CN.po +++ b/addons/mrp/i18n/zh_CN.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -212,11 +212,6 @@ msgid "For purchased material" msgstr "用于采购原料" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "版本" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -473,11 +468,6 @@ msgid "For Services." msgstr "用于服务。" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "修改日期" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -535,11 +525,6 @@ msgid "Force Reservation" msgstr "强制预留" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "作者" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "库存值" @@ -821,11 +806,6 @@ msgid "Ready to Produce" msgstr "准备生产" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "修改名称" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1390,11 +1370,6 @@ msgid "Work Center Loads" msgstr "工作中心负载" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "物料清单版本" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1912,12 +1887,6 @@ msgid "Orange Juice" msgstr "橙汁" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "物料清单" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1935,17 +1904,6 @@ msgid "Waiting Goods" msgstr "等待原料" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "最近指标" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "物料清单版本" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2133,19 +2091,6 @@ msgid "Change Product Qty" msgstr "改变产品数量" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "说明" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "生产控制台" @@ -2304,6 +2249,9 @@ msgstr "未投料数量" #~ msgid "max" #~ msgstr "最大" +#~ msgid "Author" +#~ msgstr "作者" + #~ msgid "Production orders" #~ msgstr "生产单" @@ -2358,6 +2306,12 @@ msgstr "未投料数量" #~ msgid "Canceled" #~ msgstr "已取消" +#~ msgid "BoM" +#~ msgstr "物料清单" + +#~ msgid "BoM Revisions" +#~ msgstr "物料清单版本" + #~ msgid "Retry" #~ msgstr "重试" @@ -2370,6 +2324,9 @@ msgstr "未投料数量" #~ msgid "Warehouse" #~ msgstr "仓库" +#~ msgid "Description" +#~ msgstr "说明" + #~ msgid "Running" #~ msgstr "运行中" @@ -2430,6 +2387,9 @@ msgstr "未投料数量" #~ msgid "Hours Cost" #~ msgstr "按小时计算的成本" +#~ msgid "Modification name" +#~ msgstr "修改名称" + #, python-format #~ msgid "SUBTOTAL" #~ msgstr "小计" @@ -2576,6 +2536,9 @@ msgstr "未投料数量" #~ msgid "You can see its bill of material which are used to make product" #~ msgstr "你可以看到生产产品使用的物料清单" +#~ msgid "Revision" +#~ msgstr "版本" + #~ msgid "Routing Workcenters" #~ msgstr "工艺路线的工作中心" @@ -2650,6 +2613,9 @@ msgstr "未投料数量" #~ msgid "Print product price" #~ msgstr "产品报价" +#~ msgid "Modification Date" +#~ msgstr "修改日期" + #~ msgid "If Procure method is Make to order and supply method is produce" #~ msgstr "如果获得方式是来自订单并且供应方式是生产" @@ -2893,6 +2859,9 @@ msgstr "未投料数量" #~ msgid "New Production Order" #~ msgstr "新的生产单" +#~ msgid "last indice" +#~ msgstr "最近指标" + #~ msgid "When any procuere products, it comes into the prpcurement orders" #~ msgstr "当生产任何产品时它生成产品需求单" @@ -3215,6 +3184,9 @@ msgstr "未投料数量" #~ msgid "January" #~ msgstr "一月" +#~ msgid "Bill of Material Revision" +#~ msgstr "物料清单版本" + #~ msgid "" #~ "Routing indicates all the workcenters used, for how long and/or cycles.If " #~ "Routing is indicated then,the third tab of a production order (workcenters) " diff --git a/addons/mrp/i18n/zh_HK.po b/addons/mrp/i18n/zh_HK.po index 34419ffcba6..387b470e108 100644 --- a/addons/mrp/i18n/zh_HK.po +++ b/addons/mrp/i18n/zh_HK.po @@ -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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -212,11 +212,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -471,11 +466,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "修改日期" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -533,11 +523,6 @@ msgid "Force Reservation" msgstr "強制預留" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -818,11 +803,6 @@ msgid "Ready to Produce" msgstr "就緒生產" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "修改名稱" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1383,11 +1363,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1891,12 +1866,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1914,17 +1883,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2110,19 +2068,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2374,6 +2319,9 @@ msgstr "" #~ msgid "Print product price" #~ msgstr "打印貨品價格" +#~ msgid "Modification Date" +#~ msgstr "修改日期" + #~ msgid "Make Procurement" #~ msgstr "生成採購計劃" @@ -2454,6 +2402,9 @@ msgstr "" #~ msgid "Security Days" #~ msgstr "保障天數" +#~ msgid "Modification name" +#~ msgstr "修改名稱" + #~ msgid "Exception" #~ msgstr "例外" diff --git a/addons/mrp/i18n/zh_TW.po b/addons/mrp/i18n/zh_TW.po index cba37db93e5..c5774616d94 100644 --- a/addons/mrp/i18n/zh_TW.po +++ b/addons/mrp/i18n/zh_TW.po @@ -13,8 +13,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 05:59+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-13 04:39+0000\n" +"X-Generator: Launchpad (build 15944)\n" #. module: mrp #: view:mrp.routing.workcenter:0 @@ -211,11 +211,6 @@ msgid "For purchased material" msgstr "" #. module: mrp -#: field:mrp.bom.revision,indice:0 -msgid "Revision" -msgstr "" - -#. module: mrp #: model:ir.actions.act_window,help:mrp.product_form_config_action msgid "" "Create a product form for everything you buy or sell. Specify a supplier if " @@ -470,11 +465,6 @@ msgid "For Services." msgstr "" #. module: mrp -#: field:mrp.bom.revision,date:0 -msgid "Modification Date" -msgstr "修改日期" - -#. module: mrp #: help:mrp.workcenter,costs_cycle_account_id:0 #: help:mrp.workcenter,costs_hour_account_id:0 msgid "" @@ -532,11 +522,6 @@ msgid "Force Reservation" msgstr "強制預留" #. module: mrp -#: field:mrp.bom.revision,author_id:0 -msgid "Author" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,value:0 msgid "Stock value" msgstr "" @@ -817,11 +802,6 @@ msgid "Ready to Produce" msgstr "就緒生產" #. module: mrp -#: field:mrp.bom.revision,name:0 -msgid "Modification name" -msgstr "修改名稱" - -#. module: mrp #: view:mrp.bom:0 #: view:mrp.production:0 msgid "Date" @@ -1382,11 +1362,6 @@ msgid "Work Center Loads" msgstr "" #. module: mrp -#: model:ir.model,name:mrp.model_mrp_bom_revision -msgid "Bill of Material Revision" -msgstr "" - -#. module: mrp #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." @@ -1890,12 +1865,6 @@ msgid "Orange Juice" msgstr "" #. module: mrp -#: field:mrp.bom.revision,bom_id:0 -#: field:procurement.order,bom_id:0 -msgid "BoM" -msgstr "" - -#. module: mrp #: model:ir.model,name:mrp.model_report_mrp_inout #: view:report.mrp.inout:0 msgid "Stock value variation" @@ -1913,17 +1882,6 @@ msgid "Waiting Goods" msgstr "" #. module: mrp -#: field:mrp.bom.revision,last_indice:0 -msgid "last indice" -msgstr "" - -#. module: mrp -#: field:mrp.bom,revision_ids:0 -#: view:mrp.bom.revision:0 -msgid "BoM Revisions" -msgstr "" - -#. module: mrp #: field:report.mrp.inout,date:0 #: field:report.workcenter.load,name:0 msgid "Week" @@ -2109,19 +2067,6 @@ msgid "Change Product Qty" msgstr "" #. module: mrp -#: view:mrp.bom.revision:0 -#: field:mrp.bom.revision,description:0 -#: view:mrp.property:0 -#: view:mrp.property.group:0 -#: field:mrp.routing,note:0 -#: view:mrp.routing.workcenter:0 -#: field:mrp.routing.workcenter,note:0 -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,note:0 -msgid "Description" -msgstr "" - -#. module: mrp #: view:board.board:0 msgid "Manufacturing board" msgstr "" @@ -2376,6 +2321,9 @@ msgstr "" #~ msgid "Print product price" #~ msgstr "打印貨品價格" +#~ msgid "Modification Date" +#~ msgstr "修改日期" + #~ msgid "Production Procure Products" #~ msgstr "以生產獲得貨品" @@ -2453,6 +2401,9 @@ msgstr "" #~ msgid "Security Days" #~ msgstr "保障天數" +#~ msgid "Modification name" +#~ msgstr "修改名稱" + #~ msgid "If Product type is service" #~ msgstr "如果產品類型是服務型" diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index c667daadbec..ae29ad324db 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -47,13 +47,13 @@ class mrp_workcenter(osv.osv): 'time_start': fields.float('Time before prod.', help="Time in hours for the setup."), 'time_stop': fields.float('Time after prod.', help="Time in hours for the cleaning."), 'costs_hour': fields.float('Cost per hour', help="Specify Cost of Work Center per hour."), - 'costs_hour_account_id': fields.many2one('account.analytic.account', 'Hour Account', domain=[('type','<>','view')], + 'costs_hour_account_id': fields.many2one('account.analytic.account', 'Hour Account', domain=[('type','!=','view')], help="Fill this only if you want automatic analytic accounting entries on production orders."), 'costs_cycle': fields.float('Cost per cycle', help="Specify Cost of Work Center per cycle."), - 'costs_cycle_account_id': fields.many2one('account.analytic.account', 'Cycle Account', domain=[('type','<>','view')], + 'costs_cycle_account_id': fields.many2one('account.analytic.account', 'Cycle Account', domain=[('type','!=','view')], help="Fill this only if you want automatic analytic accounting entries on production orders."), 'costs_journal_id': fields.many2one('account.analytic.journal', 'Analytic Journal'), - 'costs_general_account_id': fields.many2one('account.account', 'General Account', domain=[('type','<>','view')]), + 'costs_general_account_id': fields.many2one('account.account', 'General Account', domain=[('type','!=','view')]), 'resource_id': fields.many2one('resource.resource','Resource', ondelete='cascade', required=True), 'product_id': fields.many2one('product.product','Work Center Product', help="Fill this product to easily track your production costs in the analytic accounting."), } @@ -214,7 +214,6 @@ class mrp_bom(osv.osv): 'bom_id': fields.many2one('mrp.bom', 'Parent BoM', ondelete='cascade', select=True), 'routing_id': fields.many2one('mrp.routing', 'Routing', help="The list of operations (list of work centers) to produce the finished product. The routing is mainly used to compute work center costs during operations and to plan future loads on work centers based on production planning."), 'property_ids': fields.many2many('mrp.property', 'mrp_bom_property_rel', 'bom_id','property_id', 'Properties'), - 'revision_ids': fields.one2many('mrp.bom.revision', 'bom_id', 'BoM Revisions'), 'child_complete_ids': fields.function(_child_compute, relation='mrp.bom', string="BoM Hierarchy", type='many2many'), 'company_id': fields.many2one('res.company','Company',required=True), } @@ -374,26 +373,6 @@ class mrp_bom(osv.osv): mrp_bom() -class mrp_bom_revision(osv.osv): - _name = 'mrp.bom.revision' - _description = 'Bill of Material Revision' - _columns = { - 'name': fields.char('Modification name', size=64, required=True), - 'description': fields.text('Description'), - 'date': fields.date('Modification Date'), - 'indice': fields.char('Revision', size=16), - 'last_indice': fields.char('last indice', size=64), - 'author_id': fields.many2one('res.users', 'Author'), - 'bom_id': fields.many2one('mrp.bom', 'BoM', select=True), - } - - _defaults = { - 'author_id': lambda x, y, z, c: z, - 'date': fields.date.context_today, - } - -mrp_bom_revision() - def rounding(f, r): import math if not r: @@ -457,41 +436,59 @@ class mrp_production(osv.osv): return dest_location_id.id _columns = { - 'name': fields.char('Reference', size=64, required=True), - 'origin': fields.char('Source Document', size=64, help="Reference of the document that generated this production order request."), - 'priority': fields.selection([('0','Not urgent'),('1','Normal'),('2','Urgent'),('3','Very Urgent')], 'Priority', select=True), - - 'product_id': fields.many2one('product.product', 'Product', required=True, readonly=True, states={'draft':[('readonly',False)]}), - 'product_qty': fields.float('Product Quantity', digits_compute=dp.get_precision('Product Unit of Measure'), required=True, states={'draft':[('readonly',False)]}, readonly=True), - 'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True, states={'draft':[('readonly',False)]}, readonly=True), - 'product_uos_qty': fields.float('Product UoS Quantity', states={'draft':[('readonly',False)]}, readonly=True), - 'product_uos': fields.many2one('product.uom', 'Product UoS', states={'draft':[('readonly',False)]}, readonly=True), + 'name': fields.char('Reference', size=64, required=True, readonly=True, states={'draft': [('readonly', False)]}), + 'origin': fields.char('Source Document', size=64, readonly=True, states={'draft': [('readonly', False)]}, + help="Reference of the document that generated this production order request."), + 'priority': fields.selection([('0','Not urgent'),('1','Normal'),('2','Urgent'),('3','Very Urgent')], 'Priority', + select=True, readonly=True, states=dict.fromkeys(['draft', 'confirmed'], [('readonly', False)])), + + 'product_id': fields.many2one('product.product', 'Product', required=True, readonly=True, states={'draft': [('readonly', False)]}), + 'product_qty': fields.float('Product Quantity', digits_compute=dp.get_precision('Product Unit of Measure'), required=True, readonly=True, states={'draft':[('readonly',False)]}), + 'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True, readonly=True, states={'draft': [('readonly', False)]}), + 'product_uos_qty': fields.float('Product UoS Quantity', readonly=True, states={'draft': [('readonly', False)]}), + 'product_uos': fields.many2one('product.uom', 'Product UoS', readonly=True, states={'draft': [('readonly', False)]}), 'location_src_id': fields.many2one('stock.location', 'Raw Materials Location', required=True, - readonly=True, states={'draft':[('readonly',False)]}, help="Location where the system will look for components."), + readonly=True, states={'draft':[('readonly',False)]}, + help="Location where the system will look for components."), 'location_dest_id': fields.many2one('stock.location', 'Finished Products Location', required=True, - readonly=True, states={'draft':[('readonly',False)]}, help="Location where the system will stock the finished products."), + readonly=True, states={'draft':[('readonly',False)]}, + help="Location where the system will stock the finished products."), 'date_planned_end': fields.function(_production_date_end, type='date', string='Scheduled End Date'), 'date_planned_date': fields.function(_production_date, type='date', string='Scheduled Date'), - 'date_planned': fields.datetime('Scheduled Date', required=True, select=1), - 'date_start': fields.datetime('Start Date', select=True), - 'date_finished': fields.datetime('End Date', select=True), + 'date_planned': fields.datetime('Scheduled Date', required=True, select=1, readonly=True, states={'draft':[('readonly',False)]}), + 'date_start': fields.datetime('Start Date', select=True, readonly=True), + 'date_finished': fields.datetime('End Date', select=True, readonly=True), 'bom_id': fields.many2one('mrp.bom', 'Bill of Material', domain=[('bom_id','=',False)], readonly=True, states={'draft':[('readonly',False)]}), - 'routing_id': fields.many2one('mrp.routing', string='Routing', on_delete='set null', readonly=True, states={'draft':[('readonly',False)]}, help="The list of operations (list of work centers) to produce the finished product. The routing is mainly used to compute work center costs during operations and to plan future loads on work centers based on production plannification."), + 'routing_id': fields.many2one('mrp.routing', string='Routing', on_delete='set null', readonly=True, states={'draft':[('readonly',False)]}, + help="The list of operations (list of work centers) to produce the finished product. The routing is mainly used to compute work center costs during operations and to plan future loads on work centers based on production plannification."), 'picking_id': fields.many2one('stock.picking', 'Picking List', readonly=True, ondelete="restrict", help="This is the Internal Picking List that brings the finished product to the production plan"), 'move_prod_id': fields.many2one('stock.move', 'Product Move', readonly=True), - 'move_lines': fields.many2many('stock.move', 'mrp_production_move_ids', 'production_id', 'move_id', 'Products to Consume', domain=[('state','not in', ('done', 'cancel'))], states={'done':[('readonly',True)]}), - 'move_lines2': fields.many2many('stock.move', 'mrp_production_move_ids', 'production_id', 'move_id', 'Consumed Products', domain=[('state','in', ('done', 'cancel'))]), - 'move_created_ids': fields.one2many('stock.move', 'production_id', 'Products to Produce', domain=[('state','not in', ('done', 'cancel'))], states={'done':[('readonly',True)]}), - 'move_created_ids2': fields.one2many('stock.move', 'production_id', 'Produced Products', domain=[('state','in', ('done', 'cancel'))]), - 'product_lines': fields.one2many('mrp.production.product.line', 'production_id', 'Scheduled goods'), - 'workcenter_lines': fields.one2many('mrp.production.workcenter.line', 'production_id', 'Work Centers Utilisation'), - 'state': fields.selection([('draft','New'),('cancel','Cancelled'),('picking_except', 'Picking Exception'),('confirmed','Waiting Goods'),('ready','Ready to Produce'),('in_production','Production Started'),('done','Done')],'Status', readonly=True, - help='When the production order is created the state is set to \'Draft\'.\n If the order is confirmed the state is set to \'Waiting Goods\'.\n If any exceptions are there, the state is set to \'Picking Exception\'.\ - \nIf the stock is available then the state is set to \'Ready to Produce\'.\n When the production gets started then the state is set to \'In Production\'.\n When the production is over, the state is set to \'Done\'.'), + 'move_lines': fields.many2many('stock.move', 'mrp_production_move_ids', 'production_id', 'move_id', 'Products to Consume', + domain=[('state','not in', ('done', 'cancel'))], readonly=True, states={'draft':[('readonly',False)]}), + 'move_lines2': fields.many2many('stock.move', 'mrp_production_move_ids', 'production_id', 'move_id', 'Consumed Products', + domain=[('state','in', ('done', 'cancel'))], readonly=True, states={'draft':[('readonly',False)]}), + 'move_created_ids': fields.one2many('stock.move', 'production_id', 'Products to Produce', + domain=[('state','not in', ('done', 'cancel'))], readonly=True, states={'draft':[('readonly',False)]}), + 'move_created_ids2': fields.one2many('stock.move', 'production_id', 'Produced Products', + domain=[('state','in', ('done', 'cancel'))], readonly=True, states={'draft':[('readonly',False)]}), + 'product_lines': fields.one2many('mrp.production.product.line', 'production_id', 'Scheduled goods', + readonly=True, states={'draft':[('readonly',False)]}), + 'workcenter_lines': fields.one2many('mrp.production.workcenter.line', 'production_id', 'Work Centers Utilisation', + readonly=True, states={'draft':[('readonly',False)]}), + 'state': fields.selection( + [('draft', 'New'), ('cancel', 'Cancelled'), ('picking_except', 'Picking Exception'), ('confirmed', 'Waiting Goods'), + ('ready', 'Ready to Produce'), ('in_production', 'Production Started'), ('done', 'Done')], + string='Status', readonly=True, + help="When the production order is created the state is set to 'Draft'.\n\ + If the order is confirmed the state is set to 'Waiting Goods'.\n\ + If any exceptions are there, the state is set to 'Picking Exception'.\n\ + If the stock is available then the state is set to 'Ready to Produce'.\n\ + When the production gets started then the state is set to 'In Production'.\n\ + When the production is over, the state is set to 'Done'."), 'hour_total': fields.function(_production_calc, type='float', string='Total Hours', multi='workorder', store=True), 'cycle_total': fields.function(_production_calc, type='float', string='Total Cycles', multi='workorder', store=True), 'user_id':fields.many2one('res.users', 'Responsible'), @@ -728,7 +725,7 @@ class mrp_production(osv.osv): produced_qty = 0 for produced_product in production.move_created_ids2: - if (produced_product.scrapped) or (produced_product.product_id.id <> production.product_id.id): + if (produced_product.scrapped) or (produced_product.product_id.id != production.product_id.id): continue produced_qty += produced_product.product_qty if production_mode in ['consume','consume_produce']: @@ -935,7 +932,7 @@ class mrp_production(osv.osv): # If usage of routing location is a internal, make outgoing shipment otherwise internal shipment if production.bom_id.routing_id and production.bom_id.routing_id.location_id: routing_loc = production.bom_id.routing_id.location_id - if routing_loc.usage <> 'internal': + if routing_loc.usage != 'internal': pick_type = 'out' partner_id = routing_loc.partner_id and routing_loc.partner_id.id or False diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index 8121f6e84d1..8e0550a0c52 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -345,35 +345,35 @@ <field name="model">mrp.bom</field> <field name="arch" type="xml"> <form string="Bill of Material" version="7.0"> - <label for="product_id" string="Product and Quantity" class="oe_edit_only"/> - <h1> - <field name="product_id" on_change="onchange_product_id(product_id, name, context)" class="oe_inline"/>: - <field name="product_qty" class="oe_inline"/> - <field name="product_uom" class="oe_inline" groups="product.group_uom"/> - </h1> - <div groups="mrp.group_mrp_routings"> - <label for="routing_id" class="oe_edit_only"/> - <h2><field name="routing_id" class="oe_inline"/></h2> - </div> <group> <group> - <field name="name"/> - <field name="code" string="Reference"/> + <field name="product_id" on_change="onchange_product_id(product_id, name, context)" class="oe_inline"/> + <label for="product_qty" string="Quantity"/> + <div> + <field name="product_qty" class="oe_inline"/> + <field name="product_uom" class="oe_inline" groups="product.group_uom"/> + </div> + <label for="product_uos_qty" groups="product.group_uos"/> + <div groups="product.group_uos" > + <field name="product_uos_qty" + class="oe_inline"/> + <label string="-" attrs="{'invisible':[('product_uos','=',False)]}" class="oe_inline"/> + <field name="product_uos" class="oe_inline"/> + </div> + <div groups="mrp.group_mrp_routings"> + <label for="routing_id" class="oe_edit_only"/> + <h2><field name="routing_id" class="oe_inline"/></h2> + </div> </group> <group> + <field name="name" class="oe_inline"/> + <field name="code" string="Reference"/> <field name="type"/> <p colspan="2" class="oe_grey" attrs="{'invisible': [('type','=','normal')]}"> When processing a sale order for this product, the delivery order will contain the raw materials, instead of the finished product. </p> <field name="company_id" groups="base.group_multi_company" widget="selection"/> - <label for="product_uos_qty" groups="product.group_uos"/> - <div groups="product.group_uos" > - <field name="product_uos_qty" - class="oe_inline"/> - <label string="-" attrs="{'invisible':[('product_uos','=',False)]}" class="oe_inline"/> - <field name="product_uos" class="oe_inline"/> - </div> </group> </group> <notebook> @@ -389,9 +389,6 @@ </tree> </field> </page> - <page string="Revisions" attrs="{'invisible': [('bom_id','!=',False)]}"> - <field name="revision_ids"/> - </page> <page string="Properties" groups="product.group_mrp_properties"> <group> <group> @@ -411,6 +408,10 @@ <field name="property_ids" widget="many2many_tags"/> </page> </notebook> + <div class="oe_chatter"> + <field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/> + <field name="message_follower_ids" widget="mail_followers"/> + </div> </form> </field> </record> @@ -543,35 +544,6 @@ <field eval="'ir.actions.act_window,'+str(action2)" name="value"/> </record> - <record id="mrp_bom_revision_tree" model="ir.ui.view"> - <field name="name">mrp.bom.revision</field> - <field name="model">mrp.bom.revision</field> - <field name="arch" type="xml"> - <tree string="BoM Revisions"> - <field name="indice"/> - <field name="author_id"/> - <field name="date"/> - <field colspan="4" name="name"/> - </tree> - </field> - </record> - <record id="mrp_bom_revision_form" model="ir.ui.view"> - <field name="name">mrp.bom.revision</field> - <field name="model">mrp.bom.revision</field> - <field name="arch" type="xml"> - <form string="BoM Revisions" version="7.0"> - <group col="4"> - <field name="name"/> - <field name="indice"/> - <field name="date"/> - <field name="author_id" readonly="1"/> - </group> - <separator string="Description"/> - <field name="description"/> - </form> - </field> - </record> - <!-- Production Management --> @@ -653,7 +625,7 @@ </div> <group> <group> - <field name="product_id" on_change="product_id_change(product_id)" domain="[('bom_ids','<>',False),('bom_ids.bom_id','=',False)]" class="oe_inline"/> + <field name="product_id" on_change="product_id_change(product_id)" domain="[('bom_ids','!=',False),('bom_ids.bom_id','=',False)]" class="oe_inline" context='{"default_supply_method":"produce", "default_type": "product"}'/> <label for="product_qty"/> <div> <field name="product_qty" class="oe_inline"/> @@ -661,7 +633,7 @@ <button type="action" icon="terp-accessories-archiver+" name="%(mrp.action_change_production_qty)d" - string="(Update)" states="ready,confirmed" class="oe_edit_only oe_link"/> + string="(Update)" states="confirmed" class="oe_edit_only oe_link"/> </div> <label for="product_uos_qty" groups="product.group_uos"/> <div groups="product.group_uos"> @@ -686,12 +658,12 @@ <page string="Consumed Products"> <group> <group string="Products to Consume"> - <field name="move_lines" domain="[('state','<>', ('done', 'cancel'))]" nolabel="1"> + <field name="move_lines" nolabel="1"> <tree colors="blue:state == 'draft';black:state in ('picking_except','confirmed','ready','in_production');gray:state in ('cancel','done') " string="Products to Consume"> <field name="product_id"/> <field name="product_qty" string="Quantity"/> <field name="product_uom" string="Unit of Measure" groups="product.group_uom"/> - <field name="location_id" string="Source Loc." groups="stock.group_locations"/> + <field name="prodlot_id" groups="stock.group_production_lot"/> <field name="state" invisible="1"/> <button name="%(stock.move_consume)d" string="Consume Products" type="action" @@ -701,7 +673,8 @@ name="%(stock.track_line)d" string="Split in Serial Numbers" type="action" icon="gtk-justify-fill" - states="draft,waiting,confirmed,assigned"/> + states="draft,waiting,confirmed,assigned" + groups="stock.group_production_lot"/> <button name="%(stock.move_scrap)d" string="Scrap Products" type="action" icon="gtk-convert" context="{'scrap': True}" @@ -710,12 +683,12 @@ </field> </group> <group string="Consumed Product"> - <field name="move_lines2" domain="[('state','in', ('done', 'cancel'))]" nolabel="1"> + <field name="move_lines2" nolabel="1"> <tree colors="red:scrapped==True;blue:state == 'draft';black:state in('picking_except','confirmed','ready','in_production');gray:state == 'cancel' " string="Consumed Products" editable="bottom"> <field name="product_id" readonly="1"/> <field name="product_qty" readonly="1"/> <field name="product_uom" readonly="1" string="Unit of Measure" groups="product.group_uom"/> - <field name="prodlot_id" context="{'product_id': product_id}"/> + <field name="prodlot_id" context="{'product_id': product_id}" groups="stock.group_production_lot"/> <field name="state" invisible="1"/> <field name="scrapped" invisible="1"/> <button @@ -731,7 +704,7 @@ <page string="Finished Products"> <group> <group string="Products to Produce"> - <field name="move_created_ids" domain="[('state','<>', ('done', 'cancel'))]" nolabel="1"> + <field name="move_created_ids" nolabel="1"> <tree string="Products to Finish"> <field name="product_id"/> <field name="product_qty"/> @@ -749,13 +722,13 @@ </field> </group> <group string="Produced Products"> - <field name="move_created_ids2" domain="[('state','in', ('done', 'cancel'))]" nolabel="1"> + <field name="move_created_ids2" nolabel="1"> <tree colors="red:scrapped==True;blue:state == 'draft';black:state in('picking_except','confirmed','ready','in_production');gray:state in('cancel','done') " string="Finished Products"> <field name="product_id" readonly="1"/> <field name="product_qty" readonly="1"/> <field name="product_uom" readonly="1" string="Unit of Measure" groups="product.group_uom"/> <field name="location_dest_id" readonly="1" string="Destination Loc." widget="selection" groups="stock.group_locations"/> - <field name="prodlot_id" context="{'product_id': product_id}"/> + <field name="prodlot_id" context="{'product_id': product_id}" groups="stock.group_production_lot"/> <field name="scrapped" invisible="1"/> <field name="state" invisible="1"/> <button name="%(stock.track_line)d" diff --git a/addons/mrp/res_config.py b/addons/mrp/res_config.py index 555010c2be1..34717d985c0 100644 --- a/addons/mrp/res_config.py +++ b/addons/mrp/res_config.py @@ -65,7 +65,7 @@ class mrp_config_settings(osv.osv_memory): help="""Routings allow you to create and manage the manufacturing operations that should be followed within your work centers in order to produce a product. They are attached to bills of materials that will define the required raw materials."""), - 'group_mrp_properties': fields.boolean("allow several bill of materials per products", + 'group_mrp_properties': fields.boolean("allow several bill of materials per products using properties", implied_group='product.group_mrp_properties', help="""The selection of the right Bill of Material to use will depend on the properties specified on the sale order and the Bill of Material."""), 'module_product_manufacturer': fields.boolean("define manufacturers on products ", diff --git a/addons/mrp/res_config_view.xml b/addons/mrp/res_config_view.xml index 4d94e611fdf..16ebbdcb05b 100644 --- a/addons/mrp/res_config_view.xml +++ b/addons/mrp/res_config_view.xml @@ -12,6 +12,9 @@ <field name="type">automatic</field> <field name="sequence">100</field> </record> + <record id="purchase.todo_open_purchase_menu" model="ir.actions.todo"> + <field name="state">done</field> + </record> </data> <data> <record id="view_mrp_config" model="ir.ui.view"> diff --git a/addons/mrp/security/ir.model.access.csv b/addons/mrp/security/ir.model.access.csv index 5d254f86b4e..d7213a1c689 100644 --- a/addons/mrp/security/ir.model.access.csv +++ b/addons/mrp/security/ir.model.access.csv @@ -3,7 +3,6 @@ access_mrp_workcenter,mrp.workcenter,model_mrp_workcenter,mrp.group_mrp_user,1,0 access_mrp_routing,mrp.routing,model_mrp_routing,mrp.group_mrp_user,1,0,0,0
access_mrp_routing_workcenter,mrp.routing.workcenter,model_mrp_routing_workcenter,mrp.group_mrp_user,1,0,0,0
access_mrp_bom,mrp.bom,model_mrp_bom,group_mrp_user,1,0,0,0
-access_mrp_bom_revision,mrp.bom.revision,model_mrp_bom_revision,group_mrp_user,1,0,0,0
access_mrp_production,mrp.production user,model_mrp_production,mrp.group_mrp_user,1,1,1,1
access_mrp_production_salesman,mrp.production salesman,model_mrp_production,base.group_sale_salesman,1,1,1,0
access_mrp_production_product_line_salesman,mrp.production.product.line salesman,model_mrp_production_product_line,base.group_sale_salesman,1,0,1,0
@@ -16,7 +15,6 @@ access_mrp_workcenter_manager,mrp.workcenter.manager,model_mrp_workcenter,mrp.gr access_mrp_routing_manager,mrp.routing.manager,model_mrp_routing,mrp.group_mrp_manager,1,1,1,1
access_mrp_routing_workcenter_manager,mrp.routing.workcenter.manager,model_mrp_routing_workcenter,mrp.group_mrp_manager,1,1,1,1
access_mrp_bom_manager,mrp.bom.manager,model_mrp_bom,mrp.group_mrp_manager,1,1,1,1
-access_mrp_bom_revision_manager,mrp.bom.revision.manager,model_mrp_bom_revision,mrp.group_mrp_manager,1,1,1,1
access_stock_location_mrp_worker,stock.location mrp_worker,stock.model_stock_location,mrp.group_mrp_user,1,0,0,0
access_stock_move_mrp_worker,stock.move mrp_worker,stock.model_stock_move,mrp.group_mrp_user,1,1,1,0
access_stock_picking_mrp_worker,stock.picking mrp_worker,stock.model_stock_picking,mrp.group_mrp_user,1,1,1,1
diff --git a/addons/mrp/test/order_process.yml b/addons/mrp/test/order_process.yml index f8a2ebfbf99..a714035a9cd 100644 --- a/addons/mrp/test/order_process.yml +++ b/addons/mrp/test/order_process.yml @@ -71,7 +71,7 @@ partner_id = False if order.bom_id.routing_id and order.bom_id.routing_id.location_id: routing_loc = order.bom_id.routing_id.location_id - if routing_loc.usage <> 'internal': + if routing_loc.usage != 'internal': pick_type = 'out' partner_id = routing_loc.partner_id and routing_loc.partner_id.id or False routing_loc = routing_loc.id diff --git a/addons/mrp/wizard/change_production_qty.py b/addons/mrp/wizard/change_production_qty.py index 6c021c069ab..9be34b6bd1e 100644 --- a/addons/mrp/wizard/change_production_qty.py +++ b/addons/mrp/wizard/change_production_qty.py @@ -68,12 +68,12 @@ class change_production_qty(osv.osv_memory): assert record_id, _('Active Id not found') prod_obj = self.pool.get('mrp.production') bom_obj = self.pool.get('mrp.bom') + move_obj = self.pool.get('stock.move') for wiz_qty in self.browse(cr, uid, ids, context=context): prod = prod_obj.browse(cr, uid, record_id, context=context) prod_obj.write(cr, uid, [prod.id], {'product_qty': wiz_qty.product_qty}) prod_obj.action_compute(cr, uid, [prod.id]) - move_lines_obj = self.pool.get('stock.move') for move in prod.move_lines: bom_point = prod.bom_id bom_id = prod.bom_id.id @@ -88,12 +88,17 @@ class change_production_qty(osv.osv_memory): raise osv.except_osv(_('Error!'), _("Cannot find bill of material for this product.")) factor = prod.product_qty * prod.product_uom.factor / bom_point.product_uom.factor - res = bom_obj._bom_explode(cr, uid, bom_point, factor / bom_point.product_qty, []) - for r in res[0]: + product_details, workcenter_details = \ + bom_obj._bom_explode(cr, uid, bom_point, factor / bom_point.product_qty, []) + product_move = dict((mv.product_id.id, mv.id) for mv in prod.picking_id.move_lines) + for r in product_details: if r['product_id'] == move.product_id.id: - move_lines_obj.write(cr, uid, [move.id], {'product_qty' : r['product_qty']}) + move_obj.write(cr, uid, [move.id], {'product_qty': r['product_qty']}) + if r['product_id'] in product_move: + move_obj.write(cr, uid, [product_move[r['product_id']]], {'product_qty': r['product_qty']}) + if prod.move_prod_id: + move_obj.write(cr, uid, [prod.move_prod_id.id], {'product_qty' : wiz_qty.product_qty}) self._update_product_to_produce(cr, uid, prod, wiz_qty.product_qty, context=context) - return {} change_production_qty() diff --git a/addons/mrp_subproduct/i18n/nb.po b/addons/mrp_subproduct/i18n/nb.po new file mode 100644 index 00000000000..49292481c49 --- /dev/null +++ b/addons/mrp_subproduct/i18n/nb.po @@ -0,0 +1,132 @@ +# 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-10 13:49+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-11 04:50+0000\n" +"X-Generator: Launchpad (build 15924)\n" + +#. module: mrp_subproduct +#: field:mrp.subproduct,product_id:0 +msgid "Product" +msgstr "Produkt" + +#. module: mrp_subproduct +#: selection:mrp.subproduct,subproduct_type:0 +msgid "Fixed" +msgstr "Fast" + +#. module: mrp_subproduct +#: sql_constraint:mrp.bom:0 +msgid "" +"All product quantities must be greater than 0.\n" +"You should install the mrp_subproduct module if you want to manage extra " +"products on BoMs !" +msgstr "" +"Alle produktantall må være større en 0.\n" +"Du bør installere modulen mrp:subproduct hvis du vil håndtere ekstra " +"produkter på Materiallister !" + +#. module: mrp_subproduct +#: view:mrp.bom:0 +msgid "sub products" +msgstr "Sub produkter" + +#. module: mrp_subproduct +#: model:ir.model,name:mrp_subproduct.model_mrp_production +msgid "Manufacturing Order" +msgstr "Produksjonsordre" + +#. module: mrp_subproduct +#: constraint:mrp.bom:0 +msgid "BoM line product should not be same as BoM product." +msgstr "Bom linje produktet bør ikke være det samme som BOM produkt." + +#. module: mrp_subproduct +#: view:mrp.bom:0 +msgid "Sub Products" +msgstr "Sub produkter." + +#. module: mrp_subproduct +#: field:mrp.subproduct,subproduct_type:0 +msgid "Quantity Type" +msgstr "Antall Type." + +#. module: mrp_subproduct +#: model:ir.model,name:mrp_subproduct.model_mrp_bom +msgid "Bill of Material" +msgstr "Materialliste" + +#. module: mrp_subproduct +#: field:mrp.subproduct,product_qty:0 +msgid "Product Qty" +msgstr "Produkt Ant" + +#. module: mrp_subproduct +#: field:mrp.subproduct,product_uom:0 +msgid "Product UOM" +msgstr "Produkt Enhet" + +#. module: mrp_subproduct +#: field:mrp.subproduct,bom_id:0 +msgid "BoM" +msgstr "Materialliste" + +#. module: mrp_subproduct +#: sql_constraint:mrp.production:0 +msgid "Reference must be unique per Company!" +msgstr "Referanse må være unik pr firma!" + +#. module: mrp_subproduct +#: field:mrp.bom,sub_products:0 +msgid "sub_products" +msgstr "Sub_produkter." + +#. module: mrp_subproduct +#: selection:mrp.subproduct,subproduct_type:0 +msgid "Variable" +msgstr "Variabel" + +#. module: mrp_subproduct +#: model:ir.model,name:mrp_subproduct.model_mrp_subproduct +msgid "Sub Product" +msgstr "Sub produkt." + +#. module: mrp_subproduct +#: constraint:mrp.production:0 +msgid "Order quantity cannot be negative or zero!" +msgstr "Ordrekvantum kan ikke være negativt eller null!" + +#. module: mrp_subproduct +#: help:mrp.subproduct,subproduct_type:0 +msgid "" +"Define how the quantity of subproducts will be set on the production orders " +"using this BoM. 'Fixed' depicts a situation where the quantity of created " +"subproduct is always equal to the quantity set on the BoM, regardless of how " +"many are created in the production order. By opposition, 'Variable' means " +"that the quantity will be computed as '(quantity of subproduct set on the " +"BoM / quantity of manufactured product set on the BoM * quantity of " +"manufactured product in the production order.)'" +msgstr "" +"Definere hvordan mengden av delkomponenter vil bli satt på produksjonsordrer " +"ved hjelp av denne BOM. 'Fast' beskriver en situasjon der mengden av laget " +"subproduct er alltid lik mengde sett på BOM, uavhengig av hvor mange som er " +"skapt i produksjonen rekkefølge. Av motstand, 'variabel' betyr at mengden " +"vil bli beregnet som '(mengde subproduct satt på BOM / mengde produsert " +"produkt satt på BOM * mengde produsert produkt i produksjonen rekkefølge.)'" + +#. module: mrp_subproduct +#: constraint:mrp.bom:0 +msgid "Error ! You cannot create recursive BoM." +msgstr "Feil! Du kan ikke lage en rekursive BoM." diff --git a/addons/pad/i18n/nb.po b/addons/pad/i18n/nb.po new file mode 100644 index 00000000000..48977b7d1f8 --- /dev/null +++ b/addons/pad/i18n/nb.po @@ -0,0 +1,58 @@ +# 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-10 13:38+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-11 04:50+0000\n" +"X-Generator: Launchpad (build 15924)\n" + +#. module: pad +#: sql_constraint:res.company:0 +msgid "The company name must be unique !" +msgstr "Firmanavn må være unikt !" + +#. module: pad +#: help:res.company,pad_url_template:0 +msgid "Template used to generate pad URL." +msgstr "Mal som brukes til å generere pad URL." + +#. module: pad +#: model:ir.model,name:pad.model_res_company +msgid "Companies" +msgstr "Firmaer" + +#. module: pad +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "Feil ! Du kan ikke lage rekursive firmaer." + +#. module: pad +#: model:ir.model,name:pad.model_ir_attachment +msgid "ir.attachment" +msgstr "ir.vedlegg" + +#. module: pad +#: view:res.company:0 +msgid "Pad" +msgstr "Pad" + +#. module: pad +#: field:res.company,pad_url_template:0 +msgid "Pad URL Template" +msgstr "Pad URL Mal." + +#. openerp-web +#: /home/odo/repositories/addons/trunk/pad/static/src/xml/pad.xml:9 +msgid "Add Pad" +msgstr "Legg til Pad." diff --git a/addons/pad_project/i18n/nb.po b/addons/pad_project/i18n/nb.po new file mode 100644 index 00000000000..baa35cb2392 --- /dev/null +++ b/addons/pad_project/i18n/nb.po @@ -0,0 +1,38 @@ +# 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-10 13:38+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-11 04:50+0000\n" +"X-Generator: Launchpad (build 15924)\n" + +#. module: pad_project +#: constraint:project.task:0 +msgid "Error ! Task end-date must be greater then task start-date" +msgstr "Feil! Oppgave sluttdato må være større enn oppgave startdato" + +#. module: pad_project +#: model:ir.model,name:pad_project.model_project_task +msgid "Task" +msgstr "Oppgave" + +#. module: pad_project +#: view:project.task:0 +msgid "Pad" +msgstr "Pad" + +#. module: pad_project +#: constraint:project.task:0 +msgid "Error ! You cannot create recursive tasks." +msgstr "Feil! Du kan ikke lage en rekursive oppgaver." diff --git a/addons/pad_project/i18n/tr.po b/addons/pad_project/i18n/tr.po new file mode 100644 index 00000000000..a19889de838 --- /dev/null +++ b/addons/pad_project/i18n/tr.po @@ -0,0 +1,38 @@ +# Turkish 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 20:06+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Turkish <tr@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: pad_project +#: constraint:project.task:0 +msgid "Error ! Task end-date must be greater then task start-date" +msgstr "Hata! görev bitiş tarihi başlangıç tarihinden sonra olmalı" + +#. module: pad_project +#: model:ir.model,name:pad_project.model_project_task +msgid "Task" +msgstr "Görev" + +#. module: pad_project +#: view:project.task:0 +msgid "Pad" +msgstr "" + +#. module: pad_project +#: constraint:project.task:0 +msgid "Error ! You cannot create recursive tasks." +msgstr "Hata ! Yinelenen görevler oluşturamazsınız." diff --git a/addons/plugin/i18n/nb.po b/addons/plugin/i18n/nb.po new file mode 100644 index 00000000000..0ef79314ec0 --- /dev/null +++ b/addons/plugin/i18n/nb.po @@ -0,0 +1,23 @@ +# 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-10 13:40+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-11 04:50+0000\n" +"X-Generator: Launchpad (build 15924)\n" + +#. module: plugin +#: model:ir.model,name:plugin.model_plugin_handler +msgid "plugin.handler" +msgstr "Plugg.behandleren" diff --git a/addons/plugin_outlook/i18n/nb.po b/addons/plugin_outlook/i18n/nb.po new file mode 100644 index 00000000000..0bb6f6bd40f --- /dev/null +++ b/addons/plugin_outlook/i18n/nb.po @@ -0,0 +1,78 @@ +# 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-09 00:36+0000\n" +"PO-Revision-Date: 2012-09-10 13:42+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-11 04:50+0000\n" +"X-Generator: Launchpad (build 15924)\n" + +#. module: plugin_outlook +#: view:outlook.installer:0 +msgid "" +"This plug-in allows you to create and link outlook emails with openerp " +"objects." +msgstr "" +"Denne plug-in tillater deg å opprette og koble Outlook e-post med openerp " +"objekter." + +#. module: plugin_outlook +#: field:outlook.installer,name:0 +msgid "Outlook Plug-in" +msgstr "Outlook Plugginn" + +#. module: plugin_outlook +#: model:ir.actions.act_window,name:plugin_outlook.action_outlook_installer +#: model:ir.actions.act_window,name:plugin_outlook.action_outlook_wizard +#: model:ir.ui.menu,name:plugin_outlook.menu_base_config_plugins_outlook +#: view:outlook.installer:0 +msgid "Install Outlook Plug-In" +msgstr "Installere Outlook Plugg-Inn." + +#. module: plugin_outlook +#: field:outlook.installer,config_logo:0 +msgid "Image" +msgstr "Bilde" + +#. module: plugin_outlook +#: view:outlook.installer:0 +msgid "title" +msgstr "tittel" + +#. module: plugin_outlook +#: model:ir.model,name:plugin_outlook.model_outlook_installer +msgid "outlook.installer" +msgstr "outlook.installer" + +#. module: plugin_outlook +#: view:outlook.installer:0 +msgid "_Close" +msgstr "_Lukk" + +#. module: plugin_outlook +#: view:outlook.installer:0 +msgid "Installation and Configuration Steps" +msgstr "Installasjon og Konfigurasjon trinn" + +#. module: plugin_outlook +#: help:outlook.installer,name:0 +msgid "" +"outlook plug-in file. Save as this file and install this plug-in in outlook." +msgstr "" +"Outlook pluginn-filen. Lagre som denne filen og installere denne plugin-" +"modulen i outlook." + +#. module: plugin_outlook +#: field:outlook.installer,description:0 +msgid "Description" +msgstr "Beskrivelse:" diff --git a/addons/plugin_thunderbird/i18n/nb.po b/addons/plugin_thunderbird/i18n/nb.po new file mode 100644 index 00000000000..c8dcc889c48 --- /dev/null +++ b/addons/plugin_thunderbird/i18n/nb.po @@ -0,0 +1,108 @@ +# 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-09 00:36+0000\n" +"PO-Revision-Date: 2012-09-10 13: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-11 04:50+0000\n" +"X-Generator: Launchpad (build 15924)\n" + +#. module: plugin_thunderbird +#: field:plugin_thunderbird.installer,pdf_file:0 +msgid "Installation Manual" +msgstr "Installasjons håndbok." + +#. module: plugin_thunderbird +#: field:plugin_thunderbird.installer,description:0 +msgid "Description" +msgstr "Beskrivelse:" + +#. module: plugin_thunderbird +#: view:plugin_thunderbird.installer:0 +msgid "title" +msgstr "tittel" + +#. module: plugin_thunderbird +#: model:ir.model,name:plugin_thunderbird.model_plugin_thunderbird_installer +msgid "plugin_thunderbird.installer" +msgstr "plugin_thunderbird.installer" + +#. module: plugin_thunderbird +#: field:plugin_thunderbird.installer,config_logo:0 +msgid "Image" +msgstr "Bilde" + +#. module: plugin_thunderbird +#: field:plugin_thunderbird.installer,plugin_file:0 +#: field:plugin_thunderbird.installer,thunderbird:0 +msgid "Thunderbird Plug-in" +msgstr "Thunderbird Plug-in" + +#. module: plugin_thunderbird +#: view:plugin_thunderbird.installer:0 +msgid "" +"This plug-in allows you to link your email to OpenERP's documents. You can " +"attach it to any existing one in OpenERP or create a new one." +msgstr "" + +#. module: plugin_thunderbird +#: help:plugin_thunderbird.installer,thunderbird:0 +msgid "" +"Allows you to select an object that you would like to add to your email and " +"its attachments." +msgstr "" +"Lar deg velge et objekt som du ønsker å legge til din e-post og vedlegg." + +#. module: plugin_thunderbird +#: help:plugin_thunderbird.installer,pdf_file:0 +msgid "The documentation file :- how to install Thunderbird Plug-in." +msgstr "Dokumentasjonen fil: - hvordan du installerer Thunderbird Plug-in." + +#. module: plugin_thunderbird +#: view:plugin_thunderbird.installer:0 +msgid "_Close" +msgstr "_Lukk" + +#. module: plugin_thunderbird +#: view:plugin_thunderbird.installer:0 +msgid "Installation and Configuration Steps" +msgstr "Installasjon og Konfigurasjon trinn" + +#. module: plugin_thunderbird +#: field:plugin_thunderbird.installer,name:0 +#: field:plugin_thunderbird.installer,pdf_name:0 +msgid "File name" +msgstr "Filnavn" + +#. module: plugin_thunderbird +#: help:plugin_thunderbird.installer,plugin_file:0 +msgid "" +"Thunderbird plug-in file. Save as this file and install this plug-in in " +"thunderbird." +msgstr "" +"Thunderbird plug-in-filen. Lagre som denne filen og installere denne plugin-" +"modulen i thunderbird." + +#. module: plugin_thunderbird +#: model:ir.actions.act_window,name:plugin_thunderbird.action_thunderbird_installer +#: model:ir.ui.menu,name:plugin_thunderbird.menu_base_config_plugins_thunderbird +#: view:plugin_thunderbird.installer:0 +msgid "Install Thunderbird Plug-In" +msgstr "Installer Thunderbird Plug-in." + +#~ msgid "" +#~ "This plug-in allows you to link your e-mail to OpenERP's documents. You can " +#~ "attach it to any existing one in OpenERP or create a new one." +#~ msgstr "" +#~ "Denne plug-in tillater deg å koble din e-post til OpenERP er dokumenter. Du " +#~ "kan feste den til enhver eksisterende i OpenERP eller opprette en ny." diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 2d6d8b92da1..95b54b6baed 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -314,10 +314,9 @@ class pos_session(osv.osv): # define some cash journal if no payment method exists if not pos_config.journal_ids: - cashids = self.pool.get('account.journal').search(cr, uid, [('journal_user','=',True)], context=context) + cashids = self.pool.get('account.journal').search(cr, uid, [('journal_user', '=', True), ('type','=','cash')], context=context) if not cashids: - cashids = self.pool.get('account.journal').search(cr, uid, [('type','=','cash')], context=context) - self.pool.get('account.journal').write(cr, uid, cashids, {'journal_user': True}) + cashids = self.pool.get('account.journal').search(cr, uid, [('journal_user','=',True)], context=context) jobj.write(cr, uid, [pos_config.id], {'journal_ids': [(6,0, cashids)]}) @@ -1211,29 +1210,27 @@ class pos_category(osv.osv): 'child_id': fields.one2many('pos.category', 'parent_id', string='Children Categories'), 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of product categories."), - # NOTE: there is no 'default image', because by default we don't show thumbnails for categories. However if we have a thumbnail + # NOTE: there is no 'default image', because by default we don't show thumbnails for categories. However if we have a thumbnail # for at least one category, then we display a default image on the other, so that the buttons have consistent styling. - # In this case, the default image is set by the js code. - + # In this case, the default image is set by the js code. + # NOTE2: image: all image fields are base64 encoded and PIL-supported 'image': fields.binary("Image", - help="This field holds the image used for the category. "\ - "The image is base64 encoded, and PIL-supported. "\ - "It is limited to a 1024x1024 px image."), + help="This field holds the image used as image for the cateogry, limited to 1024x1024px."), 'image_medium': fields.function(_get_image, fnct_inv=_set_image, string="Medium-sized image", type="binary", multi="_get_image", - store = { + store={ 'pos.category': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), }, help="Medium-sized image of the category. It is automatically "\ - "resized as a 180x180 px image, with aspect ratio preserved. "\ + "resized as a 128x128px image, with aspect ratio preserved. "\ "Use this field in form views or some kanban views."), 'image_small': fields.function(_get_image, fnct_inv=_set_image, string="Smal-sized image", type="binary", multi="_get_image", - store = { + store={ 'pos.category': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), }, help="Small-sized image of the category. It is automatically "\ - "resized as a 50x50 px image, with aspect ratio preserved. "\ + "resized as a 64x64px image, with aspect ratio preserved. "\ "Use this field anywhere a small image is required."), } diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 6dffbd82d19..6fef9bda282 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -948,7 +948,7 @@ <field name="total_entry_encoding" /> <field name="balance_end_real" /> <field name="difference" /> - <field name="currency" /> + <field name="currency" groups="base.group_multi_currency" /> <field name="state" /> </tree> </field> diff --git a/addons/point_of_sale/wizard/pos_session_opening.py b/addons/point_of_sale/wizard/pos_session_opening.py index d6f95cbb7fc..4e7965f8e97 100644 --- a/addons/point_of_sale/wizard/pos_session_opening.py +++ b/addons/point_of_sale/wizard/pos_session_opening.py @@ -52,6 +52,9 @@ class pos_session_opening(osv.osv_memory): 'config_id' : wizard.pos_config_id.id, } session_id = proxy.create(cr, uid, values, context=context) + s = proxy.browse(cr, uid, session_id, context=context) + if s.state=='opened': + return self.open_ui(cr, uid, ids, context=context) return self._open_session(session_id) return self._open_session(wizard.pos_session_id.id) diff --git a/addons/point_of_sale/wizard/pos_session_opening.xml b/addons/point_of_sale/wizard/pos_session_opening.xml index 6e44030e582..a7dbe43c962 100644 --- a/addons/point_of_sale/wizard/pos_session_opening.xml +++ b/addons/point_of_sale/wizard/pos_session_opening.xml @@ -39,9 +39,8 @@ <p class="oe_view_nocontent_create"> Click to start a session. </p><p> - You will first have to control your cash amount in your cash register. - Then you will be able to open the session and start selling with the touchscreen - interface. + You may have to control your cash amount in your cash register, before + being able to start selling through the touchscreen interface. </p> </div> <div attrs="{'invisible' : [('pos_state', '!=', 'opened')]}" class="oe_view_nocontent"> @@ -49,8 +48,8 @@ Click to continue the session. </p> <p> - The session <field name="pos_session_name" class="oe_inline" /> (<field name="pos_session_username" class="oe_inline" />) is "<b><field name="pos_state_str" class="oe_inline" /></b>"<br/> - You can continue sales from the touchscreen interface by clicking on "<b>Sellings</b>" or close the cash register session ? + The session <field name="pos_session_name" class="oe_inline" /> (<field name="pos_session_username" class="oe_inline" />) is "<b><field name="pos_state_str" class="oe_inline" /></b>".<br/> + You can continue sales from the touchscreen interface by clicking on "Start Selling" or close the cash register session. </p> </div> diff --git a/addons/portal/portal.py b/addons/portal/portal.py index 2c8b2db587d..3672d87cf30 100644 --- a/addons/portal/portal.py +++ b/addons/portal/portal.py @@ -37,7 +37,7 @@ class portal(osv.osv): 'group_id': fields.many2one('res.groups', required=True, ondelete='cascade', string='Group', help='The group corresponding to this portal'), - 'url': fields.char('URL', size=64, + 'url': fields.char('URL', help="The url where portal users can connect to the server"), 'home_action_id': fields.many2one('ir.actions.actions', string='Home Action', diff --git a/addons/portal/portal_view.xml b/addons/portal/portal_view.xml index dd720d448ef..fd15a842405 100644 --- a/addons/portal/portal_view.xml +++ b/addons/portal/portal_view.xml @@ -50,8 +50,6 @@ <field name="parent_menu_id" context="{'ir.ui.menu.full_list': True}"/> <label for="partent_menu_id" colspan="1"/> - <button name="do_create_menu" type="object" - string="Create Parent Menu"/> </group> <separator string="Widgets Assigned to Users" colspan="2"/> <field name="widget_ids" nolabel="1" colspan="2"> diff --git a/addons/portal_event/event_view.xml b/addons/portal_event/event_view.xml index 1dd9fee7181..675bddbc42e 100644 --- a/addons/portal_event/event_view.xml +++ b/addons/portal_event/event_view.xml @@ -3,7 +3,7 @@ <data> <!-- add visibility field to the event form view --> - <record id="view_employee_form" model="ir.ui.view"> + <record id="view_event_form_portal" model="ir.ui.view"> <field name="name">portal.event.form</field> <field name="model">event.event</field> <field name="inherit_id" ref="event.view_event_form"/> @@ -17,6 +17,5 @@ </xpath> </field> </record> - </data> </openerp> diff --git a/addons/portal_hr_employees/hr_employee_view.xml b/addons/portal_hr_employees/hr_employee_view.xml index dc1b1bae56c..4e133061da6 100644 --- a/addons/portal_hr_employees/hr_employee_view.xml +++ b/addons/portal_hr_employees/hr_employee_view.xml @@ -8,12 +8,8 @@ <field name="model">hr.employee</field> <field name="inherit_id" ref="hr.view_employee_form"/> <field name="arch" type="xml"> - <xpath expr="//page[last()]" position="after"> - <page string="Portal Settings"> - <group> - <field name="visibility"/> - </group> - </page> + <xpath expr="//field[@name='active']" position="before"> + <field name="visibility"/> </xpath> </field> </record> diff --git a/addons/procurement/board_mrp_procurement_view.xml b/addons/procurement/board_mrp_procurement_view.xml index a01ec168efa..f30ea629d5e 100644 --- a/addons/procurement/board_mrp_procurement_view.xml +++ b/addons/procurement/board_mrp_procurement_view.xml @@ -15,9 +15,9 @@ <field name="model">board.board</field> <field name="inherit_id" ref="stock.board_warehouse_form"/> <field name="arch" type="xml"> - <xpath expr="/form/board/column/action[@string='Incoming Shipments']" position="before"> + <xpath expr="//column" position="inside"> <action name="%(procurement_action_board)d" string="Procurements in Exception"/> - </xpath> + </xpath> </field> </record> </data> diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index db50ebd94fd..ec1dc4b26fb 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -80,7 +80,7 @@ class procurement_order(osv.osv): """ _name = "procurement.order" _description = "Procurement" - _order = 'priority,date_planned desc' + _order = 'priority desc,date_planned' _inherit = ['mail.thread'] _log_create = False _columns = { @@ -319,13 +319,13 @@ class procurement_order(osv.osv): if record.move_id and record.move_id.state == 'cancel': return True return False - + #Initialize get_phantom_bom_id method as it is raising an error from yml of mrp_jit #when one install first mrp and after that, mrp_jit. get_phantom_bom_id defined in mrp module #which is not dependent for mrp_jit. def get_phantom_bom_id(self, cr, uid, ids, context=None): return False - + def action_confirm(self, cr, uid, ids, context=None): """ Confirms procurement and writes exception message if any. @return: True diff --git a/addons/product/pricelist_view.xml b/addons/product/pricelist_view.xml index adefd9e5d3c..dc120660c43 100644 --- a/addons/product/pricelist_view.xml +++ b/addons/product/pricelist_view.xml @@ -119,7 +119,7 @@ <field name="name" string="Products Price"/> <field name="type"/> <field name="active" /> - <field name="currency_id"/> + <field name="currency_id" groups="base.group_multi_currency"/> </search> </field> </record> @@ -132,7 +132,7 @@ <tree string="Products Price List"> <field name="name"/> <field name="type"/> - <field name="currency_id"/> + <field name="currency_id" groups="base.group_multi_currency"/> <field name="active" /> </tree> </field> @@ -149,7 +149,7 @@ <group col="4"> <field name="active"/> <field name="type"/> - <field name="currency_id"/> + <field name="currency_id" groups="base.group_multi_currency"/> <field name="company_id" groups="base.group_multi_company" widget="selection"/> </group> <field name="version_id"> @@ -230,7 +230,7 @@ <field name="name"/> <field name="active"/> <field name="field"/> - <field name="currency_id"/> + <field name="currency_id" groups="base.group_multi_currency"/> </group> </form> </field> diff --git a/addons/product/product.py b/addons/product/product.py index 16b08e67cee..58106bf5bf5 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -509,7 +509,7 @@ class product_product(osv.osv): def _get_image(self, cr, uid, ids, name, args, context=None): result = dict.fromkeys(ids, False) for obj in self.browse(cr, uid, ids, context=context): - result[obj.id] = tools.image_get_resized_images(obj.image) + result[obj.id] = tools.image_get_resized_images(obj.image, avoid_resize_medium=True) return result def _set_image(self, cr, uid, id, name, value, args, context=None): @@ -548,25 +548,24 @@ class product_product(osv.osv): 'pricelist_id': fields.dummy(string='Pricelist', relation='product.pricelist', type='many2one'), 'name_template': fields.related('product_tmpl_id', 'name', string="Name", type='char', size=128, store=True, select=True), 'color': fields.integer('Color Index'), + # image: all image fields are base64 encoded and PIL-supported 'image': fields.binary("Image", - help="This field holds the image used for the product. "\ - "The image is base64 encoded, and PIL-supported. "\ - "It is limited to a 1024x1024 px image."), + help="This field holds the image used as image for the product, limited to 1024x1024px."), 'image_medium': fields.function(_get_image, fnct_inv=_set_image, string="Medium-sized image", type="binary", multi="_get_image", - store = { + store={ 'product.product': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), }, help="Medium-sized image of the product. It is automatically "\ - "resized as a 180x180 px image, with aspect ratio preserved. "\ - "Use this field in form views or some kanban views."), + "resized as a 128x128px image, with aspect ratio preserved, "\ + "only when the image exceeds one of those sizes. Use this field in form views or some kanban views."), 'image_small': fields.function(_get_image, fnct_inv=_set_image, string="Small-sized image", type="binary", multi="_get_image", - store = { + store={ 'product.product': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), }, help="Small-sized image of the product. It is automatically "\ - "resized as a 50x50 px image, with aspect ratio preserved. "\ + "resized as a 64x64px image, with aspect ratio preserved. "\ "Use this field anywhere a small image is required."), 'seller_info_id': fields.function(_calc_seller, type='many2one', relation="product.supplierinfo", multi="seller_info"), 'seller_delay': fields.function(_calc_seller, type='integer', string='Supplier Lead Time', multi="seller_info", help="This is the average delay in days between the purchase order confirmation and the reception of goods for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."), @@ -610,7 +609,7 @@ class product_product(osv.osv): return res - _constraints = [(_check_ean_key, 'Error: Invalid ean code', ['ean13'])] + _constraints = [(_check_ean_key, 'You provided an invalid "EAN13 Barcode" reference. You may use the internal reference field instead.', ['ean13'])] def on_order(self, cr, uid, ids, orderline, quantity): pass diff --git a/addons/product/product_data.xml b/addons/product/product_data.xml index 80dbfac564d..5ae76a87695 100644 --- a/addons/product/product_data.xml +++ b/addons/product/product_data.xml @@ -190,7 +190,7 @@ parameter) will see those record just disappear. <field name="standard_price">30.0</field> <field name="uom_id" ref="product.product_uom_hour"/> <field name="uom_po_id" ref="product.product_uom_hour"/> - <field name="name">Service on Demand</field> + <field name="name">Service</field> <field name="categ_id" ref="product.product_category_all"/> <field name="type">service</field> <field eval="False" name="purchase_ok"/> diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml index d75fec3861b..ff9172d3917 100644 --- a/addons/product/product_view.xml +++ b/addons/product/product_view.xml @@ -39,6 +39,7 @@ <field name="default_code"/> <field name="name"/> <field name="categ_id" invisible="1"/> + <field name="type" invisible="1"/> <field name="variants" groups="product.group_product_variant"/> <field name="uom_id" string="Unit of Measure" groups="product.group_uom"/> <field name="qty_available"/> diff --git a/addons/project/project.py b/addons/project/project.py index 9bd939dd4fe..35be1d82c6e 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -41,8 +41,9 @@ class project_task_type(osv.osv): 'case_default': fields.boolean('Common to All Projects', help="If you check this field, this stage will be proposed by default on each new project. It will not assign this stage to existing projects."), 'project_ids': fields.many2many('project.project', 'project_task_type_rel', 'type_id', 'project_id', 'Projects'), - 'state': fields.selection(_TASK_STATE, 'State', required=True, - help="The related state for the stage. The state of your document will automatically change regarding the selected stage. Example, a stage is related to the state 'Close', when your document reach this stage, it will be automatically closed."), + 'state': fields.selection(_TASK_STATE, 'Related Status', required=True, + help="The status of your document is automatically changed regarding the selected stage. " \ + "For example, if a stage is related to the status 'Close', when your document reaches this stage, it is automatically closed."), 'fold': fields.boolean('Hide in views if empty', help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."), } @@ -727,7 +728,7 @@ class task(base_stage, osv.osv): When the case is over, the state is set to \'Done\'.\ If the case needs to be reviewed then the state is \ set to \'Pending\'.'), - 'categ_ids': fields.many2many('project.category', string='Categories'), + 'categ_ids': fields.many2many('project.category', string='Tags'), 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready To Pull')], 'Kanban State', help="A task's kanban state indicates special situations affecting it:\n" " * Normal is the default situation\n" diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index a4ba5a233a1..ff8ac943a67 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -136,11 +136,14 @@ <field name="resource_calendar_id"/> </group> <group string="Miscellaneous" name="misc"> + <field name="date"/> <field name="parent_id" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}"/> <field name="priority"/> <field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/> - <field name="currency_id" groups="base.group_multi_company" required="1"/> - <field name="company_id" groups="base.group_multi_company" widget="selection" required="1"/> + + <field name="currency_id" groups="base.group_multi_currency" required="1"/> + <field name="parent_id" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}"/> + </group> </group> </page> @@ -247,47 +250,21 @@ <div class="oe_kanban_project_list"> <a t-if="record.use_tasks.raw_value" name="%(act_project_project_2_project_task_all)d" type="action"> <field name="task_count"/> Tasks</a> </div> - <table> - <tr class="oe_kanban_project_fields oe_kanban_project_deadline" t-if="record.date.raw_value"> - <th>Deadline</th> - <td><field name="date"/></td> - </tr> - <tr class="oe_kanban_project_fields oe_kanban_project_progress"> - <th>Progress</th> - <td><t t-esc="Math.round(record.effective_hours.raw_value)"/>/<t t-esc="Math.round(record.planned_hours.raw_value)"/> <field name="company_uom_id"/></td> - </tr> - </table> + <div class="oe_kanban_footer_left"> + <span> + <span class="oe_e">R</span> + <t t-esc="Math.round(record.effective_hours.raw_value)"/>/<t t-esc="Math.round(record.planned_hours.raw_value)"/> <field name="company_uom_id"/> + </span> + <span t-if="record.date.raw_value"> + <span class="oe_e">N</span> + <field name="date"/> + </span> + </div> <div class="oe_kanban_project_avatars"> <t t-foreach="record.members.raw_value" t-as="member"> <img t-att-src="kanban_image('res.users', 'image_small', member)" t-att-data-member_id="member"/> </t> </div> - - <!--<h3 class="oe_kanban_ellipsis"><field name="name"/></h3>--> - - <!--<div class="oe_kanban_project_list">--> - <!--<a t-if="record.use_tasks.raw_value"--> - <!--name="%(act_project_project_2_project_task_all)d" type="action">--> - <!--Tasks(<field name="task_count"/>)</a>--> - <!--</div>--> - - <!--<div class="oe_kanban_project_fields oe_kanban_project_deadline" t-if="record.date.raw_value">--> - <!--<div>Deadline</div>--> - <!--<div><field name="date"/></div>--> - <!--</div>--> - <!--<div class="oe_kanban_project_fields oe_kanban_project_progress">--> - <!--<div>Progress</div>--> - <!--<div><t t-esc="Math.round(record.effective_hours.raw_value)"/> / <t t-esc="Math.round(record.planned_hours.raw_value)"/> <field name="company_uom_id"/></div>--> - <!--</div>--> - <!--<div name="alias_box" t-if="record.alias_domain.raw_value" class="oe_kanban_ellipsis">--> - <!--<a t-attf-href="mailto:#{record.alias_id.value}"><field name="alias_id"/></a>--> - <!--</div>--> - <!--<div class="oe_kanban_project_avatars">--> - <!--<t t-foreach="record.members.raw_value" t-as="member">--> - <!--<img t-att-src="kanban_image('res.users', 'image_small', member)" t-att-data-member_id="member"/>--> - <!--</t>--> - <!--</div>--> - </div> </div> </t> @@ -777,7 +754,7 @@ <field name="case_default"/> </group> <group> - <field name="state" string="Related State"/> + <field name="state"/> <field name="sequence"/> <field name="fold"/> </group> diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py index 6c1f5443835..f3055727d5e 100644 --- a/addons/project/report/project_report.py +++ b/addons/project/report/project_report.py @@ -52,7 +52,7 @@ class report_project_task_user(osv.osv): ('0','Very urgent')], 'Priority', readonly=True), 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')], 'Month', readonly=True), 'state': fields.selection([('draft', 'Draft'), ('open', 'In Progress'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')],'Status', readonly=True), - 'company_id': fields.many2one('res.company', 'Company', readonly=True, groups="base.group_multi_company"), + 'company_id': fields.many2one('res.company', 'Company', readonly=True), 'partner_id': fields.many2one('res.partner', 'Contact', readonly=True), } _order = 'name desc, project_id' diff --git a/addons/project/security/project_security.xml b/addons/project/security/project_security.xml index 3afe0f14e7a..b499e682669 100644 --- a/addons/project/security/project_security.xml +++ b/addons/project/security/project_security.xml @@ -45,7 +45,7 @@ <field name="name">public Members</field> <field name="model_id" ref="model_project_project"/> <field name="global" eval="True"/> - <field name="domain_force">['|','|',('privacy_visibility','in',[False,'public']),('members','in',[user.id]),('follower_ids','in',[user.partner_id.id])]</field> + <field name="domain_force">['|','|',('privacy_visibility','in',[False,'public']),('members','in',[user.id]),('message_follower_ids','in',[user.partner_id.id])]</field> </record> <record model="ir.rule" id="task_comp_rule"> diff --git a/addons/project/static/src/css/project.css b/addons/project/static/src/css/project.css index f90162fcc76..8381e6d68d3 100644 --- a/addons/project/static/src/css/project.css +++ b/addons/project/static/src/css/project.css @@ -3,7 +3,7 @@ } .oe_kanban_project { - width: 250px; + width: 220px; min-height: 160px; } diff --git a/addons/purchase/board_purchase_view.xml b/addons/purchase/board_purchase_view.xml index 67c3981f383..d491985cf52 100644 --- a/addons/purchase/board_purchase_view.xml +++ b/addons/purchase/board_purchase_view.xml @@ -62,7 +62,7 @@ <form string="Purchase Dashboard" version="7.0"> <board style="2-1"> <column> - <action name="%(purchase_draft)d" string="Request for Quotations" creatable="true"/> + <action name="%(purchase_draft)d" string="Request for Quotations"/> </column> <column> <action name="%(action_purchase_order_monthly_categ_graph)d" string="Monthly Purchases by Category"/> @@ -85,7 +85,8 @@ icon="terp-graph" id="menu_board_purchase" parent="base.menu_reporting_dashboard" - sequence="20"/> + sequence="20" + groups="purchase.group_purchase_user"/> </data> </openerp> diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 592bf783a64..1f6279af3ad 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -347,13 +347,18 @@ class purchase_order(osv.osv): template_id = template and template[1] or False res = mod_obj.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form') res_id = res and res[1] or False - ctx = dict(context, active_model='purchase.order', active_id=ids[0]) - ctx.update({'mail.compose.template_id': template_id}) + ctx = dict(context) + ctx.update({ + 'default_model': 'purchase.order', + 'default_res_id': ids[0], + 'default_use_template': True, + 'default_template_id': template_id, + }) return { 'view_type': 'form', 'view_mode': 'form', 'res_model': 'mail.compose.message', - 'views': [(res_id,'form')], + 'views': [(res_id, 'form')], 'view_id': res_id, 'type': 'ir.actions.act_window', 'target': 'new', diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index ab5df67f52d..5d6f6c34b3b 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -347,6 +347,7 @@ <field name="type">ir.actions.act_window</field> <field name="res_model">purchase.order</field> <field name="context">{'search_default_draft': 1}</field> + <field name="domain">[('state','in',('draft','sent','confirmed'))]</field> <field name="view_mode">tree,form,graph,calendar</field> <field name="search_view_id" ref="view_purchase_order_filter"/> <field name="help" type="html"> @@ -371,7 +372,8 @@ <field name="type">ir.actions.act_window</field> <field name="res_model">purchase.order</field> <field name="view_mode">tree,form,graph,calendar</field> - <field name="context">{'search_default_approved': 1}</field> + <field name="context">{}</field> + <field name="domain">[('state','not in',('draft','sent','confirmed'))]</field> <field name="search_view_id" ref="view_purchase_order_filter"/> <field name="help" type="html"> <p class="oe_view_nocontent_create"> diff --git a/addons/report_intrastat/report_intrastat_view.xml b/addons/report_intrastat/report_intrastat_view.xml index 4f02c8f8c75..8d8da4a078f 100644 --- a/addons/report_intrastat/report_intrastat_view.xml +++ b/addons/report_intrastat/report_intrastat_view.xml @@ -84,7 +84,7 @@ <field name="weight"/> <field name="value"/> <field name="supply_units"/> - <field name="currency_id"/> + <field name="currency_id" groups="base.group_multi_currency"/> <field name="type"/> </tree> </field> diff --git a/addons/report_webkit_sample/i18n/ru.po b/addons/report_webkit_sample/i18n/ru.po new file mode 100644 index 00000000000..82fde059f51 --- /dev/null +++ b/addons/report_webkit_sample/i18n/ru.po @@ -0,0 +1,123 @@ +# 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 00:37+0000\n" +"PO-Revision-Date: 2012-09-10 14:37+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: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +msgid "Refund" +msgstr "Возврат" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +msgid "Fax" +msgstr "Факс" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +msgid "Disc.(%)" +msgstr "Дисконт (%)" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +msgid "Tel" +msgstr "Тел" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +msgid "Description" +msgstr "Описание" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +msgid "Supplier Invoice" +msgstr "Счет поставщика" + +#. module: report_webkit_sample +#: model:ir.actions.report.xml,name:report_webkit_sample.report_webkit_html +msgid "WebKit invoice" +msgstr "Счет Webkit" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +msgid "Price" +msgstr "Цена" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +msgid "Invoice Date" +msgstr "Дата счёта" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +msgid "Taxes" +msgstr "Налоги" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +msgid "QTY" +msgstr "Кол-во" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +msgid "Email" +msgstr "Эл. почта" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +msgid "Amount" +msgstr "Сумма" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +msgid "Base" +msgstr "" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +msgid "Invoice" +msgstr "Счет" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +msgid "Supplier Refund" +msgstr "Возврат средств от поставщика" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +msgid "Document" +msgstr "Документ" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +msgid "Unit Price" +msgstr "Цена за ед." + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +msgid "Partner Ref." +msgstr "Ссылка на контрагента" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +msgid "VAT" +msgstr "НДС" + +#. module: report_webkit_sample +#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +msgid "Total" +msgstr "Всего" diff --git a/addons/sale/board_sale_view.xml b/addons/sale/board_sale_view.xml index 702bc0c61cc..4839744c6d2 100644 --- a/addons/sale/board_sale_view.xml +++ b/addons/sale/board_sale_view.xml @@ -51,7 +51,7 @@ <form string="Sales Dashboard" version="7.0"> <board style="2-1"> <column> - <action name="%(action_quotation_for_sale)d" string="My Quotations" creatable="true"/> + <action name="%(action_quotation_for_sale)d" string="My Quotations"/> </column> <column> <action name="%(action_turnover_by_month)d" string="Monthly Turnover"/> diff --git a/addons/sale/edi/sale_order_action_data.xml b/addons/sale/edi/sale_order_action_data.xml index 49ebe6053e6..c818a3a22ab 100644 --- a/addons/sale/edi/sale_order_action_data.xml +++ b/addons/sale/edi/sale_order_action_data.xml @@ -47,7 +47,7 @@ <p>Hello${object.partner_id.name and ' ' or ''}${object.partner_id.name or ''},</p> - <p>Here is your ${object.state in ('draft', 'sent') and 'quotation' or 'order confirmation'} from {$object.company_id.name}: </p> + <p>Here is your ${object.state in ('draft', 'sent') and 'quotation' or 'order confirmation'} from ${object.company_id.name}: </p> <p style="border-left: 1px solid #8e0000; margin-left: 30px;"> <strong>REFERENCES</strong><br /> diff --git a/addons/sale/i18n/ru.po b/addons/sale/i18n/ru.po index 6b4294b5c3c..2af399a3226 100644 --- a/addons/sale/i18n/ru.po +++ b/addons/sale/i18n/ru.po @@ -7,19 +7,19 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-02-08 01:37+0100\n" -"PO-Revision-Date: 2012-05-10 17:51+0000\n" -"Last-Translator: Raphael Collet (OpenERP) <Unknown>\n" +"PO-Revision-Date: 2012-09-10 14:56+0000\n" +"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-09-07 04:58+0000\n" -"X-Generator: Launchpad (build 15914)\n" +"X-Launchpad-Export-Date: 2012-09-11 04:50+0000\n" +"X-Generator: Launchpad (build 15924)\n" #. module: sale #: field:sale.config.picking_policy,timesheet:0 msgid "Based on Timesheet" -msgstr "" +msgstr "Основано на затратах времени" #. module: sale #: view:sale.order.line:0 @@ -27,6 +27,8 @@ msgid "" "Sale Order Lines that are confirmed, done or in exception state and haven't " "yet been invoiced" msgstr "" +"Позиции заказа на продажу в состоянии \"Подтвержден\", \"Cделано\" или " +"\"Исключение\" и на которые не был выставлен счет" #. module: sale #: view:board.board:0 @@ -78,7 +80,7 @@ msgstr "Запрос цен '%s' был преобразован в заказ #. module: sale #: view:sale.order:0 msgid "Print Quotation" -msgstr "" +msgstr "Печать предложения цен" #. module: sale #: code:addons/sale/wizard/sale_make_invoice.py:42 @@ -89,7 +91,7 @@ msgstr "Внимание!" #. module: sale #: report:sale.order:0 msgid "Tax" -msgstr "" +msgstr "Налог" #. module: sale #: model:process.node,note:sale.process_node_saleorderprocurement0 @@ -123,6 +125,9 @@ msgid "" "cancel a sale order, you must first cancel related picking or delivery " "orders." msgstr "" +"Для удаления подтвержденного заказа на продажу надо сначала его отменить ! " +"Для отмены заказа на продажу надо отменить его комплектование или заказ на " +"доставку." #. module: sale #: model:process.node,name:sale.process_node_saleprocurement0 @@ -137,7 +142,7 @@ msgstr "Контрагент" #. module: sale #: selection:sale.order,order_policy:0 msgid "Invoice based on deliveries" -msgstr "" +msgstr "Счет основанный на отгрузке" #. module: sale #: view:sale.order:0 @@ -187,12 +192,12 @@ msgstr "Условия платежа по умолчанию" #. module: sale #: field:sale.config.picking_policy,deli_orders:0 msgid "Based on Delivery Orders" -msgstr "" +msgstr "Основанный на заказе на отгрузку" #. module: sale #: field:sale.config.picking_policy,time_unit:0 msgid "Main Working Time Unit" -msgstr "" +msgstr "Основная единица рабочего времени" #. module: sale #: view:sale.order:0 view:sale.order.line:0 field:sale.order.line,state:0 @@ -218,7 +223,7 @@ msgstr "Отметьте для группирования счетов по зÐ #. module: sale #: view:sale.order:0 msgid "My Sale Orders" -msgstr "" +msgstr "Мои заказы на продажу" #. module: sale #: selection:sale.order,invoice_quantity:0 @@ -267,7 +272,7 @@ msgstr "" #. module: sale #: model:ir.actions.act_window,name:sale.act_res_partner_2_sale_order msgid "Quotations and Sales" -msgstr "" +msgstr "Предложения цен и продажи" #. module: sale #: model:ir.model,name:sale.model_sale_make_invoice @@ -278,7 +283,7 @@ msgstr "Продажи - создать счет" #: code:addons/sale/sale.py:330 #, python-format msgid "Pricelist Warning!" -msgstr "" +msgstr "Предупреждение по прайс листу!" #. module: sale #: field:sale.order.line,discount:0 @@ -344,7 +349,7 @@ msgstr "Продажи в состоянии \"Исключение\"" #: code:addons/sale/wizard/sale_make_invoice_advance.py:70 #, python-format msgid "Configuration Error !" -msgstr "" +msgstr "Ошибка конфигурации !" #. module: sale #: view:sale.order:0 @@ -406,7 +411,7 @@ msgstr "Октябрь" #. module: sale #: sql_constraint:stock.picking:0 msgid "Reference must be unique per Company!" -msgstr "" +msgstr "Ссылка должна быть уникальна для каждой компании!" #. module: sale #: view:board.board:0 view:sale.order:0 view:sale.report:0 @@ -469,7 +474,7 @@ msgstr "" #: code:addons/sale/sale.py:1074 #, python-format msgid "You cannot cancel a sale order line that has already been invoiced!" -msgstr "" +msgstr "Нельзя отменить позицию заказа на продажу, которая уже в счете!" #. module: sale #: code:addons/sale/sale.py:1079 @@ -519,7 +524,7 @@ msgstr "Примечания" #. module: sale #: sql_constraint:res.company:0 msgid "The company name must be unique !" -msgstr "" +msgstr "Название компании должно быть уникальным!" #. module: sale #: help:sale.order,partner_invoice_id:0 @@ -529,12 +534,12 @@ msgstr "Адрес счета для текущего заказа на прод #. module: sale #: view:sale.report:0 msgid "Month-1" -msgstr "" +msgstr "Месяц-1" #. module: sale #: view:sale.report:0 msgid "Ordered month of the sales order" -msgstr "" +msgstr "Месяц заказа в заказе на продажу" #. module: sale #: code:addons/sale/sale.py:504 @@ -542,11 +547,12 @@ msgstr "" msgid "" "You cannot group sales having different currencies for the same partner." msgstr "" +"Нельзя сгруппировать продажи в разных валютах для одного контрагента." #. module: sale #: selection:sale.order,picking_policy:0 msgid "Deliver each product when available" -msgstr "" +msgstr "Отгрузка каждого товара по готовности." #. module: sale #: field:sale.order,invoiced_rate:0 field:sale.order.line,invoiced:0 @@ -581,12 +587,12 @@ msgstr "Март" #. module: sale #: constraint:stock.move:0 msgid "You can not move products from or to a location of the type view." -msgstr "" +msgstr "Нельзя переместить ТМЦ в/из место хранения типа вид." #. module: sale #: field:sale.config.picking_policy,sale_orders:0 msgid "Based on Sales Orders" -msgstr "" +msgstr "Основанный на заказах на продажу" #. module: sale #: help:sale.order,amount_total:0 @@ -606,7 +612,7 @@ msgstr "Адрес счета:" #. module: sale #: field:sale.order.line,sequence:0 msgid "Line Sequence" -msgstr "" +msgstr "Последовательность" #. module: sale #: model:process.transition,note:sale.process_transition_saleorderprocurement0 @@ -697,7 +703,7 @@ msgstr "Дата создания" #. module: sale #: model:ir.ui.menu,name:sale.menu_sales_configuration_misc msgid "Miscellaneous" -msgstr "" +msgstr "Прочее" #. module: sale #: model:ir.actions.act_window,name:sale.action_order_line_tree3 @@ -741,7 +747,7 @@ msgstr "Кол-во" #: code:addons/sale/sale.py:1327 #, python-format msgid "Hour" -msgstr "" +msgstr "Час" #. module: sale #: view:sale.order:0 @@ -762,7 +768,7 @@ msgstr "Все предложения" #. module: sale #: view:sale.config.picking_policy:0 msgid "Options" -msgstr "" +msgstr "Настройки" #. module: sale #: selection:sale.report,month:0 @@ -773,7 +779,7 @@ msgstr "Сентябрь" #: code:addons/sale/sale.py:632 #, python-format msgid "You cannot confirm a sale order which has no line." -msgstr "" +msgstr "Нельзя подтвердить заказ на продажу без товара" #. module: sale #: code:addons/sale/sale.py:1259 @@ -782,6 +788,8 @@ msgid "" "You have to select a pricelist or a customer in the sales form !\n" "Please set one before choosing a product." msgstr "" +"Перед выбором ТМЦ, \n" +"вы должны выбрать прайс-лист или заказчика в форме ввода продаж !" #. module: sale #: view:sale.report:0 field:sale.report,categ_id:0 @@ -851,7 +859,7 @@ msgstr "" #. module: sale #: field:sale.order,date_order:0 msgid "Date" -msgstr "" +msgstr "Дата" #. module: sale #: view:sale.report:0 @@ -883,7 +891,7 @@ msgstr "" #: code:addons/sale/sale.py:1272 #, python-format msgid "No valid pricelist line found ! :" -msgstr "" +msgstr "Нет верной позиции в прайс листе ! :" #. module: sale #: view:sale.order:0 @@ -893,7 +901,7 @@ msgstr "Журнал" #. module: sale #: selection:sale.order,order_policy:0 msgid "Invoice on order after delivery" -msgstr "" +msgstr "Счет на заказ после отгрузки" #. module: sale #: help:sale.order,invoice_ids:0 @@ -935,7 +943,7 @@ msgstr "Ссылки" #. module: sale #: view:sale.order.line:0 msgid "My Sales Order Lines" -msgstr "" +msgstr "Мои позиции заказов на продажу" #. module: sale #: model:process.transition.action,name:sale.process_transition_action_cancel0 @@ -949,7 +957,7 @@ msgstr "Отмена" #. module: sale #: sql_constraint:sale.order:0 msgid "Order Reference must be unique per Company!" -msgstr "" +msgstr "Ссылка на заказ должны быть уникальной для каждой компании!" #. module: sale #: model:process.transition,name:sale.process_transition_invoice0 @@ -967,7 +975,7 @@ msgstr "Всего без налогов" #. module: sale #: view:sale.order.line:0 msgid "Order reference" -msgstr "" +msgstr "Ссылка на заказ" #. module: sale #: view:sale.open.invoice:0 @@ -1019,7 +1027,7 @@ msgstr "На основании отгруженного или заказанн #. module: sale #: selection:sale.order,picking_policy:0 msgid "Deliver all products at once" -msgstr "" +msgstr "Отгрузка всех товаров за раз" #. module: sale #: field:sale.order,picking_ids:0 @@ -1056,7 +1064,7 @@ msgstr "Создать заказ на доставку" #: code:addons/sale/sale.py:1303 #, python-format msgid "Cannot delete a sales order line which is in state '%s'!" -msgstr "" +msgstr "Нельзя удалить позицию заказа на продажу со статусом '%s'!" #. module: sale #: view:sale.order:0 @@ -1076,7 +1084,7 @@ msgstr "Создать комплектовочный лист" #. module: sale #: view:sale.report:0 msgid "Ordered date of the sales order" -msgstr "" +msgstr "Дата заказа в заказе на продажу" #. module: sale #: view:sale.report:0 @@ -1238,7 +1246,7 @@ msgstr "Налоги" #. module: sale #: view:sale.order:0 msgid "Sales Order ready to be invoiced" -msgstr "" +msgstr "Заказ на продажу готов к выставлению счета" #. module: sale #: help:sale.order,create_date:0 @@ -1258,7 +1266,7 @@ msgstr "Создать счета" #. module: sale #: view:sale.report:0 msgid "Sales order created in current month" -msgstr "" +msgstr "Заказы на продажу, созданные в этом месяце" #. module: sale #: report:sale.order:0 @@ -1300,6 +1308,8 @@ msgid "" "If you change the pricelist of this order (and eventually the currency), " "prices of existing order lines will not be updated." msgstr "" +"Даже если вы измените прайс-лист этого заказа (и даже валюту), то цена " +"позиции заказа не обновиться." #. module: sale #: model:ir.model,name:sale.model_stock_picking @@ -1323,12 +1333,12 @@ msgstr "Нельзя отменить заказ на продажу !" #. module: sale #: view:sale.order:0 msgid "Qty(UoM)" -msgstr "" +msgstr "Кол-во(Ед.изм)" #. module: sale #: view:sale.report:0 msgid "Ordered Year of the sales order" -msgstr "" +msgstr "Год заказа в заказе на продажу" #. module: sale #: selection:sale.report,month:0 @@ -1349,7 +1359,7 @@ msgstr "Исключение при доставке" #: code:addons/sale/sale.py:1156 #, python-format msgid "Picking Information ! : " -msgstr "" +msgstr "Информация по комплектованию ! : " #. module: sale #: field:sale.make.invoice,grouped:0 @@ -1359,13 +1369,13 @@ msgstr "Сгруппировать счета" #. module: sale #: field:sale.order,order_policy:0 msgid "Invoice Policy" -msgstr "" +msgstr "Политика выставления счета" #. module: sale #: model:ir.actions.act_window,name:sale.action_config_picking_policy #: view:sale.config.picking_policy:0 msgid "Setup your Invoicing Method" -msgstr "" +msgstr "Настройка способа выставления счета" #. module: sale #: model:process.node,note:sale.process_node_invoice0 @@ -1383,6 +1393,9 @@ msgid "" "This tool will help you to install the right module and configure the system " "according to the method you use to invoice your customers." msgstr "" +"Этот инструмент поможет вам установить правильный модуль и настроить систему " +"в соответствии с методом который вы используете для выставления счетов своим " +"клиентам." #. module: sale #: model:ir.model,name:sale.model_sale_order_line_make_invoice @@ -1457,13 +1470,13 @@ msgstr "" #. module: sale #: view:sale.order.line:0 msgid "Confirmed sale order lines, not yet delivered" -msgstr "" +msgstr "Не доставленные подтвержденные позиции заказа на продажу" #. module: sale #: code:addons/sale/sale.py:473 #, python-format msgid "Customer Invoices" -msgstr "" +msgstr "Счета заказчику" #. module: sale #: model:process.process,name:sale.process_process_salesprocess0 @@ -1544,7 +1557,7 @@ msgstr "Месяц" #. module: sale #: model:email.template,subject:sale.email_template_edi_sale msgid "${object.company_id.name} Order (Ref ${object.name or 'n/a' })" -msgstr "" +msgstr "${object.company_id.name} Заказ (Ссылка ${object.name or 'n/a' })" #. module: sale #: view:sale.order.line:0 field:sale.order.line,product_id:0 @@ -1566,7 +1579,7 @@ msgstr "sale.config.picking_policy" #: view:account.invoice.report:0 view:board.board:0 #: model:ir.actions.act_window,name:sale.action_turnover_by_month msgid "Monthly Turnover" -msgstr "" +msgstr "Ежемесячный оборот" #. module: sale #: field:sale.order,invoice_quantity:0 @@ -1677,12 +1690,12 @@ msgstr "" #. module: sale #: selection:sale.order,order_policy:0 msgid "Pay before delivery" -msgstr "" +msgstr "Оплата перед отгрузкой" #. module: sale #: view:board.board:0 model:ir.actions.act_window,name:sale.open_board_sales msgid "Sales Dashboard" -msgstr "" +msgstr "Панель продаж" #. module: sale #: model:ir.actions.act_window,name:sale.action_sale_order_make_invoice @@ -1730,6 +1743,8 @@ msgid "" "Couldn't find a pricelist line matching this product and quantity.\n" "You have to change either the product, the quantity or the pricelist." msgstr "" +"Не удалось найти позицию в прайс-листе для этого товара и этого количества.\n" +"Вы должны изменить товар, количество или прайс-лист." #. module: sale #: help:sale.order,picking_ids:0 @@ -1756,7 +1771,7 @@ msgstr "Отменено" #. module: sale #: view:sale.order.line:0 msgid "Sales Order Lines related to a Sales Order of mine" -msgstr "" +msgstr "Позиции заказа на продажу относящиеся к моим заказам" #. module: sale #: model:ir.actions.act_window,name:sale.action_shop_form @@ -1799,7 +1814,7 @@ msgstr "Количество (UoS)" #. module: sale #: view:sale.order.line:0 msgid "Sale Order Lines that are in 'done' state" -msgstr "" +msgstr "Позиции заказа на продажу в состоянии «Сделано»" #. module: sale #: model:process.transition,note:sale.process_transition_packing0 @@ -1823,7 +1838,7 @@ msgstr "Подтвержден" #. module: sale #: field:sale.config.picking_policy,order_policy:0 msgid "Main Method Based On" -msgstr "" +msgstr "Основной метод основан на" #. module: sale #: model:process.transition.action,name:sale.process_transition_action_confirm0 @@ -1871,12 +1886,12 @@ msgstr "" #. module: sale #: view:sale.order:0 msgid "Print Order" -msgstr "" +msgstr "Печать заказа" #. module: sale #: view:sale.report:0 msgid "Sales order created in current year" -msgstr "" +msgstr "Заказы на продажу созданные в этом году" #. module: sale #: code:addons/sale/wizard/sale_line_invoice.py:113 @@ -1894,7 +1909,7 @@ msgstr "" #. module: sale #: view:sale.order.line:0 msgid "Sale order lines done" -msgstr "" +msgstr "Позиции заказа на продажу сделаны" #. module: sale #: field:sale.order.line,th_weight:0 @@ -2003,18 +2018,18 @@ msgstr "Упаковки" #. module: sale #: view:sale.order.line:0 msgid "Sale Order Lines ready to be invoiced" -msgstr "" +msgstr "Позиции заказа на продажу готовы к выставлению счета" #. module: sale #: view:sale.report:0 msgid "Sales order created in last month" -msgstr "" +msgstr "Заказы на продажу созданные в прошлом месяце" #. module: sale #: model:ir.actions.act_window,name:sale.action_email_templates #: model:ir.ui.menu,name:sale.menu_email_templates msgid "Email Templates" -msgstr "" +msgstr "Шаблоны писем" #. module: sale #: model:ir.actions.act_window,name:sale.action_order_form @@ -2072,7 +2087,7 @@ msgstr "Задержка по обязательствам" #. module: sale #: selection:sale.order,order_policy:0 msgid "Deliver & invoice on demand" -msgstr "" +msgstr "Доставка и счета по требованию" #. module: sale #: model:process.node,note:sale.process_node_saleprocurement0 @@ -2101,7 +2116,7 @@ msgstr "Подтвержденный заказ на продажу в счет" #. module: sale #: view:sale.order:0 msgid "Sales Order that haven't yet been confirmed" -msgstr "" +msgstr "Заказы на продажу, которые еще не были подтверждены" #. module: sale #: code:addons/sale/sale.py:322 @@ -2123,7 +2138,7 @@ msgstr "Закрыть" #: code:addons/sale/sale.py:1261 #, python-format msgid "No Pricelist ! : " -msgstr "" +msgstr "Нет прайс листа ! : " #. module: sale #: field:sale.order,shipped:0 @@ -2204,7 +2219,7 @@ msgstr "Запрос заказа на продажу" #: code:addons/sale/sale.py:1255 #, python-format msgid "Not enough stock ! : " -msgstr "" +msgstr "Не достаточно запасов ! : " #. module: sale #: report:sale.order:0 field:sale.order,payment_term:0 diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 6a6678d6163..553b8993ab8 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -769,13 +769,18 @@ class sale_order(osv.osv): template_id = template and template[1] or False res = mod_obj.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form') res_id = res and res[1] or False - ctx = dict(context, active_model='sale.order', active_id=ids[0]) - ctx.update({'mail.compose.template_id': template_id}) + ctx = dict(context) + ctx.update({ + 'default_model': 'sale.order', + 'default_res_id': ids[0], + 'default_use_template': True, + 'default_template_id': template_id, + }) return { 'view_type': 'form', 'view_mode': 'form', 'res_model': 'mail.compose.message', - 'views': [(res_id,'form')], + 'views': [(res_id, 'form')], 'view_id': res_id, 'type': 'ir.actions.act_window', 'target': 'new', diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 2c2acff227e..af86cf9b218 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -158,8 +158,8 @@ <button name="ship_corrected" states="shipping_except" string="Ignore Exception"/> <button name="action_quotation_send" string="Send by Mail" type="object" states="draft" class="oe_highlight"/> <button name="action_quotation_send" string="Send by Mail" type="object" states="sent"/> - <button name="print_quotation" string="Send by Post" type="object" states="draft" class="oe_highlight"/> - <button name="print_quotation" string="Send by Post" type="object" states="sent"/> + <button name="print_quotation" string="Print" type="object" states="draft" class="oe_highlight"/> + <button name="print_quotation" string="Print" type="object" states="sent"/> <button name="action_button_confirm" states="draft" string="Confirm" type="object"/> <button name="action_button_confirm" states="sent" string="Confirm" class="oe_highlight" type="object"/> <button name="action_view_invoice" string="View Invoice" type="object" class="oe_highlight" @@ -183,7 +183,7 @@ </h1> <group> <group> - <field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="[('customer','=',True)]" context="{'search_default_customer':1, 'show_address': 1}" options='{"always_reload": true, "highlight_first_line": true}'/> + <field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="[('customer','=',True)]" context="{'search_default_customer':1, 'show_address': 1}" options='{"always_reload": true}'/> <field domain="[('parent_id','=',partner_id)]" name="partner_invoice_id" groups="sale.group_delivery_invoice_address"/> <field domain="[('parent_id','=',partner_id)]" name="partner_shipping_id" groups="sale.group_delivery_invoice_address"/> <field name="project_id" context="{'partner_id':partner_id, 'pricelist_id':pricelist_id, 'default_name':name}" groups="sale.group_analytic_accounting" domain="[('type','in',['view','normal','contract'])]"/> @@ -404,7 +404,8 @@ <field name="view_type">form</field> <field name="view_mode">tree,form,calendar,graph</field> <field name="search_view_id" ref="view_sales_order_filter"/> - <field name="context">{"search_default_sales":1}</field> + <field name="context">{}</field> + <field name="domain">[('state','not in',('draft','sent','cancel'))]</field> <field name="help" type="html"> <p class="oe_view_nocontent_create"> Click to create a quotation that can be converted into a sale @@ -445,7 +446,8 @@ <field name="res_model">sale.order</field> <field name="view_type">form</field> <field name="view_mode">tree,form,calendar,graph</field> - <field name="context">{"search_default_draft":1}</field> + <field name="context">{}</field> + <field name="domain">[('state','in',('draft','sent','cancel'))]</field> <field name="search_view_id" ref="view_sales_order_filter"/> <field name="help" type="html"> <p class="oe_view_nocontent_create"> diff --git a/addons/sale/security/sale_security.xml b/addons/sale/security/sale_security.xml index 47a577e77c3..5e1f4e25b52 100644 --- a/addons/sale/security/sale_security.xml +++ b/addons/sale/security/sale_security.xml @@ -3,18 +3,21 @@ <data noupdate="0"> <record id="base.group_sale_salesman" model="res.groups"> - <field name="name">User - Own Leads Only</field> + <field name="name">See Own Leads</field> <field name="category_id" ref="base.module_category_sales_management"/> + <field name="comment">the user will have access to his own data in the sales application.</field> </record> <record id="base.group_sale_salesman_all_leads" model="res.groups"> - <field name="name">User - All Leads</field> + <field name="name">See all Leads</field> <field name="category_id" ref="base.module_category_sales_management"/> <field name="implied_ids" eval="[(4, ref('base.group_sale_salesman'))]"/> + <field name="comment">the user will have access to all records of everyone in the sales application.</field> </record> <record id="base.group_sale_manager" model="res.groups"> <field name="name">Manager</field> + <field name="comment">the user will have an access to the sales configuration as well as statistic reports.</field> <field name="category_id" ref="base.module_category_sales_management"/> <field name="implied_ids" eval="[(4, ref('base.group_sale_salesman_all_leads'))]"/> <field name="users" eval="[(4, ref('base.user_root'))]"/> diff --git a/addons/sale/wizard/sale_make_invoice_advance.py b/addons/sale/wizard/sale_make_invoice_advance.py index a672c6b680a..a2c45bead62 100644 --- a/addons/sale/wizard/sale_make_invoice_advance.py +++ b/addons/sale/wizard/sale_make_invoice_advance.py @@ -28,9 +28,9 @@ class sale_advance_payment_inv(osv.osv_memory): _columns = { 'advance_payment_method':fields.selection( - [('all', 'Invoice all the Sale Order'), ('percentage','Percentage'), ('fixed','Fixed Price'), - ('lines', 'Some Order Lines')], - 'Type', required=True, + [('all', 'Invoice the whole sale order'), ('percentage','Percentage'), ('fixed','Fixed price (deposit)'), + ('lines', 'Some order lines')], + 'Invoice Method', required=True, help="""Use All to create the final invoice. Use Percentage to invoice a percentage of the total amount. Use Fixed Price to invoice a specific amound in advance. diff --git a/addons/sale/wizard/sale_make_invoice_advance.xml b/addons/sale/wizard/sale_make_invoice_advance.xml index 97e9c843683..17821f519a6 100644 --- a/addons/sale/wizard/sale_make_invoice_advance.xml +++ b/addons/sale/wizard/sale_make_invoice_advance.xml @@ -2,12 +2,17 @@ <openerp> <data> <record id="view_sale_advance_payment_inv" model="ir.ui.view"> - <field name="name">Advance Invoice</field> + <field name="name">Invoice Order</field> <field name="model">sale.advance.payment.inv</field> <field name="arch" type="xml"> - <form string="Advance Invoice" version="7.0"> + <form string="Invoice Sale Order" version="7.0"> + <p class="oe_grey"> + Select how you want to invoice this order. This + will create a draft invoice that can be modified + before validation. + </p> <group> - <field name="advance_payment_method" + <field name="advance_payment_method" class="oe_inline" on_change="onchange_method(advance_payment_method, product_id)"/> <field name="qtty" invisible="1"/> <field name="product_id" @@ -23,15 +28,15 @@ </div> </group> <div> - <b><label string="After clicking 'Show Lines to Invoice' button, select lines to invoice and make invoice from the 'More' button." attrs="{'invisible': [('advance_payment_method', '!=', 'lines')]}"/></b> + <b><label string="After clicking 'Show Lines to Invoice', select lines to invoice and create the invoice from the 'More' dropdown menu." attrs="{'invisible': [('advance_payment_method', '!=', 'lines')]}"/></b> </div> <footer> + <button name="create_invoices" string="Create and View Invoice" type="object" + context="{'open_invoices': True}" class="oe_highlight" + attrs="{'invisible': [('advance_payment_method', '=', 'lines')]}"/> <button name="create_invoices" string="Create Invoice" type="object" class="oe_highlight" attrs="{'invisible': [('advance_payment_method', '=', 'lines')]}"/> - <button name="create_invoices" string="Create and view Invoice" type="object" - context="{'open_invoices': True}" class="oe_highlight" - attrs="{'invisible': [('advance_payment_method', '=', 'lines')]}"/> <button name="create_invoices" string="Show Lines to Invoice" type="object" class="oe_highlight" attrs="{'invisible': [('advance_payment_method', '!=', 'lines')]}"/> @@ -43,7 +48,7 @@ </record> <record id="action_view_sale_advance_payment_inv" model="ir.actions.act_window"> - <field name="name">Advance Invoice</field> + <field name="name">Invoice Order</field> <field name="type">ir.actions.act_window</field> <field name="res_model">sale.advance.payment.inv</field> <field name="view_type">form</field> diff --git a/addons/sale_margin/sale_margin.py b/addons/sale_margin/sale_margin.py index 82a7150b6d1..64e07276c08 100644 --- a/addons/sale_margin/sale_margin.py +++ b/addons/sale_margin/sale_margin.py @@ -70,7 +70,7 @@ class sale_order(osv.osv): return result def _get_order(self, cr, uid, ids, context=None): - return super(self,sale_order)._get_order(cr, uid, ids, context=context) + return super(sale_order, self)._get_order(cr, uid, ids, context=context) _columns = { 'margin': fields.function(_product_margin, string='Margin', help="It gives profitability by calculating the difference between the Unit Price and Cost Price.", store={ diff --git a/addons/sale_mrp/security/ir.model.access.csv b/addons/sale_mrp/security/ir.model.access.csv index 4f0f0f8072c..a0f117b61e5 100644 --- a/addons/sale_mrp/security/ir.model.access.csv +++ b/addons/sale_mrp/security/ir.model.access.csv @@ -2,4 +2,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_mrp_bom_user,mrp.bom,mrp.model_mrp_bom,base.group_sale_salesman,1,0,0,0
access_sale_order_manufacturing_user,sale.order manufacturing.user,sale.model_sale_order,mrp.group_mrp_user,1,1,0,0
access_sale_order_line_manufacturing_user,sale.order.line manufacturing.user,sale.model_sale_order_line,mrp.group_mrp_user,1,1,0,0
-access_mrp_bom_revision_salesman,mrp.bom.revision,mrp.model_mrp_bom_revision,base.group_sale_salesman,1,0,0,0
diff --git a/addons/share/i18n/ru.po b/addons/share/i18n/ru.po index effec5d5f99..5e430205ec4 100644 --- a/addons/share/i18n/ru.po +++ b/addons/share/i18n/ru.po @@ -8,39 +8,39 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2012-02-08 01:37+0100\n" -"PO-Revision-Date: 2011-04-26 05:57+0000\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"PO-Revision-Date: 2012-09-10 14:15+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-08-28 06:34+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-11 04:50+0000\n" +"X-Generator: Launchpad (build 15924)\n" #. module: share #: field:share.wizard,embed_option_title:0 msgid "Display title" -msgstr "" +msgstr "Название отображения" #. module: share #: view:share.wizard:0 msgid "Access granted!" -msgstr "" +msgstr "Access granted!" #. module: share #: field:share.wizard,user_type:0 msgid "Sharing method" -msgstr "" +msgstr "Метод совместного доступа" #. module: share #: view:share.wizard:0 msgid "Share with these People (one email per line)" -msgstr "" +msgstr "Совместный доступ с этими людьми (один эл.адрес в строке)" #. module: share #: field:share.wizard,name:0 msgid "Share Title" -msgstr "" +msgstr "Название совместного доступа" #. module: share #: model:ir.module.category,name:share.module_category_share @@ -50,19 +50,20 @@ msgstr "Совместный доступ" #. module: share #: field:share.wizard,share_root_url:0 msgid "Share Access URL" -msgstr "" +msgstr "Адрес(URL) совместного доступа" #. module: share #: code:addons/share/wizard/share_wizard.py:782 #, python-format msgid "You may use your current login (%s) and password to view them.\n" msgstr "" +"Вы можете использовать ваш текущий логин (%s) и пароль, для их просмотра.\n" #. module: share #: code:addons/share/wizard/share_wizard.py:601 #, python-format msgid "(Modified)" -msgstr "" +msgstr "(Изменено)" #. module: share #: code:addons/share/wizard/share_wizard.py:769 @@ -71,6 +72,7 @@ msgid "" "The documents are not attached, you can view them online directly on my " "OpenERP server at:" msgstr "" +"Документы не вложены, их можно просмотреть онлайн на OpenERP сервере:" #. module: share #: code:addons/share/wizard/share_wizard.py:579 @@ -88,7 +90,7 @@ msgstr "Адрес совместного доступа" #: code:addons/share/wizard/share_wizard.py:776 #, python-format msgid "These are your credentials to access this protected area:\n" -msgstr "" +msgstr "Это ваши учетные данные для доступа с защищенной области:\n" #. module: share #: code:addons/share/wizard/share_wizard.py:643 @@ -110,7 +112,7 @@ msgstr "Совместный доступ" #: code:addons/share/wizard/share_wizard.py:551 #, python-format msgid "(Duplicated for modified sharing permissions)" -msgstr "" +msgstr "(Дублирован для измененных прав совместного доступа)" #. module: share #: help:share.wizard,domain:0 @@ -125,7 +127,7 @@ msgstr "Вы не можете иметь двух одинаковых поль #. module: share #: model:ir.model,name:share.model_ir_model_access msgid "ir.model.access" -msgstr "" +msgstr "ir.model.access" #. module: share #: view:share.wizard:0 @@ -141,13 +143,13 @@ msgstr "Пользователь" #. module: share #: view:share.wizard:0 msgid "Sharing Options" -msgstr "" +msgstr "Параметры общего доступа" #. module: share #: code:addons/share/wizard/share_wizard.py:765 #, python-format msgid "Hello," -msgstr "" +msgstr "Здравствуйте," #. module: share #: view:share.wizard:0 @@ -158,7 +160,7 @@ msgstr "Закрыть" #: code:addons/share/wizard/share_wizard.py:640 #, python-format msgid "Action and Access Mode are required to create a shared access" -msgstr "" +msgstr "Действие и режим доступа необходимы для создания общего доступа" #. module: share #: view:share.wizard:0 @@ -176,6 +178,7 @@ msgid "" "The documents have been automatically added to your current OpenERP " "documents.\n" msgstr "" +"Документы были автоматически добавлены к вашим текущим документам OpenERP .\n" #. module: share #: view:share.wizard:0 @@ -206,11 +209,13 @@ msgstr "" #: help:share.wizard,name:0 msgid "Title for the share (displayed to users as menu and shortcut name)" msgstr "" +"Название для общего доступа (выводится пользователям как меню и название " +"закладки)" #. module: share #: view:share.wizard:0 msgid "Options" -msgstr "" +msgstr "Настройки" #. module: share #: view:res.groups:0 @@ -225,6 +230,9 @@ msgid "" "Sales, HR, etc.)\n" "It is open source and can be found on http://www.openerp.com." msgstr "" +"OpenERP является мощным и удобным набором бизнес-приложений (CRM, продажи, " +"кадры и т.д.)\n" +"с открытым исходным кодом. Сайт: www.openerp.com ." #. module: share #: field:share.wizard,action_id:0 @@ -234,7 +242,7 @@ msgstr "Действие совместного доступа" #. module: share #: view:share.wizard:0 msgid "Optional: include a personal message" -msgstr "" +msgstr "Дополнительно: включить личное сообщение" #. module: share #: field:res.users,share:0 @@ -246,11 +254,13 @@ msgstr "Совместный доступ с пользователем" #, python-format msgid "Please indicate the emails of the persons to share with, one per line" msgstr "" +"Пожалуйста, укажите эл.адреса лиц для совместного доступа, один адрес в " +"строке" #. module: share #: field:share.wizard,embed_code:0 field:share.wizard.result.line,user_id:0 msgid "unknown" -msgstr "" +msgstr "неизвесно" #. module: share #: help:res.groups,share:0 @@ -295,12 +305,14 @@ msgstr "" #: code:addons/share/wizard/share_wizard.py:767 #, python-format msgid "I've shared %s with you!" -msgstr "" +msgstr "Я предоставил вам доступ к %s !" #. module: share #: help:share.wizard,share_root_url:0 msgid "Main access page for users that are granted shared access" msgstr "" +"Главная страница доступа для пользователей, которым предоставляется " +"совместный доступ" #. module: share #: sql_constraint:res.groups:0 @@ -310,7 +322,7 @@ msgstr "Название группы должно быть уникальным #. module: share #: model:res.groups,name:share.group_share_user msgid "User" -msgstr "" +msgstr "Пользователь" #. module: share #: view:res.groups:0 @@ -333,7 +345,7 @@ msgstr "" #. module: share #: view:share.wizard:0 msgid "Use this Link" -msgstr "" +msgstr "Используйте эту ссылку" #. module: share #: code:addons/share/wizard/share_wizard.py:779 @@ -360,12 +372,13 @@ msgstr "Скопированы права совместного доступа" #. module: share #: model:ir.actions.act_window,name:share.action_share_wizard_step1 msgid "Share your documents" -msgstr "" +msgstr "Поделитесь своими документами" #. module: share #: view:share.wizard:0 msgid "Or insert the following code where you want to embed your documents" msgstr "" +"Или вставьте следующий код туда, где вы хотите вставить ваши документы" #. module: share #: view:share.wizard:0 @@ -373,6 +386,7 @@ msgid "" "An email notification with instructions has been sent to the following " "people:" msgstr "" +"Уведомление с инструкциями было отправлено по эл.почте следующим людям:" #. module: share #: model:ir.model,name:share.model_share_wizard_result_line @@ -389,23 +403,23 @@ msgstr "" #. module: share #: field:share.wizard,view_type:0 msgid "Current View Type" -msgstr "" +msgstr "Тип этого вида" #. module: share #: selection:share.wizard,access_mode:0 msgid "Can view" -msgstr "" +msgstr "Можно просматривать" #. module: share #: selection:share.wizard,access_mode:0 msgid "Can edit" -msgstr "" +msgstr "Можно редактировать" #. module: share #: help:share.wizard,message:0 msgid "" "An optional personal message, to be included in the email notification." -msgstr "" +msgstr "Персональное сообщение, которое может быть включено в эл.письмо." #. module: share #: model:ir.model,name:share.model_res_users @@ -417,7 +431,7 @@ msgstr "res.users" #: code:addons/share/wizard/share_wizard.py:635 #, python-format msgid "Sharing access could not be created" -msgstr "" +msgstr "Общий доступ не был создан" #. module: share #: help:res.users,share:0 @@ -439,7 +453,7 @@ msgstr "Мастер совместного доступа" #: code:addons/share/wizard/share_wizard.py:740 #, python-format msgid "Shared access created!" -msgstr "" +msgstr "Общий доступ создан!" #. module: share #: model:res.groups,comment:share.group_share_user @@ -448,6 +462,10 @@ msgid "" "Members of this groups have access to the sharing wizard, which allows them " "to invite external users to view or edit some of their documents." msgstr "" +"\n" +"Члены этой группы имеют доступ к мастеру совместного доступа , который " +"позволяет им приглашать внешних пользователей, для просмотра или изменения " +"некоторых своих документов." #. module: share #: model:ir.model,name:share.model_res_groups @@ -464,23 +482,23 @@ msgstr "Пароль" #. module: share #: field:share.wizard,new_users:0 msgid "Emails" -msgstr "" +msgstr "Эл.почта" #. module: share #: field:share.wizard,embed_option_search:0 msgid "Display search view" -msgstr "" +msgstr "Показать поиск" #. module: share #: code:addons/share/wizard/share_wizard.py:197 #, python-format msgid "No email address configured" -msgstr "" +msgstr "Не настроен адрес эл.почты" #. module: share #: field:share.wizard,message:0 msgid "Personal Message" -msgstr "" +msgstr "Личное сообщение" #. module: share #: code:addons/share/wizard/share_wizard.py:763 @@ -495,7 +513,7 @@ msgstr "" #. module: share #: field:share.wizard.result.line,login:0 msgid "Login" -msgstr "" +msgstr "Имя пользователя" #. module: share #: view:res.users:0 @@ -510,7 +528,7 @@ msgstr "Режим доступа" #. module: share #: view:share.wizard:0 msgid "Sharing: preparation" -msgstr "" +msgstr "Совместный доступ: подготовка" #. module: share #: code:addons/share/wizard/share_wizard.py:198 @@ -519,21 +537,23 @@ msgid "" "You must configure your email address in the user preferences before using " "the Share button." msgstr "" +"Вы должны настроить ваш адрес электронной почты в настройках пользователя, " +"прежде чем использовать кнопку \"Совместный доступ\"." #. module: share #: help:share.wizard,access_mode:0 msgid "Access rights to be granted on the shared documents." -msgstr "" +msgstr "Права доступа будут предоставлены на документы совместного доступа" #. openerp-web #: /home/odo/repositories/addons/trunk/share/static/src/xml/share.xml:8 msgid "Link or embed..." -msgstr "" +msgstr "Ссылка или встроить ..." #. openerp-web #: /home/odo/repositories/addons/trunk/share/static/src/xml/share.xml:9 msgid "Share with..." -msgstr "" +msgstr "Совместный доступ с..." #, python-format #~ msgid "" diff --git a/addons/stock/i18n/ru.po b/addons/stock/i18n/ru.po index 65846a6b84d..09143eebcef 100644 --- a/addons/stock/i18n/ru.po +++ b/addons/stock/i18n/ru.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-02-08 01:37+0100\n" -"PO-Revision-Date: 2012-05-10 18:04+0000\n" +"PO-Revision-Date: 2012-09-10 11:41+0000\n" "Last-Translator: Chertykov Denis <chertykov@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-28 05:57+0000\n" -"X-Generator: Launchpad (build 15864)\n" +"X-Launchpad-Export-Date: 2012-09-11 04:50+0000\n" +"X-Generator: Launchpad (build 15924)\n" #. module: stock #: field:product.product,track_outgoing:0 @@ -698,6 +698,7 @@ msgid "" "There is no inventory Valuation account defined on the product category: " "\"%s\" (id: %d)" msgstr "" +"Не определен счет оценки запасов для категории продукта: \"%s\" (id: %d)" #. module: stock #: view:report.stock.move:0 @@ -1059,7 +1060,7 @@ msgstr "" #. module: stock #: field:product.category,property_stock_valuation_account_id:0 msgid "Stock Valuation Account" -msgstr "" +msgstr "Счет складских запасов" #. module: stock #: code:addons/stock/stock.py:1349 @@ -1529,7 +1530,7 @@ msgstr "Общая информация" #. module: stock #: view:report.stock.inventory:0 msgid "Analysis including future moves (similar to virtual stock)" -msgstr "" +msgstr "Анализ включающий будущие перемещения (подобно виртуальным остаткам)" #. module: stock #: model:ir.actions.act_window,name:stock.action3 view:stock.tracking:0 @@ -1929,7 +1930,7 @@ msgstr "Оценка запасов" #. module: stock #: view:stock.move:0 msgid "Orders planned for today" -msgstr "" +msgstr "Документы запланированные на сегодня" #. module: stock #: view:stock.move:0 view:stock.picking:0 @@ -2078,7 +2079,7 @@ msgstr "Логистическая единица: поддон, ящик, упÐ #. module: stock #: view:stock.location:0 msgid "Customer Locations" -msgstr "" +msgstr "Места хранения заказчиков" #. module: stock #: view:stock.change.product.qty:0 view:stock.change.standard.price:0 @@ -2289,7 +2290,7 @@ msgstr "Тип поставки" #. module: stock #: view:stock.move:0 msgid "Stock moves that are Confirmed, Available or Waiting" -msgstr "" +msgstr "Перемещения которые подтверждены, доступны или в ожидании" #. module: stock #: model:ir.actions.act_window,name:stock.act_product_location_open @@ -2553,7 +2554,7 @@ msgstr "" #. module: stock #: model:stock.location,name:stock.location_opening msgid "opening" -msgstr "" +msgstr "открытие" #. module: stock #: model:ir.actions.report.xml,name:stock.report_product_history @@ -2638,7 +2639,7 @@ msgstr "Ваша компания" #. module: stock #: constraint:stock.move:0 msgid "You can not move products from or to a location of the type view." -msgstr "" +msgstr "Нельзя переместить ТМЦ в/из место хранения типа вид." #. module: stock #: help:stock.tracking,active:0 @@ -2974,7 +2975,7 @@ msgstr "Продукция" #. module: stock #: view:stock.return.picking:0 msgid "Return" -msgstr "" +msgstr "Возврат" #. module: stock #: field:stock.return.picking,invoice_state:0 @@ -2984,7 +2985,7 @@ msgstr "Выставление счета" #. module: stock #: view:stock.picking:0 msgid "Assigned Internal Moves" -msgstr "" +msgstr "Назначенные внутренние перемещения" #. module: stock #: code:addons/stock/stock.py:2379 code:addons/stock/stock.py:2440 @@ -3053,12 +3054,12 @@ msgstr "ТМЦ по категориям" #. module: stock #: selection:stock.picking,state:0 msgid "Waiting Another Operation" -msgstr "" +msgstr "Ожидание другой операции" #. module: stock #: view:stock.location:0 msgid "Supplier Locations" -msgstr "" +msgstr "Места хранения поставщиков" #. module: stock #: field:stock.partial.move.line,wizard_id:0 @@ -3070,7 +3071,7 @@ msgstr "Мастер" #. module: stock #: view:report.stock.move:0 msgid "Completed Stock-Moves" -msgstr "" +msgstr "Вычисленные перемещения" #. module: stock #: model:ir.actions.act_window,name:stock.action_view_stock_location_product @@ -3124,7 +3125,7 @@ msgstr "Место хранения источника" #. module: stock #: view:stock.move:0 msgid " Waiting" -msgstr "" +msgstr " Ожидание" #. module: stock #: view:product.template:0 @@ -3134,7 +3135,7 @@ msgstr "Бухгалтерские проводки" #. module: stock #: model:res.groups,name:stock.group_stock_manager msgid "Manager" -msgstr "" +msgstr "Менеджер" #. module: stock #: report:stock.picking.list:0 @@ -3242,12 +3243,12 @@ msgstr "Причина" #. module: stock #: model:product.template,name:stock.product_icecream_product_template msgid "Ice Cream" -msgstr "" +msgstr "Мороженое" #. module: stock #: model:ir.model,name:stock.model_stock_partial_picking msgid "Partial Picking Processing Wizard" -msgstr "" +msgstr "Запуск мастера частичного комплектования" #. module: stock #: model:ir.actions.act_window,help:stock.action_production_lot_form @@ -3527,7 +3528,7 @@ msgstr "Создать счет" #. module: stock #: view:stock.picking:0 msgid "Confirmed Internal Moves" -msgstr "" +msgstr "Подтвержденные внутренние перемещения" #. module: stock #: model:ir.ui.menu,name:stock.menu_stock_configuration @@ -3584,7 +3585,7 @@ msgstr "Клиенты" #. module: stock #: selection:stock.move,state:0 selection:stock.picking,state:0 msgid "Waiting Availability" -msgstr "" +msgstr "Ожидание поступления" #. module: stock #: code:addons/stock/stock.py:1347 @@ -3600,7 +3601,7 @@ msgstr "Позиции инвентаризации склада" #. module: stock #: view:stock.move:0 msgid "Waiting " -msgstr "" +msgstr "Ожидание " #. module: stock #: code:addons/stock/product.py:427 @@ -3646,7 +3647,7 @@ msgstr "Декабрь" #. module: stock #: view:stock.production.lot:0 msgid "Available Product Lots" -msgstr "" +msgstr "Партии доступных ТМЦ" #. module: stock #: model:ir.actions.act_window,help:stock.action_move_form2 @@ -3789,7 +3790,7 @@ msgstr "Обнулить" #. module: stock #: model:res.groups,name:stock.group_stock_user msgid "User" -msgstr "" +msgstr "Пользователь" #. module: stock #: code:addons/stock/wizard/stock_invoice_onshipping.py:98 @@ -4001,7 +4002,7 @@ msgstr "" #. module: stock #: view:report.stock.move:0 msgid "Future Stock-Moves" -msgstr "" +msgstr "Будущие перемещения" #. module: stock #: model:ir.model,name:stock.model_stock_move_split @@ -4012,7 +4013,7 @@ msgstr "Разбиение в партиях изделий" #: code:addons/stock/wizard/stock_move.py:213 #, python-format msgid "Processing Error" -msgstr "" +msgstr "Ошибка обработки" #. module: stock #: view:report.stock.inventory:0 @@ -4085,12 +4086,12 @@ msgstr "Идентификация партии изделий" #. module: stock #: model:stock.location,name:stock.location_refrigerator_small msgid "Small Refrigerator" -msgstr "" +msgstr "Маленький холодильник" #. module: stock #: model:stock.location,name:stock.location_convenience_shop msgid "Convenient Store" -msgstr "" +msgstr "Удобный магазин" #. module: stock #: field:stock.location,scrap_location:0 view:stock.move.scrap:0 @@ -4140,7 +4141,7 @@ msgstr "" #. module: stock #: constraint:res.partner:0 msgid "Error ! You cannot create recursive associated members." -msgstr "" +msgstr "Ошибка! Вы не можете создавать рекурсивные ссылки на участников." #. module: stock #: code:addons/stock/wizard/stock_partial_picking.py:159 @@ -4161,7 +4162,7 @@ msgstr "" #. module: stock #: constraint:product.category:0 msgid "Error ! You cannot create recursive categories." -msgstr "" +msgstr "Ошибка ! Нельзя создавать рекурсивные категории." #. module: stock #: help:stock.move,move_dest_id:0 diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 006af587c1f..31d5a68c9fe 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -1577,7 +1577,13 @@ class stock_move(osv.osv): def name_get(self, cr, uid, ids, context=None): res = [] for line in self.browse(cr, uid, ids, context=context): - res.append((line.id, (line.product_id.code or '/')+': '+line.location_id.name+' > '+line.location_dest_id.name)) + name = line.location_id.name+' > '+line.location_dest_id.name + # optional prefixes + if line.product_id.code: + name = line.product_id.code + ': ' + name + if line.picking_id.origin: + name = line.picking_id.origin + '/ ' + name + res.append((line.id, name)) return res def _check_tracking(self, cr, uid, ids, context=None): @@ -2539,11 +2545,6 @@ class stock_move(osv.osv): } self.write(cr, uid, [move.id], update_val) - product_obj = self.pool.get('product.product') - for new_move in self.browse(cr, uid, res, context=context): - message = _("Product has been consumed with '%s' quantity.") % (new_move.product_qty) - product_obj.message_post(cr, uid, [new_move.product_id.id], body=message, context=context) - self.action_done(cr, uid, res, context=context) return res diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml index 3560b255ab5..154927a2f19 100644 --- a/addons/stock/stock_view.xml +++ b/addons/stock/stock_view.xml @@ -164,14 +164,14 @@ <field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/> <field name="product_uom" string="Unit of Measure" groups="product.group_uom"/> <field name="prodlot_id" groups="stock.group_production_lot"/> - <button name="%(track_line)d" string="Split in serial numbers" type="action" + <button name="%(track_line)d" string="Split in serial numbers" type="action" icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('prodlot_id','<>',False)]}" states="draft,done,cancel" context="{'inventory_id':parent.id}" groups="stock.group_production_lot"/> - <field groups="stock.group_tracking_lot" name="tracking_id"/> - <button name="%(split_into)d" string="Put in a new pack" type="action" + <field groups="stock.group_tracking_lot" name="tracking_id"/> + <button name="%(split_into)d" string="Put in a new pack" type="action" groups="stock.group_tracking_lot" icon="terp-stock_effects-object-colorize" context="{'inventory_id':parent.id}" diff --git a/addons/stock/wizard/stock_change_product_qty.py b/addons/stock/wizard/stock_change_product_qty.py index 5aa4649af02..3c1ba2c17a0 100644 --- a/addons/stock/wizard/stock_change_product_qty.py +++ b/addons/stock/wizard/stock_change_product_qty.py @@ -30,7 +30,7 @@ class stock_change_product_qty(osv.osv_memory): _description = "Change Product Quantity" _columns = { 'product_id' : fields.many2one('product.product', 'Product'), - 'new_quantity': fields.float('Quantity', digits_compute=dp.get_precision('Product Unit of Measure'), required=True, help='This quantity is expressed in the Default Unit of Measure of the product.'), + 'new_quantity': fields.float('New Quantity on Hand', digits_compute=dp.get_precision('Product Unit of Measure'), required=True, help='This quantity is expressed in the Default Unit of Measure of the product.'), 'prodlot_id': fields.many2one('stock.production.lot', 'Serial Number', domain="[('product_id','=',product_id)]"), 'location_id': fields.many2one('stock.location', 'Location', required=True, domain="[('usage', '=', 'internal')]"), } diff --git a/addons/stock/wizard/stock_change_product_qty_view.xml b/addons/stock/wizard/stock_change_product_qty_view.xml index a533d9f837b..b6304426b0e 100644 --- a/addons/stock/wizard/stock_change_product_qty_view.xml +++ b/addons/stock/wizard/stock_change_product_qty_view.xml @@ -6,7 +6,7 @@ <field name="model">stock.change.product.qty</field> <field name="arch" type="xml"> <form string="Change Product Quantity" version="7.0"> - <group string="Select Quantity"> + <group> <field name="new_quantity" /> <field name="product_id" invisible="1"/> <field name="location_id" groups="stock.group_locations"/> diff --git a/addons/stock/wizard/stock_inventory_line_split_view.xml b/addons/stock/wizard/stock_inventory_line_split_view.xml index fdc3aa03a60..92c91317e35 100644 --- a/addons/stock/wizard/stock_inventory_line_split_view.xml +++ b/addons/stock/wizard/stock_inventory_line_split_view.xml @@ -5,7 +5,7 @@ <field name="name">Split Inventory Line</field> <field name="model">stock.inventory.line.split</field> <field name="arch" type="xml"> - <form string="Split in Lots" version="7.0"> + <form string="Split in Serial Numbers" version="7.0"> <group> <field name="product_id" colspan="4" readonly="1"/> <label for="qty"/> diff --git a/addons/stock/wizard/stock_move.py b/addons/stock/wizard/stock_move.py index 1f3dcc3372d..538fa1c9441 100644 --- a/addons/stock/wizard/stock_move.py +++ b/addons/stock/wizard/stock_move.py @@ -170,7 +170,8 @@ class split_in_production_lot(osv.osv_memory): 'product_uom': fields.many2one('product.uom', 'Unit of Measure'), 'line_ids': fields.one2many('stock.move.split.lines', 'wizard_id', 'Serial Numbers'), 'line_exist_ids': fields.one2many('stock.move.split.lines', 'wizard_exist_id', 'Serial Numbers'), - 'use_exist' : fields.boolean('Existing Lots', help="Check this option to select existing lots in the list below, otherwise you should enter new ones line by line."), + 'use_exist' : fields.boolean('Existing Serial Numbers', + help="Check this option to select existing serial numbers in the list below, otherwise you should enter new ones line by line."), 'location_id': fields.many2one('stock.location', 'Source Location') } @@ -271,8 +272,8 @@ class stock_move_split_lines_exist(osv.osv_memory): } def onchange_lot_id(self, cr, uid, ids, prodlot_id=False, product_qty=False, - loc_id=False, product_id=False, uom_id=False): + loc_id=False, product_id=False, uom_id=False,context=None): return self.pool.get('stock.move').onchange_lot_id(cr, uid, [], prodlot_id, product_qty, - loc_id, product_id, uom_id) + loc_id, product_id, uom_id, context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/wizard/stock_move_view.xml b/addons/stock/wizard/stock_move_view.xml index b3a7fbee885..3df336b5e30 100644 --- a/addons/stock/wizard/stock_move_view.xml +++ b/addons/stock/wizard/stock_move_view.xml @@ -12,10 +12,10 @@ <field name="product_id" readonly="1"/> <label for="product_qty"/> <div> - <field name="product_qty"/> - <field name="product_uom" nolabel="1" readonly="1"/> + <field name="product_qty" class="oe_inline"/> + <field name="product_uom" class="oe_inline" readonly="1" groups="product.group_uom"/> </div> - <field name="location_id"/> + <field name="location_id" groups="stock.group_locations"/> </group> <footer> <button name="do_move_consume" string="Ok" type="object" class="oe_highlight"/> @@ -46,9 +46,10 @@ <label for="product_qty"/> <div> <field name="product_qty" class="oe_inline"/> - <field name="product_uom" class="oe_inline" readonly="1"/> + <field name="product_uom" class="oe_inline" readonly="1" groups="product.group_uom"/> </div> - <field name="location_id" string="Scrap Location" domain="[('usage','<>','view'),('scrap_location','=',True)]" widget="selection"/> + <field name="location_id" string="Scrap Location" widget="selection" + domain="[('usage','!=','view'),('scrap_location','=',True)]" groups="stock.group_locations"/> </group> <footer> <button name="move_scrap" string="Ok" type="object" class="oe_highlight" /> @@ -69,10 +70,10 @@ </record> <record id="view_split_in_lots" model="ir.ui.view"> - <field name="name">Split in lots</field> + <field name="name">Split in Serial Numbers</field> <field name="model">stock.move.split</field> <field name="arch" type="xml"> - <form string="Split in Lots" version="7.0"> + <form string="Split in Serial Numbers" version="7.0"> <group> <field name="product_id" readonly="1"/> <label for="qty"/> @@ -85,25 +86,25 @@ </group> <field name="line_ids" attrs="{'invisible':[('use_exist','=',True)]}"> <tree string="Serial Numbers" editable="bottom"> - <field name="name" string="Lots"/> + <field name="name"/> <field name="quantity" /> </tree> <form string="Serial Number" version="7.0"> <group> - <field name="name" string="Lot number"/> + <field name="name"/> <field name="quantity" /> </group> </form> </field> <field name="line_exist_ids" attrs="{'invisible':[('use_exist','!=',True)]}"> <tree string="Serial Numbers" editable="bottom"> - <field name="prodlot_id" string="Lot number" domain="[('product_id','=',parent.product_id)]" on_change="onchange_lot_id(prodlot_id, quantity, parent.location_id, parent.product_id, parent.product_uom)"/> - <field name="quantity" on_change="onchange_lot_id(prodlot_id, quantity, parent.location_id, parent.product_id, parent.product_uom)" /> + <field name="prodlot_id" string="Serial Number" quick_create="false" domain="[('product_id','=',parent.product_id)]" on_change="onchange_lot_id(prodlot_id, quantity, parent.location_id, parent.product_id, parent.product_uom, context)" context="{'product_id': parent.product_id}"/> + <field name="quantity" on_change="onchange_lot_id(prodlot_id, quantity, parent.location_id, parent.product_id, parent.product_uom,context)" /> </tree> <form string="Serial Number" version="7.0"> <group> - <field name="prodlot_id" string="Lot number" domain="[('product_id','=',parent.product_id)]" on_change="onchange_lot_id(prodlot_id, quantity, parent.location_id, parent.product_id, parent.product_uom)"/> - <field name="quantity" on_change="onchange_lot_id(prodlot_id, quantity, parent.location_id, parent.product_id, parent.product_uom)" /> + <field name="prodlot_id" domain="[('product_id','=',parent.product_id)]" on_change="onchange_lot_id(prodlot_id, quantity, parent.location_id, parent.product_id, parent.product_uom, context)"/> + <field name="quantity" on_change="onchange_lot_id(prodlot_id, quantity, parent.location_id, parent.product_id, parent.product_uom, context)" /> </group> </form> </field> @@ -115,7 +116,7 @@ </record> <record id="track_line" model="ir.actions.act_window"> - <field name="name">Split in lots</field> + <field name="name">Split in Serial Numbers</field> <field name="type">ir.actions.act_window</field> <field name="res_model">stock.move.split</field> <field name="view_type">form</field> diff --git a/addons/stock/wizard/stock_partial_move_view.xml b/addons/stock/wizard/stock_partial_move_view.xml index acfc4b1923c..54f15e99dff 100644 --- a/addons/stock/wizard/stock_partial_move_view.xml +++ b/addons/stock/wizard/stock_partial_move_view.xml @@ -44,7 +44,7 @@ <field name="prodlot_id" domain="[('product_id', '=', product_id)]" groups="stock.group_production_lot"/> <field name="update_cost" invisible="1"/> <field name="cost" attrs="{'invisible': [('update_cost','=', False)]}"/> - <field name="currency" attrs="{'invisible': [('update_cost','=', False)]}"/> + <field name="currency" attrs="{'invisible': [('update_cost','=', False)]}" groups="base.group_multi_currency"/> </tree> </field> </record> @@ -63,7 +63,7 @@ <field name="prodlot_id" domain="[('product_id', '=', product_id)]"/> <field name="update_cost" invisible="1"/> <field name="cost" attrs="{'invisible': [('update_cost','=', False)]}"/> - <field name="currency" attrs="{'invisible': [('update_cost','=', False)]}"/> + <field name="currency" attrs="{'invisible': [('update_cost','=', False)]}" groups="base.group_multi_currency"/> </group> </form> </field> diff --git a/addons/stock/wizard/stock_partial_picking_view.xml b/addons/stock/wizard/stock_partial_picking_view.xml index 7de85594a26..fb01c93315e 100644 --- a/addons/stock/wizard/stock_partial_picking_view.xml +++ b/addons/stock/wizard/stock_partial_picking_view.xml @@ -71,7 +71,7 @@ <field name="prodlot_id" domain="[('product_id', '=', product_id)]" attrs="{'required':[('tracking','=',True)]}"/> <field name="update_cost" invisible="1"/> <field name="cost" attrs="{'invisible': [('update_cost','=', False)]}"/> - <field name="currency" attrs="{'invisible': [('update_cost','=', False)]}"/> + <field name="currency" attrs="{'invisible': [('update_cost','=', False)]}" groups="base.group_multi_currency"/> </group> </form> </field> diff --git a/addons/survey/__openerp__.py b/addons/survey/__openerp__.py index 1470754cb03..40eb3073d61 100644 --- a/addons/survey/__openerp__.py +++ b/addons/survey/__openerp__.py @@ -56,10 +56,10 @@ user name and password for the invitation of the survey. 'test/survey_question_type.yml', 'test/survey_report.yml', ], - 'css': ['static/src/css/survey.css'], 'installable': True, 'auto_install': False, 'certificate' : '001131639736864143245', - 'images': ['images/survey_answers.jpeg','images/survey_pages.jpeg','images/surveys.jpeg'], + 'images': ['images/survey_answers.jpeg','images/survey_pages.jpeg','images/surveys.jpeg'], + 'css': ['static/src/css/survey.css','static/css/survey.css'], } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/survey/specification/survey.png b/addons/survey/specification/survey.png Binary files differindex 8cf0f7022c1..52acff391d0 100644 --- a/addons/survey/specification/survey.png +++ b/addons/survey/specification/survey.png diff --git a/addons/survey/specification/survey_page.png b/addons/survey/specification/survey_page.png Binary files differindex 2f8d19d5dd8..4fceac4b81b 100644 --- a/addons/survey/specification/survey_page.png +++ b/addons/survey/specification/survey_page.png diff --git a/addons/survey/specification/survey_question.png b/addons/survey/specification/survey_question.png Binary files differindex b939ae2ad47..516606902cb 100644 --- a/addons/survey/specification/survey_question.png +++ b/addons/survey/specification/survey_question.png diff --git a/addons/survey/specification/survey_response.png b/addons/survey/specification/survey_response.png Binary files differindex 67bc1aa9432..af78bd1977d 100644 --- a/addons/survey/specification/survey_response.png +++ b/addons/survey/specification/survey_response.png diff --git a/addons/survey/static/src/css/survey.css b/addons/survey/static/src/css/survey.css index c18f584c9ed..34d686c6e77 100644 --- a/addons/survey/static/src/css/survey.css +++ b/addons/survey/static/src/css/survey.css @@ -1,14 +1,11 @@ -.oe_survey_responsible{ - height: auto; - width: 200px; - font-size: 14px; +.openerp .oe_survey_title { + font-weight: bold; + font-size: 19px; + margin: 8px 0px 8px 0px; + color: #5B5B5B; } -.oe_survey_start_date{ - height: auto; +.openerp .oe_kanban_survey { width: 200px; - font-size: 14px; -} -.oe_survey_rate{ - font-size: 14px; + } diff --git a/addons/survey/survey.py b/addons/survey/survey.py index 93bd48be30c..dde3130e9c5 100644 --- a/addons/survey/survey.py +++ b/addons/survey/survey.py @@ -145,15 +145,33 @@ class survey(osv.osv): return report def fill_survey(self, cr, uid, ids, context=None): + sur_obj = self.read(cr, uid, ids,['title'], context=context) + for sur in sur_obj: + name = sur['title'] + context.update({'active':False,'survey_id': ids[0]}) return { 'view_type': 'form', 'view_mode': 'form', 'res_model': 'survey.question.wiz', 'type': 'ir.actions.act_window', 'target': 'new', - 'context': {'survey_id': ids[0]} + 'name': name, + 'context': context + } + def test_survey(self, cr, uid, ids, context=None): + sur_obj = self.read(cr, uid, ids,['title'], context=context) + for sur in sur_obj: + name = sur['title'] + context.update({'active':True,'survey_id': ids[0]}) + return { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'survey.question.wiz', + 'type': 'ir.actions.act_window', + 'target': 'new', + 'name': name, + 'context': context } - survey() class survey_history(osv.osv): diff --git a/addons/survey/survey_demo.xml b/addons/survey/survey_demo.xml index 3bfac20d44b..6f89095c699 100644 --- a/addons/survey/survey_demo.xml +++ b/addons/survey/survey_demo.xml @@ -13,6 +13,7 @@ <field name="max_response_limit">20</field> <field name="type" ref="survey_type2"/> <field name="state">open</field> + <field name="color">5</field> <field name="tot_comp_survey">1</field> <field name="tot_start_survey">1</field> <field name="response_user">5</field> @@ -1402,6 +1403,7 @@ <record id="survey_0" model="survey"> <field eval=""""OpenERP Feedback"""" name="title"/> <field name="responsible_id" ref="base.user_demo"/> + <field name="color">4</field> <field name="max_response_limit">20</field> <field name="type" ref="survey_type2"/> <field name="state">open</field> diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml index 8b49b89df65..8f855084069 100644 --- a/addons/survey/survey_view.xml +++ b/addons/survey/survey_view.xml @@ -26,8 +26,12 @@ </header> <sheet> <div class="oe_button_box oe_right"> - <button name="%(action_view_survey_question_message)d" states="open,draft,close,cancel" string="Test Survey" type="action" icon="gtk-new" context="{'active':True,'survey_id': active_id}" attrs="{'invisible':[('id','=',0)]}"/> - <button name="%(action_view_survey_question_message)d" states="open,draft,close,cancel" string="Answer Survey" type="action" icon="gtk-execute" context="{'survey_id': active_id}" attrs="{'invisible':[('state','!=','open')]}"/> + <button name="test_survey" states="open,draft,close,cancel" string="Test Survey" type="object" icon="gtk-new" context="{'survey_id': active_id}" attrs="{'invisible':[('id','=',0)]}"/> + <button name="fill_survey" states="open" string="Answer Survey" type="object" icon="gtk-execute" context="{'survey_id': active_id}" attrs="{'invisible':[('state','!=','open')]}"/> + <button name="action_print_survey" states="open,draft,close,cancel" string="Print Answer" type="object"/> + <button name="%(action_view_survey_question_message)d" states="open,draft,close,cancel" + string="Edit Survey" type="action" context="{'active':True,'edit' : True,'survey_id': active_id}"/> + </div> <div class="oe_title"> <label for="title" class="oe_edit_only"/> @@ -49,8 +53,6 @@ </group> <notebook> <page string="Survey Details"> - <field name="note" colspan="4" placeholder="Survey description..."/> - <label for="page_ids"/> <field name="page_ids" colspan="4" mode="tree"> <form string="Survey Page" version="7.0"> <sheet> @@ -58,9 +60,7 @@ <h1> <field name="title"/> </h1> - <group> - <field name="note" placeholder="Description on the survey page..." nolabel="1"/> - </group> + <field name="note" placeholder="Description on the survey page..."/> <newline/> <group> <label for="question_ids"/> @@ -210,6 +210,7 @@ </sheet> </form> </field> + <field name="note" placeholder="Survey description..."/> </page> <page string="Invited User"> <field name="invited_user_ids" readonly="1"/> @@ -254,13 +255,11 @@ <field name="tot_start_survey" string="Started"/> <field name="tot_comp_survey" string="Completed"/> <field name="state"/> - <button name="%(action_view_survey_question_message)d" states="open,draft,close,cancel" - string="Test Survey" type="action" icon="gtk-new" - context="{'active':True,'survey_id': active_id}"/> - <button name="%(action_view_survey_question_message)d" states="open,draft,close,cancel" - string="Answer Survey" type="action" icon="gtk-execute" context="{'survey_id': active_id}" attrs="{'invisible':[('state','!=','open')]}"/> - <button name="%(action_view_survey_question_message)d" states="open,draft,close,cancel" - string="Edit Survey" type="action" icon="gtk-edit" context="{'active':True,'edit' : True,'survey_id': active_id}"/> + <button name="test_survey" states="open,draft,close,cancel" + string="Test Survey" type="object" icon="gtk-new" + context="{'survey_id': active_id}"/> + <button name="fill_survey" states="open" + string="Answer Survey" type="object" icon="gtk-execute" context="{'survey_id': active_id}" attrs="{'invisible':[('state','!=','open')]}"/> <button name="action_print_survey" states="open,draft,close,cancel" string="Print Answer" type="object" icon="gtk-print"/> </tree> @@ -295,10 +294,13 @@ <kanban> <field name="title"/> <field name="date_open"/> + <field name="tot_comp_survey"/> + <field name="max_response_limit"/> + <field name="responsible_id"/> <field name="color"/> <templates> <t t-name="kanban-box"> - <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card"> + <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_survey"> <div class="oe_dropdown_toggle oe_dropdown_kanban"> <span class="oe_e">i</span> <ul class="oe_dropdown_menu"> @@ -309,21 +311,13 @@ </div> <div class="oe_kanban_content"> <h3 class="oe_kanban_ellipsis"><t t-esc="record.title.raw_value.toString()"></t></h3> - <div class="oe_survey_responsible"> - <t t-if="record.responsible_id.raw_value">By: <field name="responsible_id"/></t> - </div><br/> - <div class="oe_survey_start_date"> - <t t-if="record.date_open.raw_value"> - Opened at - <t t-esc="record.date_open.raw_value.getDate()"/> - <t t-esc="record.date_open.raw_value.toString('MMM')"/>, - <t t-esc="record.date_open.raw_value.getFullYear()"/> - </t> - </div><br/> - <div class="oe_survey_rate"> - Rate: - <a name="fill_survey" type="object">Fill</a> - </div> + <div> + Answers: <field name="tot_comp_survey"/> + <t t-if="record.max_response_limit.raw_value > 0"> / <field name="max_response_limit"/></t> + </div> + <br/> + <a name="fill_survey" type="object">Answer Survey</a> + <img t-att-src="kanban_image('res.users', 'image_small', record.responsible_id.raw_value)" t-att-title="record.responsible_id.value" width="24" height="24" class="oe_kanban_avatar oe_right"/> </div> </div> </t> diff --git a/addons/survey/wizard/survey_answer.py b/addons/survey/wizard/survey_answer.py index e2216ea8389..2b774a22feb 100644 --- a/addons/survey/wizard/survey_answer.py +++ b/addons/survey/wizard/survey_answer.py @@ -146,8 +146,18 @@ class survey_question_wiz(osv.osv_memory): pre_button = True if flag: pag_rec = page_obj.browse(cr, uid, p_id, context=context) - xml_form = etree.Element('form', {'string': tools.ustr(pag_rec.title)}) - xml_group = etree.SubElement(xml_form, 'group', {'col': '1', 'colspan': '4'}) + xml_form = etree.Element('form', {'string': tools.ustr(pag_rec.title or sur_rec.title)}) + if context.has_key('active') and context.get('active',False) and context.has_key('edit'): + context.update({'page_id' : tools.ustr(p_id),'page_number' : sur_name_rec.page_no , 'transfer' : sur_name_read.transfer}) + xml_group3 = etree.SubElement(xml_form, 'group', {'col': '4', 'colspan': '4'}) + etree.SubElement(xml_group3, 'button', {'string' :'Add Page','icon': "gtk-new", 'type' :'object','name':"action_new_page", 'context' : tools.ustr(context)}) + etree.SubElement(xml_group3, 'button', {'string' :'Edit Page','icon': "gtk-edit", 'type' :'object','name':"action_edit_page", 'context' : tools.ustr(context)}) + etree.SubElement(xml_group3, 'button', {'string' :'Delete Page','icon': "gtk-delete", 'type' :'object','name':"action_delete_page", 'context' : tools.ustr(context)}) + etree.SubElement(xml_group3, 'button', {'string' :'Add Question','icon': "gtk-new", 'type' :'object','name':"action_new_question", 'context' : tools.ustr(context)}) + + # FP Note + xml_group = xml_form + if context.has_key('response_id') and context.get('response_id', False) \ and int(context.get('response_id',0)[0]) > 0: # TODO: l10n, cleanup this code to make it readable. Or template? @@ -162,12 +172,11 @@ class survey_question_wiz(osv.osv_memory): if wiz_id: fields["wizardid_" + str(wiz_id)] = {'type':'char', 'size' : 255, 'string':"", 'views':{}} - etree.SubElement(xml_form, 'field', {'invisible':'1','name': "wizardid_" + str(wiz_id),'default':str(lambda *a: 0)}) + etree.SubElement(xml_form, 'field', {'invisible':'1','name': "wizardid_" + str(wiz_id),'default':str(lambda *a: 0),'modifiers':'{"invisible":true}'}) if pag_rec.note: - xml_group = etree.SubElement(xml_form, 'group', {'col': '1', 'colspan': '4'}) for que_test in pag_rec.note.split('\n'): - etree.SubElement(xml_group, 'label', {'string': to_xml(tools.ustr(que_test)), 'align':"0.0"}) + etree.SubElement(xml_form, 'label', {'string': to_xml(tools.ustr(que_test)), 'align':"0.0"}) que_ids = pag_rec.question_ids qu_no = 0 @@ -180,19 +189,16 @@ class survey_question_wiz(osv.osv_memory): star = '*' else: star = '' - xml_group = etree.SubElement(xml_form, 'group', {'col': '2', 'colspan': '4'}) - if context.has_key('active') and context.get('active',False) and \ context.has_key('edit'): - xml_group = etree.SubElement(xml_form, 'group', {'col': '1', 'colspan': '2'}) - etree.SubElement(xml_group, 'separator', {'string': star+to_xml(separator_string), 'colspan': '3'}) + etree.SubElement(xml_form, 'separator', {'string': star+to_xml(separator_string)}) + xml_group1 = etree.SubElement(xml_form, 'group', {'col': '2', 'colspan': '2'}) context.update({'question_id' : tools.ustr(que.id),'page_number': sur_name_rec.page_no , 'transfer' : sur_name_read.transfer, 'page_id' : p_id}) etree.SubElement(xml_group1, 'button', {'string':'','icon': "gtk-edit", 'type' :'object', 'name':"action_edit_question", 'context' : tools.ustr(context)}) etree.SubElement(xml_group1, 'button', {'string':'','icon': "gtk-delete", 'type' :'object','name':"action_delete_question", 'context' : tools.ustr(context)}) else: - xml_group = etree.SubElement(xml_form, 'group', {'col': '1', 'colspan': '4'}) - etree.SubElement(xml_group, 'separator', {'string': star+to_xml(separator_string), 'colspan': '4'}) + etree.SubElement(xml_form, 'separator', {'string': star+to_xml(separator_string)}) ans_ids = que_rec.answer_choice_ids xml_group = etree.SubElement(xml_form, 'group', {'col': '1', 'colspan': '4'}) @@ -352,36 +358,29 @@ class survey_question_wiz(osv.osv_memory): etree.SubElement(xml_group, 'field', {'readonly' :str(readonly), 'name': tools.ustr(que.id) + "_other", 'nolabel':"1" ,'colspan':"4"}) fields[tools.ustr(que.id) + "_other"] = {'type': 'text', 'string': '', 'views':{}} - etree.SubElement(xml_form, 'separator', {'colspan': '4'}) - xml_group = etree.SubElement(xml_form, 'group', {'col': '6', 'colspan': '4'}) - etree.SubElement(xml_group, 'field', {'name': 'progress_bar_' + tools.ustr(page_number) , 'widget':'progressbar'}) - fields['progress_bar_' + tools.ustr(page_number)] = {'type':'float', 'string':"Progress", 'views':{}} - etree.SubElement(xml_group, 'label', {'string': tools.ustr(page_number+ 1) + "/" + tools.ustr(total_pages)}) - etree.SubElement(xml_group, 'button', {'icon': "gtk-cancel", 'special': "cancel",'string':"Cancel"}) - + xml_footer = etree.SubElement(xml_form, 'footer', {'col': '8', 'colspan': '1', 'width':"100%"}) + if pre_button: - etree.SubElement(xml_group, 'button', {'colspan':"1",'icon':"gtk-go-back",'name':"action_previous",'string':"Previous",'type':"object"}) + etree.SubElement(xml_footer, 'label', {'string': ""}) + etree.SubElement(xml_footer, 'button', {'name':"action_previous",'string':"Previous",'type':"object"}) but_string = "Next" if int(page_number) + 1 == total_pages: but_string = "Done" - if context.has_key('active') and context.get('active',False) and int(page_number) + 1 == total_pages and context.has_key('response_id') and context.has_key('response_no') and context.get('response_no',0) + 1 == len(context.get('response_id',0)): - etree.SubElement(xml_group, 'button', {'icon': "gtk-go-forward", 'special' : 'cancel','string': tools.ustr("Done") ,'context' : tools.ustr(context)}) + etree.SubElement(xml_footer, 'label', {'string': ""}) + etree.SubElement(xml_footer, 'button', {'special' : 'cancel','string': tools.ustr("Done") ,'context' : tools.ustr(context), 'class':"oe_highlight"}) elif context.has_key('active') and context.get('active', False) and int(page_number) + 1 == total_pages and context.has_key('response_id'): - etree.SubElement(xml_group, 'button', {'icon': "gtk-go-forward", 'name':"action_forward_next",'string': tools.ustr("Next Answer") ,'type':"object",'context' : tools.ustr(context)}) + etree.SubElement(xml_footer, 'label', {'string': ""}) + etree.SubElement(xml_footer, 'button', {'name':"action_forward_next",'string': tools.ustr("Next Answer") ,'type':"object",'context' : tools.ustr(context), 'class':"oe_highlight"}) elif context.has_key('active') and context.get('active',False) and int(page_number) + 1 == total_pages: - etree.SubElement(xml_group, 'button', {'icon': "gtk-go-forward", 'special': "cancel", 'string' : 'Done', 'context' : tools.ustr(context)}) + etree.SubElement(xml_footer, 'label', {'string': ""}) + etree.SubElement(xml_footer, 'button', {'special': "cancel", 'string' : 'Done', 'context' : tools.ustr(context), 'class':"oe_highlight"}) else: - etree.SubElement(xml_group, 'button', {'icon': "gtk-go-forward", 'name':"action_next",'string': tools.ustr(but_string) ,'type':"object",'context' : tools.ustr(context)}) - - if context.has_key('active') and context.get('active',False) and context.has_key('edit'): - etree.SubElement(xml_form, 'separator', {'string' : '','colspan': '4'}) - context.update({'page_id' : tools.ustr(p_id),'page_number' : sur_name_rec.page_no , 'transfer' : sur_name_read.transfer}) - xml_group3 = etree.SubElement(xml_form, 'group', {'col': '4', 'colspan': '4'}) - etree.SubElement(xml_group3, 'button', {'string' :'Add Page','icon': "gtk-new", 'type' :'object','name':"action_new_page", 'context' : tools.ustr(context)}) - etree.SubElement(xml_group3, 'button', {'string' :'Edit Page','icon': "gtk-edit", 'type' :'object','name':"action_edit_page", 'context' : tools.ustr(context)}) - etree.SubElement(xml_group3, 'button', {'string' :'Delete Page','icon': "gtk-delete", 'type' :'object','name':"action_delete_page", 'context' : tools.ustr(context)}) - etree.SubElement(xml_group3, 'button', {'string' :'Add Question','icon': "gtk-new", 'type' :'object','name':"action_new_question", 'context' : tools.ustr(context)}) + etree.SubElement(xml_footer, 'label', {'string': ""}) + etree.SubElement(xml_footer, 'button', {'name':"action_next",'string': tools.ustr(but_string) ,'type':"object",'context' : tools.ustr(context), 'class':"oe_highlight"}) + etree.SubElement(xml_footer, 'label', {'string': "or"}) + etree.SubElement(xml_footer, 'button', {'special': "cancel",'string':"Exit",'class':"oe_link"}) + etree.SubElement(xml_footer, 'label', {'string': tools.ustr(page_number+ 1) + "/" + tools.ustr(total_pages), 'class':"oe_survey_title_page oe_right"}) root = xml_form.getroottree() result['arch'] = etree.tostring(root) @@ -393,27 +392,28 @@ class survey_question_wiz(osv.osv_memory): # mark the survey request as done; call 'survey_req_done' on its actual model survey_req_obj = self.pool.get(context.get('active_model')) - if survey_req_obj and hasattr(survey_req_obj, 'survey_req_done'): + if survey_req_obj and hasattr(survey_req_obj, 'survey_req_done'): survey_req_obj.survey_req_done(cr, uid, context.get('active_ids', []), context=context) if sur_rec.send_response: survey_data = survey_obj.browse(cr, uid, survey_id) response_id = surv_name_wiz.read(cr, uid, context.get('sur_name_id',False))['response'] - context.update({'response_id':response_id}) report = self.create_report(cr, uid, [survey_id], 'report.survey.browse.response', survey_data.title,context) attachments = {} - file = open(addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf") - file_data = "" - while 1: - line = file.readline() - file_data += line - if not line: - break - - attachments[survey_data.title + ".pdf"] = file_data - file.close() - os.remove(addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf") - + pdf_filename = addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf" + if os.path.exists(pdf_filename): + file = open(pdf_filename) + file_data = "" + while 1: + line = file.readline() + file_data += line + if not line: + break + + attachments[survey_data.title + ".pdf"] = file_data + file.close() + os.remove(addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf") + context.update({'response_id':response_id}) user_email = user_obj.browse(cr, uid, uid, context).email resp_email = survey_data.responsible_id and survey_data.responsible_id.email or False @@ -433,10 +433,12 @@ class survey_question_wiz(osv.osv_memory): self.pool.get('mail.mail').create(cr, uid, vals, context=context) xml_form = etree.Element('form', {'string': _('Complete Survey Answer')}) + xml_footer = etree.SubElement(xml_form, 'footer', {'col': '6', 'colspan': '4' ,'class': 'oe_survey_title_height'}) + etree.SubElement(xml_form, 'separator', {'string': 'Complete Survey', 'colspan': "4"}) etree.SubElement(xml_form, 'label', {'string': 'Thanks for your Answer'}) etree.SubElement(xml_form, 'newline') - etree.SubElement(xml_form, 'button', {'icon': "gtk-go-forward", 'special':"cancel",'string':"OK",'colspan':"2"}) + etree.SubElement(xml_footer, 'button', {'special':"cancel",'string':"OK",'colspan':"2",'class':'oe_highlight'}) root = xml_form.getroottree() result['arch'] = etree.tostring(root) result['fields'] = {} @@ -445,7 +447,7 @@ class survey_question_wiz(osv.osv_memory): def create_report(self, cr, uid, res_ids, report_name=False, file_name=False, context=None): """ - If any user give answer of survey then last create report of this answer and if 'Email Notification on Answer' set True in survey then send mail on responsible person of this survey and attach survey answer report in pdf format. + If any user give answer of survey then last create report of this answer and if 'E-mail Notification on Answer' set True in survey then send mail on responsible person of this survey and attach survey answer report in pdf format. """ if not report_name or not res_ids: return (False, Exception('Report name and Resources ids are required !!!')) @@ -473,7 +475,6 @@ class survey_question_wiz(osv.osv_memory): except Exception,e: return (False, str(e)) - return (True, ret_file_name) def default_get(self, cr, uid, fields_list, context=None): @@ -490,7 +491,6 @@ class survey_question_wiz(osv.osv_memory): value[field] = tot_per response_obj = self.pool.get('survey.response') surv_name_wiz = self.pool.get('survey.name.wiz') - if context.has_key('response_id') and context.get('response_id') and int(context['response_id'][0]) > 0: data = super(survey_question_wiz, self).default_get(cr, uid, fields_list, context) response_ans = response_obj.browse(cr, uid, context['response_id'][context['response_no']]) @@ -537,11 +537,11 @@ class survey_question_wiz(osv.osv_memory): value[field] = ans.answer else: + if not context.has_key('sur_name_id'): return value if context.has_key('active') and context.get('active',False): return value - sur_name_read = surv_name_wiz.read(cr, uid, context.get('sur_name_id',False)) ans_list = [] @@ -549,7 +549,6 @@ class survey_question_wiz(osv.osv_memory): for field in fields_list: if field in list(val): value[field] = val[field] - return value def create(self, cr, uid, vals, context=None): @@ -603,8 +602,9 @@ class survey_question_wiz(osv.osv_memory): self.pool.get(context.get('object',False)).write(cr, uid, [int(context.get('cur_id',False))], {'response' : response_id}) self.pool.get(context.get('object',False)).survey_req_done(cr, uid, [int(context.get('cur_id'))], context) else: - self.pool.get(context.get('object',False)).write(cr, uid, [int(context.get('cur_id',False))], {'response' : response_id}) - if sur_name_read['store_ans'] and type(sur_name_read['store_ans']) == dict: + self.pool.get(context.get('object',False)).write(cr, uid, [int(context.get('cur_id',False))], {'response' : response_id}) + if sur_name_read['store_ans'] and type(safe_eval(sur_name_read['store_ans'])) == dict: + sur_name_read['store_ans'] = safe_eval(sur_name_read['store_ans']) for key,val in sur_name_read['store_ans'].items(): for field in vals: if field.split('_')[0] == val['question_id']: diff --git a/addons/survey/wizard/survey_answer.xml b/addons/survey/wizard/survey_answer.xml index 3460ad41bb3..b02f9fb2be5 100644 --- a/addons/survey/wizard/survey_answer.xml +++ b/addons/survey/wizard/survey_answer.xml @@ -5,8 +5,8 @@ <!-- Survey Question Wizard --> - <record id="view_survey_question_message" model="ir.ui.view"> - <field name="name">Answer Survey</field> + <record id="view_survey_question_message" model="ir.ui.view"> + <field name="name">Survey Answer</field> <field name="model">survey.question.wiz</field> <field name="arch" type="xml"> <form string="Your Messages" version="7.0"> @@ -26,7 +26,6 @@ </record> <record id="action_view_survey_question_message" model="ir.actions.act_window"> - <field name="name">Answer Survey</field> <field name="type">ir.actions.act_window</field> <field name="res_model">survey.question.wiz</field> <field name="view_type">form</field> diff --git a/addons/web_linkedin/web_linkedin_view.xml b/addons/web_linkedin/web_linkedin_view.xml index 8b4fa617bf3..05a5e32e41a 100644 --- a/addons/web_linkedin/web_linkedin_view.xml +++ b/addons/web_linkedin/web_linkedin_view.xml @@ -18,8 +18,8 @@ <field name="model">sale.config.settings</field> <field name="inherit_id" ref="base_setup.view_sale_config_settings"/> <field name="arch" type="xml"> - <div name="linkedin" position="inside"> - <form string="Configure Linkedin" version="7.0" class="oe_form_configuration"> + <div name="LinkedIn" position="inside"> + <div attrs="{'invisible':[('module_web_linkedin','=',False)]}"> <p> To use the LinkedIn module with this database, an API Key is required. Please follow this procedure: </p> @@ -34,12 +34,11 @@ <li>The programming tool is Javascript</li> </ul> </li> - <li>Copy the API key down here:</li> + <li>Copy the <strong>API key</strong> here: + <field name="api_key" attrs="{'required':[('module_web_linkedin','=',True)]}" class="oe_inline"/> + </li> </ul> - <group> - <field name="api_key"/> - </group> - </form> + </div> </div> </field> </record> |
