[MERGE]: Merge with lp:openobject-addons
bzr revid: mma@tinyerp.com-20121012050224-w5qgi0uan9phcgyc
This commit is contained in:
commit
646914c12d
|
@ -155,6 +155,7 @@ class account_account_type(osv.osv):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _save_report_type(self, cr, uid, account_type_id, field_name, field_value, arg, context=None):
|
def _save_report_type(self, cr, uid, account_type_id, field_name, field_value, arg, context=None):
|
||||||
|
field_value = field_value or 'none'
|
||||||
obj_data = self.pool.get('ir.model.data')
|
obj_data = self.pool.get('ir.model.data')
|
||||||
obj_financial_report = self.pool.get('account.financial.report')
|
obj_financial_report = self.pool.get('account.financial.report')
|
||||||
#unlink if it exists somewhere in the financial reports related to BS or PL
|
#unlink if it exists somewhere in the financial reports related to BS or PL
|
||||||
|
@ -299,7 +300,6 @@ class account_account(osv.osv):
|
||||||
if aml_query.strip():
|
if aml_query.strip():
|
||||||
wheres.append(aml_query.strip())
|
wheres.append(aml_query.strip())
|
||||||
filters = " AND ".join(wheres)
|
filters = " AND ".join(wheres)
|
||||||
_logger.debug('Filters: %s',(filters))
|
|
||||||
# IN might not work ideally in case there are too many
|
# IN might not work ideally in case there are too many
|
||||||
# children_and_consolidated, in that case join on a
|
# children_and_consolidated, in that case join on a
|
||||||
# values() e.g.:
|
# values() e.g.:
|
||||||
|
@ -315,7 +315,6 @@ class account_account(osv.osv):
|
||||||
" GROUP BY l.account_id")
|
" GROUP BY l.account_id")
|
||||||
params = (tuple(children_and_consolidated),) + query_params
|
params = (tuple(children_and_consolidated),) + query_params
|
||||||
cr.execute(request, params)
|
cr.execute(request, params)
|
||||||
_logger.debug('Status: %s',(cr.statusmessage))
|
|
||||||
|
|
||||||
for row in cr.dictfetchall():
|
for row in cr.dictfetchall():
|
||||||
accounts[row['id']] = row
|
accounts[row['id']] = row
|
||||||
|
@ -596,10 +595,7 @@ class account_account(osv.osv):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def copy(self, cr, uid, id, default=None, context=None, done_list=None, local=False):
|
def copy(self, cr, uid, id, default=None, context=None, done_list=None, local=False):
|
||||||
if default is None:
|
default = {} if default is None else default.copy()
|
||||||
default = {}
|
|
||||||
else:
|
|
||||||
default = default.copy()
|
|
||||||
if done_list is None:
|
if done_list is None:
|
||||||
done_list = []
|
done_list = []
|
||||||
account = self.browse(cr, uid, id, context=context)
|
account = self.browse(cr, uid, id, context=context)
|
||||||
|
@ -781,10 +777,7 @@ class account_journal(osv.osv):
|
||||||
]
|
]
|
||||||
|
|
||||||
def copy(self, cr, uid, id, default=None, context=None, done_list=None, local=False):
|
def copy(self, cr, uid, id, default=None, context=None, done_list=None, local=False):
|
||||||
if default is None:
|
default = {} if default is None else default.copy()
|
||||||
default = {}
|
|
||||||
else:
|
|
||||||
default = default.copy()
|
|
||||||
if done_list is None:
|
if done_list is None:
|
||||||
done_list = []
|
done_list = []
|
||||||
journal = self.browse(cr, uid, id, context=context)
|
journal = self.browse(cr, uid, id, context=context)
|
||||||
|
@ -1185,6 +1178,7 @@ class account_fiscalyear(osv.osv):
|
||||||
}
|
}
|
||||||
|
|
||||||
def copy(self, cr, uid, id, default=None, context=None):
|
def copy(self, cr, uid, id, default=None, context=None):
|
||||||
|
default = {} if default is None else default.copy()
|
||||||
default.update({
|
default.update({
|
||||||
'period_ids': [],
|
'period_ids': [],
|
||||||
'end_journal_period_id': False
|
'end_journal_period_id': False
|
||||||
|
@ -1444,14 +1438,8 @@ class account_move(osv.osv):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def copy(self, cr, uid, id, default=None, context=None):
|
def copy(self, cr, uid, id, default=None, context=None):
|
||||||
if context is None:
|
default = {} if default is None else default.copy()
|
||||||
default = {}
|
context = {} if context is None else context.copy()
|
||||||
else:
|
|
||||||
default = default.copy()
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
else:
|
|
||||||
context = context.copy()
|
|
||||||
default.update({
|
default.update({
|
||||||
'state':'draft',
|
'state':'draft',
|
||||||
'name':'/',
|
'name':'/',
|
||||||
|
|
|
@ -461,9 +461,10 @@ class account_bank_statement(osv.osv):
|
||||||
return {}
|
return {}
|
||||||
balance_start = self._compute_balance_end_real(cr, uid, journal_id, context=context)
|
balance_start = self._compute_balance_end_real(cr, uid, journal_id, context=context)
|
||||||
|
|
||||||
journal_data = self.pool.get('account.journal').read(cr, uid, journal_id, ['company_id'], context=context)
|
journal_data = self.pool.get('account.journal').read(cr, uid, journal_id, ['company_id', 'currency'], context=context)
|
||||||
company_id = journal_data['company_id']
|
company_id = journal_data['company_id']
|
||||||
return {'value': {'balance_start': balance_start, 'company_id': company_id}}
|
currency_id = journal_data['currency'] or self.pool.get('res.company').browse(cr, uid, company_id[0], context=context).currency_id.id
|
||||||
|
return {'value': {'balance_start': balance_start, 'company_id': company_id, 'currency': currency_id}}
|
||||||
|
|
||||||
def unlink(self, cr, uid, ids, context=None):
|
def unlink(self, cr, uid, ids, context=None):
|
||||||
stat = self.read(cr, uid, ids, ['state'], context=context)
|
stat = self.read(cr, uid, ids, ['state'], context=context)
|
||||||
|
|
|
@ -211,17 +211,17 @@
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
<group class="oe_subtotal_footer oe_right">
|
<group class="oe_subtotal_footer oe_right">
|
||||||
<field name="amount_untaxed"/>
|
<field name="amount_untaxed" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<div>
|
<div>
|
||||||
<label for="amount_tax"/>
|
<label for="amount_tax"/>
|
||||||
<button name="button_reset_taxes" states="draft,proforma2"
|
<button name="button_reset_taxes" states="draft,proforma2"
|
||||||
string="(update)" class="oe_link oe_edit_only"
|
string="(update)" class="oe_link oe_edit_only"
|
||||||
type="object" help="Recompute taxes and total"/>
|
type="object" help="Recompute taxes and total"/>
|
||||||
</div>
|
</div>
|
||||||
<field name="amount_tax" nolabel="1"/>
|
<field name="amount_tax" nolabel="1" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="amount_total" class="oe_subtotal_footer_separator"/>
|
<field name="amount_total" class="oe_subtotal_footer_separator" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
|
|
||||||
<field name="residual"/>
|
<field name="residual" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="reconciled" invisible="1"/>
|
<field name="reconciled" invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
<div style="width: 50%%">
|
<div style="width: 50%%">
|
||||||
|
@ -322,7 +322,7 @@
|
||||||
<field string="Customer" name="partner_id"
|
<field string="Customer" name="partner_id"
|
||||||
on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)"
|
on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)"
|
||||||
groups="base.group_user" context="{'search_default_customer':1, 'show_address': 1}"
|
groups="base.group_user" context="{'search_default_customer':1, 'show_address': 1}"
|
||||||
options='{"always_reload": true}'/>
|
options='{"always_reload": True}'/>
|
||||||
<field name="fiscal_position" widget="selection" />
|
<field name="fiscal_position" widget="selection" />
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
|
@ -368,16 +368,16 @@
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
<group class="oe_subtotal_footer oe_right">
|
<group class="oe_subtotal_footer oe_right">
|
||||||
<field name="amount_untaxed"/>
|
<field name="amount_untaxed" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<div>
|
<div>
|
||||||
<label for="amount_tax"/>
|
<label for="amount_tax"/>
|
||||||
<button name="button_reset_taxes" states="draft,proforma2"
|
<button name="button_reset_taxes" states="draft,proforma2"
|
||||||
string="(update)" class="oe_link oe_edit_only"
|
string="(update)" class="oe_link oe_edit_only"
|
||||||
type="object" help="Recompute taxes and total"/>
|
type="object" help="Recompute taxes and total"/>
|
||||||
</div>
|
</div>
|
||||||
<field name="amount_tax" nolabel="1"/>
|
<field name="amount_tax" nolabel="1" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="amount_total" class="oe_subtotal_footer_separator"/>
|
<field name="amount_total" class="oe_subtotal_footer_separator" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="residual" groups="account.group_account_user"/>
|
<field name="residual" groups="account.group_account_user" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="reconciled" invisible="1"/>
|
<field name="reconciled" invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
|
|
|
@ -633,13 +633,10 @@
|
||||||
<field name="period_id" class="oe_inline"/>
|
<field name="period_id" class="oe_inline"/>
|
||||||
</div>
|
</div>
|
||||||
<field name='company_id' widget="selection" groups="base.group_multi_company" />
|
<field name='company_id' widget="selection" groups="base.group_multi_company" />
|
||||||
|
<field name="currency" invisible="1"/>
|
||||||
</group><group>
|
</group><group>
|
||||||
<label for="balance_start"/>
|
<field name="balance_start" widget="monetary" options='{"currency_field" : "currency"}'/>
|
||||||
<div>
|
<field name="balance_end_real" widget="monetary" options='{"currency_field" : "currency"}'/>
|
||||||
<field name="balance_start" class="oe_inline"/>
|
|
||||||
<field name="currency" class="oe_inline"/>
|
|
||||||
</div>
|
|
||||||
<field name="balance_end_real"/>
|
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
|
|
||||||
|
@ -1130,8 +1127,8 @@
|
||||||
<field name="account_tax_id" domain="[('parent_id','=',False)]"/>
|
<field name="account_tax_id" domain="[('parent_id','=',False)]"/>
|
||||||
</group>
|
</group>
|
||||||
<group attrs="{'readonly':[('state','=','valid')]}" string="Currency" groups="base.group_multi_currency">
|
<group attrs="{'readonly':[('state','=','valid')]}" string="Currency" groups="base.group_multi_currency">
|
||||||
<field name="currency_id"/>
|
<field name="currency_id" invisible="1"/>
|
||||||
<field name="amount_currency"/>
|
<field name="amount_currency" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
</group>
|
</group>
|
||||||
<group string="Reconciliation">
|
<group string="Reconciliation">
|
||||||
<field name="reconcile_id"/>
|
<field name="reconcile_id"/>
|
||||||
|
@ -1177,8 +1174,8 @@
|
||||||
<field name="credit"/>
|
<field name="credit"/>
|
||||||
|
|
||||||
<separator colspan="4" string="Optional Information"/>
|
<separator colspan="4" string="Optional Information"/>
|
||||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
<field name="currency_id" invisible="1"/>
|
||||||
<field name="amount_currency" groups="base.group_multi_currency"/>
|
<field name="amount_currency" groups="base.group_multi_currency" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="quantity"/>
|
<field name="quantity"/>
|
||||||
<field name="move_id" required="False"/>
|
<field name="move_id" required="False"/>
|
||||||
<newline/>
|
<newline/>
|
||||||
|
@ -2567,7 +2564,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="date" attrs="{'readonly':[('state','!=','draft')]}" on_change="onchange_date(date, company_id)"/>
|
||||||
<field name="closing_date" readonly="1"/>
|
<field name="closing_date" readonly="1"/>
|
||||||
<field name="period_id" class="oe_inline"/>
|
<field name="period_id" class="oe_inline"/>
|
||||||
<field name="currency" invisible="1" groups="base.group_multi_currency"/>
|
<field name="currency" invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
<notebook>
|
<notebook>
|
||||||
|
@ -2629,12 +2626,12 @@ action = pool.get('res.config').next(cr, uid, [], context)
|
||||||
<group col="6" colspan="4">
|
<group col="6" colspan="4">
|
||||||
<group col="2" colspan="2">
|
<group col="2" colspan="2">
|
||||||
<separator string="Opening Balance" colspan="4"/>
|
<separator string="Opening Balance" colspan="4"/>
|
||||||
<field name="balance_start" readonly="1" string="Opening Cash Control"/>
|
<field name="balance_start" readonly="1" string="Opening Cash Control" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="last_closing_balance" readonly="1" string="Last Closing Balance" />
|
<field name="last_closing_balance" readonly="1" string="Last Closing Balance" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="total_entry_encoding" />
|
<field name="total_entry_encoding" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
</group>
|
</group>
|
||||||
<group string="Closing Balance">
|
<group string="Closing Balance">
|
||||||
<field name="balance_end"/>
|
<field name="balance_end" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
</sheet>
|
</sheet>
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
<field name="taxes_id" colspan="2" attrs="{'readonly':[('sale_ok','=',0)]}" widget="many2many_tags"/>
|
<field name="taxes_id" colspan="2" attrs="{'readonly':[('sale_ok','=',0)]}" widget="many2many_tags"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="property_account_expense" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}"/>
|
<field name="property_account_expense" domain="[('type','<>','view'),('type','<>','consolidation')]" />
|
||||||
<field name="supplier_taxes_id" colspan="2" attrs="{'readonly':[('purchase_ok','=',0)]}" widget="many2many_tags"/>
|
<field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
</page>
|
</page>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<field name="name">analytic.entries.report.tree</field>
|
<field name="name">analytic.entries.report.tree</field>
|
||||||
<field name="model">analytic.entries.report</field>
|
<field name="model">analytic.entries.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Analytic Entries Analysis">
|
<tree string="Analytic Entries Analysis" create="false">
|
||||||
<field name="date" invisible="1"/>
|
<field name="date" invisible="1"/>
|
||||||
<field name="year" invisible="1"/>
|
<field name="year" invisible="1"/>
|
||||||
<field name="day" invisible="1"/>
|
<field name="day" invisible="1"/>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<field name="name">account.entries.report.tree</field>
|
<field name="name">account.entries.report.tree</field>
|
||||||
<field name="model">account.entries.report</field>
|
<field name="model">account.entries.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree colors="blue:move_state == 'draft';black:move_state == 'posted'" string="Entries Analysis">
|
<tree colors="blue:move_state == 'draft';black:move_state == 'posted'" create="false" string="Entries Analysis">
|
||||||
<field name="date" invisible="1"/>
|
<field name="date" invisible="1"/>
|
||||||
<field name="date_created" invisible="1"/>
|
<field name="date_created" invisible="1"/>
|
||||||
<field name="date_maturity" invisible="1"/>
|
<field name="date_maturity" invisible="1"/>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<field name="name">account.invoice.report.tree</field>
|
<field name="name">account.invoice.report.tree</field>
|
||||||
<field name="model">account.invoice.report</field>
|
<field name="model">account.invoice.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')" string="Invoices Analysis">
|
<tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')" create="false" string="Invoices Analysis">
|
||||||
<field name="date" invisible="1"/>
|
<field name="date" invisible="1"/>
|
||||||
<field name="user_id" invisible="1"/>
|
<field name="user_id" invisible="1"/>
|
||||||
<field name="year" invisible="1"/>
|
<field name="year" invisible="1"/>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<field name="name">account.treasury.report.tree</field>
|
<field name="name">account.treasury.report.tree</field>
|
||||||
<field name="model">account.treasury.report</field>
|
<field name="model">account.treasury.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Treasury Analysis">
|
<tree string="Treasury Analysis" create="false">
|
||||||
<field name="date" invisible="1"/>
|
<field name="date" invisible="1"/>
|
||||||
<field name="fiscalyear_id"/>
|
<field name="fiscalyear_id"/>
|
||||||
<field name="period_id"/>
|
<field name="period_id"/>
|
||||||
|
|
|
@ -106,27 +106,27 @@
|
||||||
</group>
|
</group>
|
||||||
<notebook colspan="4">
|
<notebook colspan="4">
|
||||||
<page string="General">
|
<page string="General">
|
||||||
<group>
|
<group>
|
||||||
<group>
|
<group>
|
||||||
<field name="purchase_value"/>
|
<field name="purchase_value" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="salvage_value"/>
|
<field name="salvage_value" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="value_residual"/>
|
<field name="value_residual" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="partner_id"/>
|
<field name="partner_id"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="method"/>
|
<field name="method"/>
|
||||||
<field name="method_progress_factor" attrs="{'invisible':[('method','=','linear')], 'required':[('method','=','degressive')]}"/>
|
<field name="method_progress_factor" attrs="{'invisible':[('method','=','linear')], 'required':[('method','=','degressive')]}"/>
|
||||||
<label for="method_time"/>
|
<label for="method_time"/>
|
||||||
<div>
|
<div>
|
||||||
<field name="method_time" on_change="onchange_method_time(method_time)" class="oe_inline"/>
|
<field name="method_time" on_change="onchange_method_time(method_time)" class="oe_inline"/>
|
||||||
<button name="%(action_asset_modify)d" states="open" string="Change Duration" type="action" icon="terp-stock_effects-object-colorize" class="oe_inline" colspan="1"/>
|
<button name="%(action_asset_modify)d" states="open" string="Change Duration" type="action" icon="terp-stock_effects-object-colorize" class="oe_inline" colspan="1"/>
|
||||||
</div>
|
</div>
|
||||||
<field name="prorata" attrs="{'invisible': [('method_time','=','end')]}"/>
|
<field name="prorata" attrs="{'invisible': [('method_time','=','end')]}"/>
|
||||||
<field name="method_number" attrs="{'invisible':[('method_time','=','end')], 'required':[('method_time','=','number')]}"/>
|
<field name="method_number" attrs="{'invisible':[('method_time','=','end')], 'required':[('method_time','=','number')]}"/>
|
||||||
<field name="method_period"/>
|
<field name="method_period"/>
|
||||||
<field name="method_end" attrs="{'required': [('method_time','=','end')], 'invisible':[('method_time','=','number')]}"/>
|
<field name="method_end" attrs="{'required': [('method_time','=','end')], 'invisible':[('method_time','=','number')]}"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
</page>
|
</page>
|
||||||
<page string="Depreciation Board">
|
<page string="Depreciation Board">
|
||||||
<field name="depreciation_line_ids" mode="tree">
|
<field name="depreciation_line_ids" mode="tree">
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<field name="name">asset.asset.report.tree</field>
|
<field name="name">asset.asset.report.tree</field>
|
||||||
<field name="model">asset.asset.report</field>
|
<field name="model">asset.asset.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Assets">
|
<tree string="Assets" create="false">
|
||||||
<field name="name" invisible="1"/>
|
<field name="name" invisible="1"/>
|
||||||
<field name="asset_id" invisible="1"/>
|
<field name="asset_id" invisible="1"/>
|
||||||
<field name="asset_category_id" invisible="1"/>
|
<field name="asset_category_id" invisible="1"/>
|
||||||
|
|
|
@ -1070,7 +1070,8 @@ class account_voucher(osv.osv):
|
||||||
if line.amount == line.amount_unreconciled:
|
if line.amount == line.amount_unreconciled:
|
||||||
if not line.move_line_id.amount_residual:
|
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))
|
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
|
sign = voucher_brw.type in ('payment', 'purchase') and -1 or 1
|
||||||
|
currency_rate_difference = sign * (line.move_line_id.amount_residual - amount)
|
||||||
else:
|
else:
|
||||||
currency_rate_difference = 0.0
|
currency_rate_difference = 0.0
|
||||||
move_line = {
|
move_line = {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<field name="name">sale.receipt.report.tree</field>
|
<field name="name">sale.receipt.report.tree</field>
|
||||||
<field name="model">sale.receipt.report</field>
|
<field name="model">sale.receipt.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')" string="Sales Receipt Analysis">
|
<tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')" create="false" string="Sales Receipt Analysis">
|
||||||
<field name="date" invisible="1"/>
|
<field name="date" invisible="1"/>
|
||||||
<field name="user_id" invisible="1"/>
|
<field name="user_id" invisible="1"/>
|
||||||
<field name="year" invisible="1"/>
|
<field name="year" invisible="1"/>
|
||||||
|
|
|
@ -136,11 +136,8 @@
|
||||||
<group>
|
<group>
|
||||||
<group>
|
<group>
|
||||||
<field name="partner_id" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" context="{'invoice_currency':currency_id, 'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}" string="Supplier"/>
|
<field name="partner_id" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" context="{'invoice_currency':currency_id, 'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}" string="Supplier"/>
|
||||||
<label for="amount" string="Amount"/>
|
<field name="currency_id" invisible="1"/>
|
||||||
<div>
|
<field name="amount" invisible="context.get('line_type', False)" on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)" class="oe_inline" widget='monetary' options='{"currency_field": "currency_id"}'/>
|
||||||
<field name="amount" invisible="context.get('line_type', False)" on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)" class="oe_inline"/>
|
|
||||||
<field name="currency_id" class="oe_inline"/>
|
|
||||||
</div>
|
|
||||||
<field name="journal_id"
|
<field name="journal_id"
|
||||||
domain="[('type','in',['bank', 'cash'])]"
|
domain="[('type','in',['bank', 'cash'])]"
|
||||||
invisible="context.get('line_type', False)"
|
invisible="context.get('line_type', False)"
|
||||||
|
@ -203,7 +200,7 @@
|
||||||
</group>
|
</group>
|
||||||
<group col="2">
|
<group col="2">
|
||||||
<separator string="Payment Options" colspan="2"/>
|
<separator string="Payment Options" colspan="2"/>
|
||||||
<field name="writeoff_amount"/>
|
<field name="writeoff_amount" widget='monetary' options='{"currency_field": "currency_id"}'/>
|
||||||
<field name="payment_option" required="1"/>
|
<field name="payment_option" required="1"/>
|
||||||
<field name="writeoff_acc_id"
|
<field name="writeoff_acc_id"
|
||||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
|
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
|
||||||
|
@ -294,13 +291,12 @@
|
||||||
<group>
|
<group>
|
||||||
<field name="state" invisible="1"/>
|
<field name="state" invisible="1"/>
|
||||||
<field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/>
|
<field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/>
|
||||||
<label for="amount" string="Paid Amount"/>
|
<field name="currency_id" invisible="1"/>
|
||||||
<div>
|
<field name="amount" class="oe_inline"
|
||||||
<field name="amount" class="oe_inline"
|
string="Paid Amount"
|
||||||
invisible="context.get('line_type', False)"
|
widget='monetary' options='{"currency_field": "currency_id"}'
|
||||||
on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)"/>
|
invisible="context.get('line_type', False)"
|
||||||
<field name="currency_id" class="oe_inline"/>
|
on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)"/>
|
||||||
</div>
|
|
||||||
<field name="journal_id"
|
<field name="journal_id"
|
||||||
domain="[('type','in',['bank', 'cash'])]"
|
domain="[('type','in',['bank', 'cash'])]"
|
||||||
invisible="context.get('line_type', False)"
|
invisible="context.get('line_type', False)"
|
||||||
|
@ -323,7 +319,7 @@
|
||||||
</group>
|
</group>
|
||||||
<notebook invisible="1">
|
<notebook invisible="1">
|
||||||
<page string="Payment Information" groups="base.group_user">
|
<page string="Payment Information" groups="base.group_user">
|
||||||
<label for="line_cr_ids"/>
|
<label for="line_cr_ids"/>
|
||||||
<field name="line_cr_ids" context="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, currency_id, type, context)">
|
<field name="line_cr_ids" context="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, currency_id, type, context)">
|
||||||
<tree string="Invoices and outstanding transactions" editable="bottom" colors="gray:amount==0">
|
<tree string="Invoices and outstanding transactions" editable="bottom" colors="gray:amount==0">
|
||||||
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
|
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
|
||||||
|
@ -367,7 +363,7 @@
|
||||||
<field name="paid_amount_in_company_currency" colspan="4" invisible="1"/>
|
<field name="paid_amount_in_company_currency" colspan="4" invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="writeoff_amount"/>
|
<field name="writeoff_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="payment_option" required="1"/>
|
<field name="payment_option" required="1"/>
|
||||||
<field name="writeoff_acc_id"
|
<field name="writeoff_acc_id"
|
||||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
|
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
|
||||||
|
@ -406,14 +402,12 @@
|
||||||
<group>
|
<group>
|
||||||
<group>
|
<group>
|
||||||
<field name="partner_id" domain="[('customer','=',True)]" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/>
|
<field name="partner_id" domain="[('customer','=',True)]" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/>
|
||||||
<label for="amount" string="Paid Amount"/>
|
<field name="currency_id" invisible="1"/>
|
||||||
<div>
|
<field name="amount" class="oe_inline"
|
||||||
<field name="amount" class="oe_inline"
|
string="Paid Amount"
|
||||||
invisible="context.get('line_type', False)"
|
widget="monetary" options="{'currency_field': 'currency_id'}"
|
||||||
on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)"/>
|
invisible="context.get('line_type', False)"
|
||||||
<field name="currency_id" class="oe_inline"/>
|
on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)"/>
|
||||||
</div>
|
|
||||||
|
|
||||||
<field name="journal_id"
|
<field name="journal_id"
|
||||||
domain="[('type','in',['bank', 'cash'])]"
|
domain="[('type','in',['bank', 'cash'])]"
|
||||||
invisible="context.get('line_type', False)"
|
invisible="context.get('line_type', False)"
|
||||||
|
@ -436,7 +430,7 @@
|
||||||
</group>
|
</group>
|
||||||
<notebook>
|
<notebook>
|
||||||
<page string="Payment Information" groups="base.group_user">
|
<page string="Payment Information" groups="base.group_user">
|
||||||
<label for="line_cr_ids"/>
|
<label for="line_cr_ids"/>
|
||||||
<field name="line_cr_ids" context="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, currency_id, type, context)">
|
<field name="line_cr_ids" context="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, currency_id, type, context)">
|
||||||
<tree string="Invoices and outstanding transactions" editable="bottom" colors="gray:amount==0">
|
<tree string="Invoices and outstanding transactions" editable="bottom" colors="gray:amount==0">
|
||||||
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
|
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
|
||||||
|
@ -480,7 +474,7 @@
|
||||||
<field name="paid_amount_in_company_currency" colspan="4" invisible="1"/>
|
<field name="paid_amount_in_company_currency" colspan="4" invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="writeoff_amount"/>
|
<field name="writeoff_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="payment_option" required="1"/>
|
<field name="payment_option" required="1"/>
|
||||||
<field name="writeoff_acc_id"
|
<field name="writeoff_acc_id"
|
||||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
|
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
<group>
|
<group>
|
||||||
<group>
|
<group>
|
||||||
<field name="type" invisible="True"/>
|
<field name="type" invisible="True"/>
|
||||||
<field name="partner_id" domain="[('customer','=',True)]" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer':1, 'show_address': 1}" options='{"always_reload": true}'/>
|
<field name="partner_id" domain="[('customer','=',True)]" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer':1, 'show_address': 1}" options='{"always_reload": True}'/>
|
||||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
|
|
|
@ -145,7 +145,7 @@
|
||||||
<field name="name">audittrail.log.tree</field>
|
<field name="name">audittrail.log.tree</field>
|
||||||
<field name="model">audittrail.log</field>
|
<field name="model">audittrail.log</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="AuditTrail Logs">
|
<tree string="AuditTrail Logs" create="false">
|
||||||
<field name="timestamp"/>
|
<field name="timestamp"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="object_id"/>
|
<field name="object_id"/>
|
||||||
|
|
|
@ -4,28 +4,25 @@ import simplejson
|
||||||
import werkzeug.urls
|
import werkzeug.urls
|
||||||
import werkzeug.utils
|
import werkzeug.utils
|
||||||
|
|
||||||
import openerp.modules.registry
|
import openerp
|
||||||
import openerp.addons.web.controllers.main
|
|
||||||
import openerp.addons.web.common.http as openerpweb
|
|
||||||
from openerp import SUPERUSER_ID
|
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class OAuthController(openerpweb.Controller):
|
class OAuthController(openerp.addons.web.http.Controller):
|
||||||
_cp_path = '/auth_oauth'
|
_cp_path = '/auth_oauth'
|
||||||
|
|
||||||
@openerpweb.jsonrequest
|
@openerp.addons.web.http.jsonrequest
|
||||||
def list_providers(self, req, dbname):
|
def list_providers(self, req, dbname):
|
||||||
try:
|
try:
|
||||||
registry = openerp.modules.registry.RegistryManager.get(dbname)
|
registry = openerp.modules.registry.RegistryManager.get(dbname)
|
||||||
with registry.cursor() as cr:
|
with registry.cursor() as cr:
|
||||||
providers = registry.get('auth.oauth.provider')
|
providers = registry.get('auth.oauth.provider')
|
||||||
l = providers.read(cr, SUPERUSER_ID, providers.search(cr, SUPERUSER_ID, [('enabled','=',True)]))
|
l = providers.read(cr, openerp.SUPERUSER_ID, providers.search(cr, openerp.SUPERUSER_ID, [('enabled','=',True)]))
|
||||||
except Exception:
|
except Exception:
|
||||||
l = []
|
l = []
|
||||||
return l
|
return l
|
||||||
|
|
||||||
@openerpweb.httprequest
|
@openerp.addons.web.http.httprequest
|
||||||
def signin(self, req, **kw):
|
def signin(self, req, **kw):
|
||||||
state = simplejson.loads(kw['state'])
|
state = simplejson.loads(kw['state'])
|
||||||
dbname = state['d']
|
dbname = state['d']
|
||||||
|
@ -34,7 +31,7 @@ class OAuthController(openerpweb.Controller):
|
||||||
with registry.cursor() as cr:
|
with registry.cursor() as cr:
|
||||||
try:
|
try:
|
||||||
u = registry.get('res.users')
|
u = registry.get('res.users')
|
||||||
credentials = u.auth_oauth(cr, SUPERUSER_ID, provider, kw)
|
credentials = u.auth_oauth(cr, openerp.SUPERUSER_ID, provider, kw)
|
||||||
cr.commit()
|
cr.commit()
|
||||||
return openerp.addons.web.controllers.main.login_and_redirect(req, *credentials)
|
return openerp.addons.web.controllers.main.login_and_redirect(req, *credentials)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
@ -43,7 +40,7 @@ class OAuthController(openerpweb.Controller):
|
||||||
url = "/#action=login&oauth_error=1"
|
url = "/#action=login&oauth_error=1"
|
||||||
except Exception,e:
|
except Exception,e:
|
||||||
# signup error
|
# signup error
|
||||||
_logger.exception('oops')
|
_logger.exception("OAuth2: %s" % str(e))
|
||||||
url = "/#action=login&oauth_error=2"
|
url = "/#action=login&oauth_error=2"
|
||||||
return openerp.addons.web.controllers.main.set_cookie_and_redirect(req, url)
|
return openerp.addons.web.controllers.main.set_cookie_and_redirect(req, url)
|
||||||
|
|
||||||
|
|
|
@ -15,13 +15,17 @@ class res_users(osv.Model):
|
||||||
_inherit = 'res.users'
|
_inherit = 'res.users'
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'oauth_provider_id': fields.many2one('auth.oauth.provider','OAuth Provider'),
|
'oauth_provider_id': fields.many2one('auth.oauth.provider', 'OAuth Provider'),
|
||||||
'oauth_uid': fields.char('OAuth User ID', help="Oauth Provider user_id"),
|
'oauth_uid': fields.char('OAuth User ID', help="Oauth Provider user_id"),
|
||||||
'oauth_access_token': fields.char('OAuth Token', readonly=True),
|
'oauth_access_token': fields.char('OAuth Access Token', readonly=True),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_sql_constraints = [
|
||||||
|
('uniq_users_oauth_provider_oauth_uid', 'unique(oauth_provider_id, oauth_uid)', 'OAuth UID must be unique per provider'),
|
||||||
|
]
|
||||||
|
|
||||||
def auth_oauth_rpc(self, cr, uid, endpoint, access_token, context=None):
|
def auth_oauth_rpc(self, cr, uid, endpoint, access_token, context=None):
|
||||||
params = urllib.urlencode({ 'access_token': access_token })
|
params = urllib.urlencode({'access_token': access_token})
|
||||||
if urlparse.urlparse(endpoint)[4]:
|
if urlparse.urlparse(endpoint)[4]:
|
||||||
url = endpoint + '&' + params
|
url = endpoint + '&' + params
|
||||||
else:
|
else:
|
||||||
|
@ -41,22 +45,26 @@ class res_users(osv.Model):
|
||||||
|
|
||||||
validation = self.auth_oauth_rpc(cr, uid, p.validation_endpoint, access_token)
|
validation = self.auth_oauth_rpc(cr, uid, p.validation_endpoint, access_token)
|
||||||
if validation.get("error"):
|
if validation.get("error"):
|
||||||
raise openerp.exceptions.AccessDenied
|
raise Exception(validation['error'])
|
||||||
if p.data_endpoint:
|
if p.data_endpoint:
|
||||||
data = self.auth_oauth_rpc(cr, uid, p.data_endpoint, access_token)
|
data = self.auth_oauth_rpc(cr, uid, p.data_endpoint, access_token)
|
||||||
validation.update(data)
|
validation.update(data)
|
||||||
# required
|
# required
|
||||||
oauth_uid = validation['user_id']
|
oauth_uid = validation['user_id']
|
||||||
if not oauth_uid:
|
if not oauth_uid:
|
||||||
raise openerp.exceptions.AccessDenied
|
raise openerp.exceptions.AccessDenied()
|
||||||
email = validation.get('email', 'provider_%d_user_%d' % (p.id, oauth_uid))
|
email = validation.get('email', 'provider_%d_user_%d' % (p.id, oauth_uid))
|
||||||
# optional
|
# optional
|
||||||
name = validation.get('name', email)
|
name = validation.get('name', email)
|
||||||
res = self.search(cr, uid, [("oauth_uid", "=", oauth_uid)])
|
res = self.search(cr, uid, [("oauth_uid", "=", oauth_uid), ('oauth_provider_id', '=', provider)])
|
||||||
if res:
|
if res:
|
||||||
self.write(cr, uid, res[0], { 'oauth_access_token': access_token })
|
assert len(res) == 1
|
||||||
|
self.write(cr, uid, res[0], {'oauth_access_token': access_token})
|
||||||
else:
|
else:
|
||||||
# New user
|
# New user if signup module available
|
||||||
|
if not hasattr(self, '_signup_create_user'):
|
||||||
|
raise openerp.exceptions.AccessDenied()
|
||||||
|
|
||||||
new_user = {
|
new_user = {
|
||||||
'name': name,
|
'name': name,
|
||||||
'login': email,
|
'login': email,
|
||||||
|
@ -66,7 +74,9 @@ class res_users(osv.Model):
|
||||||
'oauth_access_token': access_token,
|
'oauth_access_token': access_token,
|
||||||
'active': True,
|
'active': True,
|
||||||
}
|
}
|
||||||
self.auth_signup_create(cr, uid, new_user)
|
# TODO pass signup token to allow attach new user to right partner
|
||||||
|
self._signup_create_user(cr, uid, new_user)
|
||||||
|
|
||||||
credentials = (cr.dbname, email, access_token)
|
credentials = (cr.dbname, email, access_token)
|
||||||
return credentials
|
return credentials
|
||||||
|
|
||||||
|
@ -74,7 +84,7 @@ class res_users(osv.Model):
|
||||||
try:
|
try:
|
||||||
return super(res_users, self).check_credentials(cr, uid, password)
|
return super(res_users, self).check_credentials(cr, uid, password)
|
||||||
except openerp.exceptions.AccessDenied:
|
except openerp.exceptions.AccessDenied:
|
||||||
res = self.search(cr, SUPERUSER_ID, [('id','=',uid),('oauth_access_token','=',password)])
|
res = self.search(cr, SUPERUSER_ID, [('id', '=', uid), ('oauth_access_token', '=', password)])
|
||||||
if not res:
|
if not res:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
|
@ -23,24 +23,21 @@ import logging
|
||||||
import os
|
import os
|
||||||
import tempfile
|
import tempfile
|
||||||
import urllib
|
import urllib
|
||||||
from openerp import SUPERUSER_ID
|
|
||||||
|
|
||||||
import werkzeug.urls
|
import werkzeug.urls
|
||||||
import werkzeug.exceptions
|
import werkzeug.exceptions
|
||||||
|
|
||||||
from openerp.modules.registry import RegistryManager
|
|
||||||
from openerp.addons.web.controllers.main import login_and_redirect, set_cookie_and_redirect
|
|
||||||
try:
|
|
||||||
import openerp.addons.web.common.http as openerpweb
|
|
||||||
except ImportError:
|
|
||||||
import web.common.http as openerpweb # noqa
|
|
||||||
|
|
||||||
from openid import oidutil
|
from openid import oidutil
|
||||||
from openid.store import filestore
|
from openid.store import filestore
|
||||||
from openid.consumer import consumer
|
from openid.consumer import consumer
|
||||||
from openid.cryptutil import randomString
|
from openid.cryptutil import randomString
|
||||||
from openid.extensions import ax, sreg
|
from openid.extensions import ax, sreg
|
||||||
|
|
||||||
|
import openerp
|
||||||
|
from openerp import SUPERUSER_ID
|
||||||
|
from openerp.modules.registry import RegistryManager
|
||||||
|
from openerp.addons.web.controllers.main import login_and_redirect, set_cookie_and_redirect
|
||||||
|
|
||||||
from .. import utils
|
from .. import utils
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
@ -70,7 +67,7 @@ class GoogleAppsAwareConsumer(consumer.GenericConsumer):
|
||||||
return super(GoogleAppsAwareConsumer, self).complete(message, endpoint, return_to)
|
return super(GoogleAppsAwareConsumer, self).complete(message, endpoint, return_to)
|
||||||
|
|
||||||
|
|
||||||
class OpenIDController(openerpweb.Controller):
|
class OpenIDController(openerp.addons.web.http.Controller):
|
||||||
_cp_path = '/auth_openid/login'
|
_cp_path = '/auth_openid/login'
|
||||||
|
|
||||||
_store = filestore.FileOpenIDStore(_storedir)
|
_store = filestore.FileOpenIDStore(_storedir)
|
||||||
|
@ -118,7 +115,7 @@ class OpenIDController(openerpweb.Controller):
|
||||||
def _get_realm(self, req):
|
def _get_realm(self, req):
|
||||||
return req.httprequest.host_url
|
return req.httprequest.host_url
|
||||||
|
|
||||||
@openerpweb.httprequest
|
@openerp.addons.web.http.httprequest
|
||||||
def verify_direct(self, req, db, url):
|
def verify_direct(self, req, db, url):
|
||||||
result = self._verify(req, db, url)
|
result = self._verify(req, db, url)
|
||||||
if 'error' in result:
|
if 'error' in result:
|
||||||
|
@ -127,7 +124,7 @@ class OpenIDController(openerpweb.Controller):
|
||||||
return werkzeug.utils.redirect(result['value'])
|
return werkzeug.utils.redirect(result['value'])
|
||||||
return result['value']
|
return result['value']
|
||||||
|
|
||||||
@openerpweb.jsonrequest
|
@openerp.addons.web.http.jsonrequest
|
||||||
def verify(self, req, db, url):
|
def verify(self, req, db, url):
|
||||||
return self._verify(req, db, url)
|
return self._verify(req, db, url)
|
||||||
|
|
||||||
|
@ -157,7 +154,7 @@ class OpenIDController(openerpweb.Controller):
|
||||||
form_html = request.htmlMarkup(realm, redirect_to)
|
form_html = request.htmlMarkup(realm, redirect_to)
|
||||||
return {'action': 'post', 'value': form_html, 'session_id': req.session_id}
|
return {'action': 'post', 'value': form_html, 'session_id': req.session_id}
|
||||||
|
|
||||||
@openerpweb.httprequest
|
@openerp.addons.web.http.httprequest
|
||||||
def process(self, req, **kw):
|
def process(self, req, **kw):
|
||||||
session = getattr(req.session, 'openid_session', None)
|
session = getattr(req.session, 'openid_session', None)
|
||||||
if not session:
|
if not session:
|
||||||
|
@ -225,7 +222,7 @@ class OpenIDController(openerpweb.Controller):
|
||||||
|
|
||||||
return set_cookie_and_redirect(req, '/#action=login&loginerror=1')
|
return set_cookie_and_redirect(req, '/#action=login&loginerror=1')
|
||||||
|
|
||||||
@openerpweb.jsonrequest
|
@openerp.addons.web.http.jsonrequest
|
||||||
def status(self, req):
|
def status(self, req):
|
||||||
session = getattr(req.session, 'openid_session', {})
|
session = getattr(req.session, 'openid_session', {})
|
||||||
return {'status': session.get('status'), 'message': session.get('message')}
|
return {'status': session.get('status'), 'message': session.get('message')}
|
||||||
|
|
|
@ -18,20 +18,20 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
import logging
|
||||||
from openerp import SUPERUSER_ID
|
|
||||||
from openerp.modules.registry import RegistryManager
|
|
||||||
import openerp.addons.web.common.http as openerpweb
|
|
||||||
|
|
||||||
import werkzeug
|
import werkzeug
|
||||||
|
|
||||||
import logging
|
import openerp
|
||||||
|
from openerp import SUPERUSER_ID
|
||||||
|
from openerp.modules.registry import RegistryManager
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class Controller(openerpweb.Controller):
|
class Controller(openerp.addons.web.http.Controller):
|
||||||
_cp_path = '/auth_reset_password'
|
_cp_path = '/auth_reset_password'
|
||||||
|
|
||||||
@openerpweb.httprequest
|
@openerp.addons.web.http.httprequest
|
||||||
def reset_password(self, req, dbname, login):
|
def reset_password(self, req, dbname, login):
|
||||||
""" retrieve user, and perform reset password """
|
""" retrieve user, and perform reset password """
|
||||||
url = '/'
|
url = '/'
|
||||||
|
|
|
@ -18,32 +18,31 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
import logging
|
||||||
from openerp import SUPERUSER_ID
|
|
||||||
from openerp.modules.registry import RegistryManager
|
|
||||||
from openerp.addons.web.controllers.main import login_and_redirect
|
|
||||||
import openerp.addons.web.common.http as openerpweb
|
|
||||||
|
|
||||||
import werkzeug
|
import werkzeug
|
||||||
|
|
||||||
import logging
|
import openerp
|
||||||
|
from openerp.modules.registry import RegistryManager
|
||||||
|
from openerp.addons.web.controllers.main import login_and_redirect
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class Controller(openerpweb.Controller):
|
class Controller(openerp.addons.web.http.Controller):
|
||||||
_cp_path = '/auth_signup'
|
_cp_path = '/auth_signup'
|
||||||
|
|
||||||
@openerpweb.jsonrequest
|
@openerp.addons.web.http.jsonrequest
|
||||||
def retrieve(self, req, dbname, token):
|
def retrieve(self, req, dbname, token):
|
||||||
""" retrieve the user info (name, login or email) corresponding to a signup token """
|
""" retrieve the user info (name, login or email) corresponding to a signup token """
|
||||||
registry = RegistryManager.get(dbname)
|
registry = RegistryManager.get(dbname)
|
||||||
user_info = None
|
user_info = None
|
||||||
with registry.cursor() as cr:
|
with registry.cursor() as cr:
|
||||||
res_partner = registry.get('res.partner')
|
res_partner = registry.get('res.partner')
|
||||||
user_info = res_partner.signup_retrieve_info(cr, SUPERUSER_ID, token)
|
user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token)
|
||||||
return user_info
|
return user_info
|
||||||
|
|
||||||
@openerpweb.httprequest
|
@openerp.addons.web.http.httprequest
|
||||||
def signup(self, req, dbname, token, name, login, password):
|
def signup(self, req, dbname, token, name, login, password, state=''):
|
||||||
""" sign up a user (new or existing), and log it in """
|
""" sign up a user (new or existing), and log it in """
|
||||||
url = '/'
|
url = '/'
|
||||||
registry = RegistryManager.get(dbname)
|
registry = RegistryManager.get(dbname)
|
||||||
|
@ -51,9 +50,9 @@ class Controller(openerpweb.Controller):
|
||||||
try:
|
try:
|
||||||
res_users = registry.get('res.users')
|
res_users = registry.get('res.users')
|
||||||
values = {'name': name, 'login': login, 'password': password}
|
values = {'name': name, 'login': login, 'password': password}
|
||||||
credentials = res_users.signup(cr, SUPERUSER_ID, values, token)
|
credentials = res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
|
||||||
cr.commit()
|
cr.commit()
|
||||||
return login_and_redirect(req, *credentials)
|
return login_and_redirect(req, *credentials, redirect_url='/#%s'%state)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# signup error
|
# signup error
|
||||||
_logger.exception('error when signup')
|
_logger.exception('error when signup')
|
||||||
|
|
|
@ -18,6 +18,10 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
import random
|
||||||
|
import time
|
||||||
|
import urllib
|
||||||
|
import urlparse
|
||||||
|
|
||||||
import openerp
|
import openerp
|
||||||
from openerp.osv import osv, fields
|
from openerp.osv import osv, fields
|
||||||
|
@ -25,11 +29,6 @@ from openerp import SUPERUSER_ID
|
||||||
from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
|
from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
|
||||||
from openerp.tools.safe_eval import safe_eval
|
from openerp.tools.safe_eval import safe_eval
|
||||||
|
|
||||||
import time
|
|
||||||
import random
|
|
||||||
import urllib
|
|
||||||
import urlparse
|
|
||||||
|
|
||||||
def random_token():
|
def random_token():
|
||||||
# the token has an entropy of about 120 bits (6 bits/char * 20 chars)
|
# the token has an entropy of about 120 bits (6 bits/char * 20 chars)
|
||||||
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
||||||
|
@ -38,7 +37,6 @@ def random_token():
|
||||||
def now():
|
def now():
|
||||||
return time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
|
return time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
|
|
||||||
|
|
||||||
class res_partner(osv.Model):
|
class res_partner(osv.Model):
|
||||||
_inherit = 'res.partner'
|
_inherit = 'res.partner'
|
||||||
|
|
||||||
|
@ -132,8 +130,6 @@ class res_partner(osv.Model):
|
||||||
res['email'] = partner.email or ''
|
res['email'] = partner.email or ''
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class res_users(osv.Model):
|
class res_users(osv.Model):
|
||||||
_inherit = 'res.users'
|
_inherit = 'res.users'
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,7 @@ openerp.auth_signup = function(instance) {
|
||||||
name: name,
|
name: name,
|
||||||
login: login,
|
login: login,
|
||||||
password: password,
|
password: password,
|
||||||
|
state: $.param(this.params)
|
||||||
};
|
};
|
||||||
var url = "/auth_signup/signup?" + $.param(params);
|
var url = "/auth_signup/signup?" + $.param(params);
|
||||||
window.location = url;
|
window.location = url;
|
||||||
|
|
|
@ -26,13 +26,14 @@ Re-implement openerp's file import system:
|
||||||
'author': 'OpenERP SA',
|
'author': 'OpenERP SA',
|
||||||
'depends': ['base'],
|
'depends': ['base'],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False, # set to true and allow uninstall?
|
'auto_install': True,
|
||||||
'css': [
|
'css': [
|
||||||
'static/lib/select2/select2.css',
|
'static/lib/select2/select2.css',
|
||||||
'static/src/css/import.css',
|
'static/src/css/import.css',
|
||||||
],
|
],
|
||||||
'js': [
|
'js': [
|
||||||
'static/lib/select2/select2.js',
|
'static/lib/select2/select2.js',
|
||||||
|
'static/lib/javascript-state-machine/state-machine.js',
|
||||||
'static/src/js/import.js',
|
'static/src/js/import.js',
|
||||||
],
|
],
|
||||||
'qweb': ['static/src/xml/import.xml'],
|
'qweb': ['static/src/xml/import.xml'],
|
||||||
|
|
|
@ -1,15 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import simplejson
|
import simplejson
|
||||||
|
|
||||||
try:
|
import openerp
|
||||||
import openerp.addons.web.common.http as openerpweb
|
|
||||||
except ImportError:
|
|
||||||
import web.common.http as openerpweb
|
|
||||||
|
|
||||||
class ImportController(openerpweb.Controller):
|
class ImportController(openerp.addons.web.http.Controller):
|
||||||
_cp_path = '/base_import'
|
_cp_path = '/base_import'
|
||||||
|
|
||||||
@openerpweb.httprequest
|
@openerp.addons.web.http.httprequest
|
||||||
def set_file(self, req, file, import_id, jsonp='callback'):
|
def set_file(self, req, file, import_id, jsonp='callback'):
|
||||||
import_id = int(import_id)
|
import_id = int(import_id)
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,10 @@ class ir_import(orm.TransientModel):
|
||||||
}]
|
}]
|
||||||
fields_got = self.pool[model].fields_get(cr, uid, context=context)
|
fields_got = self.pool[model].fields_get(cr, uid, context=context)
|
||||||
for name, field in fields_got.iteritems():
|
for name, field in fields_got.iteritems():
|
||||||
|
# an empty string means the field is deprecated, @deprecated must
|
||||||
|
# be absent or False to mean not-deprecated
|
||||||
|
if field.get('deprecated', False) is not False:
|
||||||
|
continue
|
||||||
if field.get('readonly'):
|
if field.get('readonly'):
|
||||||
states = field.get('states')
|
states = field.get('states')
|
||||||
if not states:
|
if not states:
|
||||||
|
@ -97,7 +101,7 @@ class ir_import(orm.TransientModel):
|
||||||
'id': name,
|
'id': name,
|
||||||
'name': name,
|
'name': name,
|
||||||
'string': field['string'],
|
'string': field['string'],
|
||||||
# Y U NO ALWAYS HAVE REQUIRED
|
# Y U NO ALWAYS HAS REQUIRED
|
||||||
'required': bool(field.get('required')),
|
'required': bool(field.get('required')),
|
||||||
'fields': [],
|
'fields': [],
|
||||||
}
|
}
|
||||||
|
@ -124,8 +128,8 @@ class ir_import(orm.TransientModel):
|
||||||
"""
|
"""
|
||||||
csv_iterator = csv.reader(
|
csv_iterator = csv.reader(
|
||||||
StringIO(record.file),
|
StringIO(record.file),
|
||||||
quotechar=options['quoting'],
|
quotechar=str(options['quoting']),
|
||||||
delimiter=options['separator'])
|
delimiter=str(options['separator']))
|
||||||
csv_nonempty = itertools.ifilter(None, csv_iterator)
|
csv_nonempty = itertools.ifilter(None, csv_iterator)
|
||||||
# TODO: guess encoding with chardet? Or https://github.com/aadsm/jschardet
|
# TODO: guess encoding with chardet? Or https://github.com/aadsm/jschardet
|
||||||
encoding = options.get('encoding', 'utf-8')
|
encoding = options.get('encoding', 'utf-8')
|
||||||
|
@ -307,22 +311,14 @@ class ir_import(orm.TransientModel):
|
||||||
except ValueError, e:
|
except ValueError, e:
|
||||||
return [{
|
return [{
|
||||||
'type': 'error',
|
'type': 'error',
|
||||||
'message': str(e),
|
'message': unicode(e),
|
||||||
'record': False,
|
'record': False,
|
||||||
}]
|
}]
|
||||||
|
|
||||||
try:
|
_logger.info('importing %d rows...', len(data))
|
||||||
_logger.info('importing %d rows...', len(data))
|
import_result = self.pool[record.res_model].load(
|
||||||
(code, record, message, _wat) = self.pool[record.res_model].import_data(
|
cr, uid, import_fields, data, context=context)
|
||||||
cr, uid, import_fields, data, context=context)
|
_logger.info('done')
|
||||||
_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
|
# If transaction aborted, RELEASE SAVEPOINT is going to raise
|
||||||
# an InternalError (ROLLBACK should work, maybe). Ignore that.
|
# an InternalError (ROLLBACK should work, maybe). Ignore that.
|
||||||
|
@ -339,14 +335,4 @@ class ir_import(orm.TransientModel):
|
||||||
except psycopg2.InternalError:
|
except psycopg2.InternalError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if code != -1:
|
return import_result['messages']
|
||||||
return []
|
|
||||||
|
|
||||||
# TODO: add key for error location?
|
|
||||||
# TODO: error not within normal preview, how to display? Re-preview
|
|
||||||
# with higher ``count``?
|
|
||||||
return [{
|
|
||||||
'type': 'error',
|
|
||||||
'message': message,
|
|
||||||
'record': record or False
|
|
||||||
}]
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright (c) 2012 Jake Gordon and contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
|
@ -0,0 +1,327 @@
|
||||||
|
Javascript Finite State Machine (v2.1.0)
|
||||||
|
========================================
|
||||||
|
|
||||||
|
This standalone javascript micro-framework provides a finite state machine for your pleasure.
|
||||||
|
|
||||||
|
* You can find the [code here](https://github.com/jakesgordon/javascript-state-machine)
|
||||||
|
* You can find a [description here](http://codeincomplete.com/posts/2011/8/19/javascript_state_machine_v2/)
|
||||||
|
* You can find a [working demo here](http://codeincomplete.com/posts/2011/8/19/javascript_state_machine_v2/example/)
|
||||||
|
|
||||||
|
Download
|
||||||
|
========
|
||||||
|
|
||||||
|
You can download [state-machine.js](https://github.com/jakesgordon/javascript-state-machine/raw/master/state-machine.js),
|
||||||
|
or the [minified version](https://github.com/jakesgordon/javascript-state-machine/raw/master/state-machine.min.js)
|
||||||
|
|
||||||
|
Alternatively:
|
||||||
|
|
||||||
|
git clone git@github.com:jakesgordon/javascript-state-machine
|
||||||
|
|
||||||
|
|
||||||
|
* All code is in state-machine.js
|
||||||
|
* Minified version provided in state-machine.min.js
|
||||||
|
* No 3rd party library is required
|
||||||
|
* Demo can be found in /index.html
|
||||||
|
* QUnit tests can be found in /test/index.html
|
||||||
|
|
||||||
|
Usage
|
||||||
|
=====
|
||||||
|
|
||||||
|
Include `state-machine.min.js` in your application.
|
||||||
|
|
||||||
|
In its simplest form, create a standalone state machine using:
|
||||||
|
|
||||||
|
var fsm = StateMachine.create({
|
||||||
|
initial: 'green',
|
||||||
|
events: [
|
||||||
|
{ name: 'warn', from: 'green', to: 'yellow' },
|
||||||
|
{ name: 'panic', from: 'yellow', to: 'red' },
|
||||||
|
{ name: 'calm', from: 'red', to: 'yellow' },
|
||||||
|
{ name: 'clear', from: 'yellow', to: 'green' }
|
||||||
|
]});
|
||||||
|
|
||||||
|
... will create an object with a method for each event:
|
||||||
|
|
||||||
|
* fsm.warn() - transition from 'green' to 'yellow'
|
||||||
|
* fsm.panic() - transition from 'yellow' to 'red'
|
||||||
|
* fsm.calm() - transition from 'red' to 'yellow'
|
||||||
|
* fsm.clear() - transition from 'yellow' to 'green'
|
||||||
|
|
||||||
|
along with the following members:
|
||||||
|
|
||||||
|
* fsm.current - contains the current state
|
||||||
|
* fsm.is(s) - return true if state `s` is the current state
|
||||||
|
* fsm.can(e) - return true if event `e` can be fired in the current state
|
||||||
|
* fsm.cannot(e) - return true if event `e` cannot be fired in the current state
|
||||||
|
|
||||||
|
Multiple 'from' and 'to' states for a single event
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
If an event is allowed **from** multiple states, and always transitions to the same
|
||||||
|
state, then simply provide an array of states in the `from` attribute of an event. However,
|
||||||
|
if an event is allowed from multiple states, but should transition **to** a different
|
||||||
|
state depending on the current state, then provide multiple event entries with
|
||||||
|
the same name:
|
||||||
|
|
||||||
|
var fsm = StateMachine.create({
|
||||||
|
initial: 'hungry',
|
||||||
|
events: [
|
||||||
|
{ name: 'eat', from: 'hungry', to: 'satisfied' },
|
||||||
|
{ name: 'eat', from: 'satisfied', to: 'full' },
|
||||||
|
{ name: 'eat', from: 'full', to: 'sick' },
|
||||||
|
{ name: 'rest', from: ['hungry', 'satisfied', 'full', 'sick'], to: 'hungry' },
|
||||||
|
]});
|
||||||
|
|
||||||
|
This example will create an object with 2 event methods:
|
||||||
|
|
||||||
|
* fsm.eat()
|
||||||
|
* fsm.rest()
|
||||||
|
|
||||||
|
The `rest` event will always transition to the `hungry` state, while the `eat` event
|
||||||
|
will transition to a state that is dependent on the current state.
|
||||||
|
|
||||||
|
>> NOTE: The `rest` event could use a wildcard '*' for the 'from' state if it should be
|
||||||
|
allowed from any current state.
|
||||||
|
|
||||||
|
>> NOTE: The `rest` event in the above example can also be specified as multiple events with
|
||||||
|
the same name if you prefer the verbose approach.
|
||||||
|
|
||||||
|
Callbacks
|
||||||
|
=========
|
||||||
|
|
||||||
|
4 callbacks are available if your state machine has methods using the following naming conventions:
|
||||||
|
|
||||||
|
* onbefore**event** - fired before the event
|
||||||
|
* onleave**state** - fired when leaving the old state
|
||||||
|
* onenter**state** - fired when entering the new state
|
||||||
|
* onafter**event** - fired after the event
|
||||||
|
|
||||||
|
You can affect the event in 3 ways:
|
||||||
|
|
||||||
|
* return `false` from an `onbeforeevent` handler to cancel the event.
|
||||||
|
* return `false` from an `onleavestate` handler to cancel the event.
|
||||||
|
* return `ASYNC` from an `onleavestate` handler to perform an asynchronous state transition (see next section)
|
||||||
|
|
||||||
|
For convenience, the 2 most useful callbacks can be shortened:
|
||||||
|
|
||||||
|
* on**event** - convenience shorthand for onafter**event**
|
||||||
|
* on**state** - convenience shorthand for onenter**state**
|
||||||
|
|
||||||
|
In addition, a generic `onchangestate()` callback can be used to call a single function for _all_ state changes:
|
||||||
|
|
||||||
|
All callbacks will be passed the same arguments:
|
||||||
|
|
||||||
|
* **event** name
|
||||||
|
* **from** state
|
||||||
|
* **to** state
|
||||||
|
* _(followed by any arguments you passed into the original event method)_
|
||||||
|
|
||||||
|
Callbacks can be specified when the state machine is first created:
|
||||||
|
|
||||||
|
var fsm = StateMachine.create({
|
||||||
|
initial: 'green',
|
||||||
|
events: [
|
||||||
|
{ name: 'warn', from: 'green', to: 'yellow' },
|
||||||
|
{ name: 'panic', from: 'yellow', to: 'red' },
|
||||||
|
{ name: 'calm', from: 'red', to: 'yellow' },
|
||||||
|
{ name: 'clear', from: 'yellow', to: 'green' }
|
||||||
|
],
|
||||||
|
callbacks: {
|
||||||
|
onpanic: function(event, from, to, msg) { alert('panic! ' + msg); },
|
||||||
|
onclear: function(event, from, to, msg) { alert('thanks to ' + msg); },
|
||||||
|
ongreen: function(event, from, to) { document.body.className = 'green'; },
|
||||||
|
onyellow: function(event, from, to) { document.body.className = 'yellow'; },
|
||||||
|
onred: function(event, from, to) { document.body.className = 'red'; },
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
fsm.panic('killer bees');
|
||||||
|
fsm.clear('sedatives in the honey pots');
|
||||||
|
...
|
||||||
|
|
||||||
|
Additionally, they can be added and removed from the state machine at any time:
|
||||||
|
|
||||||
|
fsm.ongreen = null;
|
||||||
|
fsm.onyellow = null;
|
||||||
|
fsm.onred = null;
|
||||||
|
fsm.onchangestate = function(event, from, to) { document.body.className = to; };
|
||||||
|
|
||||||
|
Asynchronous State Transitions
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Sometimes, you need to execute some asynchronous code during a state transition and ensure the
|
||||||
|
new state is not entered until your code has completed.
|
||||||
|
|
||||||
|
A good example of this is when you transition out of a `menu` state, perhaps you want to gradually
|
||||||
|
fade the menu away, or slide it off the screen and don't want to transition to your `game` state
|
||||||
|
until after that animation has been performed.
|
||||||
|
|
||||||
|
You can now return `StateMachine.ASYNC` from your `onleavestate` handler and the state machine
|
||||||
|
will be _'put on hold'_ until you are ready to trigger the transition using the new `transition()`
|
||||||
|
method.
|
||||||
|
|
||||||
|
For example, using jQuery effects:
|
||||||
|
|
||||||
|
var fsm = StateMachine.create({
|
||||||
|
|
||||||
|
initial: 'menu',
|
||||||
|
|
||||||
|
events: [
|
||||||
|
{ name: 'play', from: 'menu', to: 'game' },
|
||||||
|
{ name: 'quit', from: 'game', to: 'menu' }
|
||||||
|
],
|
||||||
|
|
||||||
|
callbacks: {
|
||||||
|
|
||||||
|
onentermenu: function() { $('#menu').show(); },
|
||||||
|
onentergame: function() { $('#game').show(); },
|
||||||
|
|
||||||
|
onleavemenu: function() {
|
||||||
|
$('#menu').fadeOut('fast', function() {
|
||||||
|
fsm.transition();
|
||||||
|
});
|
||||||
|
return StateMachine.ASYNC; // tell StateMachine to defer next state until we call transition (in fadeOut callback above)
|
||||||
|
},
|
||||||
|
|
||||||
|
onleavegame: function() {
|
||||||
|
$('#game').slideDown('slow', function() {
|
||||||
|
fsm.transition();
|
||||||
|
};
|
||||||
|
return StateMachine.ASYNC; // tell StateMachine to defer next state until we call transition (in slideDown callback above)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
State Machine Classes
|
||||||
|
=====================
|
||||||
|
|
||||||
|
You can also turn all instances of a _class_ into an FSM by applying
|
||||||
|
the state machine functionality to the prototype, including your callbacks
|
||||||
|
in your prototype, and providing a `startup` event for use when constructing
|
||||||
|
instances:
|
||||||
|
|
||||||
|
MyFSM = function() { // my constructor function
|
||||||
|
this.startup();
|
||||||
|
};
|
||||||
|
|
||||||
|
MyFSM.prototype = {
|
||||||
|
|
||||||
|
onpanic: function(event, from, to) { alert('panic'); },
|
||||||
|
onclear: function(event, from, to) { alert('all is clear'); },
|
||||||
|
|
||||||
|
// my other prototype methods
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
StateMachine.create({
|
||||||
|
target: MyFSM.prototype,
|
||||||
|
events: [
|
||||||
|
{ name: 'startup', from: 'none', to: 'green' },
|
||||||
|
{ name: 'warn', from: 'green', to: 'yellow' },
|
||||||
|
{ name: 'panic', from: 'yellow', to: 'red' },
|
||||||
|
{ name: 'calm', from: 'red', to: 'yellow' },
|
||||||
|
{ name: 'clear', from: 'yellow', to: 'green' }
|
||||||
|
]});
|
||||||
|
|
||||||
|
|
||||||
|
This should be easy to adjust to fit your appropriate mechanism for object construction.
|
||||||
|
|
||||||
|
Initialization Options
|
||||||
|
======================
|
||||||
|
|
||||||
|
How the state machine should initialize can depend on your application requirements, so
|
||||||
|
the library provides a number of simple options.
|
||||||
|
|
||||||
|
By default, if you dont specify any initial state, the state machine will be in the `'none'`
|
||||||
|
state and you would need to provide an event to take it out of this state:
|
||||||
|
|
||||||
|
var fsm = StateMachine.create({
|
||||||
|
events: [
|
||||||
|
{ name: 'startup', from: 'none', to: 'green' },
|
||||||
|
{ name: 'panic', from: 'green', to: 'red' },
|
||||||
|
{ name: 'calm', from: 'red', to: 'green' },
|
||||||
|
]});
|
||||||
|
alert(fsm.current); // "none"
|
||||||
|
fsm.startup();
|
||||||
|
alert(fsm.current); // "green"
|
||||||
|
|
||||||
|
If you specify the name of your initial event (as in all the earlier examples), then an
|
||||||
|
implicit `startup` event will be created for you and fired when the state machine is constructed.
|
||||||
|
|
||||||
|
var fsm = StateMachine.create({
|
||||||
|
initial: 'green',
|
||||||
|
events: [
|
||||||
|
{ name: 'panic', from: 'green', to: 'red' },
|
||||||
|
{ name: 'calm', from: 'red', to: 'green' },
|
||||||
|
]});
|
||||||
|
alert(fsm.current); // "green"
|
||||||
|
|
||||||
|
If your object already has a `startup` method you can use a different name for the initial event
|
||||||
|
|
||||||
|
var fsm = StateMachine.create({
|
||||||
|
initial: { state: 'green', event: 'init' },
|
||||||
|
events: [
|
||||||
|
{ name: 'panic', from: 'green', to: 'red' },
|
||||||
|
{ name: 'calm', from: 'red', to: 'green' },
|
||||||
|
]});
|
||||||
|
alert(fsm.current); // "green"
|
||||||
|
|
||||||
|
Finally, if you want to wait to call the initial state transition event until a later date you
|
||||||
|
can `defer` it:
|
||||||
|
|
||||||
|
var fsm = StateMachine.create({
|
||||||
|
initial: { state: 'green', event: 'init', defer: true },
|
||||||
|
events: [
|
||||||
|
{ name: 'panic', from: 'green', to: 'red' },
|
||||||
|
{ name: 'calm', from: 'red', to: 'green' },
|
||||||
|
]});
|
||||||
|
alert(fsm.current); // "none"
|
||||||
|
fsm.init();
|
||||||
|
alert(fsm.current); // "green"
|
||||||
|
|
||||||
|
Of course, we have now come full circle, this last example is pretty much functionally the
|
||||||
|
same as the first example in this section where you simply define your own startup event.
|
||||||
|
|
||||||
|
So you have a number of choices available to you when initializing your state machine.
|
||||||
|
|
||||||
|
Handling Failures
|
||||||
|
======================
|
||||||
|
|
||||||
|
By default, if you try to call an event method that is not allowed in the current state, the
|
||||||
|
state machine will throw an exception. If you prefer to handle the problem yourself, you can
|
||||||
|
define a custom `error` handler:
|
||||||
|
|
||||||
|
var fsm = StateMachine.create({
|
||||||
|
initial: 'green',
|
||||||
|
error: function(eventName, from, to, args, errorCode, errorMessage) {
|
||||||
|
return 'event ' + eventName + ' was naughty :- ' + errorMessage;
|
||||||
|
},
|
||||||
|
events: [
|
||||||
|
{ name: 'panic', from: 'green', to: 'red' },
|
||||||
|
{ name: 'calm', from: 'red', to: 'green' },
|
||||||
|
]});
|
||||||
|
alert(fsm.calm()); // "event calm was naughty :- event not allowed in current state green"
|
||||||
|
|
||||||
|
Release Notes
|
||||||
|
=============
|
||||||
|
|
||||||
|
See [RELEASE NOTES](https://github.com/jakesgordon/javascript-state-machine/blob/master/RELEASE_NOTES.md) file.
|
||||||
|
|
||||||
|
License
|
||||||
|
=======
|
||||||
|
|
||||||
|
See [LICENSE](https://github.com/jakesgordon/javascript-state-machine/blob/master/LICENSE) file.
|
||||||
|
|
||||||
|
Contact
|
||||||
|
=======
|
||||||
|
|
||||||
|
If you have any ideas, feedback, requests or bug reports, you can reach me at
|
||||||
|
[jake@codeincomplete.com](mailto:jake@codeincomplete.com), or via
|
||||||
|
my website: [Code inComplete](http://codeincomplete.com/posts/2011/8/19/javascript_state_machine_v2/)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
Version 2.1.0 (January 7th 2012)
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
* Wrapped in self executing function to be more easily used with loaders like `require.js` or `curl.js` (issue #15)
|
||||||
|
* Allow event to be cancelled by returning `false` from `onleavestate` handler (issue #13) - WARNING: this breaks backward compatibility for async transitions (you now need to return `StateMachine.ASYNC` instead of `false`)
|
||||||
|
* Added explicit return values for event methods (issue #12)
|
||||||
|
* Added support for wildcard events that can be fired 'from' any state (issue #11)
|
||||||
|
* Added support for no-op events that transition 'to' the same state (issue #5)
|
||||||
|
* extended custom error callback to handle any exceptions caused by caller provided callbacks
|
||||||
|
* added custom error callback to override exception when an illegal state transition is attempted (thanks to cboone)
|
||||||
|
* fixed typos (thanks to cboone)
|
||||||
|
* fixed issue #4 - ensure before/after event hooks are called even if the event doesn't result in a state change
|
||||||
|
|
||||||
|
Version 2.0.0 (August 19th 2011)
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
* adding support for asynchronous state transitions (see README) - with lots of qunit tests (see test/async.js).
|
||||||
|
* consistent arguments for ALL callbacks, first 3 args are ALWAYS event name, from state and to state, followed by whatever arguments the user passed to the original event method.
|
||||||
|
* added a generic `onchangestate(event,from,to)` callback to detect all state changes with a single function.
|
||||||
|
* allow callbacks to be declared at creation time (instead of having to attach them afterwards)
|
||||||
|
* renamed 'hooks' => 'callbacks'
|
||||||
|
* [read more...](http://codeincomplete.com/posts/2011/8/19/javascript_state_machine_v2/)
|
||||||
|
|
||||||
|
Version 1.2.0 (June 21st 2011)
|
||||||
|
------------------------------
|
||||||
|
* allows the same event to transition to different states, depending on the current state (see 'Multiple...' section in README.md)
|
||||||
|
* [read more...](http://codeincomplete.com/posts/2011/6/21/javascript_state_machine_v1_2_0/)
|
||||||
|
|
||||||
|
Version 1.0.0 (June 1st 2011)
|
||||||
|
-----------------------------
|
||||||
|
* initial version
|
||||||
|
* [read more...](http://codeincomplete.com/posts/2011/6/1/javascript_state_machine/)
|
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
desc "create minified version of state-machine.js"
|
||||||
|
task :minify do
|
||||||
|
require File.expand_path(File.join(File.dirname(__FILE__), 'minifier/minifier'))
|
||||||
|
Minifier.enabled = true
|
||||||
|
Minifier.minify('state-machine.js')
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Javascript Finite State Machine</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||||
|
<link href="demo/demo.css" media="screen, print" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="demo" class='green'>
|
||||||
|
|
||||||
|
<h1> Finite State Machine </h1>
|
||||||
|
|
||||||
|
<div id="controls">
|
||||||
|
<button id="clear" onclick="Demo.clear();">clear</button>
|
||||||
|
<button id="calm" onclick="Demo.calm();">calm</button>
|
||||||
|
<button id="warn" onclick="Demo.warn();">warn</button>
|
||||||
|
<button id="panic" onclick="Demo.panic();">panic!</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="diagram">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="notes">
|
||||||
|
<i>dashed lines are asynchronous state transitions (3 seconds)</i>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<textarea id="output">
|
||||||
|
</textarea>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script src="state-machine.js"></script>
|
||||||
|
<script src="demo/demo.js"></script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,155 @@
|
||||||
|
(function (window) {
|
||||||
|
|
||||||
|
StateMachine = {
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
VERSION: "2.1.0",
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Result: {
|
||||||
|
SUCCEEDED: 1, // the event transitioned successfully from one state to another
|
||||||
|
NOTRANSITION: 2, // the event was successfull but no state transition was necessary
|
||||||
|
CANCELLED: 3, // the event was cancelled by the caller in a beforeEvent callback
|
||||||
|
ASYNC: 4, // the event is asynchronous and the caller is in control of when the transition occurs
|
||||||
|
},
|
||||||
|
|
||||||
|
Error: {
|
||||||
|
INVALID_TRANSITION: 100, // caller tried to fire an event that was innapropriate in the current state
|
||||||
|
PENDING_TRANSITION: 200, // caller tried to fire an event while an async transition was still pending
|
||||||
|
INVALID_CALLBACK: 300, // caller provided callback function threw an exception
|
||||||
|
},
|
||||||
|
|
||||||
|
WILDCARD: '*',
|
||||||
|
ASYNC: 'async',
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
create: function(cfg, target) {
|
||||||
|
|
||||||
|
var initial = (typeof cfg.initial == 'string') ? { state: cfg.initial } : cfg.initial; // allow for a simple string, or an object with { state: 'foo', event: 'setup', defer: true|false }
|
||||||
|
var fsm = target || cfg.target || {};
|
||||||
|
var events = cfg.events || [];
|
||||||
|
var callbacks = cfg.callbacks || {};
|
||||||
|
var map = {};
|
||||||
|
|
||||||
|
var add = function(e) {
|
||||||
|
var from = (e.from instanceof Array) ? e.from : (e.from ? [e.from] : [StateMachine.WILDCARD]); // allow 'wildcard' transition if 'from' is not specified
|
||||||
|
map[e.name] = map[e.name] || {};
|
||||||
|
for (var n = 0 ; n < from.length ; n++)
|
||||||
|
map[e.name][from[n]] = e.to || from[n]; // allow no-op transition if 'to' is not specified
|
||||||
|
};
|
||||||
|
|
||||||
|
if (initial) {
|
||||||
|
initial.event = initial.event || 'startup';
|
||||||
|
add({ name: initial.event, from: 'none', to: initial.state });
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var n = 0 ; n < events.length ; n++)
|
||||||
|
add(events[n]);
|
||||||
|
|
||||||
|
for(var name in map) {
|
||||||
|
if (map.hasOwnProperty(name))
|
||||||
|
fsm[name] = StateMachine.buildEvent(name, map[name]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var name in callbacks) {
|
||||||
|
if (callbacks.hasOwnProperty(name))
|
||||||
|
fsm[name] = callbacks[name]
|
||||||
|
}
|
||||||
|
|
||||||
|
fsm.current = 'none';
|
||||||
|
fsm.is = function(state) { return this.current == state; };
|
||||||
|
fsm.can = function(event) { return !this.transition && (map[event].hasOwnProperty(this.current) || map[event].hasOwnProperty(StateMachine.WILDCARD)); }
|
||||||
|
fsm.cannot = function(event) { return !this.can(event); };
|
||||||
|
fsm.error = cfg.error || function(name, from, to, args, error, msg) { throw msg; }; // default behavior when something unexpected happens is to throw an exception, but caller can override this behavior if desired (see github issue #3)
|
||||||
|
|
||||||
|
if (initial && !initial.defer)
|
||||||
|
fsm[initial.event]();
|
||||||
|
|
||||||
|
return fsm;
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
doCallback: function(fsm, func, name, from, to, args) {
|
||||||
|
if (func) {
|
||||||
|
try {
|
||||||
|
return func.apply(fsm, [name, from, to].concat(args));
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
return fsm.error(name, from, to, args, StateMachine.Error.INVALID_CALLBACK, "an exception occurred in a caller-provided callback function");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
beforeEvent: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onbefore' + name], name, from, to, args); },
|
||||||
|
afterEvent: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onafter' + name] || fsm['on' + name], name, from, to, args); },
|
||||||
|
leaveState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onleave' + from], name, from, to, args); },
|
||||||
|
enterState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onenter' + to] || fsm['on' + to], name, from, to, args); },
|
||||||
|
changeState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onchangestate'], name, from, to, args); },
|
||||||
|
|
||||||
|
|
||||||
|
buildEvent: function(name, map) {
|
||||||
|
return function() {
|
||||||
|
|
||||||
|
var from = this.current;
|
||||||
|
var to = map[from] || map[StateMachine.WILDCARD] || from;
|
||||||
|
var args = Array.prototype.slice.call(arguments); // turn arguments into pure array
|
||||||
|
|
||||||
|
if (this.transition)
|
||||||
|
return this.error(name, from, to, args, StateMachine.Error.PENDING_TRANSITION, "event " + name + " inappropriate because previous transition did not complete");
|
||||||
|
|
||||||
|
if (this.cannot(name))
|
||||||
|
return this.error(name, from, to, args, StateMachine.Error.INVALID_TRANSITION, "event " + name + " inappropriate in current state " + this.current);
|
||||||
|
|
||||||
|
if (false === StateMachine.beforeEvent(this, name, from, to, args))
|
||||||
|
return StateMachine.CANCELLED;
|
||||||
|
|
||||||
|
if (from === to) {
|
||||||
|
StateMachine.afterEvent(this, name, from, to, args);
|
||||||
|
return StateMachine.NOTRANSITION;
|
||||||
|
}
|
||||||
|
|
||||||
|
// prepare a transition method for use EITHER lower down, or by caller if they want an async transition (indicated by an ASYNC return value from leaveState)
|
||||||
|
var fsm = this;
|
||||||
|
this.transition = function() {
|
||||||
|
fsm.transition = null; // this method should only ever be called once
|
||||||
|
fsm.current = to;
|
||||||
|
StateMachine.enterState( fsm, name, from, to, args);
|
||||||
|
StateMachine.changeState(fsm, name, from, to, args);
|
||||||
|
StateMachine.afterEvent( fsm, name, from, to, args);
|
||||||
|
};
|
||||||
|
|
||||||
|
var leave = StateMachine.leaveState(this, name, from, to, args);
|
||||||
|
if (false === leave) {
|
||||||
|
this.transition = null;
|
||||||
|
return StateMachine.CANCELLED;
|
||||||
|
}
|
||||||
|
else if ("async" === leave) {
|
||||||
|
return StateMachine.ASYNC;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (this.transition)
|
||||||
|
this.transition(); // in case user manually called transition() but forgot to return ASYNC
|
||||||
|
return StateMachine.SUCCEEDED;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}; // StateMachine
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
if ("function" === typeof define) {
|
||||||
|
define("statemachine", [], function() { return StateMachine; });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
window.StateMachine = StateMachine;
|
||||||
|
}
|
||||||
|
|
||||||
|
}(this));
|
||||||
|
|
|
@ -10,7 +10,8 @@
|
||||||
.oe_import .oe_import_grid,
|
.oe_import .oe_import_grid,
|
||||||
.oe_import .oe_import_error_report,
|
.oe_import .oe_import_error_report,
|
||||||
.oe_import .oe_import_with_file,
|
.oe_import .oe_import_with_file,
|
||||||
.oe_import .oe_import_noheaders {
|
.oe_import .oe_import_noheaders,
|
||||||
|
.oe_import .oe_import_report_more {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +20,8 @@
|
||||||
}
|
}
|
||||||
.oe_import.oe_import_error .oe_import_error_report,
|
.oe_import.oe_import_error .oe_import_error_report,
|
||||||
.oe_import.oe_import_with_file .oe_import_with_file,
|
.oe_import.oe_import_with_file .oe_import_with_file,
|
||||||
.oe_import.oe_import_noheaders .oe_import_noheaders {
|
.oe_import.oe_import_noheaders .oe_import_noheaders,
|
||||||
|
.oe_import .oe_import_report_showmore .oe_import_report_more {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +31,9 @@
|
||||||
.oe_import .oe_import_error_report ul .oe_import_report_warning {
|
.oe_import .oe_import_error_report ul .oe_import_report_warning {
|
||||||
background-color: #FEFFD9;
|
background-color: #FEFFD9;
|
||||||
}
|
}
|
||||||
|
.oe_import .oe_import_error_report ul .oe_import_report_info {
|
||||||
|
background-color: #d3ffd3;
|
||||||
|
}
|
||||||
|
|
||||||
.oe_import .oe_import_noheaders {
|
.oe_import .oe_import_noheaders {
|
||||||
color: #888;
|
color: #888;
|
||||||
|
@ -47,7 +52,7 @@
|
||||||
}
|
}
|
||||||
.oe_import .oe_import_options label {
|
.oe_import .oe_import_options label {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 10em;
|
width: 8em;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,31 +47,35 @@ openerp.base_import = function (instance) {
|
||||||
this._super.apply(this, arguments);
|
this._super.apply(this, arguments);
|
||||||
if(add_button) {
|
if(add_button) {
|
||||||
this.$buttons.on('click', '.oe_list_button_import', function() {
|
this.$buttons.on('click', '.oe_list_button_import', function() {
|
||||||
new instance.web.DataImport(self, self.dataset).open();
|
self.do_action({
|
||||||
|
type: 'ir.actions.client',
|
||||||
|
tag: 'import',
|
||||||
|
params: {
|
||||||
|
model: self.dataset.model
|
||||||
|
}
|
||||||
|
}, void 0, void 0, function () {
|
||||||
|
self.reload();
|
||||||
|
});
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
instance.web.DataImport = instance.web.Dialog.extend({
|
instance.web.client_actions.add(
|
||||||
|
'import', 'instance.web.DataImport');
|
||||||
|
instance.web.DataImport = instance.web.Widget.extend({
|
||||||
template: 'ImportView',
|
template: 'ImportView',
|
||||||
dialog_title: _lt("Import Data"),
|
|
||||||
opts: [
|
opts: [
|
||||||
{name: 'encoding', label: _lt("Encoding:"), value: 'utf-8'},
|
{name: 'encoding', label: _lt("Encoding:"), value: 'utf-8'},
|
||||||
{name: 'separator', label: _lt("Separator:"), value: ','},
|
{name: 'separator', label: _lt("Separator:"), value: ','},
|
||||||
{name: 'quoting', label: _lt("Quoting:"), value: '"'}
|
{name: 'quoting', label: _lt("Quoting:"), value: '"'}
|
||||||
],
|
],
|
||||||
events: {
|
events: {
|
||||||
'change .oe_import_grid input': 'import_dryrun',
|
// 'change .oe_import_grid input': 'import_dryrun',
|
||||||
'change input.oe_import_file': 'file_update',
|
'change .oe_import_file': 'loaded_file',
|
||||||
'change input.oe_import_has_header, .oe_import_options input': 'settings_updated',
|
'click .oe_import_file_reload': 'loaded_file',
|
||||||
'click a.oe_import_csv': function (e) {
|
'change input.oe_import_has_header, .oe_import_options input': 'settings_changed',
|
||||||
e.preventDefault();
|
|
||||||
},
|
|
||||||
'click a.oe_import_export': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
},
|
|
||||||
'click a.oe_import_toggle': function (e) {
|
'click a.oe_import_toggle': function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
var $el = $(e.target);
|
var $el = $(e.target);
|
||||||
|
@ -79,30 +83,84 @@ openerp.base_import = function (instance) {
|
||||||
? $el.next()
|
? $el.next()
|
||||||
: $el.parent().next())
|
: $el.parent().next())
|
||||||
.toggle();
|
.toggle();
|
||||||
|
},
|
||||||
|
'click .oe_import_report a.oe_import_report_count': function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$(e.target).parent().toggleClass('oe_import_report_showmore');
|
||||||
|
},
|
||||||
|
'click .oe_import_moreinfo_action a': function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
// #data will parse the attribute on its own, we don't like
|
||||||
|
// that sort of things
|
||||||
|
var action = JSON.parse($(e.target).attr('data-action'));
|
||||||
|
// FIXME: when JS-side clean_action
|
||||||
|
action.views = _(action.views).map(function (view) {
|
||||||
|
var id = view[0], type = view[1];
|
||||||
|
return [
|
||||||
|
id,
|
||||||
|
type !== 'tree' ? type
|
||||||
|
: action.view_type === 'form' ? 'list'
|
||||||
|
: 'tree'
|
||||||
|
];
|
||||||
|
});
|
||||||
|
this.do_action(_.extend(action, {
|
||||||
|
target: 'new',
|
||||||
|
flags: {
|
||||||
|
search_view: true,
|
||||||
|
display_title: true,
|
||||||
|
pager: true,
|
||||||
|
list: {selectable: false}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
// buttons
|
||||||
|
'click .oe_import_validate': 'validate',
|
||||||
|
'click .oe_import_import': 'import',
|
||||||
|
'click .oe_import_cancel': function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
this.exit();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
init: function (parent, dataset) {
|
init: function (parent, params) {
|
||||||
var self = this;
|
var self = this;
|
||||||
this._super(parent, {
|
this._super.apply(this, arguments);
|
||||||
buttons: [
|
this.res_model = params.model;
|
||||||
{text: _t("Import File"), click: function () {
|
|
||||||
self.do_import();
|
|
||||||
}, 'class': 'oe_import_dialog_button'}
|
|
||||||
]
|
|
||||||
});
|
|
||||||
this.res_model = parent.model;
|
|
||||||
// import object id
|
// import object id
|
||||||
this.id = null;
|
this.id = null;
|
||||||
this.Import = new instance.web.Model('base_import.import');
|
this.Import = new instance.web.Model('base_import.import');
|
||||||
},
|
},
|
||||||
start: function () {
|
start: function () {
|
||||||
var self = this;
|
var self = this;
|
||||||
return this.Import.call('create', [{
|
this.setup_encoding_picker();
|
||||||
'res_model': this.res_model
|
|
||||||
}]).then(function (id) {
|
return $.when(
|
||||||
self.id = id;
|
this._super(),
|
||||||
self.$('input[name=import_id]').val(id);
|
this.Import.call('create', [{
|
||||||
});
|
'res_model': this.res_model
|
||||||
|
}]).then(function (id) {
|
||||||
|
self.id = id;
|
||||||
|
self.$('input[name=import_id]').val(id);
|
||||||
|
})
|
||||||
|
)
|
||||||
|
},
|
||||||
|
setup_encoding_picker: function () {
|
||||||
|
this.$('input.oe_import_encoding').select2({
|
||||||
|
width: '160px',
|
||||||
|
query: function (q) {
|
||||||
|
var make = function (term) { return {id: term, text: term}; };
|
||||||
|
var suggestions = _.map(
|
||||||
|
('utf-8 utf-16 windows-1252 latin1 latin2 big5 ' +
|
||||||
|
'gb18030 shift_jis windows-1251 koir8_r').split(/\s+/),
|
||||||
|
make);
|
||||||
|
if (q.term) {
|
||||||
|
suggestions.unshift(make(q.term));
|
||||||
|
}
|
||||||
|
q.callback({results: suggestions});
|
||||||
|
},
|
||||||
|
initSelection: function (e, c) {
|
||||||
|
return c({id: 'utf-8', text: 'utf-8'});
|
||||||
|
}
|
||||||
|
}).select2('val', 'utf-8');
|
||||||
},
|
},
|
||||||
|
|
||||||
import_options: function () {
|
import_options: function () {
|
||||||
|
@ -118,34 +176,52 @@ openerp.base_import = function (instance) {
|
||||||
},
|
},
|
||||||
|
|
||||||
//- File & settings change section
|
//- File & settings change section
|
||||||
file_update: function (e) {
|
onfile_loaded: function () {
|
||||||
|
this.$('.oe_import_button').prop('disabled', true);
|
||||||
if (!this.$('input.oe_import_file').val()) { return; }
|
if (!this.$('input.oe_import_file').val()) { return; }
|
||||||
|
|
||||||
this.$el.removeClass('oe_import_preview oe_import_error');
|
this.$el.removeClass('oe_import_preview oe_import_error');
|
||||||
jsonp(this.$el, {
|
jsonp(this.$el, {
|
||||||
url: '/base_import/set_file'
|
url: '/base_import/set_file'
|
||||||
}, this.proxy('settings_updated'));
|
}, this.proxy('settings_changed'));
|
||||||
},
|
},
|
||||||
settings_updated: function () {
|
onpreviewing: function () {
|
||||||
|
var self = this;
|
||||||
|
this.$('.oe_import_button').prop('disabled', true);
|
||||||
this.$el.addClass('oe_import_with_file');
|
this.$el.addClass('oe_import_with_file');
|
||||||
// TODO: test that write // succeeded?
|
// TODO: test that write // succeeded?
|
||||||
this.Import.call(
|
this.$el.removeClass('oe_import_preview_error oe_import_error');
|
||||||
'parse_preview', [this.id, this.import_options()])
|
|
||||||
.then(this.proxy('preview'));
|
|
||||||
},
|
|
||||||
preview: function (result) {
|
|
||||||
this.$el.toggleClass(
|
this.$el.toggleClass(
|
||||||
'oe_import_noheaders',
|
'oe_import_noheaders',
|
||||||
!this.$('input.oe_import_has_header').prop('checked'));
|
!this.$('input.oe_import_has_header').prop('checked'));
|
||||||
if (result.error) {
|
this.Import.call(
|
||||||
this.$el.addClass('oe_import_error');
|
'parse_preview', [this.id, this.import_options()])
|
||||||
this.$('.oe_import_error_report').html(
|
.then(function (result) {
|
||||||
|
var signal = result.error ? 'preview_failed' : 'preview_succeeded';
|
||||||
|
self[signal](result);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onpreview_error: function (event, from, to, result) {
|
||||||
|
this.$('.oe_import_options').show();
|
||||||
|
this.$el.addClass('oe_import_preview_error oe_import_error');
|
||||||
|
this.$('.oe_import_error_report').html(
|
||||||
QWeb.render('ImportView.preview.error', result));
|
QWeb.render('ImportView.preview.error', result));
|
||||||
return;
|
},
|
||||||
}
|
onpreview_success: function (event, from, to, result) {
|
||||||
|
this.$('.oe_import_import').removeClass('oe_highlight');
|
||||||
|
this.$('.oe_import_validate').addClass('oe_highlight');
|
||||||
|
this.$('.oe_import_button').prop('disabled', false);
|
||||||
this.$el.addClass('oe_import_preview');
|
this.$el.addClass('oe_import_preview');
|
||||||
this.$('table').html(QWeb.render('ImportView.preview', result));
|
this.$('table').html(QWeb.render('ImportView.preview', result));
|
||||||
|
|
||||||
|
if (result.headers.length === 1) {
|
||||||
|
this.$('.oe_import_options').show();
|
||||||
|
this.onresults(null, null, null, [{
|
||||||
|
type: 'warning',
|
||||||
|
message: _t("A single column was found in the file, this often means the file separator is incorrect")
|
||||||
|
}]);
|
||||||
|
}
|
||||||
|
|
||||||
var $fields = this.$('.oe_import_fields input');
|
var $fields = this.$('.oe_import_fields input');
|
||||||
this.render_fields_matches(result, $fields);
|
this.render_fields_matches(result, $fields);
|
||||||
var data = this.generate_fields_completion(result);
|
var data = this.generate_fields_completion(result);
|
||||||
|
@ -180,7 +256,6 @@ openerp.base_import = function (instance) {
|
||||||
width: 'resolve',
|
width: 'resolve',
|
||||||
dropdownCssClass: 'oe_import_selector'
|
dropdownCssClass: 'oe_import_selector'
|
||||||
});
|
});
|
||||||
this.import_dryrun();
|
|
||||||
},
|
},
|
||||||
generate_fields_completion: function (root) {
|
generate_fields_completion: function (root) {
|
||||||
var basic = [];
|
var basic = [];
|
||||||
|
@ -252,40 +327,116 @@ openerp.base_import = function (instance) {
|
||||||
|
|
||||||
//- import itself
|
//- import itself
|
||||||
call_import: function (options) {
|
call_import: function (options) {
|
||||||
var self = this;
|
|
||||||
var fields = this.$('.oe_import_fields input.oe_import_match_field').map(function (index, el) {
|
var fields = this.$('.oe_import_fields input.oe_import_match_field').map(function (index, el) {
|
||||||
return $(el).select2('val') || false;
|
return $(el).select2('val') || false;
|
||||||
}).get();
|
}).get();
|
||||||
return this.Import.call(
|
return this.Import.call(
|
||||||
'do', [this.id, fields, this.import_options()], options);
|
'do', [this.id, fields, this.import_options()], options);
|
||||||
},
|
},
|
||||||
import_dryrun: function () {
|
onvalidate: function () {
|
||||||
// this.call_import({ dryrun: true })
|
return this.call_import({ dryrun: true })
|
||||||
// .then(this.proxy('render_import_errors'));
|
.then(this.proxy('validated'));
|
||||||
},
|
},
|
||||||
do_import: function () {
|
onimport: function () {
|
||||||
var self = this;
|
var self = this;
|
||||||
this.call_import({ dryrun: false }).then(function (errors) {
|
return this.call_import({ dryrun: false }).then(function (message) {
|
||||||
if (_.isEmpty(errors)) {
|
if (!_.any(message, function (message) {
|
||||||
if (self.getParent().reload_content) {
|
return message.type === 'error' })) {
|
||||||
self.getParent().reload_content();
|
self['import_succeeded']();
|
||||||
}
|
|
||||||
self.close();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self.render_import_errors(errors);
|
self['import_failed'](message);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
render_import_errors: function (errors) {
|
onimported: function () {
|
||||||
if (_.isEmpty(errors)) {
|
this.exit();
|
||||||
this.$el.removeClass('oe_import_error');
|
},
|
||||||
return;
|
exit: function () {
|
||||||
|
this.do_action({
|
||||||
|
type: 'ir.actions.client',
|
||||||
|
tag: 'history_back'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onresults: function (event, from, to, message) {
|
||||||
|
var no_messages = _.isEmpty(message);
|
||||||
|
this.$('.oe_import_import').toggleClass('oe_highlight', no_messages);
|
||||||
|
this.$('.oe_import_validate').toggleClass('oe_highlight', !no_messages);
|
||||||
|
if (no_messages) {
|
||||||
|
message.push({
|
||||||
|
type: 'info',
|
||||||
|
message: _t("Everything seems valid.")
|
||||||
|
});
|
||||||
}
|
}
|
||||||
// import failed (or maybe just warnings, if we ever get
|
// row indexes come back 0-indexed, spreadsheets
|
||||||
// warnings?)
|
// display 1-indexed.
|
||||||
|
var offset = 1;
|
||||||
|
// offset more if header
|
||||||
|
if (this.import_options().headers) { offset += 1; }
|
||||||
|
|
||||||
this.$el.addClass('oe_import_error');
|
this.$el.addClass('oe_import_error');
|
||||||
this.$('.oe_import_error_report').html(
|
this.$('.oe_import_error_report').html(
|
||||||
QWeb.render('ImportView.error', {errors: errors}));
|
QWeb.render('ImportView.error', {
|
||||||
|
errors: _(message).groupBy('message'),
|
||||||
|
at: function (rows) {
|
||||||
|
var from = rows.from + offset;
|
||||||
|
var to = rows.to + offset;
|
||||||
|
if (from === to) {
|
||||||
|
return _.str.sprintf(_t("at row %d"), from);
|
||||||
|
}
|
||||||
|
return _.str.sprintf(_t("between rows %d and %d"),
|
||||||
|
from, to);
|
||||||
|
},
|
||||||
|
more: function (n) {
|
||||||
|
return _.str.sprintf(_t("(%d more)"), n);
|
||||||
|
},
|
||||||
|
info: function (msg) {
|
||||||
|
if (typeof msg === 'string') {
|
||||||
|
return _.str.sprintf(
|
||||||
|
'<div class="oe_import_moreinfo oe_import_moreinfo_message">%s</div>',
|
||||||
|
_.str.escapeHTML(msg));
|
||||||
|
}
|
||||||
|
if (msg instanceof Array) {
|
||||||
|
return _.str.sprintf(
|
||||||
|
'<div class="oe_import_moreinfo oe_import_moreinfo_choices">%s <ul>%s</ul></div>',
|
||||||
|
_.str.escapeHTML(_t("Here are the possible values:")),
|
||||||
|
_(msg).map(function (msg) {
|
||||||
|
return '<li>'
|
||||||
|
+ _.str.escapeHTML(msg)
|
||||||
|
+ '</li>';
|
||||||
|
}).join(''));
|
||||||
|
}
|
||||||
|
// Final should be object, action descriptor
|
||||||
|
return [
|
||||||
|
'<div class="oe_import_moreinfo oe_import_moreinfo_action">',
|
||||||
|
_.str.sprintf('<a href="#" data-action="%s">',
|
||||||
|
_.str.escapeHTML(JSON.stringify(msg))),
|
||||||
|
_.str.escapeHTML(
|
||||||
|
_t("Get all possible values")),
|
||||||
|
'</a>',
|
||||||
|
'</div>'
|
||||||
|
].join('')
|
||||||
|
},
|
||||||
|
})).get(0).scrollIntoView();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
// FSM-ize DataImport
|
||||||
|
StateMachine.create({
|
||||||
|
target: instance.web.DataImport.prototype,
|
||||||
|
events: [
|
||||||
|
{ name: 'loaded_file',
|
||||||
|
from: ['none', 'file_loaded', 'preview_error', 'preview_success', 'results'],
|
||||||
|
to: 'file_loaded' },
|
||||||
|
{ name: 'settings_changed',
|
||||||
|
from: ['file_loaded', 'preview_error', 'preview_success', 'results'],
|
||||||
|
to: 'previewing' },
|
||||||
|
{ name: 'preview_failed', from: 'previewing', to: 'preview_error' },
|
||||||
|
{ name: 'preview_succeeded', from: 'previewing', to: 'preview_success' },
|
||||||
|
{ name: 'validate', from: 'preview_success', to: 'validating' },
|
||||||
|
{ name: 'validate', from: 'results', to: 'validating' },
|
||||||
|
{ name: 'validated', from: 'validating', to: 'results' },
|
||||||
|
{ name: 'import', from: ['preview_success', 'results'], to: 'importing' },
|
||||||
|
{ name: 'import_succeeded', from: 'importing', to: 'imported'},
|
||||||
|
{ name: 'import_failed', from: 'importing', to: 'results' }
|
||||||
|
]
|
||||||
|
})
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,17 +2,45 @@
|
||||||
<t t-name="ImportView">
|
<t t-name="ImportView">
|
||||||
<t t-set="_id" t-value="_.uniqueId('export')"/>
|
<t t-set="_id" t-value="_.uniqueId('export')"/>
|
||||||
<form action="" method="post" enctype="multipart/form-data" class="oe_import">
|
<form action="" method="post" enctype="multipart/form-data" class="oe_import">
|
||||||
|
<header>
|
||||||
|
<button type="button" disabled="disabled"
|
||||||
|
class="oe_button oe_import_button oe_import_validate oe_highlight"
|
||||||
|
>Validate</button>
|
||||||
|
<button type="button" disabled="disabled"
|
||||||
|
class="oe_button oe_import_button oe_import_import"
|
||||||
|
>Import</button>
|
||||||
|
<span class="oe_fade">or</span>
|
||||||
|
<a class="oe_import_cancel" href="#">Cancel</a>
|
||||||
|
</header>
|
||||||
<input type="hidden" name="session_id"
|
<input type="hidden" name="session_id"
|
||||||
t-att-value="widget.session.session_id"/>
|
t-att-value="widget.session.session_id"/>
|
||||||
<input type="hidden" name="import_id"/>
|
<input type="hidden" name="import_id"/>
|
||||||
<h2>Upload your file</h2>
|
<h2>Upload your file</h2>
|
||||||
<p>Select the <a href="#" class="oe_import_csv">.CSV</a>
|
<p>Select the <a
|
||||||
|
href="http://en.wikipedia.org/wiki/Comma-separated_values"
|
||||||
|
class="oe_import_csv" target="_blank">.CSV</a>
|
||||||
file to import. If you need a sample importable file, you
|
file to import. If you need a sample importable file, you
|
||||||
can use <a href="#" class="oe_import_export">the export
|
can use the export tool to generate one.</p>
|
||||||
tool</a> to generate one.</p>
|
|
||||||
<label t-attf-for="file_#{_id}" autofocus="autofocus">CSV File:</label>
|
<label t-attf-for="file_#{_id}" autofocus="autofocus">CSV File:</label>
|
||||||
<input type="file" id-attf-id="file_#{_id}"
|
<input type="file" id-attf-id="file_#{_id}"
|
||||||
name="file" class="oe_import_file"/>
|
name="file" class="oe_import_file"/>
|
||||||
|
<button type="button" class="oe_import_file_reload">
|
||||||
|
<img src="/web/static/src/img/icons/gtk-refresh.png"/>
|
||||||
|
</button>
|
||||||
|
<div class="oe_import_with_file">
|
||||||
|
<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>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="oe_import_with_file">
|
<div class="oe_import_with_file">
|
||||||
<h2>Map your data to OpenERP</h2>
|
<h2>Map your data to OpenERP</h2>
|
||||||
|
@ -27,18 +55,6 @@
|
||||||
|
|
||||||
<div class="oe_import_error_report"></div>
|
<div class="oe_import_error_report"></div>
|
||||||
<table class="oe_import_grid" width="100%"/>
|
<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>
|
<h2>Frequently Asked Questions</h2>
|
||||||
<dl>
|
<dl>
|
||||||
|
@ -81,17 +97,37 @@
|
||||||
</tr>
|
</tr>
|
||||||
</t>
|
</t>
|
||||||
<t t-name="ImportView.preview.error">
|
<t t-name="ImportView.preview.error">
|
||||||
<p>Import preview failed due to: <t t-esc="error"/></p>
|
<p>Import preview failed due to: <t t-esc="error"/>. The issue is
|
||||||
|
usually an incorrect file encoding.</p>
|
||||||
<p>Here is the start of the file we could not import:</p>
|
<p>Here is the start of the file we could not import:</p>
|
||||||
<pre><t t-esc="preview"/></pre>
|
<pre><t t-esc="preview"/></pre>
|
||||||
</t>
|
</t>
|
||||||
<ul t-name="ImportView.error">
|
<ul t-name="ImportView.error">
|
||||||
<li t-foreach="errors" t-as="error" t-attf-class="oe_import_report_#{error.type}">
|
<li t-foreach="errors" t-as="error"
|
||||||
<!-- can also have error.record, but may be *huge* if
|
t-attf-class="oe_import_report oe_import_report_#{error_value[0].type}">
|
||||||
e.g. has image fields -->
|
<t t-call="ImportView.error.each">
|
||||||
<t t-esc="error.message"/>
|
<t t-set="error" t-value="error_value[0]"/>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<a href="#" class="oe_import_report_count" t-if="error_value.length gt 1">
|
||||||
|
<t t-esc="more(error_value.length - 1)"/>
|
||||||
|
</a>
|
||||||
|
<ul class="oe_import_report_more" t-if="error_value.length gt 1">
|
||||||
|
<li t-foreach="error_value.length - 1" t-as="index">
|
||||||
|
<t t-call="ImportView.error.each">
|
||||||
|
<t t-set="error" t-value="error_value[index + 1]"/>
|
||||||
|
</t>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<t t-name="ImportView.error.each">
|
||||||
|
<span class="oe_import_report_message">
|
||||||
|
<t t-esc="error.message"/>
|
||||||
|
</span>
|
||||||
|
<t t-if="error.rows" t-esc="at(error.rows)"/>
|
||||||
|
<t t-if="error.moreinfo" t-raw="info(error.moreinfo)"/>
|
||||||
|
</t>
|
||||||
<t t-extend="ListView.buttons">
|
<t t-extend="ListView.buttons">
|
||||||
<t t-jquery="span.oe_alternative">
|
<t t-jquery="span.oe_alternative">
|
||||||
this.attr('t-if', 'widget.options.import_enabled');
|
this.attr('t-if', 'widget.options.import_enabled');
|
||||||
|
|
|
@ -1,19 +1,14 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from xml.etree import ElementTree
|
from xml.etree import ElementTree
|
||||||
|
|
||||||
try:
|
import openerp
|
||||||
import openerp.addons.web.common.http as openerpweb
|
from openerp.addons.web import nonliterals
|
||||||
from openerp.addons.web.common import nonliterals
|
from openerp.addons.web.controllers.main import load_actions_from_ir_values
|
||||||
from openerp.addons.web.controllers.main import load_actions_from_ir_values
|
|
||||||
except ImportError:
|
|
||||||
import web.common.http as openerpweb # noqa
|
|
||||||
from web.common import nonliterals # noqa
|
|
||||||
from web.controllers.main import load_actions_from_ir_values # noqa
|
|
||||||
|
|
||||||
class Board(openerpweb.Controller):
|
class Board(openerp.addons.web.http.Controller):
|
||||||
_cp_path = '/board'
|
_cp_path = '/board'
|
||||||
|
|
||||||
@openerpweb.jsonrequest
|
@openerp.addons.web.http.jsonrequest
|
||||||
def add_to_dashboard(self, req, menu_id, action_id, context_to_save, domain, view_mode, name=''):
|
def add_to_dashboard(self, req, menu_id, action_id, context_to_save, domain, view_mode, name=''):
|
||||||
# FIXME move this method to board.board model
|
# FIXME move this method to board.board model
|
||||||
to_eval = nonliterals.CompoundContext(context_to_save)
|
to_eval = nonliterals.CompoundContext(context_to_save)
|
||||||
|
|
|
@ -25,9 +25,9 @@ instance.web.form.DashBoard = instance.web.form.FormWidget.extend({
|
||||||
}).bind('sortstop', self.do_save_dashboard);
|
}).bind('sortstop', self.do_save_dashboard);
|
||||||
|
|
||||||
var old_title = this.__parentedParent.get('title');
|
var old_title = this.__parentedParent.get('title');
|
||||||
this.__parentedParent.on_record_loaded.add_last(function(){
|
this.__parentedParent.on('load_record', self, function(){
|
||||||
self.__parentedParent.set({ 'title' : old_title});
|
self.__parentedParent.set({ 'title': old_title});
|
||||||
});
|
})
|
||||||
// Events
|
// Events
|
||||||
this.$el.find('.oe_dashboard_link_reset').click(this.on_reset);
|
this.$el.find('.oe_dashboard_link_reset').click(this.on_reset);
|
||||||
this.$el.find('.oe_dashboard_link_change_layout').click(this.on_change_layout);
|
this.$el.find('.oe_dashboard_link_change_layout').click(this.on_change_layout);
|
||||||
|
@ -173,7 +173,7 @@ instance.web.form.DashBoard = instance.web.form.FormWidget.extend({
|
||||||
},
|
},
|
||||||
on_load_action: function(result, index, action_attrs) {
|
on_load_action: function(result, index, action_attrs) {
|
||||||
var self = this,
|
var self = this,
|
||||||
action = result.result,
|
action = result,
|
||||||
view_mode = action_attrs.view_mode;
|
view_mode = action_attrs.view_mode;
|
||||||
|
|
||||||
if (action_attrs.context && action_attrs.context['dashboard_merge_domains_contexts'] === false) {
|
if (action_attrs.context && action_attrs.context['dashboard_merge_domains_contexts'] === false) {
|
||||||
|
|
|
@ -160,17 +160,17 @@
|
||||||
<field name="street2"/>
|
<field name="street2"/>
|
||||||
<div class="address_format">
|
<div class="address_format">
|
||||||
<field name="city" placeholder="City" style="width: 40%%"/>
|
<field name="city" placeholder="City" style="width: 40%%"/>
|
||||||
<field name="state_id" options='{"no_open": true}' placeholder="State" style="width: 24%%"/>
|
<field name="state_id" options='{"no_open": True}' placeholder="State" style="width: 24%%"/>
|
||||||
<field name="zip" placeholder="ZIP" style="width: 34%%"/>
|
<field name="zip" placeholder="ZIP" style="width: 34%%"/>
|
||||||
</div>
|
</div>
|
||||||
<field name="country_id" placeholder="Country" options='{"no_open": true}'/>
|
<field name="country_id" placeholder="Country" options='{"no_open": True}'/>
|
||||||
</div>
|
</div>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<label for="contact_name" />
|
<label for="contact_name" />
|
||||||
<div>
|
<div>
|
||||||
<field name="contact_name" class="oe_inline"/>,
|
<field name="contact_name" class="oe_inline"/>,
|
||||||
<field name="title" placeholder="Title" domain="[('domain', '=', 'contact')]" class="oe_inline" options='{"no_open": true}'/>
|
<field name="title" placeholder="Title" domain="[('domain', '=', 'contact')]" class="oe_inline" options='{"no_open": True}'/>
|
||||||
</div>
|
</div>
|
||||||
<field name="email_from" widget="email"/>
|
<field name="email_from" widget="email"/>
|
||||||
<field name="function" />
|
<field name="function" />
|
||||||
|
@ -477,10 +477,10 @@
|
||||||
<field name="street2"/>
|
<field name="street2"/>
|
||||||
<div class="address_format">
|
<div class="address_format">
|
||||||
<field name="city" placeholder="City" style="width: 40%%"/>
|
<field name="city" placeholder="City" style="width: 40%%"/>
|
||||||
<field name="state_id" options='{"no_open": true}' placeholder="State" style="width: 24%%"/>
|
<field name="state_id" options='{"no_open": True}' placeholder="State" style="width: 24%%"/>
|
||||||
<field name="zip" placeholder="ZIP" style="width: 34%%"/>
|
<field name="zip" placeholder="ZIP" style="width: 34%%"/>
|
||||||
</div>
|
</div>
|
||||||
<field name="country_id" placeholder="Country" options='{"no_open": true}'/>
|
<field name="country_id" placeholder="Country" options='{"no_open": True}'/>
|
||||||
</div>
|
</div>
|
||||||
</group>
|
</group>
|
||||||
|
|
||||||
|
@ -488,7 +488,7 @@
|
||||||
<label for="contact_name" />
|
<label for="contact_name" />
|
||||||
<div>
|
<div>
|
||||||
<field name="contact_name" class="oe_inline"/>
|
<field name="contact_name" class="oe_inline"/>
|
||||||
<field name="title" placeholder="Title" domain="[('domain', '=', 'contact')]" options='{"no_open": true}' class="oe_inline"/>
|
<field name="title" placeholder="Title" domain="[('domain', '=', 'contact')]" options='{"no_open": True}' class="oe_inline"/>
|
||||||
</div>
|
</div>
|
||||||
<field name="function" />
|
<field name="function" />
|
||||||
<field name="mobile"/>
|
<field name="mobile"/>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<field name="name">crm.lead.report.tree</field>
|
<field name="name">crm.lead.report.tree</field>
|
||||||
<field name="model">crm.lead.report</field>
|
<field name="model">crm.lead.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Leads Analysis">
|
<tree string="Leads Analysis" create="false">
|
||||||
<field name="creation_year" invisible="1"/>
|
<field name="creation_year" invisible="1"/>
|
||||||
<field name="creation_month" invisible="1"/>
|
<field name="creation_month" invisible="1"/>
|
||||||
<field name="creation_day" invisible="1"/>
|
<field name="creation_day" invisible="1"/>
|
||||||
|
@ -130,7 +130,7 @@
|
||||||
<field name="name">crm.lead.report.tree</field>
|
<field name="name">crm.lead.report.tree</field>
|
||||||
<field name="model">crm.lead.report</field>
|
<field name="model">crm.lead.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree colors="blue:state == 'draft';black:state in ('open','pending','done');gray:state == 'cancel' " string="Opportunities Analysis">
|
<tree colors="blue:state == 'draft';black:state in ('open','pending','done');gray:state == 'cancel' " create="false" string="Opportunities Analysis">
|
||||||
<field name="creation_year" invisible="1"/>
|
<field name="creation_year" invisible="1"/>
|
||||||
<field name="creation_month" invisible="1"/>
|
<field name="creation_month" invisible="1"/>
|
||||||
<field name="creation_day" invisible="1"/>
|
<field name="creation_day" invisible="1"/>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<field name="name">crm.phonecall.report.tree</field>
|
<field name="name">crm.phonecall.report.tree</field>
|
||||||
<field name="model">crm.phonecall.report</field>
|
<field name="model">crm.phonecall.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Phone calls">
|
<tree string="Phone calls" create="false">
|
||||||
<field name="name" invisible="1"/>
|
<field name="name" invisible="1"/>
|
||||||
<field name="month" invisible="1"/>
|
<field name="month" invisible="1"/>
|
||||||
<field name="section_id" invisible="1"/>
|
<field name="section_id" invisible="1"/>
|
||||||
|
|
|
@ -32,6 +32,13 @@ class crm_configuration(osv.osv_memory):
|
||||||
'group_fund_raising': fields.boolean("Manage Fund Raising",
|
'group_fund_raising': fields.boolean("Manage Fund Raising",
|
||||||
implied_group='crm.group_fund_raising',
|
implied_group='crm.group_fund_raising',
|
||||||
help="""Allows you to trace and manage your activities for fund raising."""),
|
help="""Allows you to trace and manage your activities for fund raising."""),
|
||||||
|
'module_crm_claim':fields.boolean("Manage Customer Claims",
|
||||||
|
help="""Allows you to track your customers/suppliers claims and grievances.
|
||||||
|
This installs the module crm_claim."""),
|
||||||
|
'module_crm_helpdesk':fields.boolean("Manage Helpdesk and Support",
|
||||||
|
help="""Allows you to communicate with Customer, process Customer query, and provide better help and support. This installs the module crm_helpdesk."""),
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -7,6 +7,22 @@
|
||||||
<field name="model">sale.config.settings</field>
|
<field name="model">sale.config.settings</field>
|
||||||
<field name="inherit_id" ref="base_setup.view_sale_config_settings"/>
|
<field name="inherit_id" ref="base_setup.view_sale_config_settings"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
|
<div name="config_sale" position="before">
|
||||||
|
<separator string="After-Sale Services"/>
|
||||||
|
<group>
|
||||||
|
<label for="id" string="Features"/>
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<field name="module_crm_claim" class="oe_inline"/>
|
||||||
|
<label for="module_crm_claim"/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<field name="module_crm_helpdesk" class="oe_inline"/>
|
||||||
|
<label for="module_crm_helpdesk"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</group>
|
||||||
|
</div>
|
||||||
<group name="On Mail Client" version="7.0" position="after">
|
<group name="On Mail Client" version="7.0" position="after">
|
||||||
<group>
|
<group>
|
||||||
<label for="id" string="On Mail Server"/>
|
<label for="id" string="On Mail Server"/>
|
||||||
|
|
|
@ -25,8 +25,10 @@
|
||||||
'version': '1.0',
|
'version': '1.0',
|
||||||
'category': 'Customer Relationship Management',
|
'category': 'Customer Relationship Management',
|
||||||
'description': """
|
'description': """
|
||||||
This modules allows you to track your customers/suppliers claims and grievances.
|
|
||||||
|
Manage Customer Claims.
|
||||||
================================================================================
|
================================================================================
|
||||||
|
This application allows you to track your customers/suppliers claims and grievances.
|
||||||
|
|
||||||
It is fully integrated with the email gateway so that you can create
|
It is fully integrated with the email gateway so that you can create
|
||||||
automatically new claims based on incoming emails.
|
automatically new claims based on incoming emails.
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<field name="name">crm.claim.report.tree</field>
|
<field name="name">crm.claim.report.tree</field>
|
||||||
<field name="model">crm.claim.report</field>
|
<field name="model">crm.claim.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Claims">
|
<tree string="Claims" create="false">
|
||||||
<field name="name" invisible="1"/>
|
<field name="name" invisible="1"/>
|
||||||
<field name="month" invisible="1"/>
|
<field name="month" invisible="1"/>
|
||||||
<field name="section_id" invisible="1"/>
|
<field name="section_id" invisible="1"/>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<field name="name">crm.helpdesk.report.tree</field>
|
<field name="name">crm.helpdesk.report.tree</field>
|
||||||
<field name="model">crm.helpdesk.report</field>
|
<field name="model">crm.helpdesk.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Helpdesk">
|
<tree string="Helpdesk" create="false">
|
||||||
<field name="name" invisible="1"/>
|
<field name="name" invisible="1"/>
|
||||||
<field name="month" invisible="1"/>
|
<field name="month" invisible="1"/>
|
||||||
<field name="section_id" invisible="1"/>
|
<field name="section_id" invisible="1"/>
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
<field name="name">crm.lead.assign.report.tree</field>
|
<field name="name">crm.lead.assign.report.tree</field>
|
||||||
<field name="model">crm.lead.report.assign</field>
|
<field name="model">crm.lead.report.assign</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Opportunities Assignment Analysis">
|
<tree string="Opportunities Assignment Analysis" create="false">
|
||||||
<field name="year" invisible="1"/>
|
<field name="year" invisible="1"/>
|
||||||
<field name="month" invisible="1"/>
|
<field name="month" invisible="1"/>
|
||||||
<field name="date_assign" invisible="1"/>
|
<field name="date_assign" invisible="1"/>
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
<field name="name">crm.partner.assign.report.tree</field>
|
<field name="name">crm.partner.assign.report.tree</field>
|
||||||
<field name="model">crm.partner.report.assign</field>
|
<field name="model">crm.partner.report.assign</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Opportunities Assignment Analysis">
|
<tree string="Opportunities Assignment Analysis" create="false">
|
||||||
<field name="partner_id" invisible="1"/>
|
<field name="partner_id" invisible="1"/>
|
||||||
<field name="country_id" invisible="1"/>
|
<field name="country_id" invisible="1"/>
|
||||||
<field name="grade_id" invisible="1"/>
|
<field name="grade_id" invisible="1"/>
|
||||||
|
|
|
@ -36,8 +36,7 @@ DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config['roo
|
||||||
|
|
||||||
class document_file(osv.osv):
|
class document_file(osv.osv):
|
||||||
_inherit = 'ir.attachment'
|
_inherit = 'ir.attachment'
|
||||||
_rec_name = 'datas_fname'
|
_rec_name = 'name'
|
||||||
|
|
||||||
|
|
||||||
def _attach_parent_id(self, cr, uid, ids=None, context=None):
|
def _attach_parent_id(self, cr, uid, ids=None, context=None):
|
||||||
"""Migrate ir.attachments to the document module.
|
"""Migrate ir.attachments to the document module.
|
||||||
|
@ -149,29 +148,12 @@ class document_file(osv.osv):
|
||||||
_sql_constraints = [
|
_sql_constraints = [
|
||||||
# filename_uniq is not possible in pure SQL
|
# filename_uniq is not possible in pure SQL
|
||||||
]
|
]
|
||||||
def _check_duplication(self, cr, uid, vals, ids=None, op='create'):
|
|
||||||
name = vals.get('name', False)
|
def onchange_file(self, cr, uid, ids, datas_fname=False, context=None):
|
||||||
parent_id = vals.get('parent_id', False)
|
res = {'value':{}}
|
||||||
res_model = vals.get('res_model', False)
|
if datas_fname:
|
||||||
res_id = vals.get('res_id', 0)
|
res['value'].update({'name': datas_fname})
|
||||||
if op == 'write':
|
return res
|
||||||
for file in self.browse(cr, uid, ids): # FIXME fields_only
|
|
||||||
if not name:
|
|
||||||
name = file.name
|
|
||||||
if not parent_id:
|
|
||||||
parent_id = file.parent_id and file.parent_id.id or False
|
|
||||||
if not res_model:
|
|
||||||
res_model = file.res_model and file.res_model or False
|
|
||||||
if not res_id:
|
|
||||||
res_id = file.res_id and file.res_id or 0
|
|
||||||
res = self.search(cr, uid, [('id', '<>', file.id), ('name', '=', name), ('parent_id', '=', parent_id), ('res_model', '=', res_model), ('res_id', '=', res_id)])
|
|
||||||
if len(res):
|
|
||||||
return False
|
|
||||||
if op == 'create':
|
|
||||||
res = self.search(cr, uid, [('name', '=', name), ('parent_id', '=', parent_id), ('res_id', '=', res_id), ('res_model', '=', res_model)])
|
|
||||||
if len(res):
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def check(self, cr, uid, ids, mode, context=None, values=None):
|
def check(self, cr, uid, ids, mode, context=None, values=None):
|
||||||
"""Check access wrt. res_model, relax the rule of ir.attachment parent
|
"""Check access wrt. res_model, relax the rule of ir.attachment parent
|
||||||
|
@ -219,8 +201,6 @@ class document_file(osv.osv):
|
||||||
res = self.search(cr, uid, [('id', 'in', ids)])
|
res = self.search(cr, uid, [('id', 'in', ids)])
|
||||||
if not len(res):
|
if not len(res):
|
||||||
return False
|
return False
|
||||||
if not self._check_duplication(cr, uid, vals, ids, 'write'):
|
|
||||||
raise osv.except_osv(_('ValidateError'), _('File name must be unique!'))
|
|
||||||
|
|
||||||
# if nodes call this write(), they must skip the code below
|
# if nodes call this write(), they must skip the code below
|
||||||
from_node = context and context.get('__from_node', False)
|
from_node = context and context.get('__from_node', False)
|
||||||
|
@ -286,22 +266,8 @@ class document_file(osv.osv):
|
||||||
else:
|
else:
|
||||||
if vals.get('file_size'):
|
if vals.get('file_size'):
|
||||||
del vals['file_size']
|
del vals['file_size']
|
||||||
result = self._check_duplication(cr, uid, vals)
|
|
||||||
if not result:
|
return super(document_file, self).create(cr, uid, vals, context)
|
||||||
domain = [
|
|
||||||
('res_id', '=', vals['res_id']),
|
|
||||||
('res_model', '=', vals['res_model']),
|
|
||||||
('datas_fname', '=', vals['datas_fname']),
|
|
||||||
]
|
|
||||||
attach_ids = self.search(cr, uid, domain, context=context)
|
|
||||||
super(document_file, self).write(cr, uid, attach_ids,
|
|
||||||
{'datas' : vals['datas']},
|
|
||||||
context=context)
|
|
||||||
result = attach_ids[0]
|
|
||||||
else:
|
|
||||||
#raise osv.except_osv(_('ValidateError'), _('File name must be unique!'))
|
|
||||||
result = super(document_file, self).create(cr, uid, vals, context)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def __get_partner_id(self, cr, uid, res_model, res_id, context=None):
|
def __get_partner_id(self, cr, uid, res_model, res_id, context=None):
|
||||||
""" A helper to retrieve the associated partner from any res_model+id
|
""" A helper to retrieve the associated partner from any res_model+id
|
||||||
|
|
|
@ -228,6 +228,9 @@
|
||||||
<field name="priority" eval="1"/>
|
<field name="priority" eval="1"/>
|
||||||
<field name="inherit_id" ref="base.view_attachment_form"/>
|
<field name="inherit_id" ref="base.view_attachment_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='datas_fname']" position="replace">
|
||||||
|
<field name="datas_fname" invisible="1" on_change="onchange_file(datas_fname)"/>
|
||||||
|
</xpath>
|
||||||
<field name="url" position="after">
|
<field name="url" position="after">
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
</field>
|
</field>
|
||||||
|
@ -338,15 +341,6 @@
|
||||||
<field name="value" eval="'ir.actions.act_window,%d'%action_document_file_directory_form"/>
|
<field name="value" eval="'ir.actions.act_window,%d'%action_document_file_directory_form"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="ir.ui.view" id="view_attachment_form_inherit">
|
|
||||||
<field name="name">ir.attachment.view.inherit</field>
|
|
||||||
<field name="model">ir.attachment</field>
|
|
||||||
<field name="inherit_id" ref="base.view_attachment_form"/>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<field name="datas_fname" position = "replace" >
|
|
||||||
</field>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="view_process_node_form_inherit1">
|
<record model="ir.ui.view" id="view_process_node_form_inherit1">
|
||||||
<field name="name">process.node.form</field>
|
<field name="name">process.node.form</field>
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
</div>
|
</div>
|
||||||
<field name="content" placeholder="e.g. Once upon a time..." class="oe_edit_only"/>
|
<field name="content" placeholder="e.g. Once upon a time..." class="oe_edit_only"/>
|
||||||
<div class="oe_document_page">
|
<div class="oe_document_page">
|
||||||
<field name="display_content" widget="html" class="oe_view_only" options='{"safe": true}'/>
|
<field name="display_content" widget="html" class="oe_view_only" options='{"safe": True}'/>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<field name="model">wizard.document.page.history.show_diff</field>
|
<field name="model">wizard.document.page.history.show_diff</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Difference" version="7.0">
|
<form string="Difference" version="7.0">
|
||||||
<field name="diff" widget="html" options='{"safe": true}'/>
|
<field name="diff" widget="html" options='{"safe": True}'/>
|
||||||
<footer>
|
<footer>
|
||||||
<button string="Cancel" class="oe_link" special="cancel" />
|
<button string="Cancel" class="oe_link" special="cancel" />
|
||||||
</footer>
|
</footer>
|
||||||
|
|
|
@ -4,14 +4,8 @@ import textwrap
|
||||||
import simplejson
|
import simplejson
|
||||||
import werkzeug.wrappers
|
import werkzeug.wrappers
|
||||||
|
|
||||||
try:
|
import openerp.addons.web.http as openerpweb
|
||||||
# embedded
|
import openerp.addons.web.controllers.main as webmain
|
||||||
import openerp.addons.web.common.http as openerpweb
|
|
||||||
import openerp.addons.web.controllers.main as webmain
|
|
||||||
except ImportError:
|
|
||||||
# standalone
|
|
||||||
import web.common.http as openerpweb
|
|
||||||
import web.controllers.main as webmain
|
|
||||||
|
|
||||||
class EDI(openerpweb.Controller):
|
class EDI(openerpweb.Controller):
|
||||||
# http://hostname:8069/edi/view?db=XXXX&token=XXXXXXXXXXX
|
# http://hostname:8069/edi/view?db=XXXX&token=XXXXXXXXXXX
|
||||||
|
|
|
@ -319,7 +319,7 @@ class email_template(osv.osv):
|
||||||
ext = "." + format
|
ext = "." + format
|
||||||
if not report_name.endswith(ext):
|
if not report_name.endswith(ext):
|
||||||
report_name += ext
|
report_name += ext
|
||||||
attachments.append(report_name, result)
|
attachments.append((report_name, result))
|
||||||
|
|
||||||
# Add template attachments
|
# Add template attachments
|
||||||
for attach in template.attachment_ids:
|
for attach in template.attachment_ids:
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
<field name="email_cc" readonly="1" attrs="{'invisible':[('email_cc','=',False)]}"/>
|
<field name="email_cc" readonly="1" attrs="{'invisible':[('email_cc','=',False)]}"/>
|
||||||
<field name="reply_to" readonly="1" attrs="{'invisible':[('reply_to','=',False)]}"/>
|
<field name="reply_to" readonly="1" attrs="{'invisible':[('reply_to','=',False)]}"/>
|
||||||
<field name="subject" readonly="1"/>
|
<field name="subject" readonly="1"/>
|
||||||
<field name="body_html" widget="html" readonly="1" options='{"safe": true}'/>
|
<field name="body_html" widget="html" readonly="1" options='{"safe": True}'/>
|
||||||
</group>
|
</group>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
attrs="{'invisible':[('use_template','=',False)]}"
|
attrs="{'invisible':[('use_template','=',False)]}"
|
||||||
on_change="onchange_template_id(use_template, template_id, composition_mode, model, res_id, context)"/>
|
on_change="onchange_template_id(use_template, template_id, composition_mode, model, res_id, context)"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@class='oe_mail_compose_message_attachment']" position="before">
|
<xpath expr="//button[@name='dummy']" position="before">
|
||||||
<button icon="/email_template/static/src/img/email_template.png"
|
<button icon="/email_template/static/src/img/email_template.png"
|
||||||
type="object" name="toggle_template" string=""
|
type="object" name="toggle_template" string=""
|
||||||
help="Use a message template"
|
help="Use a message template"
|
||||||
|
|
|
@ -267,25 +267,18 @@ class event_event(osv.osv):
|
||||||
return {'value': dic}
|
return {'value': dic}
|
||||||
|
|
||||||
def on_change_address_id(self, cr, uid, ids, address_id, context=None):
|
def on_change_address_id(self, cr, uid, ids, address_id, context=None):
|
||||||
values = {
|
values = {}
|
||||||
'street' : False,
|
if not address_id:
|
||||||
'street2' : False,
|
return values
|
||||||
'city' : False,
|
address = self.pool.get('res.partner').browse(cr, uid, address_id, context=context)
|
||||||
'zip' : False,
|
values.update({
|
||||||
'country_id' : False,
|
'street' : address.street,
|
||||||
'state_id' : False,
|
'street2' : address.street2,
|
||||||
}
|
'city' : address.city,
|
||||||
if isinstance(address_id, (long, int)):
|
'country_id' : address.country_id and address.country_id.id or False,
|
||||||
address = self.pool.get('res.partner').browse(cr, uid, address_id, context=context)
|
'state_id' : address.state_id and address.state_id.id or False,
|
||||||
values.update({
|
'zip' : address.zip,
|
||||||
'street' : address.street,
|
})
|
||||||
'street2' : address.street2,
|
|
||||||
'city' : address.city,
|
|
||||||
'country_id' : address.country_id and address.country_id.id,
|
|
||||||
'state_id' : address.state_id and address.state_id.id,
|
|
||||||
'zip' : address.zip,
|
|
||||||
})
|
|
||||||
|
|
||||||
return {'value' : values}
|
return {'value' : values}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -126,10 +126,10 @@
|
||||||
<field name="street2"/>
|
<field name="street2"/>
|
||||||
<div class="address_format">
|
<div class="address_format">
|
||||||
<field name="city" placeholder="City" style="width: 40%%"/>
|
<field name="city" placeholder="City" style="width: 40%%"/>
|
||||||
<field name="state_id" class="oe_no_button" placeholder="State" style="width: 37%%" options='{"no_open": true}'/>
|
<field name="state_id" class="oe_no_button" placeholder="State" style="width: 37%%" options='{"no_open": True}'/>
|
||||||
<field name="zip" placeholder="ZIP" style="width: 20%%"/>
|
<field name="zip" placeholder="ZIP" style="width: 20%%"/>
|
||||||
</div>
|
</div>
|
||||||
<field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": true}'/>
|
<field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": True}'/>
|
||||||
</div>
|
</div>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
|
|
|
@ -23,16 +23,16 @@ from osv import fields, osv
|
||||||
import tools
|
import tools
|
||||||
|
|
||||||
class report_event_registration(osv.osv):
|
class report_event_registration(osv.osv):
|
||||||
|
|
||||||
_name = "report.event.registration"
|
_name = "report.event.registration"
|
||||||
_description = "Events Analysis"
|
_description = "Events Analysis"
|
||||||
_auto = False
|
_auto = False
|
||||||
_columns = {
|
_columns = {
|
||||||
'event_date': fields.char('Event Start Date', size=64, readonly=True),
|
'event_date': fields.char('Event Start Date', size=64, readonly=True),
|
||||||
'year': fields.char('Year', size=4, readonly=True),
|
'year': fields.char('Year', size=4, readonly=True),
|
||||||
'month': fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
|
'month': fields.selection([
|
||||||
('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
|
('01','January'), ('02','February'), ('03','March'), ('04','April'),
|
||||||
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
|
('05','May'), ('06','June'), ('07','July'), ('08','August'),
|
||||||
|
('09','September'), ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
|
||||||
'event_id': fields.many2one('event.event', 'Event', required=True),
|
'event_id': fields.many2one('event.event', 'Event', required=True),
|
||||||
'draft_state': fields.integer(' # No of Draft Registrations', size=20),
|
'draft_state': fields.integer(' # No of Draft Registrations', size=20),
|
||||||
'confirm_state': fields.integer(' # No of Confirmed Registrations', size=20),
|
'confirm_state': fields.integer(' # No of Confirmed Registrations', size=20),
|
||||||
|
@ -48,17 +48,18 @@ class report_event_registration(osv.osv):
|
||||||
'company_id': fields.many2one('res.company', 'Company', readonly=True),
|
'company_id': fields.many2one('res.company', 'Company', readonly=True),
|
||||||
}
|
}
|
||||||
_order = 'event_date desc'
|
_order = 'event_date desc'
|
||||||
|
|
||||||
def init(self, cr):
|
def init(self, cr):
|
||||||
"""
|
"""
|
||||||
initialize the sql view for the event registration
|
Initialize the sql view for the event registration
|
||||||
cr -- the cursor
|
|
||||||
"""
|
"""
|
||||||
tools.drop_view_if_exists(cr, 'report_event_registration')
|
tools.drop_view_if_exists(cr, 'report_event_registration')
|
||||||
cr.execute("""
|
|
||||||
CREATE OR REPLACE view report_event_registration AS (
|
# TOFIX this request won't select events that have no registration
|
||||||
SELECT
|
cr.execute(""" CREATE VIEW report_event_registration AS (
|
||||||
event_id,
|
SELECT
|
||||||
r.id,
|
e.id::char || '/' || coalesce(r.id::char,'') AS id,
|
||||||
|
e.id AS event_id,
|
||||||
e.user_id AS user_id,
|
e.user_id AS user_id,
|
||||||
r.user_id AS user_id_registration,
|
r.user_id AS user_id_registration,
|
||||||
r.name AS name_registration,
|
r.name AS name_registration,
|
||||||
|
@ -72,23 +73,21 @@ class report_event_registration(osv.osv):
|
||||||
CASE WHEN r.state IN ('open','done') THEN r.nb_register ELSE 0 END AS confirm_state,
|
CASE WHEN r.state IN ('open','done') THEN r.nb_register ELSE 0 END AS confirm_state,
|
||||||
e.type AS event_type,
|
e.type AS event_type,
|
||||||
e.register_max AS register_max,
|
e.register_max AS register_max,
|
||||||
e.state AS event_state,
|
e.state AS event_state,
|
||||||
r.state AS registration_state
|
r.state AS registration_state
|
||||||
FROM
|
FROM
|
||||||
event_event e
|
event_event e
|
||||||
|
LEFT JOIN event_registration r ON (e.id=r.event_id)
|
||||||
|
|
||||||
LEFT JOIN
|
GROUP BY
|
||||||
event_registration r ON (e.id=r.event_id)
|
|
||||||
|
|
||||||
GROUP BY
|
|
||||||
event_id,
|
event_id,
|
||||||
user_id_registration,
|
user_id_registration,
|
||||||
e.id,
|
|
||||||
r.id,
|
r.id,
|
||||||
registration_state,
|
registration_state,
|
||||||
r.nb_register,
|
r.nb_register,
|
||||||
event_type, e.id, e.date_begin, e.main_speaker_id,
|
event_type,
|
||||||
e.register_max,event_id, e.user_id,e.company_id,
|
e.id,
|
||||||
|
e.date_begin,
|
||||||
e.user_id,
|
e.user_id,
|
||||||
event_state,
|
event_state,
|
||||||
e.company_id,
|
e.company_id,
|
||||||
|
@ -97,9 +96,8 @@ class report_event_registration(osv.osv):
|
||||||
month,
|
month,
|
||||||
e.register_max,
|
e.register_max,
|
||||||
name_registration
|
name_registration
|
||||||
|
)
|
||||||
)
|
""")
|
||||||
""")
|
|
||||||
|
|
||||||
report_event_registration()
|
report_event_registration()
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<openerp>
|
<openerp>
|
||||||
<data>
|
<data>
|
||||||
|
|
||||||
<!-- report , event on registration... start -->
|
<!-- Report, event on registration -->
|
||||||
<record model="ir.ui.view" id="report_event_registration_tree">
|
<record model="ir.ui.view" id="report_event_registration_tree">
|
||||||
<field name="name">report.event.registration.tree</field>
|
<field name="name">report.event.registration.tree</field>
|
||||||
<field name="model">report.event.registration</field>
|
<field name="model">report.event.registration</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree colors="blue:event_state == 'draft';black:event_state == 'confirm';gray:event_state in('done','cancel')" string="Events Analysis">
|
<tree colors="blue:event_state == 'draft';black:event_state == 'confirm';gray:event_state in('done','cancel')" create="false" string="Events Analysis">
|
||||||
<field name="event_date" invisible="1"/>
|
<field name="event_date" invisible="1"/>
|
||||||
<field name="user_id" invisible="1"/>
|
<field name="user_id" invisible="1"/>
|
||||||
<field name="speaker_id" invisible="1"/>
|
<field name="speaker_id" invisible="1"/>
|
||||||
|
@ -28,7 +28,6 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
<record model ="ir.ui.view" id="report_event_registration_graph">
|
<record model ="ir.ui.view" id="report_event_registration_graph">
|
||||||
<field name="name">report.event.registration.graph</field>
|
<field name="name">report.event.registration.graph</field>
|
||||||
<field name="model">report.event.registration</field>
|
<field name="model">report.event.registration</field>
|
||||||
|
@ -42,8 +41,7 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Event on Registration search view -->
|
<!-- Event on Registration search view -->
|
||||||
|
|
||||||
<record model="ir.ui.view" id="view_report_event_registration_search">
|
<record model="ir.ui.view" id="view_report_event_registration_search">
|
||||||
<field name="name">report.event.registration.search</field>
|
<field name="name">report.event.registration.search</field>
|
||||||
<field name="model">report.event.registration</field>
|
<field name="model">report.event.registration</field>
|
||||||
|
@ -82,28 +80,28 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="ir.actions.act_window" id="action_report_event_registration">
|
<record model="ir.actions.act_window" id="action_report_event_registration">
|
||||||
<field name="name">Events Analysis</field>
|
<field name="name">Events Analysis</field>
|
||||||
<field name="res_model">report.event.registration</field>
|
<field name="res_model">report.event.registration</field>
|
||||||
<field name="view_type">form</field>
|
<field name="view_type">form</field>
|
||||||
<field name="view_mode">tree,graph</field>
|
<field name="view_mode">tree,graph</field>
|
||||||
<field name="search_view_id" ref="view_report_event_registration_search"/>
|
<field name="search_view_id" ref="view_report_event_registration_search"/>
|
||||||
<field name="context">{"search_default_year":1,"search_default_this_month":1,"search_default_365day":1, "search_default_invoiced":1, "search_default_event":1, 'group_by_no_leaf':1, 'group_by':[]}</field>
|
<field name="context">{"search_default_year":1,"search_default_this_month":1,"search_default_365day":1, "search_default_invoiced":1, "search_default_event":1, "group_by_no_leaf":1, "group_by":[]}</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="ir.actions.act_window.view" id="action_report_event_registration_tree">
|
<record model="ir.actions.act_window.view" id="action_report_event_registration_tree">
|
||||||
<field name="sequence" eval="1"/>
|
<field name="sequence" eval="1"/>
|
||||||
<field name="view_mode">tree</field>
|
<field name="view_mode">tree</field>
|
||||||
<field name="view_id" ref="report_event_registration_tree"/>
|
<field name="view_id" ref="report_event_registration_tree"/>
|
||||||
<field name="act_window_id" ref="action_report_event_registration"/>
|
<field name="act_window_id" ref="action_report_event_registration"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="ir.actions.act_window.view" id="action_report_event_registration_graph">
|
<record model="ir.actions.act_window.view" id="action_report_event_registration_graph">
|
||||||
<field name="sequence" eval="2"/>
|
<field name="sequence" eval="2"/>
|
||||||
<field name="view_mode">graph</field>
|
<field name="view_mode">graph</field>
|
||||||
<field name="view_id" ref="report_event_registration_graph"/>
|
<field name="view_id" ref="report_event_registration_graph"/>
|
||||||
<field name="act_window_id" ref="action_report_event_registration"/>
|
<field name="act_window_id" ref="action_report_event_registration"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<menuitem parent="base.menu_reporting" id="menu_reporting_events" sequence="30" groups="event.group_event_manager" name="Events"/>
|
<menuitem parent="base.menu_reporting" id="menu_reporting_events" sequence="30" groups="event.group_event_manager" name="Events"/>
|
||||||
<menuitem parent="menu_reporting_events" action="action_report_event_registration" id="menu_report_event_registration" sequence="3" groups="event.group_event_manager"/>
|
<menuitem parent="menu_reporting_events" action="action_report_event_registration" id="menu_report_event_registration" sequence="3" groups="event.group_event_manager"/>
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
<field name="model">product.product</field>
|
<field name="model">product.product</field>
|
||||||
<field name="inherit_id" ref="product.product_normal_form_view" />
|
<field name="inherit_id" ref="product.product_normal_form_view" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<field name="purchase_ok" position="before">
|
<div name="options" position="inside">
|
||||||
<field name="event_ok" on_change="onchange_event_ok(event_ok, context)"/>
|
<field name="event_ok" on_change="onchange_event_ok(event_ok, context)"/>
|
||||||
<label for="event_ok"/>
|
<label for="event_ok"/>
|
||||||
</field>
|
</div>
|
||||||
<field name='default_code' position='before'>
|
<field name='default_code' position='before'>
|
||||||
<field name="event_type_id" attrs="{'readonly': [('event_ok', '=', False)]}"/>
|
<field name="event_type_id" attrs="{'readonly': [('event_ok', '=', False)]}"/>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
'category': 'Tools',
|
'category': 'Tools',
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
'web': True,
|
|
||||||
'js': ['static/src/js/gdocs.js'],
|
'js': ['static/src/js/gdocs.js'],
|
||||||
'data': [
|
'data': [
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
|
|
|
@ -26,8 +26,11 @@ try:
|
||||||
from gdata.client import RequestError
|
from gdata.client import RequestError
|
||||||
from gdata.docs.service import DOCUMENT_LABEL
|
from gdata.docs.service import DOCUMENT_LABEL
|
||||||
import gdata.auth
|
import gdata.auth
|
||||||
|
from gdata.docs.data import Resource
|
||||||
except ImportError:
|
except ImportError:
|
||||||
raise osv.except_osv(_('Google Docs Error!'), _('Please install gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list.'))
|
import logging
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
_logger.warning("Please install latest gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list")
|
||||||
|
|
||||||
class google_docs_ir_attachment(osv.osv):
|
class google_docs_ir_attachment(osv.osv):
|
||||||
_inherit = 'ir.attachment'
|
_inherit = 'ir.attachment'
|
||||||
|
|
|
@ -8,9 +8,10 @@
|
||||||
<field name="name">google_docs.config.tree</field>
|
<field name="name">google_docs.config.tree</field>
|
||||||
<field name="model">google.docs.config</field>
|
<field name="model">google.docs.config</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<group name="default_filters" position="inside">
|
<tree string="Google Docs Configuration">
|
||||||
<field name="model_id"/>
|
<field name="model_id"/>
|
||||||
</group>
|
<field name="name_template"/>
|
||||||
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
@ -18,11 +19,25 @@
|
||||||
<field name="name">google_docs.config.form</field>
|
<field name="name">google_docs.config.form</field>
|
||||||
<field name="model">google.docs.config</field>
|
<field name="model">google.docs.config</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<group colspan='4'>
|
<form string="Google Docs Configuration" version="7.0">
|
||||||
<field name="model_id"/>
|
<group>
|
||||||
<field name='gdocs_resource_id'/>
|
<field name="model_id"/>
|
||||||
<field name='name_template'/>
|
<label for='gdocs_resource_id'/>
|
||||||
</group>
|
<div>
|
||||||
|
<field name='gdocs_resource_id'/>
|
||||||
|
<p class="oe_grey">
|
||||||
|
This is the id of the template document, on google side. You can find it thanks to its URL:
|
||||||
|
<ul>
|
||||||
|
<li>for a text document with url like `https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is `document:123456789`</li>
|
||||||
|
<li>for a spreadsheet document with url like `https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, the ID is `spreadsheet:123456789`</li>
|
||||||
|
<li>for a presentation (slide show) document with url like `https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id.p`, the ID is `presentation:123456789`</li>
|
||||||
|
<li>for a drawing document with url like `https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is `drawings:123456789`</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<field name='name_template'/>
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
|
@ -42,14 +42,14 @@
|
||||||
</group>
|
</group>
|
||||||
<group string="Position">
|
<group string="Position">
|
||||||
<field name="department_id" on_change="onchange_department_id(department_id)"/>
|
<field name="department_id" on_change="onchange_department_id(department_id)"/>
|
||||||
<field name="job_id" options='{"no_open": true}' domain="[('state','!=','old')]" context="{'form_view_ref': 'hr.view_hr_job_employee_form'}"/>
|
<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="parent_id"/>
|
||||||
<field name="coach_id"/>
|
<field name="coach_id"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="company_id" groups="base.group_multi_company" on_change="onchange_company(company_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)" string="Related User"/>
|
<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}'/>
|
<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>
|
||||||
</group>
|
</group>
|
||||||
<field name="notes" placeholder="Other Information ..." colspan="4"/>
|
<field name="notes" placeholder="Other Information ..." colspan="4"/>
|
||||||
|
@ -57,14 +57,14 @@
|
||||||
<page string="Personal Information" groups="base.group_hr_user">
|
<page string="Personal Information" groups="base.group_hr_user">
|
||||||
<group>
|
<group>
|
||||||
<group string="Citizenship & Other Info">
|
<group string="Citizenship & Other Info">
|
||||||
<field name="country_id" options='{"no_open": true}'/>
|
<field name="country_id" options='{"no_open": True}'/>
|
||||||
<field name="identification_id" groups="base.group_hr_user"/>
|
<field name="identification_id" groups="base.group_hr_user"/>
|
||||||
<field name="passport_id" groups="base.group_hr_user"/>
|
<field name="passport_id" groups="base.group_hr_user"/>
|
||||||
<field name="bank_account_id"/>
|
<field name="bank_account_id"/>
|
||||||
<field name="otherid" groups="base.group_hr_user"/>
|
<field name="otherid" groups="base.group_hr_user"/>
|
||||||
</group>
|
</group>
|
||||||
<group string="Contact Information">
|
<group string="Contact Information">
|
||||||
<field name="address_home_id" context="{'show_address': 1}" options='{"always_reload": true, "highlight_first_line": true}'/>
|
<field name="address_home_id" context="{'show_address': 1}" options='{"always_reload": True, "highlight_first_line": True}'/>
|
||||||
</group>
|
</group>
|
||||||
<group string="Status">
|
<group string="Status">
|
||||||
<field name="gender"/>
|
<field name="gender"/>
|
||||||
|
@ -334,13 +334,10 @@
|
||||||
<field name="state" widget="statusbar" statusbar_visible="recruit,open"/>
|
<field name="state" widget="statusbar" statusbar_visible="recruit,open"/>
|
||||||
</header>
|
</header>
|
||||||
<sheet>
|
<sheet>
|
||||||
<label for="name" class="oe_edit_only"/>
|
<div class="oe_title">
|
||||||
<h1>
|
<label for="name" class="oe_edit_only"/>
|
||||||
<field name="name" class="oe_inline"/>
|
<h1><field name="name" class="oe_inline"/></h1>
|
||||||
<label class="oe_inline" string="(" attrs="{'invisible': [('department_id', '=', False)]}"/>
|
</div>
|
||||||
<field name="department_id" class="oe_inline"/>
|
|
||||||
<label class="oe_inline" string=")" attrs="{'invisible': [('department_id', '=', False)]}"/>
|
|
||||||
</h1>
|
|
||||||
<group>
|
<group>
|
||||||
<group>
|
<group>
|
||||||
<field name="no_of_employee" groups="base.group_user"/>
|
<field name="no_of_employee" groups="base.group_user"/>
|
||||||
|
@ -349,7 +346,7 @@
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||||
</group>
|
<field name="department_id"/> </group>
|
||||||
</group>
|
</group>
|
||||||
<div>
|
<div>
|
||||||
<label for="description"/>
|
<label for="description"/>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<field name="name">hr.evaluation.report.tree</field>
|
<field name="name">hr.evaluation.report.tree</field>
|
||||||
<field name="model">hr.evaluation.report</field>
|
<field name="model">hr.evaluation.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree colors="blue:state == 'draft';black:state in ('wait','progress');gray:state in('done','cancel')"
|
<tree colors="blue:state == 'draft';black:state in ('wait','progress');gray:state in('done','cancel')" create="false"
|
||||||
string="Appraisal Analysis">
|
string="Appraisal Analysis">
|
||||||
<field name="create_date" invisible="1"/>
|
<field name="create_date" invisible="1"/>
|
||||||
<field name="employee_id" invisible="1"/>
|
<field name="employee_id" invisible="1"/>
|
||||||
|
|
|
@ -243,7 +243,7 @@ class product_product(osv.osv):
|
||||||
data_obj = self.pool.get('ir.model.data')
|
data_obj = self.pool.get('ir.model.data')
|
||||||
cat_id = data_obj._get_id(cr, uid, 'hr_expense', 'cat_expense')
|
cat_id = data_obj._get_id(cr, uid, 'hr_expense', 'cat_expense')
|
||||||
categ_id = data_obj.browse(cr, uid, cat_id).res_id
|
categ_id = data_obj.browse(cr, uid, cat_id).res_id
|
||||||
res = {'value' : {'type':'service','procure_method':'make_to_stock','supply_method':'buy','purchase_ok':True,'sale_ok' :False,'categ_id':categ_id }}
|
res = {'value' : {'type':'service','sale_ok' :False,'categ_id':categ_id }}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
product_product()
|
product_product()
|
||||||
|
|
|
@ -124,7 +124,7 @@
|
||||||
<field name="note" placeholder="Free Notes"/>
|
<field name="note" placeholder="Free Notes"/>
|
||||||
</div>
|
</div>
|
||||||
<group class="oe_subtotal_footer">
|
<group class="oe_subtotal_footer">
|
||||||
<field name="amount"/>
|
<field name="amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
</page>
|
</page>
|
||||||
|
@ -196,10 +196,10 @@
|
||||||
<field name="model">product.product</field>
|
<field name="model">product.product</field>
|
||||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<field name="purchase_ok" position="before">
|
<div name="options" position="inside">
|
||||||
<field name="hr_expense_ok" on_change="on_change_hr_expense_ok(hr_expense_ok)"/>
|
<field name="hr_expense_ok" on_change="on_change_hr_expense_ok(hr_expense_ok)"/>
|
||||||
<label for="hr_expense_ok"/>
|
<label for="hr_expense_ok"/>
|
||||||
</field>
|
</div>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<field name="name">hr.expense.report.tree</field>
|
<field name="name">hr.expense.report.tree</field>
|
||||||
<field name="model">hr.expense.report</field>
|
<field name="model">hr.expense.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree colors="blue:state == 'draft';black:state in ('confirm','accepted','done');gray:state == 'cancelled'" string="Expenses Analysis">
|
<tree colors="blue:state == 'draft';black:state in ('confirm','accepted','done');gray:state == 'cancelled'" create="false" string="Expenses Analysis">
|
||||||
<field name="employee_id" invisible="1"/>
|
<field name="employee_id" invisible="1"/>
|
||||||
<field name="user_id" invisible="1"/>
|
<field name="user_id" invisible="1"/>
|
||||||
<field name="year" invisible="1"/>
|
<field name="year" invisible="1"/>
|
||||||
|
|
|
@ -9,6 +9,7 @@ access_product_template_hr_expense_user,product.template.hr.expense.user,product
|
||||||
access_product_uom_hr_expense_user,product.uom.hr.expense.user,product.model_product_uom,base.group_hr_user,1,1,1,1
|
access_product_uom_hr_expense_user,product.uom.hr.expense.user,product.model_product_uom,base.group_hr_user,1,1,1,1
|
||||||
access_product_price_type_user,product.price.type.user,product.model_product_price_type,base.group_hr_user,1,1,1,1
|
access_product_price_type_user,product.price.type.user,product.model_product_price_type,base.group_hr_user,1,1,1,1
|
||||||
access_account_journal_user,account.journal.user,account.model_account_journal,base.group_hr_user,1,1,1,1
|
access_account_journal_user,account.journal.user,account.model_account_journal,base.group_hr_user,1,1,1,1
|
||||||
|
access_account_journal_employee,account.journal.employee,account.model_account_journal,base.group_user,1,0,0,0
|
||||||
access_account_invoice_user,account.invoice.user,account.model_account_invoice,base.group_hr_user,1,1,1,1
|
access_account_invoice_user,account.invoice.user,account.model_account_invoice,base.group_hr_user,1,1,1,1
|
||||||
access_account_invoice_line_user,account.invoice.line.user,account.model_account_invoice_line,base.group_hr_user,1,1,1,1
|
access_account_invoice_line_user,account.invoice.line.user,account.model_account_invoice_line,base.group_hr_user,1,1,1,1
|
||||||
access_account_analytic_journal_user,account.ianalytic.journal.user,account.model_account_analytic_journal,base.group_hr_user,1,1,1,1
|
access_account_analytic_journal_user,account.ianalytic.journal.user,account.model_account_analytic_journal,base.group_hr_user,1,1,1,1
|
||||||
|
|
|
|
@ -353,6 +353,32 @@
|
||||||
|
|
||||||
<menuitem name="My Allocation Requests" parent="menu_open_ask_holidays" id="menu_open_allocation_holidays" action="open_allocation_holidays"/>
|
<menuitem name="My Allocation Requests" parent="menu_open_ask_holidays" id="menu_open_allocation_holidays" action="open_allocation_holidays"/>
|
||||||
|
|
||||||
|
<record model="ir.actions.act_window" id="request_approve_allocation">
|
||||||
|
<field name="name">Allocation Requests to Approve</field>
|
||||||
|
<field name="res_model">hr.holidays</field>
|
||||||
|
<field name="view_type">form</field>
|
||||||
|
<field name="context">{'default_type': 'add', 'search_default_approve':1}</field>
|
||||||
|
<field name="domain">[('type','=','add')]</field>
|
||||||
|
<field name="view_id" ref="allocation_leave_new"/>
|
||||||
|
<field name="search_view_id" ref="view_hr_holidays_filter"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.actions.act_window.view" id="action_request_approve_allocation_tree">
|
||||||
|
<field name="sequence" eval="1"/>
|
||||||
|
<field name="view_mode">tree</field>
|
||||||
|
<field name="view_id" ref="view_holiday_allocation_tree"/>
|
||||||
|
<field name="act_window_id" ref="request_approve_allocation"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.actions.act_window.view" id="action_request_approve_allocation_form">
|
||||||
|
<field name="sequence" eval="2"/>
|
||||||
|
<field name="view_mode">form</field>
|
||||||
|
<field name="view_id" ref="allocation_leave_new"/>
|
||||||
|
<field name="act_window_id" ref="request_approve_allocation"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem parent="menu_open_ask_holidays" id="menu_request_approve_allocation" action="request_approve_allocation" groups="base.group_hr_manager"/>
|
||||||
|
|
||||||
<record model="ir.actions.act_window" id="open_company_allocation">
|
<record model="ir.actions.act_window" id="open_company_allocation">
|
||||||
<field name="name">Leaves Summary</field>
|
<field name="name">Leaves Summary</field>
|
||||||
<field name="res_model">hr.holidays</field>
|
<field name="res_model">hr.holidays</field>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -342,8 +342,8 @@
|
||||||
attrs="{'invisible':[('survey_id','=',False)]}"/>
|
attrs="{'invisible':[('survey_id','=',False)]}"/>
|
||||||
</div>
|
</div>
|
||||||
</field>
|
</field>
|
||||||
<xpath expr="/form/sheet/h1" version="7.0" position="after">
|
<xpath expr="//div[@class='oe_title']" version="7.0" position="after">
|
||||||
<div colspan="4" attrs="{'invisible': [('alias_domain', '=', False)]}">
|
<div attrs="{'invisible': [('alias_domain', '=', False)]}">
|
||||||
<field name="alias_id" invisible="1" required="0"/>
|
<field name="alias_id" invisible="1" required="0"/>
|
||||||
<label for="alias_name" class="oe_edit_only"/>
|
<label for="alias_name" class="oe_edit_only"/>
|
||||||
<field name="alias_name" nolabel="1" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/>@<field name="alias_domain" nolabel="1" class="oe_inline"/>
|
<field name="alias_name" nolabel="1" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/>@<field name="alias_domain" nolabel="1" class="oe_inline"/>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<field name="name">hr.recruitment.report.tree</field>
|
<field name="name">hr.recruitment.report.tree</field>
|
||||||
<field name="model">hr.recruitment.report</field>
|
<field name="model">hr.recruitment.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Recruitment Analysis">
|
<tree string="Recruitment Analysis" create="false">
|
||||||
<field name="date" invisible="1"/>
|
<field name="date" invisible="1"/>
|
||||||
<field name="user_id" invisible="1"/>
|
<field name="user_id" invisible="1"/>
|
||||||
<field name="job_id"/>
|
<field name="job_id"/>
|
||||||
|
|
|
@ -135,6 +135,8 @@ class account_analytic_line(osv.osv):
|
||||||
def _default_general_account(self, cr, uid, context=None):
|
def _default_general_account(self, cr, uid, context=None):
|
||||||
proxy = self.pool.get('hr.employee')
|
proxy = self.pool.get('hr.employee')
|
||||||
record_ids = proxy.search(cr, uid, [('user_id', '=', uid)], context=context)
|
record_ids = proxy.search(cr, uid, [('user_id', '=', uid)], context=context)
|
||||||
|
if not record_ids:
|
||||||
|
raise osv.except_osv(_('Error!'), _('Please create an employee associated to this user.'))
|
||||||
employee = proxy.browse(cr, uid, record_ids[0], context=context)
|
employee = proxy.browse(cr, uid, record_ids[0], context=context)
|
||||||
if employee.product_id and employee.product_id.property_account_income:
|
if employee.product_id and employee.product_id.property_account_income:
|
||||||
return employee.product_id.property_account_income.id
|
return employee.product_id.property_account_income.id
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<field name="name">hr.timesheet.report.tree</field>
|
<field name="name">hr.timesheet.report.tree</field>
|
||||||
<field name="model">hr.timesheet.report</field>
|
<field name="model">hr.timesheet.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Timesheet Analysis">
|
<tree string="Timesheet Analysis" create="false">
|
||||||
<field name="year" invisible="1"/>
|
<field name="year" invisible="1"/>
|
||||||
<field name="month" invisible="1"/>
|
<field name="month" invisible="1"/>
|
||||||
<field name="date" invisible="1"/>
|
<field name="date" invisible="1"/>
|
||||||
|
|
|
@ -35,7 +35,7 @@ class hr_timesheet_current_open(osv.osv_memory):
|
||||||
|
|
||||||
user_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)], context=context)
|
user_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)], context=context)
|
||||||
if not len(user_ids):
|
if not len(user_ids):
|
||||||
raise osv.except_osv(_('Error!'), _('Please define employee for your user!'))
|
raise osv.except_osv(_('Error!'), _('Please create an employee and associate it with this user.'))
|
||||||
ids = ts.search(cr, uid, [('user_id','=',uid),('state','=','draft'),('date_from','<=',time.strftime('%Y-%m-%d')), ('date_to','>=',time.strftime('%Y-%m-%d'))], context=context)
|
ids = ts.search(cr, uid, [('user_id','=',uid),('state','=','draft'),('date_from','<=',time.strftime('%Y-%m-%d')), ('date_to','>=',time.strftime('%Y-%m-%d'))], context=context)
|
||||||
|
|
||||||
if len(ids) > 1:
|
if len(ids) > 1:
|
||||||
|
|
|
@ -6,928 +6,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: OpenERP Server 7.0alpha\n"
|
"Project-Id-Version: OpenERP Server 7.0alpha\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2012-08-17 06:46+0000\n"
|
"POT-Creation-Date: 2012-09-10 09:14+0000\n"
|
||||||
"PO-Revision-Date: 2012-08-17 06:46+0000\n"
|
"PO-Revision-Date: 2012-10-10 12:31+0000\n"
|
||||||
"Last-Translator: <>\n"
|
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||||
"Language-Team: Bengali <bn@li.org>\n"
|
"Language-Team: Bengali <bn@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: \n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: \n"
|
"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16118)\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 ""
|
|
|
@ -6,928 +6,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: OpenERP Server 7.0alpha\n"
|
"Project-Id-Version: OpenERP Server 7.0alpha\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2012-08-17 06:46+0000\n"
|
"POT-Creation-Date: 2012-09-10 09:14+0000\n"
|
||||||
"PO-Revision-Date: 2012-08-17 06:46+0000\n"
|
"PO-Revision-Date: 2012-10-10 12:31+0000\n"
|
||||||
"Last-Translator: <>\n"
|
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||||
"Language-Team: Gujarati <gu@li.org>\n"
|
"Language-Team: Gujarati <gu@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: \n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: \n"
|
"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16118)\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 ""
|
|
|
@ -6,928 +6,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: OpenERP Server 7.0alpha\n"
|
"Project-Id-Version: OpenERP Server 7.0alpha\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2012-08-17 06:46+0000\n"
|
"POT-Creation-Date: 2012-09-10 09:14+0000\n"
|
||||||
"PO-Revision-Date: 2012-08-17 06:46+0000\n"
|
"PO-Revision-Date: 2012-10-10 12:31+0000\n"
|
||||||
"Last-Translator: <>\n"
|
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||||
"Language-Team: Hindi <hi@li.org>\n"
|
"Language-Team: Hindi <hi@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: \n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: \n"
|
"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16118)\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 ""
|
|
|
@ -6,928 +6,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: OpenERP Server 7.0alpha\n"
|
"Project-Id-Version: OpenERP Server 7.0alpha\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2012-08-17 06:46+0000\n"
|
"POT-Creation-Date: 2012-09-10 09:14+0000\n"
|
||||||
"PO-Revision-Date: 2012-08-17 06:46+0000\n"
|
"PO-Revision-Date: 2012-10-10 12:31+0000\n"
|
||||||
"Last-Translator: <>\n"
|
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||||
"Language-Team: Tamil <ta@li.org>\n"
|
"Language-Team: Tamil <ta@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: \n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: \n"
|
"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16118)\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 ""
|
|
|
@ -6,928 +6,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: OpenERP Server 7.0alpha\n"
|
"Project-Id-Version: OpenERP Server 7.0alpha\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2012-08-17 06:46+0000\n"
|
"POT-Creation-Date: 2012-09-10 09:14+0000\n"
|
||||||
"PO-Revision-Date: 2012-08-17 06:46+0000\n"
|
"PO-Revision-Date: 2012-10-10 12:31+0000\n"
|
||||||
"Last-Translator: <>\n"
|
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||||
"Language-Team: Telugu <te@li.org>\n"
|
"Language-Team: Telugu <te@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: \n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: \n"
|
"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16118)\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 ""
|
|
|
@ -6,7 +6,7 @@
|
||||||
<field name="name">payment.advice.report.tree</field>
|
<field name="name">payment.advice.report.tree</field>
|
||||||
<field name="model">payment.advice.report</field>
|
<field name="model">payment.advice.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree colors="blue:state == 'draft';black:state == 'confirm';gray:state == 'cancel' " string="Advices Analysis">
|
<tree colors="blue:state == 'draft';black:state == 'confirm';gray:state == 'cancel' " create="false" string="Advices Analysis">
|
||||||
<field name="nbr" sum="# Payment Lines"/>
|
<field name="nbr" sum="# Payment Lines"/>
|
||||||
<field name="name" invisible="1"/>
|
<field name="name" invisible="1"/>
|
||||||
<field name="employee_id" invisible="1"/>
|
<field name="employee_id" invisible="1"/>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<field name="name">payslip.report.tree</field>
|
<field name="name">payslip.report.tree</field>
|
||||||
<field name="model">payslip.report</field>
|
<field name="model">payslip.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree colors="blue:state == 'draft';black:state == 'done';gray:state == 'cancel' " string="Payslip Analysis">
|
<tree colors="blue:state == 'draft';black:state == 'done';gray:state == 'cancel' " create="false" string="Payslip Analysis">
|
||||||
<field name="nbr" sum="# Payslip Lines"/>
|
<field name="nbr" sum="# Payslip Lines"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="employee_id" invisible="1"/>
|
<field name="employee_id" invisible="1"/>
|
||||||
|
|
|
@ -10,4 +10,4 @@
|
||||||
"account_type_output_tax","Output Tax","Output Tax","liability","Unreconciled"
|
"account_type_output_tax","Output Tax","Output Tax","liability","Unreconciled"
|
||||||
"account_type_input_tax","Input Tax","Input Tax","asset","Unreconciled"
|
"account_type_input_tax","Input Tax","Input Tax","asset","Unreconciled"
|
||||||
"account_type_profit_and_loss","Profit and Loss","Profit and Loss","none","None"
|
"account_type_profit_and_loss","Profit and Loss","Profit and Loss","none","None"
|
||||||
"account_type_view","View","view",,"None"
|
"account_type_view","View","view","none","None"
|
||||||
|
|
|
|
@ -134,6 +134,7 @@ class mail_message(osv.Model):
|
||||||
'subtype_id': fields.many2one('mail.message.subtype', 'Subtype'),
|
'subtype_id': fields.many2one('mail.message.subtype', 'Subtype'),
|
||||||
'vote_user_ids': fields.many2many('res.users', 'mail_vote', 'message_id', 'user_id', string='Votes',
|
'vote_user_ids': fields.many2many('res.users', 'mail_vote', 'message_id', 'user_id', string='Votes',
|
||||||
help='Users that voted for this message'),
|
help='Users that voted for this message'),
|
||||||
|
'is_private': fields.boolean('Private message'),
|
||||||
}
|
}
|
||||||
|
|
||||||
def _needaction_domain_get(self, cr, uid, context=None):
|
def _needaction_domain_get(self, cr, uid, context=None):
|
||||||
|
@ -150,6 +151,7 @@ class mail_message(osv.Model):
|
||||||
'date': lambda *a: fields.datetime.now(),
|
'date': lambda *a: fields.datetime.now(),
|
||||||
'author_id': lambda self, cr, uid, ctx={}: self._get_default_author(cr, uid, ctx),
|
'author_id': lambda self, cr, uid, ctx={}: self._get_default_author(cr, uid, ctx),
|
||||||
'body': '',
|
'body': '',
|
||||||
|
'is_private': True,
|
||||||
}
|
}
|
||||||
|
|
||||||
#------------------------------------------------------
|
#------------------------------------------------------
|
||||||
|
@ -220,127 +222,12 @@ class mail_message(osv.Model):
|
||||||
'unread': msg.unread and msg.unread['unread'] or False
|
'unread': msg.unread and msg.unread['unread'] or False
|
||||||
}
|
}
|
||||||
|
|
||||||
def message_read_tree_get_expandable(self, cr, uid, parent_message, last_message, domain=[], current_level=0, level=0, context=None):
|
def _message_read_expandable(self, cr, uid, tree, result, message_loaded, domain, context, parent_id, limit):
|
||||||
""" . """
|
|
||||||
base_domain = [('id', '<', last_message['id'])]
|
|
||||||
if parent_message and current_level < level:
|
|
||||||
base_domain += [('parent_id', '=', parent_message['id'])]
|
|
||||||
elif parent_message:
|
|
||||||
base_domain += [('id', 'child_of', parent_message['id']), ('id', '!=', parent_message['id'])]
|
|
||||||
if domain:
|
|
||||||
base_domain += domain
|
|
||||||
extension = { 'type': 'expandable',
|
|
||||||
'domain': base_domain,
|
|
||||||
'thread_level': current_level,
|
|
||||||
'context': context,
|
|
||||||
'id': -1,
|
|
||||||
}
|
|
||||||
return extension
|
|
||||||
|
|
||||||
def message_read_tree_flatten(self, cr, uid, parent_message, messages, domain=[], level=0, current_level=0, context=None, limit=None, add_expandable=True):
|
|
||||||
""" Given a tree with several roots of following structure :
|
|
||||||
[ {'id': 1, 'child_ids': [
|
|
||||||
{'id': 11, 'child_ids': [...] },],
|
|
||||||
{...} ]
|
|
||||||
Flatten it to have a maximum number of levels, 0 being flat and
|
|
||||||
sort messages in a level according to a key of the messages.
|
|
||||||
Perform the flattening at leafs if above the maximum depth, then get
|
|
||||||
back in the tree.
|
|
||||||
:param context: ``sort_key``: key for sorting (id by default)
|
|
||||||
:param context: ``sort_reverse``: reverser order for sorting (True by default)
|
|
||||||
"""
|
"""
|
||||||
def _flatten(msg_dict):
|
create the expandable message for all parent message read
|
||||||
""" from {'id': x, 'child_ids': [{child1}, {child2}]}
|
this function is used by message_read
|
||||||
get [{'id': x, 'child_ids': []}, {child1}, {child2}]
|
|
||||||
"""
|
|
||||||
child_ids = msg_dict.pop('child_ids', [])
|
|
||||||
msg_dict['child_ids'] = []
|
|
||||||
return [msg_dict] + child_ids
|
|
||||||
|
|
||||||
context = context or {}
|
|
||||||
limit = limit or self._message_read_limit
|
|
||||||
|
|
||||||
# Depth-first flattening
|
|
||||||
for message in messages:
|
|
||||||
if message.get('type') == 'expandable':
|
|
||||||
continue
|
|
||||||
message['child_ids'] = self.message_read_tree_flatten(cr, uid, message, message['child_ids'], domain, level, current_level + 1, context=context, limit=limit)
|
|
||||||
for child in message['child_ids']:
|
|
||||||
if child.get('type') == 'expandable':
|
|
||||||
continue
|
|
||||||
message['child_nbr'] += child['child_nbr']
|
|
||||||
# Flatten if above maximum depth
|
|
||||||
if current_level < level:
|
|
||||||
return_list = messages
|
|
||||||
else:
|
|
||||||
return_list = [flat_message for message in messages for flat_message in _flatten(message)]
|
|
||||||
|
|
||||||
# Add expandable
|
|
||||||
return_list = sorted(return_list, key=itemgetter(context.get('sort_key', 'id')), reverse=context.get('sort_reverse', True))
|
|
||||||
if return_list and current_level == 0 and add_expandable:
|
|
||||||
expandable = self.message_read_tree_get_expandable(cr, uid, parent_message, return_list and return_list[-1] or parent_message, domain, current_level, level, context=context)
|
|
||||||
return_list.append(expandable)
|
|
||||||
elif return_list and current_level <= level and add_expandable:
|
|
||||||
expandable = self.message_read_tree_get_expandable(cr, uid, parent_message, return_list and return_list[-1] or parent_message, domain, current_level, level, context=context)
|
|
||||||
return_list.append(expandable)
|
|
||||||
return return_list
|
|
||||||
|
|
||||||
def message_read(self, cr, uid, ids=False, domain=[], level=0, context=None, parent_id=False, limit=None):
|
|
||||||
""" Read messages from mail.message, and get back a structured tree
|
|
||||||
of messages to be displayed as discussion threads. If IDs is set,
|
|
||||||
fetch these records. Otherwise use the domain to fetch messages.
|
|
||||||
After having fetch messages, their parents will be added to obtain
|
|
||||||
well formed threads.
|
|
||||||
|
|
||||||
:param domain: optional domain for searching ids
|
|
||||||
:param level: level of threads to display, 0 being flat
|
|
||||||
:param limit: number of messages to fetch
|
|
||||||
:param parent_id: if parent_id reached, stop searching for
|
|
||||||
further parents
|
|
||||||
:return list: list of trees of messages
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
message_loaded = context and context.get('message_loaded') or [0]
|
|
||||||
|
|
||||||
# don't read the message display by .js, in context message_loaded list
|
|
||||||
if context and context.get('message_loaded'):
|
|
||||||
domain += [ ['id','not in',message_loaded] ];
|
|
||||||
|
|
||||||
limit = limit or self._message_read_limit
|
|
||||||
context = context or {}
|
|
||||||
|
|
||||||
tree = []
|
|
||||||
result = []
|
|
||||||
record = None
|
|
||||||
|
|
||||||
# select ids
|
|
||||||
if ids:
|
|
||||||
for msg in self.browse(cr, uid, ids, context=context):
|
|
||||||
result.append(self._message_dict_get(cr, uid, msg, context=context))
|
|
||||||
return result
|
|
||||||
|
|
||||||
# key: ID, value: record
|
|
||||||
ids = self.search(cr, SUPERUSER_ID, domain, context=context, limit=limit)
|
|
||||||
for msg in self.browse(cr, uid, ids, context=context):
|
|
||||||
# if not in record and not in message_loded list
|
|
||||||
if msg.id not in tree and msg.id not in message_loaded :
|
|
||||||
record = self._message_dict_get(cr, uid, msg, context=context)
|
|
||||||
tree.append(msg.id)
|
|
||||||
result.append(record)
|
|
||||||
|
|
||||||
while msg.parent_id and msg.parent_id.id != parent_id:
|
|
||||||
parent_id = msg.parent_id.id
|
|
||||||
if msg.parent_id.id not in tree:
|
|
||||||
msg = msg.parent_id
|
|
||||||
tree.append(msg.id)
|
|
||||||
# if not in record and not in message_loded list
|
|
||||||
if msg.id not in message_loaded :
|
|
||||||
record = self._message_dict_get(cr, uid, msg, context=context)
|
|
||||||
result.append(record)
|
|
||||||
|
|
||||||
result = sorted(result, key=lambda k: k['id'])
|
|
||||||
|
|
||||||
|
|
||||||
tree_not = []
|
tree_not = []
|
||||||
# expandable for not show message
|
# expandable for not show message
|
||||||
for id_msg in tree:
|
for id_msg in tree:
|
||||||
|
@ -367,10 +254,12 @@ class mail_message(osv.Model):
|
||||||
'parent_id': id_msg,
|
'parent_id': id_msg,
|
||||||
'id': id_min
|
'id': id_min
|
||||||
})
|
})
|
||||||
|
id_min=None
|
||||||
|
id_max=None
|
||||||
nb=0
|
nb=0
|
||||||
if nb>0:
|
if nb>0:
|
||||||
result.append({
|
result.append({
|
||||||
'domain': [['id','>=',id_min],['parent_id','=',id_msg]],
|
'domain': [['id','>=',id_min],['id','<=',id_max],['parent_id','=',id_msg]],
|
||||||
'nb_messages': nb,
|
'nb_messages': nb,
|
||||||
'type': 'expandable',
|
'type': 'expandable',
|
||||||
'parent_id': id_msg,
|
'parent_id': id_msg,
|
||||||
|
@ -395,6 +284,73 @@ class mail_message(osv.Model):
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def message_read(self, cr, uid, ids=False, domain=[], level=0, context=None, parent_id=False, limit=None):
|
||||||
|
""" Read messages from mail.message, and get back a structured tree
|
||||||
|
of messages to be displayed as discussion threads. If IDs is set,
|
||||||
|
fetch these records. Otherwise use the domain to fetch messages.
|
||||||
|
After having fetch messages, their parents will be added to obtain
|
||||||
|
well formed threads.
|
||||||
|
|
||||||
|
:param domain: optional domain for searching ids
|
||||||
|
:param limit: number of messages to fetch
|
||||||
|
:param parent_id: if parent_id reached, stop searching for
|
||||||
|
further parents
|
||||||
|
:return list: list of trees of messages
|
||||||
|
"""
|
||||||
|
message_loaded = context and context.get('message_loaded') or [0]
|
||||||
|
|
||||||
|
# don't read the message display by .js, in context message_loaded list
|
||||||
|
if context and context.get('message_loaded'):
|
||||||
|
domain += [ ['id','not in',message_loaded] ];
|
||||||
|
|
||||||
|
limit = limit or self._message_read_limit
|
||||||
|
context = context or {}
|
||||||
|
|
||||||
|
tree = []
|
||||||
|
result = []
|
||||||
|
record = None
|
||||||
|
|
||||||
|
# select ids
|
||||||
|
if ids and ids!=[None]:
|
||||||
|
for msg in self.browse(cr, uid, ids, context=context):
|
||||||
|
result.append(self._message_dict_get(cr, uid, msg, context=context))
|
||||||
|
return result
|
||||||
|
|
||||||
|
# key: ID, value: record
|
||||||
|
ids = self.search(cr, SUPERUSER_ID, domain, context=context, limit=limit)
|
||||||
|
for msg in self.browse(cr, uid, ids, context=context):
|
||||||
|
# if not in record and not in message_loded list
|
||||||
|
if msg.id not in tree and msg.id not in message_loaded :
|
||||||
|
record = self._message_dict_get(cr, uid, msg, context=context)
|
||||||
|
tree.append(msg.id)
|
||||||
|
result.append(record)
|
||||||
|
|
||||||
|
while msg.parent_id and msg.parent_id.id != parent_id:
|
||||||
|
parent_id = msg.parent_id.id
|
||||||
|
if msg.parent_id.id not in tree:
|
||||||
|
msg = msg.parent_id
|
||||||
|
tree.append(msg.id)
|
||||||
|
# if not in record and not in message_loded list
|
||||||
|
if msg.id not in message_loaded :
|
||||||
|
record = self._message_dict_get(cr, uid, msg, context=context)
|
||||||
|
result.append(record)
|
||||||
|
|
||||||
|
result = sorted(result, key=lambda k: k['id'])
|
||||||
|
|
||||||
|
result = self._message_read_expandable(cr, uid, tree, result, message_loaded, domain, context, parent_id, limit)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def user_free_attachment(self, cr, uid, context=None):
|
||||||
|
attachment_list = []
|
||||||
|
|
||||||
|
attachment = self.pool.get('ir.attachment')
|
||||||
|
attachment_ids = attachment.search(cr, uid, [('res_model','=',''),('create_uid','=',uid)])
|
||||||
|
if len(attachment_ids):
|
||||||
|
attachment_list = [{'id': attach.id, 'name': attach.name, 'date': attach.create_date} for attach in attachment.browse(cr, uid, attachment_ids, context=context)]
|
||||||
|
|
||||||
|
return attachment_list
|
||||||
|
|
||||||
#------------------------------------------------------
|
#------------------------------------------------------
|
||||||
# Email api
|
# Email api
|
||||||
#------------------------------------------------------
|
#------------------------------------------------------
|
||||||
|
@ -525,11 +481,9 @@ class mail_message(osv.Model):
|
||||||
self.pool.get('ir.attachment').unlink(cr, uid, attachments_to_delete, context=context)
|
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):
|
def _notify_followers(self, cr, uid, newid, message, context=None):
|
||||||
""" Add the related record followers to the destination partner_ids.
|
""" Add the related record followers to the destination partner_ids.
|
||||||
Call mail_notification.notify to manage the email sending
|
|
||||||
"""
|
"""
|
||||||
message = self.browse(cr, uid, newid, context=context)
|
|
||||||
partners_to_notify = set([])
|
partners_to_notify = set([])
|
||||||
# message has no subtype_id: pure log message -> no partners, no one notified
|
# message has no subtype_id: pure log message -> no partners, no one notified
|
||||||
if not message.subtype_id:
|
if not message.subtype_id:
|
||||||
|
@ -550,6 +504,14 @@ class mail_message(osv.Model):
|
||||||
self.write(cr, SUPERUSER_ID, [newid], {'partner_ids': [(4, p_id) for p_id in missing_notified]}, context=context)
|
self.write(cr, SUPERUSER_ID, [newid], {'partner_ids': [(4, p_id) for p_id in missing_notified]}, context=context)
|
||||||
partners_to_notify |= extra_notified
|
partners_to_notify |= extra_notified
|
||||||
|
|
||||||
|
def _notify(self, cr, uid, newid, context=None):
|
||||||
|
""" Add the related record followers to the destination partner_ids if is not a private message.
|
||||||
|
Call mail_notification.notify to manage the email sending
|
||||||
|
"""
|
||||||
|
message = self.browse(cr, uid, newid, context=context)
|
||||||
|
if message and (message.is_private!=False and message.is_private!=None):
|
||||||
|
self._notify_followers(cr, uid, newid, message, context=context)
|
||||||
|
|
||||||
# add myself if I wrote on my wall,
|
# add myself if I wrote on my wall,
|
||||||
# unless remove myself author
|
# unless remove myself author
|
||||||
if ((message.model=="res.partner" and message.res_id==message.author_id.id)):
|
if ((message.model=="res.partner" and message.res_id==message.author_id.id)):
|
||||||
|
|
|
@ -88,21 +88,21 @@
|
||||||
<field name="name">Inbox</field>
|
<field name="name">Inbox</field>
|
||||||
<field name="tag">mail.wall</field>
|
<field name="tag">mail.wall</field>
|
||||||
<field name="params" eval=""{'domain': [('notification_ids.partner_id.user_ids', 'in', [uid]),('unread', '=', True)],
|
<field name="params" eval=""{'domain': [('notification_ids.partner_id.user_ids', 'in', [uid]),('unread', '=', True)],
|
||||||
'context': {'default_model': 'res.users', 'default_res_id': uid} }""/>
|
'context': {'default_model': 'res.partner'} }""/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="action_mail_archives_feeds" model="ir.actions.client">
|
<record id="action_mail_archives_feeds" model="ir.actions.client">
|
||||||
<field name="name">Archives</field>
|
<field name="name">Archives</field>
|
||||||
<field name="tag">mail.wall</field>
|
<field name="tag">mail.wall</field>
|
||||||
<field name="params" eval=""{'domain': [('notification_ids.partner_id.user_ids', 'in', [uid]),('unread', '=', False)],
|
<field name="params" eval=""{'domain': [('notification_ids.partner_id.user_ids', 'in', [uid]),('unread', '=', False)],
|
||||||
'context': {'default_model': 'res.users', 'default_res_id': uid} }""/>
|
'context': {'default_model': 'res.partner'} }""/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="action_mail_sent_feeds" model="ir.actions.client">
|
<record id="action_mail_sent_feeds" model="ir.actions.client">
|
||||||
<field name="name">Sent</field>
|
<field name="name">Sent</field>
|
||||||
<field name="tag">mail.wall</field>
|
<field name="tag">mail.wall</field>
|
||||||
<field name="params" eval=""{'domain': [('author_id.user_ids', 'in', [uid])],
|
<field name="params" eval=""{'domain': [('author_id.user_ids', 'in', [uid])],
|
||||||
'context': {'default_model': 'res.users', 'default_res_id': uid} }""/>
|
'context': {'default_model': 'res.partner'} }""/>
|
||||||
</record>
|
</record>
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -138,6 +138,8 @@ class mail_thread(osv.AbstractModel):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _set_followers(self, cr, uid, id, name, value, arg, context=None):
|
def _set_followers(self, cr, uid, id, name, value, arg, context=None):
|
||||||
|
if not value:
|
||||||
|
return
|
||||||
partner_obj = self.pool.get('res.partner')
|
partner_obj = self.pool.get('res.partner')
|
||||||
fol_obj = self.pool.get('mail.followers')
|
fol_obj = self.pool.get('mail.followers')
|
||||||
|
|
||||||
|
@ -621,11 +623,10 @@ class mail_thread(osv.AbstractModel):
|
||||||
:param str subject: optional subject
|
:param str subject: optional subject
|
||||||
:param str type: mail_message.type
|
:param str type: mail_message.type
|
||||||
:param int parent_id: optional ID of parent message in this thread
|
:param int parent_id: optional ID of parent message in this thread
|
||||||
:param tuple(str,str) attachments: list of attachment tuples in the form
|
:param tuple(str,str) attachments or list id: list of attachment tuples in the form
|
||||||
``(name,content)``, where content is NOT base64 encoded
|
``(name,content)``, where content is NOT base64 encoded
|
||||||
:return: ID of newly created mail.message
|
:return: ID of newly created mail.message
|
||||||
"""
|
"""
|
||||||
|
|
||||||
context = context or {}
|
context = context or {}
|
||||||
attachments = attachments or []
|
attachments = attachments or []
|
||||||
assert (not thread_id) or isinstance(thread_id, (int, long)) or \
|
assert (not thread_id) or isinstance(thread_id, (int, long)) or \
|
||||||
|
@ -633,7 +634,7 @@ class mail_thread(osv.AbstractModel):
|
||||||
if isinstance(thread_id, (list, tuple)):
|
if isinstance(thread_id, (list, tuple)):
|
||||||
thread_id = thread_id and thread_id[0]
|
thread_id = thread_id and thread_id[0]
|
||||||
|
|
||||||
attachment_ids = []
|
attachment_ids=[]
|
||||||
for name, content in attachments:
|
for name, content in attachments:
|
||||||
if isinstance(content, unicode):
|
if isinstance(content, unicode):
|
||||||
content = content.encode('utf-8')
|
content = content.encode('utf-8')
|
||||||
|
@ -677,6 +678,13 @@ class mail_thread(osv.AbstractModel):
|
||||||
'attachment_ids': attachment_ids,
|
'attachment_ids': attachment_ids,
|
||||||
'subtype_id': subtype_id,
|
'subtype_id': subtype_id,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
# if the parent is private, the message must be private
|
||||||
|
if parent_id:
|
||||||
|
msg = messages.browse(cr, uid, parent_id, context=context)
|
||||||
|
if msg.is_private:
|
||||||
|
values["is_private"] = msg.is_private
|
||||||
|
|
||||||
# Avoid warnings about non-existing fields
|
# Avoid warnings about non-existing fields
|
||||||
for x in ('from', 'to', 'cc'):
|
for x in ('from', 'to', 'cc'):
|
||||||
values.pop(x, None)
|
values.pop(x, None)
|
||||||
|
@ -689,10 +697,23 @@ class mail_thread(osv.AbstractModel):
|
||||||
|
|
||||||
def message_post_api(self, cr, uid, thread_id, body='', subject=False, type='notification',
|
def message_post_api(self, cr, uid, thread_id, body='', subject=False, type='notification',
|
||||||
subtype=None, parent_id=False, attachments=None, context=None, **kwargs):
|
subtype=None, parent_id=False, attachments=None, context=None, **kwargs):
|
||||||
added_message_id = self.message_post(cr, uid, thread_id=thread_id, body=body, subject=subject, type=type,
|
# if the user write on his wall
|
||||||
subtype=subtype, parent_id=parent_id, attachments=attachments, context=context)
|
if self._name=='res.partner' and not thread_id:
|
||||||
added_message = self.pool.get('mail.message').message_read(cr, uid, [added_message_id])
|
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
||||||
|
thread_id = user.partner_id.id
|
||||||
|
|
||||||
|
added_message_id = self.message_post(cr, uid, thread_id=thread_id, body=body, subject=subject, type=type,
|
||||||
|
subtype=subtype, parent_id=parent_id, context=context)
|
||||||
|
|
||||||
|
attachment_ids=[]
|
||||||
|
if attachments:
|
||||||
|
ir_attachment = self.pool.get('ir.attachment')
|
||||||
|
attachment_ids = ir_attachment.search(cr, 1, [('res_model', '=', ""), ('res_id', '=', ""), ('user_id', '=', uid), ('id', 'in', attachments)], context=context)
|
||||||
|
if attachment_ids:
|
||||||
|
self.pool.get('ir.attachment').write(cr, 1, attachment_ids, { 'res_model': self._name, 'res_id': thread_id }, context=context)
|
||||||
|
self.pool.get('mail.message').write(cr, 1, [added_message_id], {'attachment_ids': [(6, 0, [pid for pid in attachment_ids])]} )
|
||||||
|
|
||||||
|
added_message = self.pool.get('mail.message').message_read(cr, uid, [added_message_id])
|
||||||
return added_message
|
return added_message
|
||||||
|
|
||||||
def get_message_subtypes(self, cr, uid, ids, context=None):
|
def get_message_subtypes(self, cr, uid, ids, context=None):
|
||||||
|
|
|
@ -20,13 +20,13 @@
|
||||||
</record>
|
</record>
|
||||||
<record id="mail_archivesfeeds" model="ir.ui.menu">
|
<record id="mail_archivesfeeds" model="ir.ui.menu">
|
||||||
<field name="name">Archives</field>
|
<field name="name">Archives</field>
|
||||||
<field name="sequence" eval="11"/>
|
<field name="sequence" eval="12"/>
|
||||||
<field name="action" ref="action_mail_archives_feeds"/>
|
<field name="action" ref="action_mail_archives_feeds"/>
|
||||||
<field name="parent_id" ref="mail_feeds"/>
|
<field name="parent_id" ref="mail_feeds"/>
|
||||||
</record>
|
</record>
|
||||||
<record id="mail_sentfeeds" model="ir.ui.menu">
|
<record id="mail_sentfeeds" model="ir.ui.menu">
|
||||||
<field name="name">Sent</field>
|
<field name="name">Sent</field>
|
||||||
<field name="sequence" eval="12"/>
|
<field name="sequence" eval="13"/>
|
||||||
<field name="action" ref="action_mail_sent_feeds"/>
|
<field name="action" ref="action_mail_sent_feeds"/>
|
||||||
<field name="parent_id" ref="mail_feeds"/>
|
<field name="parent_id" ref="mail_feeds"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
@ -82,9 +82,13 @@
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail_record_wall {
|
||||||
|
margin: auto;
|
||||||
|
width: 560px;
|
||||||
|
}
|
||||||
|
|
||||||
.openerp .oe_mail_record_wall > .oe_mail_wall_threads {
|
.openerp .oe_mail_record_wall > .oe_mail_wall_threads {
|
||||||
float: left;
|
float: left;
|
||||||
width: 560px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.openerp div.oe_mail_recthread_aside {
|
.openerp div.oe_mail_recthread_aside {
|
||||||
|
@ -145,6 +149,10 @@
|
||||||
z-index: 5;
|
z-index: 5;
|
||||||
}
|
}
|
||||||
.openerp .oe_mouse_subtypes .oe_recthread_subtypes {
|
.openerp .oe_mouse_subtypes .oe_recthread_subtypes {
|
||||||
|
background: #fff;
|
||||||
|
padding: 2px;
|
||||||
|
border: 1px solid #aaaaaa;
|
||||||
|
border-top: 0px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
@ -160,7 +168,6 @@
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
|
|
||||||
.openerp div.oe_mail_thread_action {
|
.openerp div.oe_mail_thread_action {
|
||||||
display: none;
|
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
z-index:5;
|
z-index:5;
|
||||||
|
@ -173,16 +180,6 @@
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
|
|
||||||
.openerp .oe_mail_msg_content textarea.oe_mail_compose_textarea,
|
|
||||||
.openerp .oe_mail_msg_content div.oe_mail_compose_message_body textarea {
|
|
||||||
width: 474px;
|
|
||||||
height: 60px;
|
|
||||||
padding: 4px;
|
|
||||||
font-size: 12px;
|
|
||||||
border: 1px solid #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
|
/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
|
||||||
.openerp .oe_mail_msg_content textarea.oe_mail_compose_textarea:focus,
|
.openerp .oe_mail_msg_content textarea.oe_mail_compose_textarea:focus,
|
||||||
.openerp .oe_mail_msg_content div.oe_mail_compose_message_body textarea:focus {
|
.openerp .oe_mail_msg_content div.oe_mail_compose_message_body textarea:focus {
|
||||||
|
@ -206,6 +203,10 @@
|
||||||
margin-left: 66px;
|
margin-left: 66px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.openerp li.oe_mail_thread_msg {
|
||||||
|
width: 560px;
|
||||||
|
}
|
||||||
|
|
||||||
.openerp div.oe_thread_placeholder li.oe_mail_thread_msg:last-child {
|
.openerp div.oe_thread_placeholder li.oe_mail_thread_msg:last-child {
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
@ -223,13 +224,18 @@
|
||||||
|
|
||||||
.openerp li.oe_mail_thread_msg.oe_mail_read,
|
.openerp li.oe_mail_thread_msg.oe_mail_read,
|
||||||
.openerp li.oe_mail_thread_msg.oe_mail_read div {
|
.openerp li.oe_mail_thread_msg.oe_mail_read div {
|
||||||
background-color: #F0F0F0;
|
border-left: #F0F0F0;
|
||||||
}
|
}
|
||||||
.openerp li.oe_mail_thread_msg.oe_mail_read li.oe_mail_thread_msg.oe_mail_unread,
|
.openerp li.oe_mail_thread_msg.oe_mail_read li.oe_mail_thread_msg.oe_mail_unread,
|
||||||
.openerp li.oe_mail_thread_msg.oe_mail_read li.oe_mail_thread_msg.oe_mail_unread div {
|
.openerp li.oe_mail_thread_msg.oe_mail_read li.oe_mail_thread_msg.oe_mail_unread div {
|
||||||
background-color: #F6F6F6;
|
background-color: #F6F6F6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.openerp li.oe_mail_thread_msg.oe_mail_unread>div>ul>li.oe_unread,
|
||||||
|
.openerp li.oe_mail_thread_msg.oe_mail_read>div>ul>li.oe_read {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.openerp li.oe_mail_thread_msg > div:after {
|
.openerp li.oe_mail_thread_msg > div:after {
|
||||||
content: "";
|
content: "";
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -247,7 +253,7 @@
|
||||||
.openerp .oe_mail_msg_email {
|
.openerp .oe_mail_msg_email {
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
background: white;
|
background: white;
|
||||||
border-top: 1px solid #ebebeb;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.openerp .oe_mail_msg_notification:after,
|
.openerp .oe_mail_msg_notification:after,
|
||||||
|
@ -259,7 +265,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.openerp div.oe_mail_msg_content {
|
.openerp div.oe_mail_msg_content {
|
||||||
float: right;
|
float: left;
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 486px;
|
width: 486px;
|
||||||
}
|
}
|
||||||
|
@ -309,76 +315,6 @@
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/* mail.compose.message form view & OpenERP hacks
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
|
|
||||||
/* form_view: delete white background */
|
|
||||||
.openerp .oe_mail_msg_content div.oe_formview {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.openerp .oe_mail_msg_content div.oe_form_nosheet {
|
|
||||||
margin: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.openerp .oe_mail_msg_content table.oe_form_group {
|
|
||||||
margin: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.openerp .oe_mail_msg_content table.oe_form_field,
|
|
||||||
.openerp .oe_mail_msg_content div.oe_form_field {
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.openerp .oe_mail_msg_content td.oe_form_group_cell {
|
|
||||||
vertical-align: bottom;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* subject: change width */
|
|
||||||
.openerp .oe_mail_msg_content .oe_form .oe_form_field input {
|
|
||||||
width: 472px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* body_html: cleditor */
|
|
||||||
.openerp .oe_mail_msg_content div.cleditorMain {
|
|
||||||
border: 1px solid #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* destination_partner_ids */
|
|
||||||
.openerp .oe_mail_msg_content div.text-core {
|
|
||||||
height: 22px !important;
|
|
||||||
width: 472px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* buttons */
|
|
||||||
.openerp .oe_mail_msg_content .oe_mail_compose_message_icons button.oe_form_button {
|
|
||||||
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
|
/* Messages layout
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
|
@ -413,39 +349,27 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dropdown menu */
|
/* Dropdown menu */
|
||||||
/*.openerp .oe_mail_msg_content .oe_dropdown_toggle {
|
|
||||||
position: absolute;
|
|
||||||
top: 0px;
|
|
||||||
right: 3px;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
.openerp .oe_mail .oe_semantic_html_override {
|
.openerp .oe_mail ul.oe_mail_thread_display ul.oe_mail_thread_display {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
border-left: 1px #DDD dashed;
|
||||||
}
|
}
|
||||||
|
|
||||||
.openerp .oe_mail ul.oe_header {
|
.openerp .oe_mail ul.oe_header {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 3px;
|
right: 3px;
|
||||||
top: -6px;
|
top: -6px;
|
||||||
display: none;
|
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
height: 18px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.openerp .oe_mail ul.oe_header a {
|
.openerp .oe_mail ul.oe_header a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.openerp .oe_mail .oe_semantic_html_override:hover > ul.oe_header {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.openerp .oe_mail ul.oe_header>li {
|
.openerp .oe_mail ul.oe_header>li {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
height: 20px;
|
||||||
|
text-align: right;
|
||||||
.openerp .oe_mail_msg_content .oe_dropdown_arrow:after {
|
|
||||||
border-top: 4px solid #404040;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Message footer */
|
/* Message footer */
|
||||||
|
@ -465,16 +389,36 @@
|
||||||
|
|
||||||
/* Attachments list */
|
/* Attachments list */
|
||||||
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments {
|
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments {
|
||||||
display: none;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-top: 1px solid #CCC;
|
|
||||||
margin: .5em 0 0 0;
|
margin: .5em 0 0 0;
|
||||||
padding: .5em 0;
|
padding: .5em 0;
|
||||||
list-style-position: inside;
|
list-style-position: inside;
|
||||||
}
|
}
|
||||||
|
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments.oe_hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments li {
|
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments li {
|
||||||
float: none;
|
float: none;
|
||||||
|
height: 20px;
|
||||||
|
line-height: 20px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
list-style-type: square;
|
list-style-type: square;
|
||||||
}
|
}
|
||||||
|
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process {
|
||||||
|
float: right;
|
||||||
|
width: 200px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process div {
|
||||||
|
float: left;
|
||||||
|
width: 38px;
|
||||||
|
height: 16px;
|
||||||
|
margin-right: 2px;
|
||||||
|
background: #66FF66;
|
||||||
|
}
|
||||||
|
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process span {
|
||||||
|
color: #aaaaaa;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,166 @@
|
||||||
/* ------------------------------ */
|
/* ------------------------------ */
|
||||||
/* Compose Message Wizard Form */
|
/* Compose Message */
|
||||||
/* ------------------------------ */
|
/* ------------------------------ */
|
||||||
|
|
||||||
.openerp .oe_mail_compose_message_icons {
|
.openerp .oe_mail_msg_content .oe_mail_compose_message_footer {
|
||||||
text-align: right;
|
height: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.openerp .oe_mail_compose_message_icons img {
|
.openerp .oe_mail_msg_content .oe_mail_compose_message_footer button.oe_mail_compose_message_button_send {
|
||||||
width: 20px;
|
float: left;
|
||||||
height: 20px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail .oe_mail_compose_textarea
|
||||||
|
{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail .oe_mail_compose_textarea .oe_mail_post_header,
|
||||||
|
.openerp .oe_mail .oe_mail_compose_textarea .oe_mail_post_footer,
|
||||||
|
{
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail .oe_mail_compose_textarea a.oe_cancel {
|
||||||
|
position: absolute;
|
||||||
|
right: -8px;
|
||||||
|
top: -8px;
|
||||||
|
}
|
||||||
|
.openerp .oe_mail .oe_mail_compose_textarea a.oe_cancel:first-of-type {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail .oe_mail_compose_textarea button.oe_full {
|
||||||
|
float: right;
|
||||||
|
position: relative;
|
||||||
|
right: -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/* mail.compose.message : list_recipients
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
|
||||||
|
.openerp .oe_mail .oe_mail_list_recipients {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
.openerp .oe_mail .oe_mail_list_recipients .oe_all_follower {
|
||||||
|
color: blue;
|
||||||
|
}
|
||||||
|
.openerp .oe_mail .oe_mail_list_recipients .oe_partner_follower a {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
.openerp .oe_mail .oe_mail_list_recipients .oe_hidden,
|
||||||
|
.openerp .oe_mail .oe_mail_list_recipients .oe_more_hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/* mail.compose.message : attachment
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
|
||||||
|
.openerp .oe_mail .oe_attachment_file {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail .oe_attachment_file .oe_add {
|
||||||
|
float: left;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
position: relative;
|
||||||
|
z-index: 10;
|
||||||
|
left: +2px;
|
||||||
|
top: +7px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* attachment button: override of openerp values */
|
||||||
|
.openerp .oe_mail .oe_attachment_file .oe_add button,
|
||||||
|
.openerp .oe_mail .oe_attachment_file .oe_add input.oe_insert_file {
|
||||||
|
position: absolute;
|
||||||
|
bottom: +0px;
|
||||||
|
left: +0px;
|
||||||
|
height: 24px;
|
||||||
|
width: 24px;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
.openerp .oe_mail .oe_attachment_file .oe_add input.oe_insert_file {
|
||||||
|
z-index:2;
|
||||||
|
width: 300px;
|
||||||
|
left: -100px;
|
||||||
|
background: transparent;
|
||||||
|
border: 0;
|
||||||
|
color: transparent;
|
||||||
|
}
|
||||||
|
.openerp .oe_mail .oe_attachment_file .oe_add button span {
|
||||||
|
position: relative;
|
||||||
|
bottom: +4px;
|
||||||
|
font-size: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail .oe_mail_msg_attachments input {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail .oe_mail_compose_attachment_list {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/* mail.compose.message
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
|
||||||
|
|
||||||
|
/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
|
||||||
|
.openerp .oe_mail.oe_semantic_html_override .oe_mail_compose_textarea textarea.field_text,
|
||||||
|
.openerp .oe_mail div.oe_mail_compose_message_body textarea.field_text {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 120px;
|
||||||
|
height: auto;
|
||||||
|
padding: 4px;
|
||||||
|
font-size: 12px;
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* not top textarea */
|
||||||
|
.openerp .oe_mail.oe_semantic_html_override .oe_semantic_html_override .oe_mail_compose_textarea textarea.field_text {
|
||||||
|
height: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* form_view: delete white background */
|
||||||
|
.openerp .oe_mail_msg_content div.oe_formview {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail_msg_content div.oe_form_nosheet {
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail_msg_content table.oe_form_group {
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail_msg_content table.oe_form_field,
|
||||||
|
.openerp .oe_mail_msg_content div.oe_form_field {
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openerp .oe_mail_msg_content td.oe_form_group_cell {
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* subject: change width */
|
||||||
|
.openerp .oe_mail_msg_content .oe_form .oe_form_field input[type='text'] {
|
||||||
|
width: 472px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* body_html: cleditor */
|
||||||
|
.openerp .oe_mail_msg_content div.cleditorMain {
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* destination_partner_ids */
|
||||||
|
.openerp .oe_mail_msg_content div.text-core {
|
||||||
|
height: 22px !important;
|
||||||
|
width: 472px;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -40,6 +40,7 @@ openerp_mail_followers = function(session, mail) {
|
||||||
this._check_visibility();
|
this._check_visibility();
|
||||||
this.reinit();
|
this.reinit();
|
||||||
this.bind_events();
|
this.bind_events();
|
||||||
|
this.display_subtypes();
|
||||||
},
|
},
|
||||||
|
|
||||||
_check_visibility: function() {
|
_check_visibility: function() {
|
||||||
|
@ -53,31 +54,15 @@ openerp_mail_followers = function(session, mail) {
|
||||||
|
|
||||||
bind_events: function() {
|
bind_events: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
this.$('div.oe_mouse_subtypes')
|
|
||||||
.on('mouseover', function () {
|
|
||||||
$(this).removeClass('oe_mouseout').addClass('oe_mouseover');
|
|
||||||
self.display_subtypes();
|
|
||||||
})
|
|
||||||
.on('mouseleave', function () {
|
|
||||||
$(this).removeClass('oe_mouseover').addClass('oe_mouseout');
|
|
||||||
self.display_subtypes();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.$('button.oe_follower')
|
this.$('button.oe_follower')
|
||||||
.on('click', function () {
|
.on('click', function () {
|
||||||
if($(this).hasClass('oe_notfollow'))
|
if($(this).hasClass('oe_notfollow'))
|
||||||
self.do_follow();
|
self.do_follow();
|
||||||
else
|
else
|
||||||
self.do_unfollow();
|
self.do_unfollow();
|
||||||
})
|
|
||||||
.on('mouseover', function () {
|
|
||||||
$(this).removeClass('oe_mouseout').addClass('oe_mouseover');
|
|
||||||
})
|
|
||||||
.on('mouseleave', function () {
|
|
||||||
$(this).removeClass('oe_mouseover').addClass('oe_mouseout');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$el.on('click', 'ul.oe_subtypes input', function () { self.do_update_subscription(); })
|
this.$el.on('click', 'ul.oe_subtypes input', self.do_update_subscription );
|
||||||
|
|
||||||
this.$el.on('click', 'button.oe_invite', function(event) {
|
this.$el.on('click', 'button.oe_invite', function(event) {
|
||||||
action = {
|
action = {
|
||||||
|
@ -173,7 +158,8 @@ openerp_mail_followers = function(session, mail) {
|
||||||
|
|
||||||
set_subtypes:function(data){
|
set_subtypes:function(data){
|
||||||
var self = this;
|
var self = this;
|
||||||
var records = data[this.view.datarecord.id].message_subtype_data;
|
var records = (data[this.view.datarecord.id] || data[null]).message_subtype_data;
|
||||||
|
|
||||||
_(records).each(function (record, record_name) {
|
_(records).each(function (record, record_name) {
|
||||||
record.name = record_name;
|
record.name = record_name;
|
||||||
record.followed = record.followed || undefined;
|
record.followed = record.followed || undefined;
|
||||||
|
@ -194,16 +180,10 @@ openerp_mail_followers = function(session, mail) {
|
||||||
},
|
},
|
||||||
|
|
||||||
do_follow: function () {
|
do_follow: function () {
|
||||||
var self =this;
|
|
||||||
_(this.$('.oe_msg_subtype_check')).each(function(record){
|
_(this.$('.oe_msg_subtype_check')).each(function(record){
|
||||||
$(record).attr('checked','checked');
|
$(record).attr('checked','checked');
|
||||||
});
|
});
|
||||||
var context = new session.web.CompoundContext(this.build_context(), {});
|
this.do_update_subscription();
|
||||||
return this.ds_model.call('message_subscribe_users', [[this.view.datarecord.id], undefined, undefined, context]).pipe(function(value_){
|
|
||||||
self.read_value(value_);
|
|
||||||
if(!self.$('.oe_recthread_subtypes').is(":visible"))
|
|
||||||
self.display_subtypes(true);
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
do_unfollow: function () {
|
do_unfollow: function () {
|
||||||
|
@ -211,23 +191,28 @@ openerp_mail_followers = function(session, mail) {
|
||||||
$(record).attr('checked',false);
|
$(record).attr('checked',false);
|
||||||
});
|
});
|
||||||
var context = new session.web.CompoundContext(this.build_context(), {});
|
var context = new session.web.CompoundContext(this.build_context(), {});
|
||||||
return this.ds_model.call('message_unsubscribe_users', [[this.view.datarecord.id], undefined, context]).pipe(this.proxy('read_value'));
|
return this.ds_model.call('message_unsubscribe_users', [[this.view.datarecord.id], [this.session.uid], context]).pipe(this.proxy('read_value'));
|
||||||
},
|
},
|
||||||
|
|
||||||
do_update_subscription: function () {
|
do_update_subscription: function (event) {
|
||||||
var context = new session.web.CompoundContext(this.build_context(), {});
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var checklist = new Array();
|
var checklist = new Array();
|
||||||
_(this.$('.oe_msg_subtype_check')).each(function(record){
|
_(this.$('.oe_mail_recthread_actions input[type="checkbox"]')).each(function(record){
|
||||||
if($(record).is(':checked')) {
|
if($(record).is(':checked')) {
|
||||||
checklist.push(parseInt($(record).data('id')))}
|
checklist.push(parseInt($(record).data('id')))}
|
||||||
});
|
});
|
||||||
|
|
||||||
if(!checklist.length)
|
if(!checklist.length)
|
||||||
return this.do_unfollow();
|
return this.do_unfollow();
|
||||||
else
|
else{
|
||||||
return this.ds_model.call('message_subscribe_users',[[self.view.datarecord.id], undefined, checklist, context]).pipe(this.proxy('read_value'));
|
var context = new session.web.CompoundContext(this.build_context(), {});
|
||||||
|
return this.ds_model.call('message_subscribe_users', [[this.view.datarecord.id], [this.session.uid], undefined, context]).pipe(function(value_){
|
||||||
|
self.read_value(value_);
|
||||||
|
self.display_subtypes(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,11 +1,118 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<template>
|
<template>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
mail.compose_message template
|
||||||
|
This template holds the composition form to write a note or send
|
||||||
|
an e-mail. It contains by default a textarea, that will be replaced
|
||||||
|
by another composition form in the main wall composition form, or
|
||||||
|
for main thread composition form in document form view.
|
||||||
|
-->
|
||||||
|
<t t-name="mail.compose_message">
|
||||||
|
<div class="oe_mail_compose_textarea">
|
||||||
|
<img class="oe_mail_icon oe_mail_frame oe_left" alt="User img"/>
|
||||||
|
<div class="oe_mail_msg_content">
|
||||||
|
<!-- contains the composition form -->
|
||||||
|
<!-- default content: old basic textarea -->
|
||||||
|
<div class="oe_mail_post_header">
|
||||||
|
<t t-call="mail.thread.list_recipients"/>
|
||||||
|
<a class="oe_cancel oe_e">X</a>
|
||||||
|
</div>
|
||||||
|
<textarea class="field_text" placeholder="Add your comment here..."/>
|
||||||
|
<div class="oe_mail_post_footer">
|
||||||
|
<div class="oe_mail_compose_attachment_list"/>
|
||||||
|
<button class="oe_full">Full mail message</button>
|
||||||
|
<button class="oe_post">Post message</button>
|
||||||
|
<t t-call="mail.compose_message.add_attachment"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="oe_clear"/>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
mail.compose_message.add_attachment template
|
||||||
|
Small template to be inserted in the composition for add attachments
|
||||||
|
-->
|
||||||
|
<t t-name="mail.compose_message.add_attachment">
|
||||||
|
<div class="oe_attachment_file">
|
||||||
|
<div class="oe_add">
|
||||||
|
<!-- uploader of file -->
|
||||||
|
<button><span class="oe_e">p</span></button>
|
||||||
|
<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" value=""/>
|
||||||
|
<input type="hidden" name="id" value="0"/>
|
||||||
|
<input type="hidden" name="session_id" t-att-value="widget.session.session_id"/>
|
||||||
|
</t>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
mail.thread.message.attachments template
|
||||||
|
Template used to display attachments in a mail.message
|
||||||
|
-->
|
||||||
|
<t t-name="mail.thread.message.attachments">
|
||||||
|
<ul t-attf-class="oe_mail_msg_attachments #{widget.attachment_ids[0] and widget.options.thread.show_attachment_link?'':'oe_hidden'}">
|
||||||
|
<t t-foreach="widget.attachment_ids" t-as="attachment">
|
||||||
|
<li>
|
||||||
|
<span t-if="(attachment.upload or attachment.percent_loaded<100)" t-attf-title="{(attachment.name || attachment.filename) + (attachment.date?' \n('+attachment.date+')':'' )}" t-attf-name="{attachment.name || attachment.filename}">
|
||||||
|
<div class="oe_upload_in_process">
|
||||||
|
<span>Upload in progress...</span>
|
||||||
|
<div t-attf-style="{attachment.percent_loaded>0?'':'display:none;'}"/>
|
||||||
|
<div t-attf-style="{attachment.percent_loaded>20?'':'display:none;'}"/>
|
||||||
|
<div t-attf-style="{attachment.percent_loaded>40?'':'display:none;'}"/>
|
||||||
|
<div t-attf-style="{attachment.percent_loaded>60?'':'display:none;'}"/>
|
||||||
|
<div t-attf-style="{attachment.percent_loaded>80?'':'display:none;'}"/>
|
||||||
|
</div>
|
||||||
|
<t t-raw="attachment.name || attachment.filename"/>
|
||||||
|
</span>
|
||||||
|
<a t-if="(!attachment.upload or attachment.percent_loaded>=100)" t-att-href="attachment.url" t-attf-title="{(attachment.name || attachment.filename) + (attachment.date?' \n('+attachment.date+')':'' )}">
|
||||||
|
<t t-raw="attachment.name || attachment.filename"/>
|
||||||
|
</a>
|
||||||
|
<t t-if="widget.options.thread.show_attachment_delete and (!attachment.upload or attachment.percent_loaded>=100)">
|
||||||
|
<a class="oe_right oe_mail_attachment_delete" title="Delete this attachment" t-attf-data-id="{attachment.id}">x</a>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
</t>
|
||||||
|
</ul>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<t t-name="mail.thread.message.private">
|
||||||
|
<div>
|
||||||
|
<span class="oe_placeholder_checkbox_private"/>
|
||||||
|
<span class="oe_send_private">This email is private.</span>
|
||||||
|
<span class="oe_send_public">I wrote for contacts and all my followers.</span>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
template to the recipients list
|
||||||
|
-->
|
||||||
|
<t t-name="mail.thread.list_recipients">
|
||||||
|
<div class="oe_mail_list_recipients">
|
||||||
|
Post to:
|
||||||
|
<span t-if="!widget.is_private" class="oe_all_follower">All Followers</span>
|
||||||
|
<t t-if="!widget.is_private and widget.partner_ids.length"> and </t>
|
||||||
|
<t t-set="inc" t-value="0"/>
|
||||||
|
<t t-if="widget.partner_ids.length" t-foreach="widget.partner_ids" t-as="partner"><span t-attf-class="oe_partner_follower #{inc>=3?'oe_hidden':''}"><t t-if="inc" t-raw="', '"/><a t-attf-href="#model=res.partner&id=#{partner[0]}"><t t-raw="partner[1]"/></a></span><t t-set="inc" t-value="inc+1"/>
|
||||||
|
</t>
|
||||||
|
<t t-if="widget.partner_ids.length>=3">
|
||||||
|
<span class="oe_more">, <a><t t-raw="widget.partner_ids.length-3"/> others...</a></span>
|
||||||
|
<a class="oe_more_hidden"><<<</a>
|
||||||
|
</t>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
wall main template
|
wall main template
|
||||||
Template used to display the communication history in the wall.
|
Template used to display the communication history in the wall.
|
||||||
-->
|
-->
|
||||||
<div t-name="mail.wall" class="oe_view_manager oe_mail_wall oe_view_manager_current">
|
<div t-name="mail.wall" class="oe_view_manager oe_mail_wall oe_view_manag
|
||||||
|
er_current">
|
||||||
<table class="oe_view_manager_header">
|
<table class="oe_view_manager_header">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="33%"/>
|
<col width="33%"/>
|
||||||
|
@ -25,21 +132,30 @@
|
||||||
</td>
|
</td>
|
||||||
<td><div class="oe_view_manager_view_search" t-opentag="true"/></td>
|
<td><div class="oe_view_manager_view_search" t-opentag="true"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr class="oe_header_row">
|
||||||
|
<td colspan="2">
|
||||||
|
<button type="button" class="oe_write_full oe_highlight">
|
||||||
|
Compose a new message
|
||||||
|
</button>
|
||||||
|
<button type="button" class="oe_write_onwall" help="Your followers can read this message">
|
||||||
|
Write to your followers
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<ul class="oe_mail_wall_threads">
|
<!-- placeholder for the wall threads -->
|
||||||
<!-- contains threads -->
|
<div class="oe_mail_wall_threads"/>
|
||||||
</ul>
|
|
||||||
<div class="oe_mail_wall_aside">
|
<div class="oe_mail_wall_aside">
|
||||||
<!-- contains currently nothing -->
|
<!-- contains currently nothing -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
wall_thread_container template for the wall
|
display message on the wall when there are no message
|
||||||
Each discussion thread is contained inside this template
|
|
||||||
-->
|
-->
|
||||||
<li t-name="mail.wall_thread_container" class="oe_mail_wall_thread">
|
<li t-name="mail.wall_no_message" class="oe_wall_no_message">
|
||||||
|
You have no messages
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
@ -54,39 +170,6 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--
|
|
||||||
mail.compose_message template
|
|
||||||
This template holds the composition form to write a note or send
|
|
||||||
an e-mail. It contains by default a textarea, that will be replaced
|
|
||||||
by another composition form in the main wall composition form, or
|
|
||||||
for main thread composition form in document form view.
|
|
||||||
-->
|
|
||||||
<t t-name="mail.compose_message">
|
|
||||||
<div class="oe_mail_compose_textarea">
|
|
||||||
<img class="oe_mail_icon oe_mail_frame oe_left" alt="User img"/>
|
|
||||||
<div class="oe_mail_msg_content">
|
|
||||||
<!-- contains the composition form -->
|
|
||||||
<!-- default content: old basic textarea -->
|
|
||||||
<textarea placeholder="Add your comment here..."/>
|
|
||||||
</div>
|
|
||||||
<div class="oe_clear"/>
|
|
||||||
</div>
|
|
||||||
</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
|
thread template
|
||||||
This template holds a thread of comments. It begins with an actions
|
This template holds a thread of comments. It begins with an actions
|
||||||
|
@ -96,7 +179,6 @@
|
||||||
<div t-name="mail.thread" class="oe_mail oe_mail_thread oe_semantic_html_override">
|
<div t-name="mail.thread" class="oe_mail oe_mail_thread oe_semantic_html_override">
|
||||||
<div class="oe_mail_thread_action">
|
<div class="oe_mail_thread_action">
|
||||||
<!-- contains the composition box (form + image) -->
|
<!-- contains the composition box (form + image) -->
|
||||||
<t t-call="mail.compose_message"/>
|
|
||||||
</div>
|
</div>
|
||||||
<ul class="oe_mail_thread_display">
|
<ul class="oe_mail_thread_display">
|
||||||
<!-- contains the threads -->
|
<!-- contains the threads -->
|
||||||
|
@ -104,16 +186,15 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- default layout -->
|
<!-- default layout -->
|
||||||
<li t-name="mail.thread.message" t-attf-class="oe_mail oe_mail_thread_msg #{widget.unread?'oe_mail_unread':'oe_mail_read'}" t-attf-data-msg_id="{widget.id}">
|
<li t-name="mail.thread.message" t-attf-class="oe_mail oe_mail_thread_msg #{widget.unread?'oe_mail_unread':'oe_mail_read'}">
|
||||||
<div t-attf-class="oe_mail_msg_#{widget.type} oe_semantic_html_override">
|
<div t-attf-class="oe_mail_msg_#{widget.type} oe_semantic_html_override">
|
||||||
<!-- message actions (read/unread, reply, delete...) -->
|
<!-- message actions (read/unread, reply, delete...) -->
|
||||||
<ul class="oe_header">
|
<ul class="oe_header">
|
||||||
<li class="placeholder-mail-vote"><t t-call="mail.thread.message.vote"/></li>
|
<li class="placeholder-mail-vote"><t t-call="mail.thread.message.vote"/></li>
|
||||||
<li t-if="!widget.options.thread.display_on_flat and widget.unread" title="Read"><a class="oe_read oe_e">W</a></li>
|
<li t-if="!widget.options.thread.display_on_flat" title="Read" class="oe_read"><a class="oe_read oe_e">W</a></li>
|
||||||
<li t-if="!widget.options.thread.display_on_flat and !widget.unread" title="Set back to unread"><a class="oe_unread oe_e">h</a></li>
|
<li t-if="!widget.options.thread.display_on_flat" title="Set back to unread" class="oe_unread"><a class="oe_unread oe_e">h</a></li>
|
||||||
<li t-if="!widget.options.message.show_reply_by_email" title="Reply"><a class="oe_reply oe_e">)</a></li>
|
<li title="Quick reply"><a class="oe_reply oe_e">)</a></li>
|
||||||
<li t-if="widget.options.message.show_reply_by_email"><a class="oe_reply_by_email oe_e" title="Reply by mail">)</a></li>
|
<t t-if="(widget.is_author and widget.options.message.show_dd_delete) or widget.type == 'email'">
|
||||||
<t t-if="(widget.options.message.show_reply || widget.options.message.show_reply_by_email || (widget.is_author and widget.options.message.show_dd_delete) || widget.type == 'email')">
|
|
||||||
<li>
|
<li>
|
||||||
<span class="oe_dropdown_toggle">
|
<span class="oe_dropdown_toggle">
|
||||||
<a class="oe_e" title="More options">í</a>
|
<a class="oe_e" title="More options">í</a>
|
||||||
|
@ -123,8 +204,6 @@
|
||||||
<li t-if="display['show_hide']">
|
<li t-if="display['show_hide']">
|
||||||
<a href="#" class="oe_mail_msg_hide_type" t-attf-data-subtype='{widget.subtype}'>Hide '<t t-esc="widget.subtype"/>' for this document</a>
|
<a href="#" class="oe_mail_msg_hide_type" t-attf-data-subtype='{widget.subtype}'>Hide '<t t-esc="widget.subtype"/>' for this document</a>
|
||||||
</li> -->
|
</li> -->
|
||||||
<li t-if="widget.options.message.show_reply" title="Reply"><a class="oe_reply oe_full_reply">Full reply</a></li>
|
|
||||||
<li t-if="widget.options.message.show_reply_by_email"><a class="oe_reply_by_email oe_full_reply" title="Reply by mail">Full reply</a></li>
|
|
||||||
<li t-if="widget.type == 'email'"><a class="oe_mail_msg_details" t-attf-href="#model=mail.message&id=#{widget.id}" >Details</a></li>
|
<li t-if="widget.type == 'email'"><a class="oe_mail_msg_details" t-attf-href="#model=mail.message&id=#{widget.id}" >Details</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</span>
|
</span>
|
||||||
|
@ -145,7 +224,6 @@
|
||||||
<ul class="oe_mail_msg_footer">
|
<ul class="oe_mail_msg_footer">
|
||||||
<li t-if="widget.author_id"><a t-attf-href="#model=res.partner&id=#{widget.author_id[0]}"><t t-raw="widget.author_id[1]"/></a></li>
|
<li t-if="widget.author_id"><a t-attf-href="#model=res.partner&id=#{widget.author_id[0]}"><t t-raw="widget.author_id[1]"/></a></li>
|
||||||
<li><span t-att-title="widget.date"><t t-raw="widget.timerelative"/></span></li>
|
<li><span t-att-title="widget.date"><t t-raw="widget.timerelative"/></span></li>
|
||||||
|
|
||||||
<li t-if="widget.attachment_ids.length > 0">
|
<li t-if="widget.attachment_ids.length > 0">
|
||||||
<a class="oe_mail_msg_view_attachments">
|
<a class="oe_mail_msg_view_attachments">
|
||||||
<t t-if="widget.attachment_ids.length == 1">1 Attachment</t>
|
<t t-if="widget.attachment_ids.length == 1">1 Attachment</t>
|
||||||
|
@ -155,7 +233,7 @@
|
||||||
</ul>
|
</ul>
|
||||||
<div class="oe_clear"/>
|
<div class="oe_clear"/>
|
||||||
<div class="oe_mail_msg_body">
|
<div class="oe_mail_msg_body">
|
||||||
<t t-if="widget.options.message.show_record_name and widget.record_name and (!widget.subject) and widget.options.thread._parents.length<=widget.options.thread.thread_level and widget.model!='res.partner'">
|
<t t-if="widget.options.message.show_record_name and widget.record_name and (!widget.subject) and !widget.options.thread.thread_level and !widget.options.thread.display_on_flat and widget.model!='res.partner'">
|
||||||
<a class="oe_mail_action_model" t-attf-href="#model=#{widget.model}&id=#{widget.res_id}"><t t-raw="widget.record_name"/></a>
|
<a class="oe_mail_action_model" t-attf-href="#model=#{widget.model}&id=#{widget.res_id}"><t t-raw="widget.record_name"/></a>
|
||||||
</t>
|
</t>
|
||||||
<t t-raw="widget.body"/>
|
<t t-raw="widget.body"/>
|
||||||
|
@ -171,7 +249,7 @@
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- expandable message layout -->
|
<!-- expandable message layout -->
|
||||||
<li t-name="mail.thread.expandable" t-attf-class="oe_mail oe_mail_thread_msg oe_mail_unread" t-attf-data-thread_id="{widget.id}">
|
<li t-name="mail.thread.expandable" class="oe_mail oe_mail_thread_msg oe_mail_unread">
|
||||||
<div t-attf-class="oe_mail_msg_#{widget.type} oe_semantic_html_override">
|
<div t-attf-class="oe_mail_msg_#{widget.type} oe_semantic_html_override">
|
||||||
<div class="oe_mail_msg_content oe_mail_msg_more_message">
|
<div class="oe_mail_msg_content oe_mail_msg_more_message">
|
||||||
<a class="oe_mail_fetch_more">Load more messages <span t-if="widget.nb_messages>0">(<t t-raw="widget.nb_messages"/> messages not display)</span>...</a>
|
<a class="oe_mail_fetch_more">Load more messages <span t-if="widget.nb_messages>0">(<t t-raw="widget.nb_messages"/> messages not display)</span>...</a>
|
||||||
|
@ -179,23 +257,6 @@
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</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>
|
|
||||||
|
|
||||||
<!-- mail.thread.message.vote
|
<!-- mail.thread.message.vote
|
||||||
Template used to display Like/Unlike in a mail.message
|
Template used to display Like/Unlike in a mail.message
|
||||||
-->
|
-->
|
||||||
|
@ -215,7 +276,7 @@
|
||||||
<button t-attf-class="oe_mail_msg_vote oe_tag">
|
<button t-attf-class="oe_mail_msg_vote oe_tag">
|
||||||
<span>
|
<span>
|
||||||
<t t-if="!widget.has_voted">Agree</t>
|
<t t-if="!widget.has_voted">Agree</t>
|
||||||
<t t-if="widget.has_voted">Unagree</t>
|
<t t-if="widget.has_voted">Undo</t>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -13,9 +13,9 @@
|
||||||
<span class="oe_unfollow">Unfollow</span>
|
<span class="oe_unfollow">Unfollow</span>
|
||||||
<span class="oe_following">Following</span>
|
<span class="oe_following">Following</span>
|
||||||
</button>
|
</button>
|
||||||
<div class="oe_recthread_subtypes">
|
</div>
|
||||||
<ul class="oe_subtypes"></ul>
|
<div class="oe_recthread_subtypes">
|
||||||
</div>
|
<ul class="oe_subtypes"></ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="oe_grey">
|
<div class="oe_grey">
|
||||||
|
|
|
@ -529,109 +529,6 @@ class test_mail(TestMailMockups):
|
||||||
self.assertEqual(message2.subject, _subject, 'mail.message subject incorrect')
|
self.assertEqual(message2.subject, _subject, 'mail.message subject incorrect')
|
||||||
self.assertEqual(message2.body, group_bird.description, 'mail.message body incorrect')
|
self.assertEqual(message2.body, group_bird.description, 'mail.message body incorrect')
|
||||||
|
|
||||||
# FP Note: to be reviewed to be more generic, not depending on the algorythm of
|
|
||||||
# message_read
|
|
||||||
#def test_30_message_read(self):
|
|
||||||
# """ Tests designed for message_read. """
|
|
||||||
# # TDE NOTE: this test is not finished, as the message_read method is not fully specified.
|
|
||||||
# # 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')
|
|
||||||
|
|
||||||
# for x in range(len(struct1)):
|
|
||||||
# if struct1[x].get('type') == 'expandable':
|
|
||||||
# continue
|
|
||||||
# # print '%s' % ('\t' * n), struct1[x]['id'], struct1[x]['child_nbr'], struct2[x]['id'], struct2[x].get('child_nbr', 'XX'), struct1[x].get('subject') or ''
|
|
||||||
# self.assertEqual(struct1[x]['id'], struct2[x]['id'], 'message_read failure %s' % struct1[x].get('subject'))
|
|
||||||
# _compare_structures(struct1[x]['child_ids'], struct2[x]['child_ids'], n + 1)
|
|
||||||
# # print '%send compare' % ('\t' * n)
|
|
||||||
|
|
||||||
# # ----------------------------------------
|
|
||||||
# # CASE1: Flattening test
|
|
||||||
# # ----------------------------------------
|
|
||||||
|
|
||||||
# # Create dummy message structure
|
|
||||||
# import copy
|
|
||||||
# tree = [{'id': 2, 'child_nbr': 1, 'child_ids': [
|
|
||||||
# {'id': 6, 'child_nbr': 1, 'child_ids': [
|
|
||||||
# {'id': 8, 'child_nbr': 0, 'child_ids': []},
|
|
||||||
# ]},
|
|
||||||
# ]},
|
|
||||||
# {'id': 1, 'child_nbr': 3, 'child_ids':[
|
|
||||||
# {'id': 7, 'child_nbr': 1, 'child_ids': [
|
|
||||||
# {'id': 9, 'child_nbr': 0, 'child_ids': []},
|
|
||||||
# ]},
|
|
||||||
# {'id': 4, 'child_nbr': 2, 'child_ids': [
|
|
||||||
# {'id': 10, 'child_nbr': 0, 'child_ids': []},
|
|
||||||
# {'id': 5, 'child_nbr': 0, 'child_ids': []},
|
|
||||||
# ]},
|
|
||||||
# {'id': 3, 'child_nbr': 0, 'child_ids': []},
|
|
||||||
# ]},
|
|
||||||
# ]
|
|
||||||
# # Test: completely flat
|
|
||||||
# new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 0, limit=15, add_expandable=False)
|
|
||||||
# _compare_structures(new_tree, new_tree)
|
|
||||||
# self.assertEqual(len(new_tree), 10, 'message_read_tree_flatten wrong in flat')
|
|
||||||
# # Test: 1 thread level
|
|
||||||
# tree_test = [{'id': 2, 'child_ids': [
|
|
||||||
# {'id': 8, 'child_ids': []}, {'id': 6, 'child_ids': []},
|
|
||||||
# ]},
|
|
||||||
# {'id': 1, 'child_ids': [
|
|
||||||
# {'id': 10, 'child_ids': []}, {'id': 9, 'child_ids': []},
|
|
||||||
# {'id': 7, 'child_ids': []}, {'id': 5, 'child_ids': []},
|
|
||||||
# {'id': 4, 'child_ids': []}, {'id': 3, 'child_ids': []},
|
|
||||||
# ]},
|
|
||||||
# ]
|
|
||||||
# new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 1, limit=15, add_expandable=False)
|
|
||||||
# _compare_structures(new_tree, tree_test)
|
|
||||||
# # Test: 2 thread levels
|
|
||||||
# new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 2, limit=15, add_expandable=False)
|
|
||||||
# _compare_structures(new_tree, tree)
|
|
||||||
|
|
||||||
# # ----------------------------------------
|
|
||||||
# # CASE2: message_read test
|
|
||||||
# # ----------------------------------------
|
|
||||||
|
|
||||||
# # 1. Add a few messages to pigs group
|
|
||||||
# msgid1 = group_pigs.message_post(body='1', subject='1', parent_id=False)
|
|
||||||
# msgid2 = group_pigs.message_post(body='2', subject='1-1', parent_id=msgid1)
|
|
||||||
# msgid3 = group_pigs.message_post(body='3', subject='1-2', parent_id=msgid1)
|
|
||||||
# msgid4 = group_pigs.message_post(body='4', subject='2', parent_id=False)
|
|
||||||
# msgid5 = group_pigs.message_post(body='5', subject='1-1-1', parent_id=msgid2)
|
|
||||||
# msgid6 = group_pigs.message_post(body='6', subject='2-1', parent_id=msgid4)
|
|
||||||
|
|
||||||
# # Test: read all messages flat
|
|
||||||
# tree_test = [{'id': msgid6, 'child_ids': []}, {'id': msgid5, 'child_ids': []},
|
|
||||||
# {'id': msgid4, 'child_ids': []}, {'id': msgid3, 'child_ids': []},
|
|
||||||
# {'id': msgid2, 'child_ids': []}, {'id': msgid1, 'child_ids': []}]
|
|
||||||
# tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=0, limit=15)
|
|
||||||
# _compare_structures(tree, tree_test)
|
|
||||||
# # Test: read with 1 level of thread
|
|
||||||
# tree_test = [{'id': msgid4, 'child_ids': [{'id': msgid6, 'child_ids': []}, ]},
|
|
||||||
# {'id': msgid1, 'child_ids': [
|
|
||||||
# {'id': msgid5, 'child_ids': []}, {'id': msgid3, 'child_ids': []},
|
|
||||||
# {'id': msgid2, 'child_ids': []},
|
|
||||||
# ]},
|
|
||||||
# ]
|
|
||||||
# tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=1, limit=15)
|
|
||||||
# _compare_structures(tree, tree_test)
|
|
||||||
# # Test: read with 2 levels of thread
|
|
||||||
# tree_test = [{'id': msgid4, 'child_ids': [{'id': msgid6, 'child_ids': []}, ]},
|
|
||||||
# {'id': msgid1, 'child_ids': [
|
|
||||||
# {'id': msgid3, 'child_ids': []},
|
|
||||||
# {'id': msgid2, 'child_ids': [{'id': msgid5, 'child_ids': []}, ]},
|
|
||||||
# ]},
|
|
||||||
# ]
|
|
||||||
# tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=2, limit=15)
|
|
||||||
# _compare_structures(tree, tree_test)
|
|
||||||
|
|
||||||
# # 2. Test expandables
|
|
||||||
# # TDE FIXME: add those tests when expandables are specified and implemented
|
|
||||||
|
|
||||||
def test_40_needaction(self):
|
def test_40_needaction(self):
|
||||||
""" Tests for mail.message needaction. """
|
""" Tests for mail.message needaction. """
|
||||||
cr, uid = self.cr, self.uid
|
cr, uid = self.cr, self.uid
|
||||||
|
|
|
@ -81,7 +81,11 @@ class mail_compose_message(osv.TransientModel):
|
||||||
elif composition_mode == 'comment' and model and res_id:
|
elif composition_mode == 'comment' and model and res_id:
|
||||||
vals = self.get_record_data(cr, uid, model, res_id, context=context)
|
vals = self.get_record_data(cr, uid, model, res_id, context=context)
|
||||||
elif composition_mode == 'mass_mail' and model and active_ids:
|
elif composition_mode == 'mass_mail' and model and active_ids:
|
||||||
vals = {'model': model, 'res_id': res_id, 'content_subtype': 'html'}
|
if context.get('default_template_id'):
|
||||||
|
vals = self.pool.get('email.template').generate_email(cr, uid, context.get('default_template_id'), res_id, context=context)
|
||||||
|
vals.update({'content_subtype': 'html'})
|
||||||
|
else:
|
||||||
|
vals = {'model': model, 'res_id': res_id, 'content_subtype': 'html'}
|
||||||
else:
|
else:
|
||||||
vals = {'model': model, 'res_id': res_id}
|
vals = {'model': model, 'res_id': res_id}
|
||||||
if composition_mode:
|
if composition_mode:
|
||||||
|
@ -219,7 +223,6 @@ class mail_compose_message(osv.TransientModel):
|
||||||
email(s), rendering any template patterns on the fly if needed. """
|
email(s), rendering any template patterns on the fly if needed. """
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
print '**', context
|
|
||||||
active_ids = context.get('active_ids')
|
active_ids = context.get('active_ids')
|
||||||
|
|
||||||
for wizard in self.browse(cr, uid, ids, context=context):
|
for wizard in self.browse(cr, uid, ids, context=context):
|
||||||
|
|
|
@ -16,13 +16,11 @@
|
||||||
<field name="partner_ids" widget="many2many_tags" placeholder="Add contacts to notify..."
|
<field name="partner_ids" widget="many2many_tags" placeholder="Add contacts to notify..."
|
||||||
context="{'force_email':True}"
|
context="{'force_email':True}"
|
||||||
on_change="onchange_partner_ids(partner_ids)"/>
|
on_change="onchange_partner_ids(partner_ids)"/>
|
||||||
|
<field name="is_private" help="If this message is not private, this message will send to all your followers or all followers of the parented message."/>
|
||||||
</group>
|
</group>
|
||||||
<notebook>
|
<notebook>
|
||||||
<page string="Body">
|
<page string="Body">
|
||||||
<field name="body_text" nolabel="1"
|
<field name="body" nolabel="1"/>
|
||||||
attrs="{'invisible':[('content_subtype', '=', 'html')]}"/>
|
|
||||||
<field name="body" nolabel="1"
|
|
||||||
attrs="{'invisible':[('content_subtype', '=', 'plain')]}"/>
|
|
||||||
</page>
|
</page>
|
||||||
<page string="Attachments">
|
<page string="Attachments">
|
||||||
<field name="attachment_ids" colspan="4" nolabel="1"/>
|
<field name="attachment_ids" colspan="4" nolabel="1"/>
|
||||||
|
@ -32,10 +30,10 @@
|
||||||
<button string="Send" name="send_mail" type="object" class="oe_highlight" />
|
<button string="Send" name="send_mail" type="object" class="oe_highlight" />
|
||||||
or
|
or
|
||||||
<button string="Cancel" class="oe_link" special="cancel" />
|
<button string="Cancel" class="oe_link" special="cancel" />
|
||||||
<div class="oe_right">
|
<!--div class="oe_right">
|
||||||
<button string="" name="toggle_content_subtype" type="object" icon="/mail/static/src/img/formatting.png"
|
<button string="" name="toggle_content_subtype" type="object" icon="/mail/static/src/img/formatting.png"
|
||||||
help="Toggle advanced formatting mode"/>
|
help="Toggle advanced formatting mode"/>
|
||||||
</div>
|
</div-->
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
@ -68,6 +66,7 @@
|
||||||
context="{'force_email':True}"
|
context="{'force_email':True}"
|
||||||
on_change="onchange_partner_ids(partner_ids)"
|
on_change="onchange_partner_ids(partner_ids)"
|
||||||
class="oe_mail_compose_message_partner_ids"/>
|
class="oe_mail_compose_message_partner_ids"/>
|
||||||
|
<!--field name="is_private" help="If this message is not private, this message will send to all your followers or all followers of the parented message."/-->
|
||||||
<field name="attachment_ids" colspan="2" nolabel="1" widget="many2many_tags"
|
<field name="attachment_ids" colspan="2" nolabel="1" widget="many2many_tags"
|
||||||
placeholder="Add attachments..." invisible="1"
|
placeholder="Add attachments..." invisible="1"
|
||||||
class="oe_mail_compose_message_attachment_ids"/>
|
class="oe_mail_compose_message_attachment_ids"/>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<field name="name">campaign.analysis.tree</field>
|
<field name="name">campaign.analysis.tree</field>
|
||||||
<field name="model">campaign.analysis</field>
|
<field name="model">campaign.analysis</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Marketing Reports">
|
<tree string="Marketing Reports" create="false">
|
||||||
<field name="year" invisible="1"/>
|
<field name="year" invisible="1"/>
|
||||||
<field name="month" invisible="1"/>
|
<field name="month" invisible="1"/>
|
||||||
<field name="day" invisible="1"/>
|
<field name="day" invisible="1"/>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<field name="name">report.membership.tree</field>
|
<field name="name">report.membership.tree</field>
|
||||||
<field name="model">report.membership</field>
|
<field name="model">report.membership</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree colors="blue:membership_state == 'draft';black:membership_state in ('open','free');gray:membership_state in ('done','cancel') " string="Membership">
|
<tree colors="blue:membership_state == 'draft';black:membership_state in ('open','free');gray:membership_state in ('done','cancel') " create="false" string="Membership">
|
||||||
<field name="partner_id"/>
|
<field name="partner_id"/>
|
||||||
<field name="membership_state"/>
|
<field name="membership_state"/>
|
||||||
<field name="associate_member_id" invisible="1"/>
|
<field name="associate_member_id" invisible="1"/>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
'sequence': 18,
|
'sequence': 18,
|
||||||
'summary': 'Manufacturing Orders, Bill of Materials, Routing',
|
'summary': 'Manufacturing Orders, Bill of Materials, Routing',
|
||||||
'images': ['images/bill_of_materials.jpeg', 'images/manufacturing_order.jpeg', 'images/planning_manufacturing_order.jpeg', 'images/production_analysis.jpeg', 'images/production_dashboard.jpeg','images/routings.jpeg','images/work_centers.jpeg'],
|
'images': ['images/bill_of_materials.jpeg', 'images/manufacturing_order.jpeg', 'images/planning_manufacturing_order.jpeg', 'images/production_analysis.jpeg', 'images/production_dashboard.jpeg','images/routings.jpeg','images/work_centers.jpeg'],
|
||||||
'depends': ['procurement', 'stock', 'resource', 'purchase', 'product','process'],
|
'depends': ['product','procurement', 'stock', 'resource', 'purchase','process'],
|
||||||
'description': """
|
'description': """
|
||||||
Manage the Manufacturing process in OpenERP
|
Manage the Manufacturing process in OpenERP
|
||||||
===========================================
|
===========================================
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue